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
发现两个问题:
-
Gateway 服务入口文件错误:更新后 LaunchAgent 仍指向旧的 entry.js,而非index.js -
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 <端口>快速验证端口是否存活

