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

Telegram JS机器人部署至Render时遇ETIMEDOUT错误求助

解决方案:Render部署Telegram Bot出现ETIMEDOUT超时错误

核心问题分析

错误ETIMEDOUT表明Render服务器无法在规定时间内连接到Telegram API,常见诱因包括:Render实例网络访问限制、Bot初始化顺序不合理、Polling模式适配性差、硬编码配置错误。


具体修复步骤

1. 改用Webhook模式替代默认Polling

Telegraf默认的Polling模式需要持续向Telegram API发起请求,在Render这类平台上容易因网络波动或资源限制超时。Webhook模式由Telegram主动推送更新到你的服务,稳定性更强:

修改index.js的启动代码:

// 替换原有的bot.launch();
bot.launch({
  webhook: {
    domain: process.env.WEBHOOK_URL, // Render分配的服务完整域名(如https://your-bot.onrender.com)
    port: process.env.PORT // Render自动分配的端口,必须读取该环境变量
  }
});

在Render的「Environment Variables」中添加两个变量:

  • BOT_TOKEN:你的Telegram Bot Token
  • WEBHOOK_URL:Render部署后提供的完整域名(需以https开头)

2. 修复Bot Token硬编码问题

将代码中硬编码的Token改为从环境变量读取,避免格式错误同时提升安全性:

const bot = new Telegraf(process.env.BOT_TOKEN);

3. 调整setMyCommands执行时机

将设置命令的代码放在bot.launch()的回调中,确保Bot初始化完成后再调用API:

bot.launch({ /* webhook配置 */ }).then(() => {
  bot.telegram.setMyCommands([
    { command: 'start', description: 'say hello' },
    { command: 'time', description: 'get times' },
    { command: 'lev', description: 'lev command' },
  ]);
});

4. 优化依赖安装与版本匹配

  • 确保package-lock.json已提交到代码仓库,Render会通过它精确安装依赖,避免版本不一致问题
  • 在Render的「Settings」中确认Node.js版本与package.json的engines字段(当前为20.12.2)完全匹配

5. 添加请求超时与错误捕获

给Telegraf配置请求超时,避免无限制等待:

const bot = new Telegraf(process.env.BOT_TOKEN, {
  telegram: {
    request: {
      timeout: 10000 // 设置10秒超时阈值
    }
  }
});

同时给setMyCommands添加错误捕获,方便排查问题:

bot.telegram.setMyCommands([/* 命令列表 */])
  .catch(err => console.error('设置命令失败:', err));

额外注意事项

  • Render免费实例会在15分钟无请求后休眠,若需保持在线,确保keep_alive.js能定时触发请求唤醒实例
  • 验证Telegram Bot状态:可在本地通过调用https://api.telegram.org/bot<你的Token>/getMe确认Token有效性及Bot是否正常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 06:05:12