最近在研究小程序怎么引导关注微信公众号,发现联系客服,然后自动下发图片&链接是比较主流的做法
但是微信官方提供的在线客服功能实在是弱爆了,只提供自动文字回复,没办法满足需求
又看了几个第三方的客服系统,发现收费还是挺贵的,而且很多有小程序接入数量的限制
所以决定研究下如何让小程序自动回复图文的功能,开发下来发现微信的开发文档实在写的太含糊了,就把开发过程中会碰到的一些坑记录一下,为后来的开发者节约一些时间
微信官方客服消息文档 虽然里面很多坑,但是开发的时候还是要看的。
微信公众平台接口调试工具 可以来调试功能,可以直接看到返回结果
第一步:填写服务器配置
登录微信小程序官网后,在小程序官网的“设置-消息服务器”页面,管理员扫码启用消息服务,填写服务器地址(URL)、Token 和 EncodingAESKey。
我选择了加解密方式为安全模式 数据格式选择JSON格式
配置完成前 要确保你的服务已经完成第一步开发任务 - 验证消息的确来自微信服务器
微信服务器将发送GET请求到填写的服务器地址URL上
signature微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
timestamp时间戳
nonce随机数
echostr随机字符串
开发者通过检验 signature 对请求进行校验(下面有校验方式)。若确认此次 GET 请求来自微信服务器,请原样返回 echostr 参数内容,则接入生效,成为开发者成功,否则接入失败。
这边的第一个坑是返回 echostr 参数内容,文档标着是字符串,如果是原路返回字符串,那么永远是失败的。我用的是java 返回字符串就会加上"",所以要去掉""才是成功的
第二步:接收消息和事件
验证通过后,用户的每次行为都会发一条消息到你的服务器,这时候要做的就是根据消息类型和内容进行不同的处理。
这边要注意的有两个:
1.选择了消息推送的格式为json的话,那么你跟微信之间的数据都是以json的形式来传输
2.如果选择了安全模式,那么微信上行的消息都会被加密,需要自行解密后使用,方式可以参考官方的代码 加密解密官方DEMO
如果选择安全模式,那么你在后台是取不到这样的数据的,微信会JSON POST上去
{ "ToUserName": "xxxxx", "Encrypt": "xxxxxx"}
这样的数据格式,需要自行解密才能拿到文档写的数据格式,这是第二个坑
第三步: 发送客服消息
接入微信客服消息最重要的目的就是为了完成自动回复的,这边文档写的挺清楚的,可以直接查看官方文档
第四步:转发客服消息
第三步完成了自动回复,但是大部分的消息还是希望可以发送到人工客服那边去。
所以我们需要在响应包中返回 MsgType 为 transfer_customer_service 的消息,微信服务器收到响应后会把当次发送的消息转发至客服系统。
这边有两个坑
一个是需要注意FromUserName 这个参数,这边需要填写的是接收消息时候的ToUserName参数,返回参数里的ToUserName参数要填写的时候接收消息时候的OpenID,CreateTime 就用接收消息时候的timestamp就可以。
第二个是虽然它上行的消息是加密的,但是返回的时候是不需要加密的。
以上就是在开发微信小程序客服消息遇到的一些坑,希望可以节约新入坑的开发者一些时间。