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

Node.js Telegram+OpenAI代码在AWS Lambda中无操作退出的修复方法

问题根源

AWS Lambda是事件驱动的无服务器计算服务,它的执行逻辑是:触发事件后启动容器运行handler函数,函数执行完毕(return后)就会立即终止容器、释放资源。而你用的node-telegram-bot-api的polling: true模式是长期轮询Telegram服务器获取更新,需要进程持续运行——这和Lambda的短生命周期完全冲突,所以Lambda执行完handler就退出,没法等待用户输入。

解决方向

1. 改用Telegram Webhook替代Polling模式(推荐)

这是最适配Lambda的方案:让Telegram服务器主动把用户的消息POST到你的Lambda触发URL,而非代码主动轮询。

  • 操作步骤:
    • 给Lambda配置API Gateway,获取一个公开的HTTP触发URL
    • 修改代码,关闭polling,改用webhook模式:
      import { Configuration, OpenAIApi } from "openai";
      import { createRequire } from "module";
      const require = createRequire(import.meta.url);
      const TelegramBot = require("node-telegram-bot-api");
      
      const token = process.env.TELEGRAM_BOT_TOKEN;
      const configuration = new Configuration({
        apiKey: process.env.OPENAI_API_KEY,
      });
      const openai = new OpenAIApi(configuration);
      const bot = new TelegramBot(token);
      
      // 设置webhook,替换为你的API Gateway+Lambda触发地址
      bot.setWebHook('https://你的API网关地址/触发路径');
      
      export const handler = async (event, context) => {
        try {
          // 解析Telegram发来的消息更新
          const update = JSON.parse(event.body);
          // 让bot处理这个更新
          await bot.processUpdate(update);
      
          // 处理图片生成指令
          bot.onText(/\/image (.+)/, async (msg, match) => {
            const chatId = msg.chat.id;
            await bot.sendMessage(chatId, "你的图片正在生成,请稍等。");
            const response = await openai.createImage({
              prompt: match[1],
              n: 1,
              size: "1024x1024",
            });
            await bot.sendPhoto(chatId, response.data.data[0].url, { caption: match[1] });
          });
      
          return {
            statusCode: 200,
            body: JSON.stringify('处理完成')
          };
        } catch (err) {
          console.error(err);
          return {
            statusCode: 500,
            body: JSON.stringify('处理失败')
          };
        }
      };
      
    • 注意:每次部署Lambda后,建议重新设置webhook确保地址正确

2. 调整Lambda超时(不推荐)

Lambda最长支持15分钟超时,但即使设置最长超时,容器仍会在handler执行完毕后终止,且长期占用资源成本极高,不符合无服务器设计理念,不建议采用。

3. 额外注意事项

  • 把本地的.env变量迁移到Lambda控制台的环境变量中,Lambda运行时不会加载本地.env文件
  • 确保Lambda的IAM角色有足够网络权限:如果部署在私有子网,需配置NAT网关允许访问Telegram和OpenAI的外部API

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 14:05:38