本文正在参加「Java主题月 - Java 开发实战」,详情查看 活动链接
现实业务环境中,由于微信团队并未提供对公众号客服系统的聚合。使得许多商家在选用云服务商提供的聚合平台还是基于团队自行开发的问题上进行抉择。
接下来我们将分别讨论:
云服务商聚合平台
使用云服务商的聚合平台最大的优势便是节省了工作量。你只要给钱,云服务商就会给你提供 "一篮子" 解决方案。通常云服务商会按照客服座席来收费。有的可能还会有一些特殊的技术服务费。
座席:即每个客服所使用的账号,一般来说一个座席对应一个客服。
基于团队自行开发
微信开放平台提供了该功能,微信官方文档 客服消息 模块中有相关接口文档。我们可以基于此接口来开发自己的聚合平台。并实现自定义拓展等。
如何选择 ?
在这么多的解决方案中,我们需要综合自身企业情况进行取舍。如果你是一个比较小的企业,需要快速且实用的接入自己的公众号聊天系统, 那么你可以采用云服务商提供的聚合平台,但是它的缺点是显而易见的。随着客服人员的增多,服务费会越来越高。并且也不能完美的兼容自己的业务系统, 实现更加方便的功能。如果有一定的经济实力和时间基础,那么你可以考虑基于团队自行开发。这样你就控制了整个系统,你可以做任何你想做的事情。 也不会有客服人数的限制。
基于团队自行开发聚合平台架构
下面我们将讲一下如何基于团队自行开发聚合平台。
平台
- 后台管理平台 - 用于参数配置、数据分析展示等。
- 客服聊天平台 - 基于腾讯 IM 平台提供的聊天平台,进行二次开发。
- 开发者服务 - 用于对消息进行转接与转发,实现自定义功能。
相关技术与中间件
由于我们为了节省时间与人力物力,我们使用了腾讯云平台的 IM 平台来作为部分实现。
- 前端开发语言 - Vue.js 全家桶
- 管理平台前端框架 - Layui
- 后端开发语言 - Java
- 日志框架 - Log4j2
- 后端服务框架 - Spring Boot
- 后端权限验证 - Spring Security
- 后端 ORM 框架 - Mybatis Dynamic
- 反向代理 - Kong Gateway
- 消息队列 - RabbitMQ
- 缓存 - Redis
- 数据库 - Mysql
外部接口服务
- 微信官方文档( 公众号 ) ( developers.weixin.qq.com/doc/offiacc… )
- 腾讯 IM 平台 ( cloud.tencent.com/document/pr… )
本篇文章仅仅讲解架构思路,并不涉及源代码等实现。
整体架构思路
贴一张我从腾讯云 IM 平台 "借鉴" 来的最佳实现图。
依照此图片,我们可以看出,我们只需要作为两端外部 API 接口服务中间的 < 开发者服务器 >,来实现我们的自定义逻辑处理。
简单的实现 - 微信端
首先,我们需要对接微信公众号平台接口的接收消息与发送消息,他们分别是 微信公众号 - 接收普通消息 和 微信公众号 - 客服消息 。
接收普通消息
想要接收普通消息,我们需要绑定微信的服务器配置。
路径为公众号管理平台 - 设置与开发 - 开发 - 基本配置。
当启动该服务器配置以后,微信将会把接收到的消息转发给服务器地址。你只需要根据文档对接即可。
坑1:微信在通知时,不仅仅将消息进行通知。也将一些点击事件等进行通知。所以要做好过滤。
发送客服消息
在发送时我们则需要调用微信公众号的相关接口,参照 API 文档的消息格式进行发送。
简单实现 - Tencent IM端
接收消息
在 Tencent IM 平台的 管理页面 配置回调的连接和相关回调事件。
发送消息
调用 Tencent IM 平台服务端 API 的单发单聊
接口进行消息发送。
实现中间转接服务
现在两端的接口我们已经对接成功,接下来我们将讨论如何实现基本的桥接功能和其他自定义功能。
架构图
我们采用基于命令的模式来实现类似于机器人的插件( 没错,想法从 Slack 里面抄的 🤪 ), 从而实现基本的会话管理、消息转发、用户排队等基本功能。
Filters
基于过滤器模式,实现一个消息进入系统时必须做的的事情。
- Decode filter :用于对微信或腾讯端加密的请求进行解密。
- Conversation Filter :用于第一次的会话创建等。
- Command Parse Filter :对于命令模式
#Trasfor -n system
进行分析,解析出Transfor
命令和参数n
,它的值为system
。 - Chat Bot Filter:基于会话现在处于的命令状态采用策略模式,获取相应的处理机器人对该消息进行处理。
ChatBots
- Transform ChatBot :对新来的用户进行分配客服。( 可选一些权重算法等 )
- Send ChatBot - 基础通信机器人,解析获取到的信息然后利用相应的
Convertor
进行转换。例如微信来的消息,我们将使用WechatCallback2TencentMsgConvertror
将微信的回调消息转换为符合腾讯接口的请求,从而实现转发。 - Stack ChatBot - 根据每个客服的接待上线实现排队处理。
- Qui ChatBot - 退出命令模式
一些其他功能的实现
聊天上下文
由于腾讯 IM 平台未提供转发用户提供上下文的功能,但是我们也不想花那么多的钱去存储聊天记录,于是就想了一个办法。
在 Redis 内构建一个限长的队列,记录最后 n 条消息。当客服进行转接的时候,系统将该消息统一重发给被转接的客服,从而实现上下文功能。并随着会话的关闭而删除。
总结
本章简单的介绍了一下微信公众号客服聊天聚合平台架构的方案。并且采用多种设计模式来进行解耦。虽然仅仅实现了基本的功能,但整体框架已经搭建完善,剩下的就可以利用ChatBot
的插件模式进行扩展即可。