# 云函数接收消息推送

> 需开发者工具版本至少 `1.02.1906252`

开通了[云开发](/miniprogram/dev/wxcloudservice/wxcloud/basis/getting-started)的小程序可以使用云函数接收消息推送，目前支持客服消息推送、小程序虚拟支付回调等。

接入步骤如下：

1. 云开发控制台中填写配置并上传
2. 云函数中处理消息

### 第一步：开发者工具云开发控制台中增加配置

前往路径「云开发 - 设置 - 其他设置 - 消息推送」，选择推送模式为云函数；
![](https://res.wx.qq.com/op_res/_mTlTvkYwgSJDQq3yEXGWj-IownxxYbDq3-UzqnfW0-wMSNK67JcHiAhcNsdP0W7Cu8sx_o_MFCH-0R6OWZ8tw)
添加消息推送配置。消息类型对应收包的 `MsgType`，事件类型对应收包的 `Event`，同一个 `<消息类型, 事件类型>` 二元组只能推到一个环境的一个云函数。例如客服消息文本消息对应的就是消息类型为 `text`，事件类型为空。具体值请查看各个消息的消息格式。
![](https://res.wx.qq.com/op_res/qqj08GfodZw3VUmDSD56OKhZ1Xv5mg1P92C4rtchP0hWzvqX6Po7DTYznm-WP_knXQRHiY8hbLabeBXt0bclOg)
多个消息类型、事件类型多次添加消息推送配置即可。

**注意**：如在云函数中配置了某个类型的消息，该类型消息将不再推送至「微信公众平台 - 开发设置 - 消息推送」中配置的域名中。

### 第二步：云函数中处理消息

云函数被触发时，其 `event` 参数即是接口所定义的 JSON 结构的对象（统一 `JSON` 格式，不支持 `XML` 格式）。

以客服消息为例，接收到客服消息推送时，`event` 结构如下：

```json
{
  "FromUserName": "ohl4L0Rnhq7vmmbT_DaNQa4ePaz0",
  "ToUserName": "wx3d289323f5900f8e",
  "Content": "测试",
  "CreateTime": 1555684067,
  "MsgId": "49d72d67b16d115e7935ac386f2f0fa41535298877_1555684067",
  "MsgType": "text"
}
```

此时可调用客服消息[发送](/miniprogram/dev/server/API/kf-mgnt/kf-message/api_sendcustommessage.md)接口回复消息，一个简单的接收到消息后统一回复 “收到” 的示例如下：

```js
// 云函数入口文件
const cloud = require('wx-server-sdk')

cloud.init()

// 云函数入口函数
exports.main = async (event, context) => {
  const wxContext = cloud.getWXContext()

  await cloud.openapi.customerServiceMessage.send({
    touser: wxContext.OPENID,
    msgtype: 'text',
    text: {
      content: '收到',
    },
  })

  return 'success'
}
```

## 云函数消息推送列表

### 消息类型

| 消息类型 | 说明 |
| --- | --- |
| text | [公众号文本消息](/doc/service/guide/product/message/Receiving_standard_messages.md)、[小程序客服文本消息](/miniprogram/dev/framework/open-ability/customer-message/receive.md) |
| image | [公众号图片消息](/doc/service/guide/product/message/Receiving_standard_messages.md)、[小程序客服图片消息](/miniprogram/dev/framework/open-ability/customer-message/receive.md) |
| miniprogrampage | [小程序客服卡片消息](/miniprogram/dev/framework/open-ability/customer-message/receive.md) |

### 事件类型

| 事件类型 | 说明 |
| --- | --- |
| user_enter_tempsession | [进入会话事件](/miniprogram/dev/framework/open-ability/customer-message/receive.md#进入会话事件) |
| express_add_path | [运单轨迹更新事件](/miniprogram/dev/server/event_push/express/provider/logistics.onPathUpdate.md) |
| wxa_media_check | [异步安全校验事件](/miniprogram/dev/server/API/sec-center/sec-check/api_mediacheckasync.md#云调用) |
| subscribe_and_unsubscribe | [关注与取消关注](/doc/service/guide/product/message/Receiving_standard_messages.md) |
| qr_scan_scene | [扫描带参数二维码事件](/doc/service/guide/product/message/Receiving_standard_messages.md) |
| subscribe_msg_event | [小程序订阅消息](/miniprogram/dev/framework/open-ability/subscribe-message.md#订阅消息事件推送) |
| xpay_goods_deliver_notify | 虚拟支付-道具发货通知 |
| xpay_coin_pay_notify | 虚拟支付-代币支付通知 |
| xpay_complaint_notify | 虚拟支付-用户投诉通知 |
| xpay_subscribe_signing_result_notify | 虚拟支付-订阅签约结果通知 |
| xpay_subscribe_pay_fail_notify | 虚拟支付-订阅支付失败通知 |
| xpay_subscribe_ios_refund_query_notify | 虚拟支付-iOS 订阅退款查询通知 |
| xpay_refund_notify | 虚拟支付-退款通知 |

虚拟支付相关事件详见[小程序虚拟支付消息推送](/miniprogram/dev/platform-capabilities/business-capabilities/virtual-payment.md#%E6%B6%88%E6%81%AF%E6%8E%A8%E9%80%81)
