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

运行AWS Lambda Node.js函数实现Telegram Bot时无消息发送问题

Node.js AWS Lambda 无法发送Telegram消息排查方案

1. 修复异步操作处理逻辑

Node.js 环境下的 AWS Lambda 必须等待所有异步任务完成才会正常终止进程。如果代码中调用了异步方法却未正确等待,Lambda 会提前退出,导致消息请求未完成就中断。

错误示例(未等待异步操作):

const TelegramBot = require('telegram-bot-api');

exports.handler = (event, context) => {
  const api = new TelegramBot({
    token: process.env.TELEGRAM_BOT_TOKEN
  });

  api.sendMessage({
    chat_id: process.env.TELEGRAM_CHAT_ID,
    text: 'Test message'
  });
};

修正方案(使用async/await等待Promise完成):

const TelegramBot = require('telegram-bot-api');

exports.handler = async (event, context) => {
  const api = new TelegramBot({
    token: process.env.TELEGRAM_BOT_TOKEN,
    polling: false // Lambda为事件驱动,无需长轮询
  });

  try {
    await api.sendMessage({
      chat_id: parseInt(process.env.TELEGRAM_CHAT_ID, 10), // 确保chat_id为数字类型
      text: 'Test message'
    });
    return { statusCode: 200, body: 'Message sent successfully' };
  } catch (error) {
    console.error('Send message failed:', error);
    return { statusCode: 500, body: 'Failed to send message' };
  }
};

同时需将Lambda超时时间设置为至少5秒,避免请求未完成就被终止。

2. 验证依赖包配置与参数

  • 初始化telegram-bot-api时必须显式关闭polling(Lambda无需持续轮询Telegram服务器)
  • 确认chat_id为数字类型:若环境变量存储的是字符串,需用parseInt转换
  • 检查sendMessage的参数拼写(如chat_id不要写成chatId)

3. 确认环境变量读取正确性

在代码开头添加日志,验证环境变量是否正确加载:

console.log('Bot Token:', process.env.TELEGRAM_BOT_TOKEN ? 'Configured' : 'Missing');
console.log('Chat ID:', process.env.TELEGRAM_CHAT_ID ? 'Configured' : 'Missing');

通过AWS CloudWatch日志查看输出,确认变量值无误。

4. 排查CloudWatch日志

即使没有显性报错,Lambda执行日志中可能包含未捕获的异常或Telegram API返回的错误信息:

  1. 进入AWS控制台的CloudWatch服务
  2. 找到对应Lambda函数的日志组
  3. 查看执行时的日志详情,定位请求失败的具体原因

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 03:15:32