2026-07-07 21:52:11 +08:00
|
|
|
sequenceDiagram
|
2026-08-03 18:46:10 +08:00
|
|
|
autonumber
|
|
|
|
|
actor User as 员工
|
|
|
|
|
participant H5 as H5 ConversationStore
|
|
|
|
|
participant WS as FastAPI ws.py
|
|
|
|
|
participant DB as PostgreSQL/messages
|
|
|
|
|
participant WSM as ws_manager
|
|
|
|
|
participant Agent as 坐席 Store/MessageBubble
|
|
|
|
|
participant Task as h5_ai_task.py
|
|
|
|
|
participant Dify as Dify Workflow
|
|
|
|
|
participant REST as messages.py
|
2026-07-07 21:52:11 +08:00
|
|
|
|
2026-08-03 18:46:10 +08:00
|
|
|
User->>H5: 点击选项
|
|
|
|
|
H5->>H5: 首次生成 client_msg_id(UUID)
|
|
|
|
|
H5->>WS: option_select(6字段)
|
|
|
|
|
WS->>DB: BEGIN + pg_advisory_xact_lock(key)
|
|
|
|
|
WS->>DB: 查询同会话同 client_msg_id
|
|
|
|
|
alt 5秒内重复
|
|
|
|
|
DB-->>WS: 返回首次 Message
|
|
|
|
|
WS-->>H5: 不重复落库/广播/Dify
|
|
|
|
|
else 首次受理
|
|
|
|
|
WS->>DB: INSERT Message(msg_type=option_select)
|
|
|
|
|
WS->>DB: COMMIT
|
|
|
|
|
WS->>WSM: broadcast new_message(masked message)
|
|
|
|
|
WSM-->>Agent: new_message
|
|
|
|
|
Agent->>Agent: 追加消息并按 question_id 计算最新
|
|
|
|
|
WS->>Task: create_task(feedback_context)
|
|
|
|
|
Task->>Dify: inputs{feedback_type, question_id, option_id...}
|
|
|
|
|
Dify-->>Task: 下一轮结构化回复
|
|
|
|
|
end
|
|
|
|
|
Agent-xWSM: 网络断开
|
|
|
|
|
Agent->>REST: GET /conversations/{id}/messages
|
|
|
|
|
REST->>DB: SELECT conversation_id ORDER BY created_at
|
|
|
|
|
DB-->>REST: 含 option_select 历史
|
|
|
|
|
REST-->>Agent: masked items
|
|
|
|
|
Agent->>Agent: 用 created_at + id 恢复最新高亮
|