You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js Telegram聊天机器人部署Heroku后运行1分钟崩溃问题排查

核心故障原因

你遇到的1分钟崩溃问题90%是Heroku Web Dyno的端口绑定规则导致的:
Heroku的Web类型实例要求服务必须在启动后60秒内监听平台动态分配的PORT环境变量,如果超时未绑定端口,平台会判定服务启动失败,主动杀死进程,刚好对应你前1分钟正常、后续崩溃的表现。
你代码中虽然引入了express,但是完全没有启动HTTP服务监听端口的逻辑,自然无法通过平台的健康检查。


排查思路

  • 执行heroku logs --tail实时查看崩溃日志,确认是否出现Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch报错,这是端口未绑定的典型错误标识。
  • 检查当前dyno类型,如果是Web类型必须满足端口监听要求,如果不想启动HTTP服务,可以将dyno切换为Worker类型,同时在项目根目录新增Procfile文件,内容为worker: node app.js。
  • 排查Telegram bot polling连接稳定性,确认是否因为网络波动导致polling断开后没有自动重连。

修复方案

  1. 补全端口监听逻辑,在你的代码末尾添加如下内容:
const PORT = process.env.PORT || 8080
app.get('/', (req, res) => res.send('Bot is running'))
app.listen(PORT, () => console.log(`Service listening on port ${PORT}`))
  1. 移除Dockerfile中的敏感信息硬编码,不要把TOKEN直接写在Dockerfile里,登录Heroku后台进入应用设置页,在Config Vars板块配置TOKEN变量,平台会自动注入到运行环境中。
  2. (可选优化)生产环境建议将Telegram bot的polling模式替换为webhook模式,性能和稳定性都更好,也能避免免费dyno因为无入站请求休眠的问题。
  3. (可选)优化bot polling配置,增加自动重连逻辑,修改bot初始化代码为:
const bot = new telegramBot(process.env.TOKEN, { 
  polling: {
    autoStart: true,
    retryDelay: 3000
  }
})

内容的提问来源于stack exchange,提问作者Elguja Mtchedlidze

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 03:54:06