diff --git a/.gitignore b/.gitignore index 8d895de..6d069d6 100644 --- a/.gitignore +++ b/.gitignore @@ -11,6 +11,10 @@ node_modules/ .DS_Store Thumbs.db +# Python +__pycache__/ +*.pyc + # Logs & runtime output *.log nohup.out diff --git a/md/wechat-auto-reply-requirements.md b/md/wechat-auto-reply-requirements.md index ff863b2..da67ef5 100644 --- a/md/wechat-auto-reply-requirements.md +++ b/md/wechat-auto-reply-requirements.md @@ -100,12 +100,14 @@ - 安全:生成超时/失败 → 无草稿 → policy skip → 不发(失败即静默,绝不误发)。 - 真机验证:接线(watcher inotify → 自动拉起编排器 drain)通过;真实上下文(猎头 婷婷)生成「哈哈婷婷,我不是什么总,就是个写代码的,不负责招人这块哈」→ 正确进 /approvals 待审。 -### 环节 5 · 可靠发送 —— ✅ **API 发送打通(2026-07-11)** -经历一场硬仗才让 API 发送真正送达(火星人跨账号收到确认)。两个坑: +### 环节 5 · 可靠发送 —— ✅ **打通并端到端验证(2026-07-11 打通 / 07-12 加固+闭环)** +经历一场硬仗才让 API 发送真正送达。两个坑 + 一轮 flush 加固: 1. **中文被弄乱**:`send_text_via_hook` 用 `--es text` 传中文被 shell/am 弄乱→服务器拒收→卡 status=1。hook 早已要求 `--es text_b64`,发送端漏改。→ 改用 text_b64。 -2. **z2.b 只入队不派发(设备机制,非代码 bug)**:`sendViaHighLevel` 的 `z2.b` 把消息入队(status=1 转圈),WeChat NetSceneQueue **要一次 onResume(后台→前台切换)才派发**。发送代码跨版本逐字节相同,不是回归。→ 发送后自动 `input keyevent KEYCODE_HOME` + `am start LauncherUI` 触发 onResume,消息 flush 到 status=2。 -- 落地 `_send_text_verified`(orchestrator):前台微信 → text_b64 发送 → 后台前台切换 → 轮询 status 直到 2。status=1 超时视为"已入队将送达"(不误报失败)。 +2. **z2.b 只入队不派发(设备机制,非代码 bug)**:`sendViaHighLevel` 的 `z2.b` 把消息入队(status=1 转圈),WeChat NetSceneQueue **要一次真实的 app 切换(切走→切回微信=onPause→onResume)才派发**。发送代码跨版本逐字节相同,不是回归。 +3. **flush 加固(2026-07-12)**:单次切换+被动等常卡几十秒~分钟。三个经验值(`_send_text_verified`):① 发送后 `sleep(4)` 让消息稳稳落库(切太快微信没登记这条)② 切换给足时间(`HOME` 背景 2.5s → `am start LauncherUI` 切回停 3s)③ **切回后停前台连查多轮,不立刻再切走**(否则打断正在进行的网络发送),没到 2 再来一轮。真机实测屏亮/灭都 **~15s flush 到 status=2**。 +- 落地 `_send_text_verified`(orchestrator):前台微信 → text_b64 发送 → sleep(4) → 切换 cycle + 前台停留轮询 → status 到 2。超时仍 1 视为"已入队将送达"(不误报失败)。 - 详见 memory `wechat-api-send-onresume-flush`。 +- **✅ 端到端闭环验证(2026-07-12)**:火星人私聊 → 自动回复送达;延墨/丁鹏群里 @我 → 自动回复送达。私聊 + 群@我两条链路全通。 - **待深挖(下次)**:onResume 到底改变了什么让队列派发(疑似后台暂停网络场景/长连接休眠)——要 hook NetSceneQueue/网络模块在前后台切换点打 log 拿根因。 ### (原)环节 5 · 发送回复带引用(原生气泡) diff --git a/wechat_plain/scripts/auto-reply/README.md b/wechat_plain/scripts/auto-reply/README.md index ca5dbda..cd93d1b 100644 --- a/wechat_plain/scripts/auto-reply/README.md +++ b/wechat_plain/scripts/auto-reply/README.md @@ -76,14 +76,20 @@ python wechat_reply_orchestrator.py --drain # 手动跑一轮编排 - 敏感词(钱/承诺/约时间/隐私)即使白名单也仍会拉回人工审批。 - 建议先审核模式跑几天,草稿质量稳了再放开。 -## 真机验证(2026-07-10) +## 真机验证 +**2026-07-10(各环节)** - inotify 触发读取 → 写队列 → 自动拉起编排器 ✅ - 真实猎头上下文 → 生成火星人口吻草稿「哈哈婷婷,我不是什么总,就是个写代码的,不负责招人这块哈」→ 进 /approvals ✅ - 审批页发送 → `send_text_via_hook` 广播到 filehelper(sent)、取消(cancelled) ✅ - 策略引擎 8/8、多账号自适应、生成失败静默不误发 ✅ - 单实例防重、杀 watcher 自动重启、纯 root(boot 上下文) selftest ✅ +**2026-07-12(端到端闭环,系统正式跑通)** 🎉 +- `/whitelist` 页开自动发总开关 + 把火星人加白名单 → **火星人私聊 → 自动回复送达** ✅ +- **延墨/丁鹏群里 @我 → 自动回复送达** ✅(私聊 + 群@我两条链路全通) +- 发送 flush 加固后真机:屏亮/屏灭(Dozing) 都 **~15s** 到 status=2 ✅ + ## 待收尾(都非阻塞,系统已可用) 1. **原生引用气泡 / 群@昵称前缀**:现发纯文本;微信原生引用(A11y 长按→引用)是环节5 增强。