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

如何使用AWS Lambda通过Telegram Bot发送文件?本地正常部署报错

解决Telegraf Bot部署到AWS Lambda后无法发送本地MP3文件的问题

我来帮你搞定这个问题——本地运行Telegraf Bot发送MP3完全正常,一部署到AWS Lambda就报错,核心原因基本和Lambda的文件系统特性以及文件路径/打包配置有关,下面是具体的排查和解决步骤:

先分析问题根源

本地环境中,你的代码用相对路径./media/song.mp3能找到文件,是因为Node.js的工作目录就是你代码所在的文件夹。但AWS Lambda的运行环境里:

  • 代码会被解压到/var/task/目录下,相对路径的基准变了
  • 如果打包部署时没把media文件夹包含进去,Lambda环境里根本找不到这个文件
  • Lambda的文件系统除了/tmp目录外都是只读的,但读取打包进去的文件是允许的,只是路径要正确

具体解决方案

1. 确保MP3文件被正确打包进Lambda部署包

不管你用手动zip打包还是Serverless Framework、AWS SAM这类工具,一定要确认media文件夹和你的代码文件一起被包含在部署包里:

  • 手动打包:把项目根目录下的所有文件(包括media文件夹)一起压缩,不要只压缩单个js文件
  • 用Serverless Framework的话,检查serverless.yml里的package配置,确保没有排除media目录

2. 使用绝对路径访问文件

把相对路径改成基于当前文件目录的绝对路径,避免Lambda环境下路径基准变化导致找不到文件:

'use strict' 
const Telegraf = require('telegraf') 
const path = require('path') // 引入path模块
const bot = new Telegraf('Token') 

bot.command('audio', (ctx) => { 
  // 用path.resolve获取绝对路径
  const audioPath = path.resolve(__dirname, './media/song.mp3')
  ctx.replyWithAudio({source: audioPath}) 
}) 

const { PORT = 3000 } = process.env 
bot.startWebhook('/', null, PORT)

3. 改用文件流发送(更可靠的方式)

有时候直接传路径在Lambda环境会遇到文件读取的隐性问题,改用fs.createReadStream读取文件流再发送,兼容性更好:

'use strict' 
const Telegraf = require('telegraf') 
const fs = require('fs') // 引入fs模块
const path = require('path') 
const bot = new Telegraf('Token') 

bot.command('audio', (ctx) => { 
  const audioPath = path.resolve(__dirname, './media/song.mp3')
  // 创建文件读取流
  const audioStream = fs.createReadStream(audioPath)
  ctx.replyWithAudio(audioStream) 
}) 

const { PORT = 3000 } = process.env 
bot.startWebhook('/', null, PORT)

4. 检查Lambda执行角色权限

虽然读取打包进去的文件不需要额外权限,但确保你的Lambda执行角色拥有AWSLambdaBasicExecutionRole这类基础权限,避免因权限不足导致文件读取失败(比如某些特殊情况下的权限限制)

5. 排查临时文件系统问题

如果你的MP3是动态生成的,要把文件放到Lambda的/tmp目录下(这是唯一可写的目录),但如果是打包进去的静态文件,还是用/var/task下的绝对路径即可

按照上面的步骤调整后,应该就能解决Lambda环境下无法发送MP3的问题了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:34:03