Appearance
WhatsApp Web session 登出后监听器永久死亡
问题
WhatsApp Web session 被登出(手机端断开、多设备冲突、会话超时等原因)后,gateway 的 WhatsApp 监听器永久停止,agent 对 WhatsApp 消息完全失盲。
即使通过以下操作也无法恢复:
- CLI 手动
openclaw pairing重新配对 - 等待自动重连
- 切换
defaultAccount
只有重启 gateway 才能恢复监听。
受影响版本:OpenClaw 2026.3.x 及以上
根本原因分析(社区深度排查)
问题是两个 bug 叠加导致的:
Bug 1:重连循环中使用了 break
WhatsApp 重连循环在 loggedOut === true 时直接 break 退出循环,没有重入路径。一次登出就杀死了整个 monitor 循环。之后即使 CLI relink 成功,监听循环也已经消失,无法重新触发。
Bug 2:状态可见性丢失
登出状态没有持久化到外部存储,重启后 gateway 以为连接健康(内存中的 loggedOut 状态丢失),重连循环认为无需重建,造成状态不一致。
核心问题类比:这就像把"手机断线了"和"用户主动退出账号"两件事用同一个分支处理,然后用 break 一刀切。
解决方案
立即恢复的临时方案:重启 gateway
bash
openclaw gateway restart
# 或者完整停止再启动
openclaw gateway stop && openclaw gateway start重启后需要重新配对(pairing):
bash
openclaw pairing # 按提示扫码重新配对 WhatsApp预防措施:设置监控告警
配置一个简单的健康检查,当 WhatsApp 连接断开超过 N 分钟时自动重启:
yaml
# 在 cron 中配置健康检查
# openclaw cron 示例:
schedule:
- cron: "*/10 * * * *"
command: |
openclaw status | grep -q "whatsapp.*connected" || openclaw gateway restart等待官方修复:该问题(#49305)需要将 break 改为带重连逻辑的状态机,区分"临时断连需要重试"和"需要重新授权"两种情况。
常见问题
Q: WhatsApp 多设备(Multi-Device)模式会更稳定吗?
A: 多设备模式(MD)下 session 持久性更强,手机离线时不会立即断连。但一旦 session 被强制登出(如账号被注销或在手机端手动退出),同样会触发此 bug。建议同时做好 gateway 监控。
Q: 配对后总是很快断开,有什么办法吗?
A: 确保 gateway 运行在低延迟网络环境中,避免 NAT 超时导致的 WebSocket 断连。可以通过 openclaw config set channels.whatsapp.keepaliveIntervalMs 20000 缩短 keepalive 间隔。