Files
AgentsMeeting/docs/WXBOT_ON_DEMAND_LOGIN.md
T
hmo 1febfd0cb5 feat: 莫荷微信按需登录——消除未登录忙循环请求腾讯的风控诱因
- init.js: DISABLE_AUTO_LOGIN=true 时不自动 bot.start(), 导出 start/stop/isRunning
- 新增 route/bot.js: POST /api/bot/login|logout, GET /api/bot/status (按需触发登录)
- login.js: bot 未运行时不展示残留二维码, 显示开始登录按钮
- wechat4u wechat.js: checkLogin 忙循环加 3s 间隔+指数退避 (原来毫秒级轰炸 login.wx.qq.com)
- puppet-wechat4u: logout 后不自动 start (原来登出即自动重登)
- 补丁脚本: deploy/linux/wxbot_on_demand_login_patch.py (可重放, 容器重建后一键恢复)
- 文档: docs/WXBOT_ON_DEMAND_LOGIN.md
- agents_health_check/self_todo_executor: 禁用 wxBotWebhook 自动重启 (重启=重登触发风控)
2026-08-14 20:39:55 +08:00

3.8 KiB
Raw Blame History

莫荷微信「按需登录」方案 (On-Demand Login)

2026-08-14 实施。目的:消除 wechat4u 因"未登录忙循环请求腾讯"导致的封号风险。

背景

2026-08-13 莫荷微信被微信风控("安全保护中,扫码登录受限"),限制至 2026-08-16 21:26。 根因分析:

  1. 自动重启导致频繁重登agents_health_check.py / self_todo_executor.py 检测登录异常就 docker restart wxBotWebhook → 重启=重登 → 08-08 单日 3 次 login → 触发风控。 (已修复:两处 fix_cmd 已置为 None,只告警不重启)
  2. 未登录时忙循环请求腾讯wechat4u 的 bot.start() 在容器启动时无条件执行 → checkLogin() 递归无间隔 → 毫秒级轰炸 login.wx.qq.com,即使没人扫码也持续数小时。 这是机器人特征,微信可识别。
  3. 登出后自动重登puppet-wechat4u 在 logout 事件里自动 wechat4u.start() → 循环重登。

解决方案:按需登录

核心:未触发登录 = 完全静默(零请求);点"开始登录"才请求腾讯。

行为 之前 现在
容器启动 自动 start,忙循环轮询 完全静默,等待 API 触发
空闲时网络请求 毫秒级轰炸腾讯 零请求strace 验证)
触发登录 POST /api/bot/login
登录窗口期轮询 忙循环(无间隔) 3s 间隔,10 次后指数退避至 30s
登出/停止 自动重登 回到静默,清空二维码

改动的容器文件

文件 改动
/app/src/wechaty/init.js DISABLE_AUTO_LOGIN=true 时不自动 start;导出 start/stop/isRunning
/app/main.js 解构新导出 + 传 isRunning
/app/src/route/bot.js 新增POST /api/bot/loginPOST /api/bot/logoutGET /api/bot/status
/app/src/route/index.js 注册 bot 路由 + 传 isRunning
/app/src/route/login.js bot 未运行时不展示二维码(显示"开始登录"按钮)
/app/node_modules/wechat4u/lib/wechat.js checkLogin 忙循环加 3s 间隔+指数退避
/app/node_modules/wechat4u/lib/util/request.js UA→Chrome/126 Windows、keep-alive、补全浏览器 headers
/app/node_modules/wechat4u/lib/util/global.js DeviceID 持久化(不再每次随机)
/app/node_modules/wechaty-puppet-wechat4u/.../puppet-wechat4u.js logout 后不自动 start
/app/.env DISABLE_AUTO_LOGIN=true

注:容器内所有改动均有 .bak / .orig 备份。 容器由 docker run 启动(无 compose),重建容器后需重新打补丁。

使用

触发登录

# 获取二维码 (触发登录流程)
curl -X POST "http://192.168.1.246:3001/api/bot/login?token=mowechat_fixed_token_001"

# 或浏览器打开 (显示"开始登录"按钮, 点击触发)
#   http://192.168.1.246:3001/login?token=mowechat_fixed_token_001

查询状态

curl "http://192.168.1.246:3001/api/bot/status?token=mowechat_fixed_token_001"
# → {"isLoggedIn":false,"loginUrl":"/login?token=..."}

登出回静默

curl -X POST "http://192.168.1.246:3001/api/bot/logout?token=mowechat_fixed_token_001"

重新打补丁(容器重建后)

# 在 246 上执行 (需要 docker 权限)
python3 /home/hmo/AgentsMeeting/deploy/linux/wxbot_on_demand_login_patch.py

脚本会:备份 → 改 10 处文件 → node --check 语法检查 → 重启容器 → 验证"等待触发登录"日志。

相关

  • dashboard 健康检查: http://192.168.1.246:5803 → 莫荷微信卡片 (二维码已按需显示)
  • 掉线通知: gateway/scripts/wechat_qr_notifier.py (cron 每 30 分钟)
  • 微信登录态监控: gateway/scripts/dashboard.py _augment_wechat_status()
  • 自动重启已禁用: agents_health_check.py + self_todo_executor.py (fix_cmd → None)