首先,我们知道,可以通过button中的属性open-type="contact",实现小程序用户和小程序所有者客服对话。
<button open-type="contact">客服button>
在没有任何程序干预的情况下, 客服消息可直接在网页版客服工具(https://mpkf.weixin.qq.com/)和小程序版客服工具(客服小助 手)查看并回复用户消息。
但是,有时有特殊需求,比如:
1、用户打开客服会话,默认给出提示信息
2、需要自定义客服消息,类似电话语音输入1,2,3出现对应回复的功能
3、能否同时兼容自动和人工客服
本文以云函数自定义消息为例:
1、小程序新建两个云函数
1)message-auto(默认进入客服会话的消息处理)
2)message(用户输入后触发的消息处理)
2、在云函数设置中关联
云函数--设置--全局设置,打开云函数接收消息推送,如下图绑定:
3、代码实现
此处为了避免每次进入客户会话,默认发送提示消息给用户造成困扰,建议存库处理,避免重复发送,至于多久发送一次,由开发者自行处理存库逻辑。
message-auto/index.js
// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init()
const db = cloud.database()
const contentArr = ["输入数字可以获得帮助哦~", "1 怎么知道是否中奖?", "2 如何兑换奖励?", "3 实物如何兑奖?"]
// 云函数入口函数
exports.main = async (event, context) => {
const wxContext = cloud.getWXContext()
let openid = wxContext.OPENID
// 查看是否发送过
let res = await db.collection('message_auto')
.where({
openid: openid
})
.get()
console.log("message_auto res: ", res)
if(res.data && res.data.length > 0){
return
}
let messageResult = await cloud.openapi.customerServiceMessage.send({
touser: openid,
msgtype: 'text',
text: {
content: contentArr.join("\n"),
},
})
console.log("message_auto send res: ", messageResult)
if(messageResult.errCode == 0){
let messageAddRes = await db.collection('message_auto').add({
data: {
"openid": openid,
"create_time": new Date()
}
})
console.log('messageAddRes: ', messageAddRes)
}
}
在用户输入后,校验是否满足自动回复消息条件(输入非1,2,3),可通过transfer_customer_service直接转由人工处理,这样相同于同时兼容了自动和人工客服,如示例中,“你好”会自动转人工处理。
message/index.js
// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init()
const contentArr = ["开奖后,会公告中奖用户和对应奖励,并发送中奖通知", "奖励会在您发送兑奖信息后24小时内兑换", "填写好收件人信息,48小时内发货(暂不支持港澳台、新疆、西藏等地区)"]
// 云函数入口函数
exports.main = async (event, context) => {
console.log('message event:', event)
let content = event.Content
if(!content || !content.trim()){
console.log('message can not be empty!')
return
}
if(!isNaN(content) && content % 1 == 0 && content > 0 && content <= contentArr.length){
let res = cloud.openapi.customerServiceMessage.send({
touser: event.FromUserName,
msgtype: 'text',
text: {
content: contentArr[content - 1],
},
})
return
}
return {
MsgType: 'transfer_customer_service',
ToUserName: event.FromUserName,
FromUserName: event.ToUserName,
CreateTime: parseInt(+new Date / 1000),
}
}
代码粗糙,多多指教! ^_^