sequenceDiagram participant Emp as 员工(H5页面) participant API as FastAPI participant ConvSvc as ConversationService participant Score as ScoringService participant WXSvc as WecomService participant Agent as 坐席工作台 participant DB as PostgreSQL Emp->>API: POST /api/h5/conversation/shake API->>ConvSvc: find_or_create_conversation(employee_id) ConvSvc->>DB: 查询/创建 conversation DB-->>ConvSvc: conversation API->>Score: detect_hand_raise("摇人") Score-->>API: hand_raise=True API->>ConvSvc: update_conversation(tags={hand_raise:true}) ConvSvc->>DB: UPDATE conversations SET tags=... API->>ConvSvc: get_funny_phrase(scene='shake') ConvSvc->>DB: SELECT FROM funny_phrases WHERE scene='shake' DB-->>ConvSvc: "大哥,俺这就去摇人,稍等..." ConvSvc->>ConvSvc: send_message(conv_id, 'system', 趣味话术) ConvSvc->>WXSvc: send_text_message(employee_id, 趣味话术) API-->>Emp: {conversation, funny_phrase} Note over Emp: H5显示摇人动画 + 趣味话术 loop 坐席轮询 Agent->>API: GET /api/conversations API->>ConvSvc: get_conversations() ConvSvc->>DB: SELECT ... ORDER BY urgency DESC DB-->>ConvSvc: 列表(举手会话靠前) API-->>Agent: 举手标记的会话(黄色标签) end Agent->>API: POST /api/conversations/{id}/assign {agent_id} API->>ConvSvc: update_conversation(status='serving', assigned_agent_id) ConvSvc->>DB: UPDATE conversations SET status='serving' ConvSvc->>ConvSvc: send_message(conv_id, 'system', '人摇来了!IT坐席为您服务') ConvSvc->>WXSvc: send_text_message(employee_id, 接入话术) ConvSvc-->>API: updated conversation API-->>Agent: 接单成功 WXSvc-->>Emp: 企微推送"人摇来了!IT坐席为您服务"