联系
Knight's Tale » 架构

架构系列之:在线客服系统架构

2014-06-30 18:09

今天面试了一个同学,期间和他探讨了如何制作客服系统。

那今天就来总结一下如何制作一个在线客服系统。

他讲了两个项目,一个是 Web页面的在线客服系统,另一个是微信在线客服系统。两个系统的架构图可以简单描述如下:

图1:

图2

图1是一个Web在线客服系统。客户在广告主网页页面通过Js交互,与远程的客服进行沟通。

客户主动向Mina服务器发送请求,Mina服务器与客服客户端保持长连接。客户主动连接时,会先检测得到目前在线的客服。选择一个在线的客服便可以进行在线实时沟通。

Mina服务器提供和Socket长连接池功能、客服登录功能等。它还会存储会话记录至DB里。

客服客户端可以采用对用户友好的C#来写。通过与Mina服务器的交互来实现与客户的沟通。客服客户端还会到Web服务器去查询会话信息。

Web服务器提供了查询功能,并提供对外接口让客服客户端可以查询数据类请求。

图2则是一个微信的在线客服系统。与图1相比,微信的通信协议不是HTTP,较为复杂,因此接入服务器应用时需要进行协议转换。其它大体相同。

另外,图2的DB可以采用Mongo来做。

这两个系统架构大体上没有什么问题。有一个问题是,客户如果要进行沟通,都必须要求至少要有一个客服在线,否则消息就无法发送。这样有点不是很人性化,至少应该支持离线消息是吧!

因此,一个改进点就是支持离线消息。解决方案就是客户发消息会存储到DB里,待客服登录时,可以去抓取离线的消息数据。

另外,Mina可以采用Netty代替。(我比较喜欢Netty,哈哈)

今天就讲到这里吧。