接入微信小程序消息推送服务,可以3种方式选择其一:
- 开发者服务器接收消息推送
- 云函数接收消息推送
- 微信云托管服务接收消息推送
使用微信云托管的小程序/公众号可以使用云托管服务接收消息推送,只需配置一个云托管服务即可支持所有类型的消息推送。
接入步骤如下:
- 微信云托管控制台中填写配置
- 云托管服务中处理消息
# 第一步 云托管控制台填写配置
前往路径“「微信云托管」-「设置」-「其他设置」-「消息推送」”中配置;
点击配置,选择目标云开发环境、填写对应的云托管服务路径(路径可前往“云托管”-“服务列表”-“路径字段”中复制)、选择推送类型;
- 环境ID:选择接收消息推送
- 服务名称:接收消息推送的服务,只需配置1个服务即可接收所有类型消息;
- path:服务下哪个接口接收即写该接口在服务内的路径即可;
- 推送模式:支持JSON、XML两种模式;
配置完成后,该云托管服务即可接收当前小程序/公众号下所有类型消息推送。
# 配置测试
配置消息推送时,微信后台会向配置的服务发起一个检测请求。
当配置格式为 JSON 时,请求体为:
{ "action": "CheckContainerPath"}
当配置格式为 XML 时,请求体为:
<xml><action>CheckContainerPath</action></xml>
开发者回复 success 或回复空即可。
# 确认消息来源
若云托管未开启公网访问,则可以信任所有消息推送。若云托管开启了公网访问,需要验证消息推送的请求头,带 x-wx-sources 的请求才是微信侧发起的推送。
# 第二步 云托管服务中处理消息
下面的例子展示如何使用云托管结合消息推送,实现客服消息回复。
注意:需要先部署好以下的镜像,再在设置-其他设置-消息推送中,填入对应服务的路径和环境 ID。
const express = require('express')
const bodyParser = require('body-parser')
const axios = require('axios')
const PORT = process.env.PORT || 80
const HOST = '0.0.0.0'
// App
const app = express()
app.use(bodyParser.raw())
app.use(bodyParser.json({}))
app.use(bodyParser.urlencoded({ extended: true }))
const client = axios.default
app.all('/', async (req, res) => {
const headers = req.headers
const token = headers['x-wx-cloudbase-access-token']
const weixinAPI = `https://api.weixin.qq.com/cgi-bin/message/custom/send?cloudbase_access_token=${token}`
const payload = {
touser: headers['x-wx-openid'],
msgtype: 'text',
text: {
content: `云托管接收消息推送成功,内容如下:\n${JSON.stringify(req.body, null, 2)}`
}
}
// dispatch to wx server
const result = await client.post(weixinAPI, payload)
console.log('received request', req.body, result.data)
res.send('success')
});
app.listen(PORT, HOST)
console.log(`Running on http://${HOST}:${PORT}`)
配置成功后,使用 <button open-type="contact">
类型的按钮唤起客服会话,发送任意消息即可看到云托管处理的回复。