1.背景基本上公司产品上线后,用户在使用过程中会遇到很多问题。为了实时高效的解决这些问题,很多公司的产品都会接入到每个用户终端。这些客服系统包括第三方的SaaS产品,比如智齿、Udesk等,也是公司自研的本身。如果是公司自己开发的,如何快速搞定一个人工客服系统工行智能客服二。一个简单的客服系统该系统包括几个主要功能:人工问答、机器人问答、邀请评价、客服代理系统、会话管理系统系统框架图:访客端即用户触摸端(c端),以及c端主要有三个功能:人工会话满意度评价,机器人会话通信协议:长链接:websocket+ssl短链接:http+ssl人工会话主要是IM功能,包括普通短信,富文本,图片,视频、文件发送等通信协议主要依赖websocket,而robotsession可以直接使用http,下面就来讲解一下如何快速实现一个简单的c端客服系统。三、技术选择Vue/React+Nodejs/Java+socket.io+Http四、具体实现1、Nodejs或者Java实现一个IM服务器这个可以看socket.io的具体文档,socket.io支持大部分语言Node/Java/C#等提供SDK,可以轻松实现一个简单的IM服务器2。前端实现一个客服聊天界面用户输入区客服/机器人接听区输入框表情选择框图片视频选择框具体实现不用多说,vue/react实现这些功能都很简单。我们主要看一下前端IM的核心部分,如何通过socket.io与IM服务器进行通信3.安装npm包socket.io-clientimportiofromsocket.io-client来初始化websocketthis在核心部分代码.socket=io(this.$config.socketUrl,{transports:\['websocket'\],path:'/ws/im'})监听各种自定义事件即可完成页面数据展示通过各种自定义事件,socket.io自带的很多事件可以监控websocket的连接、重连、异常等。/\*\*处理系统消息\*/this.socket.on('session',data=>{//todo})/\*\*处理手动消息\*/this.socket.on('message',data=>{//todo})/\*\*监听连接事件\*/this.socket.on('connect',data=>{//todo})/\*\*监听重新连接事件\*/this.socket.on('reconnect',data=>{//todo})4.心跳检测、断线重连在做IM功能的时候,会遇到很多问题。一个核心问题是,用户在使用过程中切换应用,或者网络中断时,websocket会主动断开连接。断线期间,您将无法看到客服发给您的消息。即使网络恢复正常,您也将无法正常接收离线消息,为了保证用户断开重连后websocket恢复正常,需要进行心跳检测。核心代码/\*\*开启心跳检测\*/startHeartbeat(){window.clearTimeout(this.heartBeatTimer)window.clearTimeout(this.closeHeartBeatTimer)this.heartbeatEvent()},/\*\*websocket心跳检测\*/heartbeatEvent(){this.heartBeatTimer=setTimeout(()=>{this.sendHeartbeat()this.closeHeartBeatTimer=setTimeout(()=>{//socket.close()//这里不能主动断开socket},this.closeHeartBeatDelay)},this.heartBeatDelay)},/\*\*发送心跳事件\*/sendHeartbeat(){socket.emit('heartbeat','heartbeat',e=>{this.startHeartbeat()})}什么时候开始心跳检测,可以在初始化socket.io监听connect连接事件的时候开始心跳检测/\*\*监听link事件\*/this.socket.on('connect',data=>{this.startHeartbeat()})5.Websocket调试技巧在开发过程中,如果需要调试websocket,其实还是比较简单的。移动端可以使用浏览器或者抓包工具charls,PC端可以直接在控制面板网络中查看ws请求url示例:wss://www.baidu.com/ws/im/?EIO=3&transport=websocket5.总结掌握了以上几点,实现一个完整的IM客服系统就相当简单了。后续我们会分享很多客服系统的复杂功能,敬请期待...``
