返回
评论
小程序云开发发送客服信息
小程序云开发发送客服信息
场景:用户触发客服信息的按钮,通过进入客服页面,点击右下角的“可能要发送的小程序”主动发送给接收端。接受端通过云函数判断用户输入的内容进行自定义回复。这里的例子主要是回复一张图片。在客服聊天页面可以长按图片扫码进行赞赏和关注等等。
具备发送的前提条件
- 云开发控制台消息推送开启。到云开发-设置-其他设置-消息推送中添加消息推送。需要根据接收内容类型去添加。
-
云函数的配置文件需要定义好openapi。
{ "permissions": { "openapi": [ "customerServiceMessage.send", // 发送客服信息的权限 "customerServiceMessage.uploadTempMedia" // 上传媒体文件,后面需要用到 ] } }
根据场景的描述,实现自动回复
主要的cloud函数触发为:
await cloud.openapi.customerServiceMessage.send({
"touser": wxContext.OPENID,
"msgtype": 'image',
"image": {
"media_id": meida.mediaId // 需要发送的图片媒体id,通过下面的upload函数返回
}
})
通过上传到云存储的fileID,将文件下载成所需要的Buffer。主体的下载函数为如下:
const downLoad = async(fileID) => {
const res = await cloud.downloadFile({
fileID, // 图片的File ID
})
const buffer = res.fileContent
return buffer
}
通过上面downLoad函数生成的Buffer,上传TempMedia获取主要的mediaId:
const upload = async(Buffer) => {
return await cloud.openapi.customerServiceMessage.uploadTempMedia({
type: 'image',
media: {
contentType: 'image/png',
value: Buffer
}
})
}
可能导致不能自动回复的原因
除了具备发送的前提条件提到的外,有几个可能会导致流程不同的原因。
- 在测试过程中,即使在测试环境,也是可以接收到测试云函数发送的客服消息的。但需要在所有的客服都离线的情况下,才能收到云函数自动回复的消息。即使用户主动发送了消息,只要有客服在线,云函数都不会触发。这就很容易导致连调试内容都看不到而摸不着头脑。
- 消息推送配置没有配对。如果是用户点击了那个“可能要发送的小程序”,则需要选择的消息类型为:miniprogrampage。而且需要绑定到正确的云函数。
- 环境需要设置对,需要仔细分清当前的云函数执行环境。