edit | blame | history | raw

Change: 智能外呼自动触发与状态监控

Why

当前首页加载案件数据后,无法自动触发AI智能外呼功能,调解员需要手动操作才能启动外呼流程。为提升调解效率和自动化水平,需要实现:
1. 案件数据加载完成后自动发起智能外呼
2. 实时监控并展示外呼状态和进度
3. 支持多人同时外呼的场景
4. 优化失败任务展示体验,提供清晰的状态指示

What Changes

  • CaseDataContext.jsx: 在 loadCaseData 方法返回 timelineData 后,调用 OutboundBotAPIService.makeCallV2 发起外呼
  • OutboundCallWidget.jsx: 改造现有轮询逻辑,基于 jobId 查询通话状态,支持多任务展示和生命周期管理
  • localStorage 管理:
  • 新增 jobId 状态持久化存储,区分活跃任务(Scheduling/Executing/Paused/Drafted)与终态任务(Succeeded/Failed/Cancelled)
  • 新增失败任务独立存储(outbound_call_jobs_failed),支持失败信息展示
  • 实现失败任务去重机制(按 personId 去重)和自动清理(24小时过期)
  • 轮询策略: 采用 10 秒轮询间隔,最大轮询时长 2 小时,失败重试 10 次
  • 错误处理:
  • makeCallV2 失败时展示错误提示并记录日志
  • getCallStatus 失败时支持重试机制
  • 失败任务在气泡中清晰展示,带红色状态指示灯
  • UI/UX 优化:
  • 成功任务:蓝色气泡 + 绿色呼吸灯状态指示
  • 失败任务:蓝色气泡 + 红色呼吸灯状态指示
  • 重复任务自动去重,避免信息冗余

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电话沟通中..."
  • 失败任务:蓝色气泡 + 红色呼吸灯,展示失败原因(如"今日呼叫次数已达上限")
  1. 实时更新状态 → 每10秒刷新通话状态和时长
  2. 通话结束 → 气泡自动消失,jobId 从存储中清除
  3. 重复防护 → 相同联系人失败任务自动去重,避免重复显示
  4. 自动清理 → 失败任务超过24小时自动清除

Technical Notes

  • jobId 来源: 从 timelineData 中提取 id(mediationId)和 case_id(caseId)作为外呼请求参数,响应返回 jobId 数组
  • 状态映射:
  • 活跃状态: Scheduling, Executing, Paused, Drafted
  • 终态状态: Succeeded, Failed, Cancelled
  • 多任务支持: 单次外呼可能生成多个 jobId(申请人、被申请人),需循环展示
  • 轮询限制: 最大轮询时长 2 小时(7200秒),超时后自动停止并清理
  • 失败任务处理:
  • 存储字段:{ personId, message, perClassName, trueName, errorCode, startTime }
  • 去重策略:按 personId 去重,保留最新记录
  • 清理策略:超过24小时的记录自动清除
  • 视觉规范:
  • 所有任务使用统一蓝色气泡背景
  • 状态指示灯:成功=绿色(#52c41a),失败=红色(#ff4d4f)
  • 呼吸动画:pulse 2s infinite