OpenClaw 连接 Telegram 报错排查全记录

问题背景

在 Mac 本地运行 OpenClaw,配置了 Telegram Bot 作为交互渠道,但启动后日志持续报错:

[telegram] webhook cleanup failed: Network request for 'deleteWebhook' failed!
[telegram] retrying in 30s.

排查过程

第一步:确认网络是否能访问 Telegram

curl -v https://api.telegram.org

返回 302 Found,说明 Mac 本身网络完全正常,可以访问 Telegram。

第二步:验证 Bot Token 是否有效

curl https://api.telegram.org/bot<TOKEN>/getMe

返回 {"ok":true,...},Token 正确无误。

第三步:验证 Node.js 网络层

node -e "fetch('https://api.telegram.org').then(r => console.log('OK', r.status)).catch(e => console.log('FAIL', e.message))"

返回 OK 200,Node.js 网络层也没有问题。

第四步:运行诊断命令

openclaw doctor --fix

发现两个问题:

  1. Gateway 服务入口文件错误:更新后 LaunchAgent 仍指向旧的 entry.js,而非 index.js
  2. Telegram 状态failed (unknown) - fetch failed

第五步:查看 Telegram 配置

openclaw config get channels.telegram

发现配置中有这一行:

"proxy": "socks5://127.0.0.1:7891"

openclaw 被强制走本地 7891 端口的 SOCKS5 代理。

第六步:确认代理端口是否存活

nc -zv 127.0.0.1 7891

返回 Connection refused,代理端口根本没有在监听。


根本原因

机器部署在中国大陆,必须通过代理才能访问 Telegram。

配置中指定的代理端口 7891 来自 Clash 系列软件,但实际使用的是 LetsVPN。LetsVPN 是全局 VPN,不暴露本地 SOCKS5 端口,导致 openclaw 无法通过代理建立连接。


解决方案

扫描本地所有常见代理端口:

for port in 1080 1087 1086 7890 7891 8080 8118 10808 10809; do
  nc -zv 127.0.0.1 $port 2>&1 | grep -v refused
done

发现 7890 端口可用,更新配置:

openclaw config set channels.telegram.proxy "socks5://127.0.0.1:7890"

重启 gateway 后,Telegram 连接恢复正常。


总结

排查步骤 工具 结论
系统网络 curl ✅ 正常
Bot Token curl /getMe ✅ 正确
Node.js 网络 node fetch ✅ 正常
代理端口 7891 nc -zv ❌ 未监听
代理端口 7890 nc -zv ✅ 可用

核心经验:

  • curl 能通不代表 Node.js 应用能通,要单独验证
  • 国内部署必须确保代理软件的本地端口与 openclaw 配置一致
  • LetsVPN 等全局 VPN 不暴露本地 SOCKS5 端口,推荐使用 ClashX / Clash Verge 等支持本地端口的代理软件
  • nc -zv 127.0.0.1 <端口> 快速验证端口是否存活