将消息转发到客服
2022-03-05 本文已影响0人
len_清水白
关于微信小程序客服消息将消息转发到客服的功能,官方文档是这样写的:
如果小程序处于开发模式,普通微信用户向公众号发消息时,微信服务器会先将消息POST到开发者填写的url上,如果希望将消息转发到客服系统,则需要开发者在响应包中返回MsgType为transfer_customer_service的消息,微信服务器收到响应后会把当次发送的消息转发至客服系统。
接下来,还有个调用说明:
<xml>
<ToUserName><![CDATA[touser]]></ToUserName>
<FromUserName><![CDATA[fromuser]]></FromUserName>
<CreateTime>1399197672</CreateTime>
<MsgType><![CDATA[transfer_customer_service]]></MsgType>
</xml>
请求参数说明
参数 | 是否必须 | 描述 |
---|---|---|
ToUserName | 是 | 接收方OpenID账号 |
FromUserName | 是 | 开发者微信号 |
CreateTime | 是 | 消息创建时间戳(整型) |
MsgType | 是 | transfer_customer_service |
那么,问题来了,之前我们都是直接 return "success"
的,现在怎么在响应包中返回MsgType为transfer_customer_service的消息?
网上搜了一遍,都是说直接拼一个字符串返回就行了,例如这样:
return "<xml><ToUserName><![CDATA[oU-j***Jm0]]></ToUserName><FromUserName><![CDATA[gh_***5607]]></FromUserName><CreateTime>164***86</CreateTime><MsgType><![CDATA[transfer_customer_service]]></MsgType></xml>";
但是对于 Java 开发来讲,这样写是不行的,至少我尝试了很多次都是不行的。
可行的方法是:把这个响应包封装成一个 JSON 字符串,例如:
{
"CreateTime": 164***86,
"ToUserName": "oU-j***Jm0",
"FromUserName": "gh_***5607",
"MsgType": "transfer_customer_service"
}
另外,需要注意的是,如果人工客服接入了,微信就不会再把消息发到我们的服务器上了。需要等30分钟,会话关闭之后,微信才会又重新把消息发送到我们填写的URL上面。