# asChat 客服聊天

## 聊天室主要流程与功能描述
1. 用户通过画家包登录
2. 打开客服页面。 画家宝客户端自动进行websocket连接，后台会自动创建一个默认聊天室（聊天室携带一个SessionId）
3. 用户调用api接口，发送消息。 服务端接收到消息后，会通过websocket通知聊天室里面所有用户。
4. erp首次打开客服菜单时，会进行websocket连接，并调用一次api接口刷新消息列表。后续通过websocket接收消息推送，收到消息时，应主动调用一次消息列表刷新接口。
5. erp客服端发送消息时，加入到此聊天室。
6. 用户端调用api接口获取新消息列表。

## 客户端应具备的其它功能
1. weboscket断开自动重连
2. 当通过websocket接收到错误类型的消息，应具备对应的错误处理机制<p>
错误消息示例
```json
{"type":1,"content":"Connection error:登录状态失效","from":"0","to":"null"}
```

## 服务端应具备的功能
1. 通过redis缓存聊天消息
2. 通过redis缓存用户的sessionId避免ws断开后，找不到之前的sessionId
3. 客服端由于不是画家宝用户，没有userId。在websocket连接时，如果找不到userId，应该为其在画家宝创建一个账号。且经纪人不可见。
4. 由于没有创建聊天室的需求，所以每个用户使用一个聊天室即可。客服与之对话时，就自动加入用户端的聊天室
5. 新消息统计 
- 当发送消息时，该聊天室中除了发信者以外，其它用户的新消息数都+1，录入缓存。
- 当新客服人员加入时，没有新消息统计的缓存。~~他的新消息数量应该从创建时间开始计算~~,所以都是0。