小程序云开发发送客服信息

场景:用户触发客服信息的按钮,通过进入客服页面,点击右下角的“可能要发送的小程序”主动发送给接收端。接受端通过云函数判断用户输入的内容进行自定义回复。这里的例子主要是回复一张图片。在客服聊天页面可以长按图片扫码进行赞赏和关注等等。

具备发送的前提条件

  1. 云开发控制台消息推送开启。到云开发-设置-其他设置-消息推送中添加消息推送。需要根据接收内容类型去添加。
  2. 云函数的配置文件需要定义好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
      }
  })
}

可能导致不能自动回复的原因

除了具备发送的前提条件提到的外,有几个可能会导致流程不同的原因。

  1. 在测试过程中,即使在测试环境,也是可以接收到测试云函数发送的客服消息的。但需要在所有的客服都离线的情况下,才能收到云函数自动回复的消息。即使用户主动发送了消息,只要有客服在线,云函数都不会触发。这就很容易导致连调试内容都看不到而摸不着头脑。
  2. 消息推送配置没有配对。如果是用户点击了那个“可能要发送的小程序”,则需要选择的消息类型为:miniprogrampage。而且需要绑定到正确的云函数。Untitled
  3. 环境需要设置对,需要仔细分清当前的云函数执行环境。