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

AWS Lambda中Telegram API间歇性报消息文本为空错误排查求助

问题分析与解决方案

核心问题:随机消息函数存在逻辑错误

你的getRandomMessage函数索引计算逻辑会偶尔返回undefined,这就是Telegram返回400错误(消息文本为空)的直接原因:

const getRandomMessage = (arr) => {
  // 错误:Math.random() * arr.length 可能为0,减1后得到-1,Math.floor(-1) = -1
  return arr[Math.floor(Math.random() * arr.length - 1)];
};

当Math.random()返回0时,计算结果为0 * 5 -1 = -1,数组索引-1对应的值是undefined,传给bot.sendMessage就会触发Telegram的"message text is empty"错误。

修正后的函数

将索引计算改为正确的范围(0到数组长度-1):

const getRandomMessage = (arr) => {
  return arr[Math.floor(Math.random() * arr.length)];
};

这样可以确保随机获取数组中存在的元素,不会出现undefined。

其他排查方向

  • 确认Bot实例初始化:你的代码中没有展示bot对象的创建逻辑,要确保在Lambda函数中正确初始化Telegram Bot实例,比如:

    const bot = new TelegramBot(process.env.TELEGRAM_BOT_TOKEN, { polling: false });
    // 如果使用Webhook模式,需额外配置API网关的Webhook地址
    

    未正确初始化的bot对象可能导致发送消息时出现异常。

  • 增强日志排查:在调用sendMessage前,增加对randomMessage的类型和值校验日志,方便定位偶发问题:

    console.log('Random message content:', randomMessage, 'Type:', typeof randomMessage);
    if (!randomMessage) {
      randomMessage = '默认备用消息'; // 增加兜底逻辑
    }
    
  • 竞态条件排查:虽然当前问题主要来自随机函数,但如果后续仍有异常,可以检查Lambda并发执行时是否存在共享资源冲突。比如确保bot实例在每次Lambda调用中正确初始化,而非复用可能导致状态异常的实例。

  • Telegram API限制:确认你的Bot没有触发Telegram的API频率限制,虽然该错误提示是文本为空,但极端情况下的限流可能返回非标准错误,可通过CloudWatch日志捕获完整的错误响应体进一步确认。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 07:33:20