# Change: 智能外呼自动触发与状态监控 ## Why 当前首页加载案件数据后,无法自动触发AI智能外呼功能,调解员需要手动操作才能启动外呼流程。为提升调解效率和自动化水平,需要实现: 1. 案件数据加载完成后自动发起智能外呼 2. 实时监控并展示外呼状态和进度 3. 支持多人同时外呼的场景 ## What Changes - **CaseDataContext.jsx**: 在 `loadCaseData` 方法返回 `timelineData` 后,调用 `OutboundBotAPIService.makeCallV2` 发起外呼 - **OutboundCallWidget.jsx**: 改造现有轮询逻辑,基于 jobId 查询通话状态,支持多任务展示和生命周期管理 - **localStorage 管理**: 新增 jobId 状态持久化存储,区分活跃任务(Scheduling/Executing/Paused/Drafted)与终态任务(Succeeded/Failed/Cancelled) - **轮询策略**: 采用 10 秒轮询间隔,最大轮询时长 2 小时,失败重试 10 次 - **错误处理**: `makeCallV2` 失败时展示错误提示并记录日志,`getCallStatus` 失败时支持重试机制 ## Impact - **Affected specs**: outbound-call-auto-trigger(新建) - **Affected code**: - `web-app/src/contexts/CaseDataContext.jsx` (141行后新增外呼触发逻辑) - `web-app/src/components/common/OutboundCallWidget.jsx` (重构轮询逻辑) - `web-app/src/services/OutboundBotAPIService.js` (已有API方法,无需修改) - **Dependencies**: 依赖 API 文档中定义的外呼机器人接口 - **Breaking Changes**: 无 ## User Experience 1. **用户进入首页** → 页面自动加载案件数据 2. **数据加载完成** → 系统自动发起外呼(无需手动操作) 3. **右下角气泡弹出** → 展示"正在与XX电话沟通中..." 4. **实时更新状态** → 每10秒刷新通话状态和时长 5. **通话结束** → 气泡自动消失,jobId 从存储中清除 ## Technical Notes - **jobId 来源**: 从 `timelineData` 中提取 `id`(mediationId)和 `case_id`(caseId)作为外呼请求参数,响应返回 jobId 数组 - **状态映射**: - 活跃状态: `Scheduling`, `Executing`, `Paused`, `Drafted` - 终态状态: `Succeeded`, `Failed`, `Cancelled` - **多任务支持**: 单次外呼可能生成多个 jobId(申请人、被申请人),需循环展示 - **轮询限制**: 最大轮询时长 2 小时(7200秒),超时后自动停止并清理