企微好友单聊 AI 自动回复 · 优化总结

方案B(GUI 截屏代回)· 2026-07-09 · 云电脑运行版本 63999 · 代码 PR #817
10本次修复/优化项
57单元测试(全绿)
2仍未修(下批)
1根本天花板(GUI)

一、这套是什么(背景)

企业微信好友单聊的 AI 自动代回。不走官方 API(官方客服 API 被 ICP / 可信 IP 卡住), 而是在云电脑上跑一个常驻 Python loop,用「截屏 → 视觉模型认字读消息 → 固定坐标点击打字发送」的 GUI 方式代回。

数据链:云电脑 loop → Fly 中转 → Vercel /api/wecom/chat/reply → chatReply(小艳,模型 glm-4.6)→ 回传 → GUI 打字发出

先天特性:GUI 方式没有"送达回执",靠截图认字,天生比 API 脆——本次优化就是尽量把这些脆点补硬。

二、本次优化了什么(10 项,均已上线 + 有测试)

治什么问题状态
A 连发防抖客户连发多条时,读到半截就回、剩下的下轮又回一次(拆成多条)。改:读到待回消息后先确认聊天区 2.5s 不再变化(发完)才回。已上线
B 读取上限每次最多读 6 条 → 连发 >6 条漏前面。改为 10 条。已上线
C 红点不饿死某会话红点卡住不消时独占 3 个处理槽,饿死其他客户。改:本轮已点过的行跳过。已上线
系统消息过滤"XX撤回了一条消息""工作台统计(总客户N位/收款N元)"被当客户消息回。改:正则拦截,从源头跳过。已上线
F 红点检测修正截图含最左导航栏 → "消息"图标红角标被当成 y≈58 的假未读,一直点顶部死区、点不开真新好友(野乔通过没首触)。改:裁掉导航栏 + 顶部死区过滤。已上线
G 发送前重抢前台"读→生成"隔数秒,其间焦点被抢 → 发送中止 / 打字中途丢焦。改:发前主动把企微顶到最前+最大化。已上线
VL 断连重试视觉模型(OpenRouter)偶发掐连接 → 整轮读取作废。改:失败重试 3 次 + 退避。已上线
★ 发送后回读确认治"假成功"——按发送键就记成功,但字没落进输入框/坐标偏/被窗口挡,聊天里根本没有(野乔首触两次假成功、还被锁成"已招呼")。改:发完截图回读,确认文案真出现在右侧才记成功;没确认到 → 不记已发、不锁已招呼、下轮重试。已上线
★ 定期全量扫会话客户在【无红点、又非当前打开】的会话里回消息,两条腿都够不着(野乔发"新房"漏读)。改:每 5 轮把前 6 个会话逐个点开读一遍补漏。已上线
★ @微信 硬门全量扫 + 历史假成功把系统通知/内部群(客户联系/服务总结/行业资讯/企业微信团队/内部全员群)也回了、还写进台账污染去重。改:只代回标题带「@微信」的外部客户,系统/群/同事一律不碰。已上线
配套动作(运维):清掉云电脑本地被污染的台账文件 wecom_replied_ledger.json / wecom_sent_texts.json,重置历史脏去重状态。

三、还存在的 Bug / 局限

问题说明性质
发送落地强依赖环境字要真进企微输入框,必须:①企微在最前 ②输入框坐标准 ③没有别的窗口(尤其 PowerShell 黑窗)盖在企微上。黑窗一盖 / 焦点被抢,就发不出(回读确认会抓到并重试,但发不出还是发不出)。环境/操作
D 失焦发半条不记账发送中途失焦中止时只发了半条却不记账,下轮重生成整条 → 客户可能收到"半条+整条"。未修·下批
E 身份用显示名会话身份 = 销售号:显示名。客户改微信昵称 → 新建会话丢历史;同名不同人会撞车。GUI 拿不到稳定 userid,补不干净。结构性
全量扫有成本每 5 轮把前 6 个会话(含系统会话)各截图读一次 VL。@微信 硬门拦住了"回复",但"读"仍会烧一点视觉模型额度。可调 FULL_SCAN_EVERY / FULL_SCAN_TOP_N 权衡。可调
视觉读图本身不稳偶发漏读 / 误读 / 断连(已加重试,但非 100%)。方案固有
🔒 根本天花板GUI 方案无官方送达回执,回读确认是补救不是根治。任一环(读图/坐标/前台/窗口)抖动就漏读或发不出。到不了"零故障、无人值守"。GUI 天花板

四、优化点 / 下一步

五、日常运维要点