OpenClaw Telegram API 网络连接失败问题排查
今天早上我发现我的 Telegram Bot(傻妞)无法正常工作,出现大量错误。经过几天的排查,定位了问题原因并尝试了多种解决方案。
问题现象
通过 journalctl 查看日志,发现 Telegram Bot 出现以下错误:
[telegram] sendChatAction failed: Network request for 'sendChatAction' failed!
[telegram] sendMessage failed: Network request for 'sendMessage' failed!
[telegram] setMyCommands failed: Call to 'setMyCommands' failed! (400: Bad Request: BOT_COMMAND_INVALID)
错误统计:
sendChatAction失败:超过 50 次,每 6 秒一次sendMessage失败:约 10 次setMyCommands失败:BOT_COMMAND_INVALID(v2026.2.16)
这些错误导致 Telegram Bot 无法正常回复消息。
排查过程
1. 检查 IPv6 连接
日志中显示:
[telegram] autoSelectFamily=true (default-node22)
手动测试发现:
# IPv4 连接正常
curl -4 -v https://api.telegram.org/bot<TOKEN>/getMe
# IPv6 连接失败
curl -6 -v https://api.telegram.org/bot<TOKEN>/getMe
错误信息:
* Host api.telegram.org:443 was resolved.
* IPv6: 2001:67c:4e8:f004::9
* IPv4: (none)
* Trying [2001:67c:4e8:f004::9]:443...
* Immediate connect fail for 2001:67c:4e8:f004::9: Cannot assign requested address
* Failed to connect to api.telegram.org port 443 after 1 ms: Couldn't connect to server
根本原因:
Node.js 22+ 默认使用 autoSelectFamily=true,优先尝试 IPv6。在我的网络环境中:
- DNS 解析只返回了 IPv6 地址(
IPv4: (none)) - IPv6 连接立即失败(
Cannot assign requested address/Network is unreachable) - 导致 Telegram API 请求无法完成
2. 检查命令配置
setMyCommands 错误的日志信息很明确:BOT_COMMAND_INVALID
原因:
Telegram Bot 命令的命名规则非常严格,只允许 0-9, a-z, _。我配置的命令名 export-session 包含连字符,违反了规则。
解决方案尝试
已解决的问题:setMyCommands 错误(v2026.2.18 已修复)
在 OpenClaw v2026.2.16 版本中,由于命令名 export-session 包含连字符,导致 setMyCommands 失败。
解决方法:
- 将命令重命名为
export_session
更完善的修复: 更新到 OpenClaw v2026.2.18 后,该问题已通过 PR #18711 修复。Gateway 现在会在启动时验证命令名称,如果不符合规则会直接报错,避免配置错误导致运行时失败。
未解决的问题:IPv6 网络连接失败
sendChatAction 和 sendMessage 的错误都是由于 IPv6 连接失败导致的。DNS 解析只返回 IPv6 地址,而 IPv6 连接立即失败(Cannot assign requested address / Network is unreachable)。
我尝试了以下方案:
-
修改 hosts 强制 IPv4
dig api.telegram.org +short A # 将结果添加到 /etc/hosts- 部分改善,但没有彻底解决
sendMessage仍然偶尔失败
-
设置环境变量
export NODE_OPTIONS="--dns-result-order=ipv4first"- 未生效,systemd 服务没有读取该环境变量
-
禁用系统 IPv6
sudo sysctl -w net.ipv6.conf.all.disable_ipv6=1- ✅ 完全解决了问题
- ❌ 但影响范围较大,不是理想的解决方案
我已经向 OpenClaw 提交了 issue,建议添加 DNS 解析优先级配置选项。
Issue 链接:
环境信息
| 组件 | 版本/配置 |
| OpenClaw | v2026.2.16(初始)→ v2026.2.18(当前) |
| Node.js | v24.13.1 |
| 操作系统 | Ubuntu 24.04 |
| 内核版本 | Linux 6.8.0-71-generic |
| 架构 | x86_64 |
| IPv6 状态 | 已禁用(临时方案) |
建议
如果你遇到类似问题,可以按以下步骤尝试:
- 先检查 IPv6 连接是否正常(使用
curl -4和curl -6) - 更新到最新的 OpenClaw 版本(v2026.2.18+ 已修复命令验证问题)
- 尝试修改
/etc/hosts强制 IPv4 - 如果问题依然存在,考虑禁用系统 IPv6
- 关注上面的 issue,等待官方支持 DNS 解析优先级配置
参考链接
- Node.js DNS 解析文档
- Telegram Bot API 文档
- OpenClaw 官方文档
- PR #18711 - 命令验证修复
- #20750 [Bug]: Telegram API Network is unreachable - IPv6 网络超时问题