记一次 Telegram Bot 不回复的调试过程

2026年04月19日1 次阅读0 人喜欢
Telegram调试踩坑Bot配置HermesOpenClawMCP
所属合集

记一次 Telegram Bot 不回复的调试过程

时间: 2026年4月19日
问题: Telegram Bot 配置后无法正常回复消息
Bot Token: 8529651472:***
Bot 用户名: @NNNNzs_hermes_bot

问题描述

配置了 Hermes Agent 的 Telegram Bot,但是在 Telegram 里问问题后没有正常回复。

调试过程

第一步:检查配置文件

发现 /root/.hermes/config.yaml 中 Telegram 配置缺少 token 字段:

yaml 复制代码
telegram:
  proxy_url: socks5://127.0.0.1:7891  # 有代理配置
  channel_prompts: {}

问题1:配置中没有 Bot Token

第二步:修复配置

添加了 Token:

yaml 复制代码
telegram:
  token: 8529651472:***
  proxy_url: socks5://127.0.0.1:7891
  channel_prompts: {}

重启 Hermes 服务使配置生效。

第三步:验证 Token 有效性

bash 复制代码
curl -s "https://api.telegram.org/bot8529651472:***/getMe"

返回结果:

json 复制代码
{
  "ok": true,
  "result": {
    "id": 8529651472,
    "is_bot": true,
    "first_name": "hermes",
    "username": "NNNNzs_hermes_bot"
  }
}

Token 有效,Bot 名称是 "hermes"。

第四步:检查日志

查看 /root/.hermes/logs/errors.log,发现大量错误:

复制代码
2026-04-19 15:17:23,957 WARNING gateway.platforms.telegram: [Telegram] Telegram polling conflict (1/3), will retry in 10s. 
Error: Conflict: terminated by other getUpdates request; make sure that only one bot instance is running

问题2:Telegram 轮询冲突

第五步:排查冲突原因

检查运行中的进程:

bash 复制代码
ps aux | grep -E "hermes|openclaw"

发现有两个服务在运行:

  1. Hermes Agent - PID 1804069
  2. OpenClaw Gateway - PID 1486016 (后来自动重启为 1807427)

查看 OpenClaw 配置 /root/.openclaw/openclaw.json,发现:

json 复制代码
"telegram": {
  "enabled": true,
  "dmPolicy": "pairing",
  "botToken": "7616633106:***",
  "proxy": "http://127.0.0.1:7890"
}

OpenClaw 使用的 token 看起来不同(7616633106),但日志显示有冲突。

第六步:分析冲突原理

Telegram Bot API 限制:

  • 同一个 Bot Token 只能有一个活跃的轮询连接
  • 当两个程序同时调用 getUpdates API 时,Telegram 会返回 409 Conflict 错误

可能的冲突原因:

  1. OpenClaw 配置中隐藏的 token 实际上与 Hermes 相同
  2. 有其他进程也在使用这个 token
  3. 代理设置导致连接复用冲突

第七步:查看完整日志

/root/.hermes/logs/gateway.log 可以看到:

复制代码
2026-04-19 15:24:38,033 INFO gateway.platforms.telegram: [Telegram] Proxy detected; passing explicitly to HTTPXRequest: socks5://127.0.0.1:7891
2026-04-19 15:24:40,462 INFO gateway.platforms.telegram: [Telegram] Telegram menu: 100 commands registered, 26 hidden (over 100 limit). Use /commands for full list.
2026-04-19 15:24:40,465 INFO gateway.platforms.telegram: [Telegram] Connected to Telegram (polling mode)
2026-04-19 15:25:12,083 WARNING gateway.platforms.telegram: [Telegram] Telegram polling conflict (1/3), will retry in 10s. Error: Conflict: terminated by other getUpdates request; make sure that only one bot instance is running
2026-04-19 15:25:17,372 INFO gateway.platforms.telegram: [Telegram] Disconnected from Telegram

虽然 Hermes 显示已连接,但随后因为冲突而断开。

技术要点

1. Bot Token 格式

Bot Token 格式:BOT_ID:API_KEY

  • 8529651472 是 Bot ID(不是 chat_id)
  • chat_id 是用户或群的 ID,用于发送消息

2. Telegram Bot 代理配置

Hermes 使用 socks5:// 代理:

yaml 复制代码
proxy_url: socks5://127.0.0.1:7891

OpenClaw 使用 http:// 代理:

json 复制代码
"proxy": "http://127.0.0.1:7890"

注意端口不同(7891 vs 7890)。

3. 轮询 vs Webhook

Polling(轮询):

  • 客户端主动调用 getUpdates API
  • 适合个人项目、开发测试
  • 不需要公网 IP
  • 有单连接限制

Webhook:

  • Telegram 主动推送消息到指定 URL
  • 适合生产环境
  • 需要公网 IP + HTTPS 证书
  • 支持多实例负载均衡

4. 进程管理

OpenClaw Gateway 通过 systemd user service 管理:

bash 复制代码
systemctl --user stop openclaw-gateway
systemctl --user status openclaw-gateway

解决方案

有两种选择:

方案1:停止 OpenClaw 的 Telegram(推荐)

只使用 Hermes 的 Telegram Bot,因为已经配置好了。

bash 复制代码
systemctl --user stop openclaw-gateway

方案2:禁用 Hermes 的 Telegram

继续使用 OpenClaw 的 Telegram,移除 Hermes 的 token 配置。

经验总结

  1. 配置检查要全面 - 不仅检查 Hermes 的配置,还要检查是否有其他服务在运行
  2. 日志是关键 - 轮询冲突的错误信息很明确,直接指向问题根源
  3. 进程管理很重要 - 多个自动化平台同时运行容易产生冲突
  4. 理解 API 限制 - Telegram Bot 的单连接限制是设计特性,不是 bug

相关命令

bash 复制代码
# 测试 Bot Token
curl -s "https://api.telegram.org/bot<TOKEN>/getMe"

# 查看运行中的 Hermes 进程
ps aux | grep hermes

# 查看日志
tail -f /root/.hermes/logs/errors.log
tail -f /root/.hermes/logs/gateway.log

# 停止 OpenClaw
systemctl --user stop openclaw-gateway

# 重启 Hermes
pkill -f hermes-agent  # 会自动重启

后续

需要决定使用哪个平台的 Telegram Bot:

  • Hermes Agent:功能完整,已配置好
  • OpenClaw:旧系统,可能还有其他依赖

建议统一到一个平台,避免未来再出现类似的冲突问题。

加载评论中...