OpenClaw Telegram API 网络连接失败问题排查

2026-02-19·4分钟阅读·912

今天早上我发现我的 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 失败。

解决方法:

  1. 将命令重命名为 export_session

更完善的修复: 更新到 OpenClaw v2026.2.18 后,该问题已通过 PR #18711 修复。Gateway 现在会在启动时验证命令名称,如果不符合规则会直接报错,避免配置错误导致运行时失败。


未解决的问题:IPv6 网络连接失败

sendChatActionsendMessage 的错误都是由于 IPv6 连接失败导致的。DNS 解析只返回 IPv6 地址,而 IPv6 连接立即失败(Cannot assign requested address / Network is unreachable)。

我尝试了以下方案:

  1. 修改 hosts 强制 IPv4

    dig api.telegram.org +short A
    # 将结果添加到 /etc/hosts
    
    • 部分改善,但没有彻底解决
    • sendMessage 仍然偶尔失败
  2. 设置环境变量

    export NODE_OPTIONS="--dns-result-order=ipv4first"
    
    • 未生效,systemd 服务没有读取该环境变量
  3. 禁用系统 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 状态 已禁用(临时方案)

建议

如果你遇到类似问题,可以按以下步骤尝试:

  1. 先检查 IPv6 连接是否正常(使用 curl -4curl -6
  2. 更新到最新的 OpenClaw 版本(v2026.2.18+ 已修复命令验证问题)
  3. 尝试修改 /etc/hosts 强制 IPv4
  4. 如果问题依然存在,考虑禁用系统 IPv6
  5. 关注上面的 issue,等待官方支持 DNS 解析优先级配置

参考链接

分享: