请求客服平台Api(带用户信息或附带商品/订单信息)
用户未授权客服平台
授权客服平台并同步用户信息
返回用户标识CookieId
记录附带商品/订单信息
用户已授权客服平台
记录附带商品/订单信息
对比用户信息是否一致(名称/头像)
不一致时将同步用户信息
一致时返回用户标识CookieId
跳转用户界面
验证当前URL所带标识是否有效
无效时友好提示
有效时后台逻辑处理
判断当前是否在其他端登录
通过Redis中的SocketId验证是否已有连接
有连接时说明该用户已在其他端登录
返回友好提示处理
无连接时说明该用户可以往下操作
标记当前用户为在线状态并记录Redis
读取该用户是否已经关联客服
未关联客服
找到当前商品/订单下【对应商家】的对应接待人数最少的在线客服
有客服在线
已关联客服
找到该客服Id连接的SocketId,到Redis中查找是否连接在线
未连接在线
已连接在线
加入Socket.io - Room中
通知关联客服进行上线、消息处理
读取【点击客服时】带过来的商品/订单信息
消息推送到Socket.io - Room中并记录Redis缓存(不记录数据库)
读取当前用户在Redis下的消息记录是否来自于数据库
如何判断
在Redis中存在一个data属性来区别
非来自数据库数据
读取数据库中该用户下的聊天消息记录
将聊天消息记录保存至Redis中
聊天界面
发送消息
向后端发送消息,由后端Socket.io向当前Room发送消息内容
发送完成
客户端追加发送内容
将客服发送的未读数清空
图片后发送
拍照后发送
用户离线
离线原因:
后台重启
页面刷新
客户端网络异常
关闭页面
离线处理
向后端发送离线处理
读取Redis将当前用户移除
数据库状态标识为离线
找到对应的客服(已关联)修改其在线状态为离线状态
重要说明:用户点击客服时,将当前商品/订单对应的商家的设为连接中状态(其他商家设为断开状态),在跳转用户界面读取当前为连接中状态的商家进行逻辑处理