2.2 KiB
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 绕过核对。
- 未读扫描遇到已移交会话跳过该会话,继续其他联系人;不会把它当作队列写盘故障阻塞整个扫描。
后续消息恢复
不永久拉黑会话。以下证据可以恢复新一轮自动处理,原发送证据仍保留:
- 数据库事件是相同账号/会话,消息 ID 不同,发送时间严格晚于移交消息。
- 纯视觉复制文本完整匹配旧消息基线,并证明末尾追加了同一客户的新消息。工作人员答复、单纯画面变化、没有旧基线的片段均不能解除防重。
纯视觉模式下,用户需打开接管会话让现有文本识别获得证据;无法证明新客户消息的图片/语音仍交人工处理。进度和队列日志会明确提示人工跟进,不会猜测旧消息未送达而重发。
验证
两目录分别运行 test_visual_handoff_visibility 15 项及 test_visual_review_visibility 11 项,共各 26 项通过,进程退出码 0。全部使用合成任务/临时队列,禁止真实键鼠动作。旧的 450 项回归由主任务统一复跑。
补充修改前备份:各目录 backups/review-visibility-20260916/wechat_bot.before-handoff.py。本次未操作用户真实队列或客户消息。