docs(chat): 在线/离线实时SSE已上线(22_4223 §12, presence事件, #4273 PR#4299)

这个提交包含在:
API Changelog Bot 2026-06-23 15:43:42 +08:00
父节点 79468ab61f
当前提交 bfa877f3db

查看文件

@ -116,7 +116,20 @@ HOUSE 订单会话**只走 open-house**。通用 `/chat/open`bizModule+peerAd
### 在线/离线态走 SSEwx 2026-06-23 新要求 → 后端工单 **#4273**
- 现状:`peerOnline` 是**轮询字段**Redis presence key TTL 45s + SSE 心跳续期),**在线态变更不推送**。
- wx 拍:改为 **SSE 实时推在线/离线**。已立后端工单 **#4273**hl-user-serviceSSE 连接建/断 → 标在线/离线 → 向会话对端推 `presence` 事件。**前端届时订阅 presence 事件、停 peerOnline 轮询**(保留字段做首屏兜底)。未落地前先用 peerOnline 轮询。
- wx 拍:改为 **SSE 实时推在线/离线**。已立后端工单 **#4273**hl-user-serviceSSE 连接建/断 → 标在线/离线 → 向会话对端推 `presence` 事件。**前端届时订阅 presence 事件、停 peerOnline 轮询**(保留字段做首屏兜底)。**✅ 已上线测试服,契约见 §12。**
---
## 12. ✅ 在线/离线实时 SSE 已上线测试服2026-06-23 · #4273 · PR #4299 · 已部署实测)
`peerOnline` 轮询升级为 **SSE 实时推**。前端订阅后**在线点变更实时刷新,停掉 peerOnline 轮询**`peerOnline` 仅留作首屏兜底)。
- **SSE 事件**`presence`(与 `im-chat`/`im-chat-read` 同一条流 `GET /ws/admin-msg/stream`,实测 200 `text/event-stream`)。
- **payload**`{ "type":"PRESENCE", "presenceAdminId":<Long 在线态翻转的人>, "online":<Boolean> }`(另带 `adminId`=收件方路由,前端忽略)。
- **语义**:当**与你有活跃会话的某对端**`presenceAdminId`)上线/下线,你的流就收到一条 `presence` → 把会话列表 / 打开的聊天里**那个人的在线点**实时刷成 `online`。只推「与你有会话关系的人」,不会广播无关员工。
- **前端**:订阅 `presence` 事件 → `presenceAdminId` 找到对应会话/对端 → 设其在线点=`online`。首屏仍用 `peerOnline`open-house / conversations 返)兜底,之后全靠 `presence` 事件维持,**不再轮询**。
- **时延**上线≈即时建连即推;下线干净断开≈即时、异常掉线≤25s心跳探测补推、45s TTL 兜底。
- **实测**:部署后 `GET /ws/admin-msg/stream` 200 + `text/event-stream`,服务正常启动(新 presence 广播 bean 无循环依赖)。两端实时翻态属前端联调验。
---