opencode-telegram-bot 无响应?可能是被 Telegram 限流了

opencode-telegram-bot 无响应?可能是被 Telegram 限流了

opencode-telegram-bot 把 opencode 接入 Telegram 是个很方便的方案(详见 上一篇:用 Telegram 远程操控本地 OpenCode:opencode-telegram-bot 实战指南),但最近踩了个坑——bot 突然完全无响应,进程明明在跑,消息就是没有回应。

问题现象

Bot 无响应的表现有两种:

  1. 发消息没有任何回应,完全静默
  2. Bot 返回 “🔴 已停止事件流,正在发送中止信号…等待代理停止。",然后再无响应

第二种情况容易误导人,以为是 opencode 进程本身出了问题,实际上根因是一样的。

一切看起来都正常:

ps aux | grep -E "opencode|telegram" | grep -v grep

输出显示三个进程都在运行,opencode serve 也在监听 127.0.0.1:4096。但 Telegram 里发消息,毫无反应。

排查过程

第一步:确认端口

lsof -i -P -n | grep opencode

opencode serve 正常监听,没问题。

第二步:查 bot 的网络连接

lsof -i -P -n -p <telegram-bot-pid>

这一步发现了关键线索:bot 进程没有任何活跃的 TCP 连接。进程存在,但根本没有连上 Telegram API——也就是说,bot 虽然活着,但处于 " 失联 " 状态。

第三步:看日志

日志在 ~/Library/Logs/opencode-telegram-bot.log,翻出来一看,全是 429:

[ERROR] [Sessions] Failed to send loading message:
GrammyError: Call to 'sendMessage' failed! (429: Too Many Requests: retry after 26965)

26965 秒,约 7.5 小时。

根本原因

前一天切换 session 时,bot 短时间内发送了大量消息,触发了 Telegram 的频率限制。被封禁后,bot 尝试重连都会失败,最终陷入静默状态。

事件时间线大概是这样:

时间事件
16:18切换 session,大量消息触发 429,retry after 26965 秒
16:23Compact 操作失败
23:39仍被限流(retry after 455 秒),bot 崩溃
次日 07:41Bot 重启,但网络请求依然失败
08:24排查时确认 bot 静默,无任何新日志

解决方法

等限流期过了,重启 bot 就好:

# 干掉当前进程
kill <bot-pid> <npm-pid>

# 重新启动
npm exec @grinev/opencode-telegram-bot start

预防建议

  • 避免频繁切换 session,每次切换都可能触发多条消息并发发送
  • bot 无响应时,先查日志,看有没有 429 错误,别急着重装或换配置
  • 日志位置:~/Library/Logs/opencode-telegram-bot.log

(转载本站文章请注明作者和出处乱世浮生,请勿用于任何商业用途)

comments powered by Disqus