如何在AWS Lambda上运行Telegraf机器人?求正确实现方法
在AWS Lambda上部署Telegraf机器人的正确方案
你的代码核心问题是误用了Telegraf默认的长轮询模式——Lambda是无服务器事件驱动函数,每次触发后会快速结束,无法维持长连接监听Telegram服务器。必须切换到Webhook模式适配Lambda的运行逻辑,以下是完整部署步骤:
一、修正代码适配Lambda
替换你现有的handler代码,改为Webhook模式的实现:
const { Telegraf } = require("telegraf"); // 从Lambda环境变量读取Bot Token,避免硬编码敏感信息 const bot = new Telegraf(process.env.TELEGRAM_BOT_TOKEN); // 定义机器人业务逻辑,和本地代码一致 bot.start((ctx) => ctx.reply("👍")); // 可添加其他命令,比如: // bot.command("hello", (ctx) => ctx.reply("Hello from Lambda!")); // Lambda事件处理函数 exports.handler = async (event) => { try { // 将Lambda收到的Webhook请求传递给Telegraf处理 await bot.handleUpdate(JSON.parse(event.body)); return { statusCode: 200, body: JSON.stringify("OK"), }; } catch (error) { console.error("处理请求失败:", error); return { statusCode: 500, body: JSON.stringify("Internal Server Error"), }; } }; // 本地开发时可启用长轮询,部署到Lambda请注释或删除 // if (process.env.NODE_ENV === "development") { // bot.launch(); // console.log("本地机器人已启动"); // }
二、配置Lambda基础设置
- 环境变量:在Lambda控制台的「配置」→「环境变量」中添加
TELEGRAM_BOT_TOKEN,值为你的Telegram机器人Token - 运行时:选择Node.js 18.x或更高版本(Telegraf v4+需要Node.js 16+)
- 打包上传:本地执行
npm install telegraf,将代码文件和node_modules文件夹一起压缩为ZIP包,上传到Lambda函数
三、配置API网关触发器
Lambda本身无法直接接收外部HTTP请求,需要配置API网关:
- 在Lambda控制台添加「API网关」触发器
- 选择「HTTP API」类型,安全设置按需选择(可先选「打开」测试)
- 创建后复制生成的API网关URL(格式类似
https://xxxxxx.execute-api.<区域>.amazonaws.com)
四、设置Telegram Webhook
告诉Telegram服务器将用户消息发送到你的API网关地址,执行以下curl命令(替换占位符):
curl -X POST https://api.telegram.org/bot<你的Bot Token>/setWebhook \ -H "Content-Type: application/json" \ -d '{"url": "<你的API网关URL>"}'
执行成功后,Telegram会返回{"ok":true,"result":true,"description":"Webhook was set"}的响应
五、测试验证
给你的机器人发送/start命令,机器人应该回复「👍」,同时可以在Lambda控制台的「监控」→「日志」中查看请求处理记录
内容的提问来源于stack exchange,提问作者Valencia
相关产品推荐
相关产品推荐

