常见报错 · 小白

Telegram Bot 提示 chat not found 怎么解决

chat not found 一般是 Bot 没进群、chat_id 写错或用户没和 Bot 私聊过,按顺序排查。

  • Telegram
  • Bot
  • 排错
更新于 2026-07-26

一句话结论

先核对目标聊天是否已与 Bot 建立联系、真实 chat_id 和发消息权限,再用环境变量发最小测试。

适用场景

  • Telegram 推送一直失败
  • 群里 Bot 不回话
  • 面板里 chat_id 看着对,还是报错

常见现象

  • API 返回 Bad Request: chat not found
  • 面板里发送测试消息一直失败
  • Webhook 日志里 chat_id 不存在

原因解释

  • Bot 没被邀请到目标群或频道
  • 私聊/群场景的数字 chat_id 写错、带空格或缺少负号;公开频道也可按 Bot API 字段使用 `@channelusername`
  • 用户没主动和 Bot 私聊过,Bot 无法主动发消息
  • Bot 在频道里没有发消息权限

解决步骤

  1. 把 Bot 加到群并只授予完成任务所需的发消息权限;不需要的管理员权限不要开启
  2. 先用 `getWebhookInfo` 确认是否配置 webhook:未配置时可从 `getUpdates` 读取 update;已配置时应查看 webhook 投递日志,不要为取 ID 贸然删除生产 webhook
  3. 私聊场景下让用户先发一条 /start 给 Bot
  4. 把 chat_id 重新填进面板,再发一次测试消息

可复制命令

# 只在真人本机执行;关闭 shell xtrace,不要把 Token、完整 JSON、命令截图或日志发给 Agent
set +x
export TELEGRAM_BOT_TOKEN='<REDACTED>'
api="https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}"

# Token URL 通过 curl 标准输入传入,终端只输出最小 webhook 状态,不显示 webhook URL
printf 'url = "%s/getWebhookInfo"\n' "$api" | curl --fail --silent --show-error --config - | \
  jq '{ok, configured: ((.result.url // "") | length > 0), pending_update_count: (.result.pending_update_count // 0), has_last_error: (.result.last_error_date != null)}'

# 仅在未配置 webhook 时读取 updates;只输出 chat.id/type,不输出姓名、用户名或消息正文
printf 'url = "%s/getUpdates"\n' "$api" | curl --fail --silent --show-error --config - | \
  jq '{ok, chats: [.result[]? | (.message // .edited_message // .channel_post // .edited_channel_post // .callback_query.message // {}) | .chat? | select(.) | {id, type}] | unique}'

unset api TELEGRAM_BOT_TOKEN

仍然不行怎么办

  • 还是失败的话,换一个新群再试,排除是不是历史群被限制
  • 仍无法定位时,只发送严格脱敏后的必要日志片段;不要发送 Bot Token、Cookie、账号信息或整份环境文件

小白先准备什么

  1. 在 @BotFather 创建好 Bot,拿到 Token
  2. 确认 Bot 已经被拉进目标群,或者用户已经私聊过 Bot
  3. 准备好 curl 或 Postman,能手动调 Telegram API
  4. 知道自己要发的是群消息还是私聊消息

验收标准

  • 未配置 webhook 时能从 getUpdates,已配置时能从 webhook 投递日志找到正确 chat_id
  • 用 sendMessage 手动发一条消息能成功
  • 面板里的测试消息功能正常
  • 群消息和私聊消息都能正常收发

可复制排查提示词

排查不需要提供 Bot Token;chat_id 也只描述格式,日志必须先严格脱敏:

我的 Telegram Bot 报 chat not found 错误。

Bot Token:已配置;排查时不要索取任何值或片段
目标场景:<群消息/私聊/公开频道>
webhook:<已配置/未配置/不确定>
chat_id:<只描述格式,不粘贴真实值>
必要错误片段:<删除 Token、Cookie、账号和私有信息,敏感值统一写 <REDACTED>>

请帮我:
1. 确认 chat_id 格式是否符合目标场景;公开频道是否可用 @channelusername
2. 先检查 getWebhookInfo;未配置 webhook 才使用 getUpdates,已配置则查看投递日志
3. 给出只引用环境变量的 sendMessage 测试命令
4. 如果是权限问题,告诉我最小需要开启什么权限

常见误区

  • 误区:chat_id 只有一种格式 → 私聊/群通常使用数字 ID,群常为负数;公开频道可按 Bot API 的 chat_id 字段使用 `@channelusername`
  • 误区:任何时候都能用 getUpdates → 配置 webhook 时不能同时用 getUpdates,应查看 webhook 投递日志,不要贸然删除生产 webhook
  • 误区:Bot 创建好就能发消息 → 用户必须先 /start 过,Bot 才能主动私聊
  • 误区:把 Bot 加到群就行 → 还需要给 Bot 发消息权限(管理员或允许发消息)
  • 误区:chat_id 永远不变 → 群升级为超级群后 chat_id 会变,需要重新获取

相关问题

还卡着?

仅把删除凭证、客户数据和环境变量值后的必要截图、日志片段、需求说明或当前页面链接发到 zhemuy@gmail.com。