Files
kefu/deploy/review-visibility-20260916/VISUAL_HANDOFF_REPORT.md
T
2026-09-21 10:34:06 +08:00

2.2 KiB

视觉队列人工移交补充

已在两个客户端 wechat_bot.py 加入 handoff_pending_replies(keys, confirm_uncertain=False),与共享 BotThread/离线接口契约一致。

  • sending 阶段或发送状态一律拒绝移交。
  • uncertain、sent_uncommitted、unknown、receipt_check 或已登记派发时间,需要明确 confirm_uncertain=True 才能移交。
  • 原任务完整状态复制到同一原子队列文件的 manual_handoffs;字节型视觉指纹转为十六进制。receipt_checked_by_user 只代表用户确认已核对,delivery_confirmed 始终为 false。
  • 有移交记录时文件使用 {pending, manual_handoffs} 包装,读取兼容旧裸队列和离线移交结构。移交证据不会作为自动待发任务重载。
  • 内存取消标记和持久移交记录共同阻止原消息重发。写盘失败整体回滚,运行中的旧模型结果不能落入同会话的新任务。
  • 普通取消同样保护发送中/送达待核对状态,不能经旧 UI 绕过核对。
  • 未读扫描遇到已移交会话跳过该会话,继续其他联系人;不会把它当作队列写盘故障阻塞整个扫描。

后续消息恢复

不永久拉黑会话。以下证据可以恢复新一轮自动处理,原发送证据仍保留:

  1. 数据库事件是相同账号/会话,消息 ID 不同,发送时间严格晚于移交消息。
  2. 纯视觉复制文本完整匹配旧消息基线,并证明末尾追加了同一客户的新消息。工作人员答复、单纯画面变化、没有旧基线的片段均不能解除防重。

纯视觉模式下,用户需打开接管会话让现有文本识别获得证据;无法证明新客户消息的图片/语音仍交人工处理。进度和队列日志会明确提示人工跟进,不会猜测旧消息未送达而重发。

验证

两目录分别运行 test_visual_handoff_visibility 15 项及 test_visual_review_visibility 11 项,共各 26 项通过,进程退出码 0。全部使用合成任务/临时队列,禁止真实键鼠动作。旧的 450 项回归由主任务统一复跑。

补充修改前备份:各目录 backups/review-visibility-20260916/wechat_bot.before-handoff.py。本次未操作用户真实队列或客户消息。