WeChat Auto Reply — 微信自动回复
个人微信没有官方发送接口,本 skill 用两条腿走路:
- 读:解密微信 4.x 本地数据库(含 WAL),拿到准实时的新消息。零第三方 pip 依赖。
- 发:Windows UI 自动化(激活窗口 → Ctrl+F 搜索 → 剪贴板粘贴 → Enter),零第三方 pip 依赖。
前置条件:Windows + 微信 4.x 已登录 + ~/.wechat-cli/ 下已有 config.json 与 all_keys.json
(由 wechat-cli 技能的密钥提取流程生成;微信重启/升级后密钥会过期,需重新提取)。
环境自检
PY="C:/Users/38710/.workbuddy/binaries/python/envs/default/Scripts/python.exe"
"$PY" scripts/wx_db.py probe # 库结构、表名映射、我的 wxid
"$PY" scripts/wx_db.py new --minutes 60 --format text # 最近 1 小时新消息
读不到或 HMAC 报错 → 密钥过期,先跑 wechat-cli 的密钥提取,再 --refresh。
首次配置(必做)
- 拷贝
assets/rules.example.json到~/.wechat-auto-reply/rules.json,编辑:
-whitelist:强烈建议先只写一两个测试会话(如"文件传输助手")
-blacklist:公众号/系统会话
-rules:关键词 → 固定话术;chats空表示对所有白名单会话生效 - 干跑一轮,确认匹配和回复文案:
"$PY" scripts/wx_reply_bot.py --once --dry-run
- 真发前,先用「文件传输助手」单独测一次发送链路:
"$PY" scripts/wx_send.py --to "文件传输助手" --text "测试"
发送后必须人工确认消息出现在正确的会话里。 微信搜索框 Enter 的选中项不保证是目标联系人,
曾实测把测试消息发进真实群聊。确认行为无误后再放开 whitelist。
日常使用
# 单轮处理(适合配合定时任务)
"$PY" scripts/wx_reply_bot.py --once
# 常驻轮询(默认 30 秒一轮)
"$PY" scripts/wx_reply_bot.py
# 单条发送(AI 生成回复后用这个发)
"$PY" scripts/wx_send.py --to "张三" --file reply.txt
状态存于 ~/.wechat-auto-reply/state.json(已处理消息去重、每会话冷却),
冷却 cooldown_seconds 默认 300 秒,防止同会话被规则刷屏。
AI 兜底工作流(关键词没接住的)
- bot 把未命中规则的消息写进
~/.wechat-auto-reply/pending.json - agent 读取 pending,结合上下文起草回复(语气自然、简短、不带"自动回复"字样除非用户要求)
- 把拟回复清单给用户过目(除非用户明确授权全自动),确认后逐条
wx_send.py --file发送 - 发送成功的从 pending 移除
安全红线(务必遵守)
- 发送有不可逆风险:消息发错会话无法撤回(2 分钟撤回窗口常常不够)。所以:
- 新规则/新目标先用 whitelist 收窄 + dry-run
- 每次发送默认带核验(
wx_send.py的_verify_send),收到未能确认消息去向的 WARN 时立即提醒用户打开微信核对 - 自动化会占用鼠标键盘约 3 秒:发送期间用户操作会互相干扰,批量发送时逐条间隔 ≥2 秒
- 不要把群聊默认放进 whitelist;群内回复极易扰民
- 群里被 @ 才回:在规则关键词里加
@你的昵称,或等 agent 在 AI 兜底里判断
深入资料(按需加载)
references/db-notes.md— 消息库结构、发送方向判定(real_sender_id==1 即本人)、WAL 解密合并、性能要点references/ui-automation.md— 窗口识别、前台锁破解、搜索的坑、参数速查、排查工具
脚本一览
| 脚本 | 用途 |
|---|---|
scripts/wx_db.py |
解密+读新消息/联系人;子命令 probe / contacts / new |
scripts/wx_send.py |
UI 自动化发送单条消息(带前台验证与发送后核验) |
scripts/wx_reply_bot.py |
轮询主循环:规则匹配 → 回复;未命中 → pending.json |
scripts/wx_screen.py |
无依赖截屏,排查 UI 自动化用 |