微信客服机器人(踩坑记录、SpringBoot、企业微信)

微信客服机器人(踩坑记录、SpringBoot、企业微信)

转载请注明出处:https://www.jjput.com/archives/wei-xin-ke-fu-ji-qi-ren

总体流程

image-20211103095407315

  1. 当有新的消息时,微信主动请求微服务接口,通知有新消息。
  2. 微服务主动向微信拉取消息列表(最多1000条)。
  3. 对消息列表中的每一个消息向机器人进行提问。
  4. 机器人返回答案。
  5. 将答案进行处理后,通过微信接口向微信用户进行发送。

微信功能说明文档(步骤1、2、5)

0、准备工作

在第一步接受微信消息前,需要进入微信客服后台配置。

根据文档3.1-支持Http Get请求验证URL有效性(微信这方面有很多份文档,这点必须吐槽一下,有些过时了按照上面基本不对,基本都不是特别完善),我们需要完成一个Get请求,以用于微信配置时验证url正确性。

注意验证url与下面回调url都应该是相同路径,只是请求方式不同(Get&Post)

接收到Get请求后,还需要正确的解密数据,将解密后的数据返回。

微信解密说明文档

解不出来,可以借助官方解密demo(支持C++、Python、PHP、java、C#、golang、node)

1、回调消息通知

完成准备工作以后,并正确的配置了回调路径后,我们开始接收回调消息通知。

详细查看文档-3.2支持Http Post请求接收业务数据

这里注意一下POST接收的消息体类型是text/xml不是application/xml!!更不可能是application/json;charset=UTF-8!!!

做到这我真的快受不了,必须喷一下,他娘的微信的api文档他自己验证过没有?这就是堂堂一线大厂?对外公开文档如此不严谨。

2、主动获取消息列表

这一步我们才是真正的获取到用户给我们发送到消息。

这里没什么好说的,按照官方文档可以走得通。

最后说明一下cursor这个参数,第一次可以不带,后续请求务必带上,该字段主要过滤已经接收过的消息,避免重复消费。

当然我们自己还要做些策略,不要全信官方!!

我这里将每次的msgid做了存储。消费策略是先判断消息时长未超过30分钟->msgid未被记录(redis缓存msgid,30分钟超时)。

5、发送消息

这里直接参照官方文档走即可,并没有什么坑踩。

并且官方支持日常聊天的所有消息格式:

消息格式(msgtype)
msgtype说明
text文本
image图片
voice语音
video视频
file文件
location地理位置
msgmenu菜单
event
event_type=enter_session
用户进入会话
event
event_type=msg_send_fail
消息发送失败

机器人(步骤3、4)

机器人这边我不做过多介绍,考虑到每个人选择不同(我自己是用阿里的客服机器人)。

面上看上去只有两个步骤,但根据公司业务需求,背后的逻辑可能会非常多,比如什么情绪判断,主动接入人工,拟人化话说等等。

设计文档

最后我给出自己的部分设计方案,希望大家探讨,有不合理之处欢迎指正。感激不尽!🙏

消息队列

image-20211102210345945

我这里设计了两个队列(用的是RabbitMQ):

  • WechatIssueMsg:回调接收到消息通知以后,尽可能的少做任何耗时操作,因为这里是所有流量的入口。做完基本校验以后(其实我觉得可以狠点,校验个锤子,分发下去后各个消费者自己校验)。消费者收到消息后,开始主动拉取消息列表,只进行消费策略过滤,将未消费的下发到WechatMsgHandler队列处理。
  • WechatMsgHandler:处理实际消息,与机器人通讯,并将机器人返回的消息发送给用户。

WechatMsgHandler这里我考虑的很近,是否要加这个队列,最后还是决定要加。

因为主动拉取消息列表这个操作的时候,很可能一次性拉到非常多的消息(假如100个人同时发给客服消息),明显的当前的这个消费者会处理非常久。其实10个人同时发就会明显受不了。

但如果我通过再加一个消息队列,进行分流处理,就不一样了。WechatIssueMsg的消费者仅仅只是遍历一边列表,根据消费策略过滤已消费的,下发未消费的。这个过程非常快。

后期只需要加WechatMsgHandler消费者就可以很轻松的增加单位时间内的处理量。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
功能说明 1、可以对微信好友分类分组,比如分成客户组,员工组,可针对好友分组群发微信。 2、可以设置聊天机器人,让你的个人微信拥有自动根据预设关键字回复客户,跟据这功能可制成菜单型式的回复,使你的个人微信也具有微信公众号的功能,还不受众号那样的发信息限制。 3、集成了微信接口,具有获取好友列表及接收和发送微信功能,让你非常方便的集成到企业的OA办公系统、订单状态监控、服务器运行状态监控等。 使用说明: 1、请用手机微信扫描右边二维码登录系统(如不显示二维码,请“刷新页面”)。 2、本系统所有操作都是通过模拟控制网页实现,请不要直接操作右边的“微信网页版”,以免影响本软件的正常操作。 3、建议一个注册账号只对应一个微信账号,否则历史信息会混乱。 4、本软件免费用户信息带尾巴,批量发送每次限制10条,超过部分被忽略(用户可分多批发),使用时间不限制。 5、本软件付费会员不受以上第4条限制,会员时间到期后自动转成免费用户。 ***微信接口命令说明*** ****************************************** islogin 确定服务或微信是否登录 返内容如下几种: 1)"已登录" 表示都已经登录 2)"客服微信都未登录" 3)"客服未登录' 4)"微信未登录" Url示例:http://127.0.0.1:8081/islogin ****************************************** logincode 取得登录二维码图片,以便远程手机扫描登录 如果返回非图片,表示出错或返回"微信已登录"这几字 网页显示图示例: ****************************************** list 获取客户列表 以Xml文本格式返回列表 开发者可以直接转为DataTable,C#代码示例如下: WebClient webc = new WebClient(); string xmltxt=webc.DownloadString("http://127.0.0.1:8081/list"); DataTable dt=XmlTxtToDataTable(xmltxt); private DataTable XmlTxtToDataTable(string XmlTxt) {//Xml文本转DataTable XmlDocument doc = new XmlDocument(); doc.LoadXml(XmlTxt); XmlNodeReader xnr = new XmlNodeReader(doc); DataSet ds = new DataSet(); ds.ReadXml(xnr); DataTable dt = ds.Tables[0]; return dt; } ****************************************** getimg 取得客户图标 参数 uname=客户名(必选) (用list获取到的客户名) 如果返回非图片,表示出错或返回"客户名为空或找不到。"等字符 网页显示图示例: ****************************************** send 发送信息 参数 uname=目标客户名(必选) (用list获取到的客户名) msg=信息内容(必选) time=定时发送时间(可选),格式:"yyyy-MM-dd HH:mm:ss" msid=调用者定的信息ID(可选,是大于0数字才有效),用于在sendend判断发送结果 返回以下情况 1)"ok"表示成功加入到发送队列(不是已发成功),是否成功要用sendend命令根据"信息ID"查 2)返回其它信息表示出错信息 GET提交示例:http://127.0.0.1:8081/send?uname=客户名&msg=信息内容&time=2016-03-15 15:20:00&msid=3 ****************************************** sendend 判断发送结果 参数 msid=调用者在发送时定的信息ID 返回以下情况 "ok"=发送成功 "err"=发送出错
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鲁蛋蛋呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值