问题描述
配置了 Telegram 频道后,OpenClaw 的 Telegram 机器人无法接收消息或不回复用户。常见的表现包括:
用户在 Telegram 中向机器人发送消息后完全没有反应,OpenClaw 日志中看不到任何接收到消息的记录:
[openclaw:telegram] Bot started. Listening for messages...
日志显示启动成功但之后没有任何消息处理记录。
或者日志中出现错误:
[openclaw:telegram] Error: 409 Conflict: terminated by other getUpdates request
又或者:
[openclaw:telegram] GrammyError: Call to 'getMe' failed! (401: Unauthorized)
OpenClaw 的 Telegram 频道基于 grammY 框架构建,通过 Telegram Bot API 与 Telegram 服务器通信。
诊断步骤
检查 Bot Token 是否有效
首先验证你在配置中使用的 Bot Token 是否正确且有效:
curl https://api.telegram.org/bot<YOUR_BOT_TOKEN>/getMe
正常响应应该返回机器人的基本信息:
{
"ok": true,
"result": {
"id": 123456789,
"is_bot": true,
"first_name": "MyBot",
"username": "my_openclaw_bot"
}
}
如果返回 {"ok":false,"error_code":401,"description":"Unauthorized"},说明 Token 无效。
检查 Webhook 冲突
Telegram Bot API 提供两种接收消息的方式:轮询(polling)和 Webhook。如果之前设置过 Webhook 但现在 OpenClaw 使用的是轮询方式,Webhook 的存在会导致轮询无法接收消息。
查看当前 Webhook 状态:
curl https://api.telegram.org/bot<YOUR_BOT_TOKEN>/getWebhookInfo
如果 url 字段不为空,说明存在 Webhook 配置。
检查 OpenClaw 配置
查看 ~/.openclaw/openclaw.json 中 Telegram 频道的配置:
cat ~/.openclaw/openclaw.json | grep -A 10 telegram
确认 botToken 字段存在且不为空。
解决方案
问题一:Bot Token 无效或过期
如果 Token 无效,需要重新获取:
- 在 Telegram 中找到 @BotFather
- 发送
/mybots查看你的机器人列表 - 选择对应的机器人,点击「API Token」
- 如果需要重置 Token,点击「Revoke current token」生成新的
将新 Token 更新到配置文件:
{
"channels": {
"telegram": {
"botToken": "123456789:ABCdefGHIjklMNOpqrsTUVwxyz"
}
}
}
然后重启 OpenClaw:
openclaw restart
问题二:Webhook 冲突(409 错误)
409 Conflict 错误通常表示有另一个进程也在使用同一个 Bot Token 调用 getUpdates,或者存在遗留的 Webhook 设置。
清除 Webhook:
curl https://api.telegram.org/bot<YOUR_BOT_TOKEN>/deleteWebhook
确保没有其他程序在使用同一个 Bot Token。检查是否有重复的 OpenClaw 实例在运行:
ps aux | grep openclaw
如果发现多个实例,停止多余的进程。
问题三:机器人权限未配置
如果机器人在群组中无法接收消息,可能是因为未开启群组隐私模式:
- 在 BotFather 中发送
/mybots - 选择机器人 → Bot Settings → Group Privacy
- 将 Privacy mode 设置为 Disabled
这允许机器人接收群组中的所有消息,而不仅仅是以 / 开头的命令消息。
问题四:grammY 框架错误
如果日志中出现 grammY 相关的异常,启用详细日志进行排查:
DEBUG=openclaw:telegram*,grammy* openclaw start
常见的 grammY 错误及处理方式:
-
ETELEGRAM: 429 Too Many Requests:发送消息过于频繁,被 Telegram 限流。OpenClaw 默认配置了速率限制,但如果你修改过配置,检查限流设置。 -
EFATAL: Polling stopped:轮询因致命错误停止。查看完整错误堆栈,通常是网络问题或 Token 失效。 -
Error: getaddrinfo ENOTFOUND api.telegram.org:DNS 解析失败,检查网络连接和 DNS 配置。
问题五:网络访问受限
在某些地区,Telegram API 可能无法直接访问。配置代理:
{
"channels": {
"telegram": {
"botToken": "YOUR_TOKEN",
"proxy": {
"url": "socks5://127.0.0.1:1080"
}
}
}
}
OpenClaw 的 Telegram 频道支持 HTTP 和 SOCKS5 代理。
验证修复
修复后验证机器人工作正常:
openclaw start
然后在 Telegram 中向机器人发送一条测试消息,观察 OpenClaw 的日志输出中是否出现消息接收和处理记录。日志中应该能看到类似以下的输出:
[openclaw:telegram] Received message from user 123456: "你好"
[openclaw:gateway] Processing message for channel telegram, user 123456
[openclaw:telegram] Sent reply to user 123456
如果一切正常,机器人就会在 Telegram 中回复消息。