在现有 WebSocket 双通道 架构上扩展,不引入群聊概念。后端维护 conversation.participants 数组,所有参与者共享同一个 WebSocket 会话通道。
用户「张三」遇到 VPN 问题,坐席「小李」正在处理。对话过程中发现需要网络安全组同事「王工」协助排查。
弹窗包含三个区域:组织架构树(左侧)、已选人员(右侧上方)、历史消息共享设置(右侧下方)。
勾选部门节点 = 邀请该部门所有人。每个被邀请人都会收到独立的应用消息通知。
| 操作 | 效果 |
|---|---|
| 勾选人员 | 该人员加入已选列表 |
| 勾选部门 | 该部门下所有人员加入已选列表 |
| 搜索姓名 | 模糊匹配,点击结果直接加入已选 |
| 取消勾选 | 从已选列表移除 |
邀请时坐席可以选择被邀请人能看到哪些历史消息。这是隐私保护的重要设计——避免敏感信息(如员工个人账号问题)被无关人员看到。
| 模式 | 适用场景 | 隐私风险 |
|---|---|---|
| 共享全部 | 通用IT问题(VPN/网络/打印),无敏感信息 | 低 |
| 最近10条 | 对话较长,仅需上下文即可理解当前问题 | 中 |
| 不共享 | 涉及员工个人账号/权限等敏感信息 | 低 |
| 接口 | 方法 | 说明 |
|---|---|---|
| /api/conversations/:id/invite | POST | 邀请人员加入会话 |
| /api/conversations/:id/participants | GET | 获取会话参与者列表 |
| /api/conversations/:id/participants/:uid | DELETE | 移除参与者(坐席/被邀请人退出) |
| /api/contacts/departments | GET | 获取组织架构树(缓存自eHR/企微通讯录) |
| /api/contacts/search | GET | 搜索人员(姓名/工号模糊匹配) |
王工在企微中收到一条应用消息卡片,点击卡片中的按钮即可跳转到 H5 会话页面。
如果被邀请人未安装企微或处于离线:后端记录邀请状态为「待加入」。被邀请人下次登录企微时会收到消息。同时,坐席工作台显示邀请状态:待加入 / 已加入
王工点击消息卡片按钮 → 企微内置浏览器打开 H5 页面 → 自动加入 WebSocket 会话 → 看到历史消息(如果被共享)→ 可直接发消息
所有人通过 WebSocket 实时通信。坐席工作台和所有 H5 参与者共享同一个消息通道。坐席拥有管理权限(可移除参与者、结束会话)。
| 操作 | 权限 | 说明 |
|---|---|---|
| 邀请人员 | 坐席 | 选择人员加入会话 |
| 移除参与者 | 坐席 | 将某人移出会话(不通知) |
| 主动退出 | 被邀请人 | 被邀请人可自行退出 |
| 结束会话 | 坐席 | 关闭会话,所有人断开 |
| 转让坐席 | 坐席 | 将坐席角色转给其他参与者 |