优化实时聊天:稳定 WS、按 seq 增量同步,并修复访客评价推送

- 客服/访客 WebSocket 不再因切换会话反复重连,断线自动恢复
- 新增 after_seq 增量拉取,重连与消息空洞时 catch-up
- 结束会话同时推送给访客,预览页可弹出评价并支持兜底状态同步
This commit is contained in:
yml2213
2026-07-15 14:38:08 +08:00
parent ea3901d8b0
commit 1359bfe597
7 changed files with 758 additions and 107 deletions
+23 -1
View File
@@ -125,7 +125,29 @@ export const getSessions = (params?: {
if (params?.pageSize) search.set('pageSize', String(params.pageSize))
return getList<Session>(`/sessions?${search}`)
}
export const getSession = (id: number) => get<{ session: Session; messages: Message[]; events: SessionEvent[]; pending_count: number }>(`/sessions/${id}`)
export const getSession = (id: number) => get<{
session: Session
messages: Message[]
events: SessionEvent[]
pending_count: number
max_seq?: number
}>(`/sessions/${id}`)
/** 按 seq 增量拉取消息(重连 catch-up):seq > after_seq */
export interface SessionMessagesSync {
messages: Message[]
after_seq: number
max_seq: number
has_more: boolean
}
export const getSessionMessages = (id: number, afterSeq = 0, limit = 200) => {
const search = new URLSearchParams()
if (afterSeq > 0) search.set('after_seq', String(afterSeq))
if (limit > 0) search.set('limit', String(limit))
const qs = search.toString()
return get<SessionMessagesSync>(`/sessions/${id}/messages${qs ? `?${qs}` : ''}`)
}
export const assignSession = (id: number, agentId: number) => post(`/sessions/${id}/assign`, { agent_id: agentId })
export const claimSession = (id: number) => post(`/sessions/${id}/assign`, {})
export const transferSession = (id: number, agentId: number) => post(`/sessions/${id}/transfer`, { agent_id: agentId })