微信修改
This commit is contained in:
@@ -161,12 +161,11 @@ public class WorkcaseChatContorller {
|
||||
|
||||
// ========================= ChatRoom聊天室管理(实时IM) =========================
|
||||
|
||||
@Operation(summary = "创建聊天室")
|
||||
@Operation(summary = "创建聊天室(转人工时调用)")
|
||||
@PreAuthorize("hasAuthority('workcase:room:create')")
|
||||
@PostMapping("/room")
|
||||
public ResultDomain<TbChatRoomDTO> createChatRoom(@RequestBody TbChatRoomDTO chatRoom) {
|
||||
ValidationResult vr = ValidationUtils.validate(chatRoom, Arrays.asList(
|
||||
ValidationUtils.requiredString("workcaseId", "工单ID"),
|
||||
ValidationUtils.requiredString("guestId", "来客ID")
|
||||
));
|
||||
if (!vr.isValid()) {
|
||||
@@ -202,6 +201,16 @@ public class WorkcaseChatContorller {
|
||||
return chatRoomService.getChatRoomById(roomId);
|
||||
}
|
||||
|
||||
@Operation(summary = "绑定工单到聊天室")
|
||||
@PreAuthorize("hasAuthority('workcase:room:update')")
|
||||
@PostMapping("/room/{roomId}/bind-workcase")
|
||||
public ResultDomain<TbChatRoomDTO> bindWorkcaseToRoom(@PathVariable String roomId, @RequestParam String workcaseId) {
|
||||
TbChatRoomDTO chatRoom = new TbChatRoomDTO();
|
||||
chatRoom.setRoomId(roomId);
|
||||
chatRoom.setWorkcaseId(workcaseId);
|
||||
return chatRoomService.updateChatRoom(chatRoom);
|
||||
}
|
||||
|
||||
@Operation(summary = "分页查询聊天室")
|
||||
@PreAuthorize("hasAuthority('workcase:room:view')")
|
||||
@PostMapping("/room/page")
|
||||
|
||||
@@ -61,9 +61,9 @@ public class ChatRoomServiceImpl implements ChatRoomService {
|
||||
@Override
|
||||
@Transactional
|
||||
public ResultDomain<TbChatRoomDTO> createChatRoom(TbChatRoomDTO chatRoom) {
|
||||
logger.info("创建聊天室: workcaseId={}, roomType={}", chatRoom.getWorkcaseId(), chatRoom.getRoomType());
|
||||
logger.info("创建聊天室: guestId={}, aiSessionId={}", chatRoom.getGuestId(), chatRoom.getAiSessionId());
|
||||
|
||||
// 一个工单只能创建一个聊天室
|
||||
// 如果关联工单,检查工单是否已有聊天室
|
||||
if (chatRoom.getWorkcaseId() != null && !chatRoom.getWorkcaseId().isEmpty()) {
|
||||
TbChatRoomDTO filter = new TbChatRoomDTO();
|
||||
filter.setWorkcaseId(chatRoom.getWorkcaseId());
|
||||
|
||||
@@ -17,26 +17,24 @@
|
||||
```
|
||||
用户进入小程序
|
||||
↓
|
||||
AI客服对话(默认)
|
||||
AI客服对话(默认,存储在 ai.tb_chat 表)
|
||||
↓
|
||||
连续3次AI对话后询问是否转人工
|
||||
↓
|
||||
用户触发转人工
|
||||
↓
|
||||
AI自动生成工单信息预填表单
|
||||
↓
|
||||
用户创建工单
|
||||
用户触发转人工(可能一开始就手动触发,没有聊天记录)
|
||||
↓
|
||||
【核心变更】创建IM聊天室(取代微信客服)
|
||||
↓
|
||||
同步AI对话记录到聊天室
|
||||
同步 ai.tb_chat 对话记录到聊天室
|
||||
↓
|
||||
客服人员加入聊天室
|
||||
客服人员加入聊天室(AI退出)
|
||||
↓
|
||||
客服与客户IM对话
|
||||
客服与客户IM对话(员工续接AI对话)
|
||||
↓
|
||||
【可选】发起Jitsi Meet视频会议
|
||||
↓
|
||||
【可选】用户/员工在聊天室内创建工单(也可在web管理端)
|
||||
↓
|
||||
工单处理和状态更新
|
||||
↓
|
||||
工单完成/撤销,生成总结和词云
|
||||
@@ -44,6 +42,11 @@ AI自动生成工单信息预填表单
|
||||
|
||||
### 关键改动点
|
||||
|
||||
**AI对话 → 转人工 → 创建聊天室**
|
||||
- AI对话存储在 `ai.tb_chat` 表(通过WorkcaseChatService调用AI接口)
|
||||
- 转人工时创建IM聊天室,同步AI对话记录
|
||||
- 工单和会议没有前置关系,可在聊天室内随时创建
|
||||
|
||||
**取消微信客服 → 使用自建IM + Jitsi Meet**
|
||||
- IM聊天室:文字、图片、文件、语音消息
|
||||
- 视频会议:通过iframe嵌入Jitsi Meet,最简实现
|
||||
@@ -57,11 +60,11 @@ AI自动生成工单信息预填表单
|
||||
|
||||
#### 1. **tb_chat_room** - 聊天室表 ⭐核心表
|
||||
|
||||
**用途**:一个工单对应一个聊天室
|
||||
**用途**:转人工时创建的聊天室,可关联工单
|
||||
|
||||
```sql
|
||||
room_id -- 聊天室ID(主键)
|
||||
workcase_id -- 关联工单ID(唯一)
|
||||
workcase_id -- 关联工单ID(可选,可后续绑定)
|
||||
room_name -- 聊天室名称
|
||||
status -- 状态:active-活跃 closed-已关闭 archived-已归档
|
||||
guest_id -- 来客ID
|
||||
@@ -76,8 +79,9 @@ last_message -- 最后消息内容(列表展示用)
|
||||
```
|
||||
|
||||
**业务规则**:
|
||||
- 创建工单时自动创建聊天室
|
||||
- 聊天室状态随工单状态变化
|
||||
- 转人工时创建聊天室,同步 ai.tb_chat 对话记录
|
||||
- 用户/员工可在聊天室内创建工单,绑定 workcase_id
|
||||
- 聊天室可独立存在,无需绑定工单
|
||||
- 工单完成后聊天室归档
|
||||
|
||||
---
|
||||
|
||||
@@ -1,23 +1,20 @@
|
||||
# 小程序用户聊天和工单的产生逻辑
|
||||
接口实现方式:
|
||||
0. 用户进行微信小程序,1个IM聊天室,默认回复人员是ai
|
||||
1. WorkcaseChatServiceImpl通过ai接口进行ai回复,对话人员是来客和ai
|
||||
1. 用户进行微信小程序,进行AI问答,默认回复人员是ai,在ai.tb_chat表
|
||||
2. 当连续3次ai聊天后,询问是否转人工
|
||||
3. 用户触发转人工(可能是一开始,就手动触发,没有聊天记录)
|
||||
4. 用户跳转前,必须创建工单
|
||||
5. ai根据聊天对话,自动生成部分工单信息,预填入小程序的工单创建的表单,
|
||||
6. 创建工单后,同步工单到CRM
|
||||
7. 创建一个IM聊天室,同步ai.tb_chat的聊天信息
|
||||
8. 员工进入聊天室和客户聊天(ai退出聊天室)的聊天记录,同步到tb_chat表里面,对话人员是来客和客服。(把ai替换成员工进行对话的续接)
|
||||
9. 可以开启jitsi会议
|
||||
10. 员工自己更新工单状态,如果在CRM更新工单状态会触发receiveWorkcaseFromCrm,如果在本系统更新工单会触发工单同步到CRM
|
||||
11. 在工单是完成、撤销后,工单、对话进行总结,并更新词云
|
||||
4. 创建一个IM聊天室,同步ai.tb_chat的聊天信息
|
||||
5. 员工进入聊天室和客户聊天(ai退出聊天室)的聊天记录,同步到tb_chat表里面,对话人员是来客和客服。(把ai替换成员工进行对话的续接)
|
||||
6. 可以开启jitsi会议
|
||||
7. 用户、员工在聊天室内创建工单(也可在web的管理端)
|
||||
|
||||
# 聊天室的实现,改造Jitsi Meet
|
||||
包含jitsiMeet所有功能
|
||||
对创建会议的人员需要校验:1.是当前工单聊天室内的成员
|
||||
对加入会议的人员需要校验:1.是当前工单聊天室内的成员
|
||||
|
||||
jitsiMeet要避免任何人都能创建会议的问题,只有存在指定工单时才能创建
|
||||
jitsiMeet要避免任何人都能创建会议的问题
|
||||
|
||||
有视频会议的需求
|
||||
有视频会议的需求
|
||||
|
||||
总体内容变化,交互逻辑改变,工单和会议没有前置关系。用户先ai对话,然后创建聊天室,可以随时在聊天室内创建工单;员工可以在聊天室和web端创建工单并更新状态。
|
||||
Reference in New Issue
Block a user