无模板部署Telegram Node.js Bot至Vercel遇504超时问题求助
解决Telegram Bot在Vercel部署的504超时问题
一、Vercel部署适配方案(基于node-telegram-bot-api)
Vercel的Serverless函数是事件驱动、短生命周期架构,默认的长轮询(getUpdates)模式会导致超时,必须切换为Webhook模式:
修改代码启用Webhook
替换长轮询初始化逻辑,绑定Vercel的API路由处理请求,示例代码:const TelegramBot = require('node-telegram-bot-api'); const token = process.env.TELEGRAM_BOT_TOKEN; // 禁用polling模式 const bot = new TelegramBot(token); // 通过环境变量传入Vercel项目域名 const webhookUrl = process.env.WEBHOOK_BASE_URL; bot.setWebHook(`${webhookUrl}/api/bot`); // Vercel API路由处理函数 module.exports = async (req, res) => { if (req.method === 'POST') { bot.processUpdate(req.body); res.status(200).send('OK'); } else { res.status(405).send('Method Not Allowed'); } };Vercel项目配置
- 在项目设置的「环境变量」中添加
TELEGRAM_BOT_TOKEN(你的Bot令牌)和WEBHOOK_BASE_URL(Vercel分配的项目域名,如https://your-bot.vercel.app) - 将上述代码保存为
api/bot.js或pages/api/bot.js,Vercel会自动识别为API端点
- 在项目设置的「环境变量」中添加
关键注意事项
- 绝对不能启用
polling: true,否则函数会因持续占用连接触发超时 - 在Vercel「Functions」设置中,将函数超时调至免费版最大值(10秒),确保请求处理在时限内完成
- 部署后可调用
https://api.telegram.org/bot<你的令牌>/getWebhookInfo验证Webhook状态
- 绝对不能启用
二、替代免费托管平台推荐(适配小型Bot)
如果Vercel的Serverless限制难以适配,可选择更适合长期运行服务的平台:
- Render:提供免费Web服务(非Serverless),支持Node.js,每月100小时运行时长,适配长轮询或Webhook模式
- Railway:免费层提供基础资源,支持Node.js部署,环境持久稳定,适合小型Bot长期运行
- Fly.io:免费层资源足够支撑小型Bot,支持容器化部署,配置简洁
- Heroku:免费版每月550小时运行时长,搭配自动休眠机制,可满足小型Bot需求
三、常见排查点
- 确认环境变量中的Bot令牌、Webhook URL配置正确,避免硬编码敏感信息
- 检查Vercel函数日志,定位超时环节(如是否为Telegram API请求超时)
- 确保Webhook URL可公开访问,无防火墙或Vercel路由规则阻断
内容的提问来源于stack exchange,提问作者Karavang
相关产品推荐
相关产品推荐

