如何使用Twilio <Play>播放本地临时音频文件?
解决方案:用Data URI直接播放生成的音频
Twilio的<Play>动词不支持本地文件路径——Twilio的服务器无法访问你Twilio Functions里的/tmp目录,直接传本地路径肯定行不通。而且你完全不用额外上传到云端,用Data URI就能零成本解决问题。
具体修改步骤:
- 跳过写入本地文件的操作,直接将音频buffer转换成Base64格式
- 构造对应音频格式的Data URI,传给
twiml.play()即可
修改后的代码:
// 直接处理生成的buffer,无需写入文件 const audioBase64 = buffer.toString('base64'); // 构造data URI,注意匹配音频格式(mp3对应audio/mpeg) const dataUri = `data:audio/mpeg;base64,${audioBase64}`; console.timeEnd("main"); twiml.play(dataUri); return callback(null, twiml);
补充说明:
- 你原代码里
await和fs.writeFile回调混用是无效的,fs.writeFile的回调版本不返回Promise,await起不到等待作用,上面的写法还能避免这个问题 - Data URI的格式要对应你的音频类型:如果是wav文件就用
audio/wav,mp3用audio/mpeg,格式不匹配会导致无法播放
内容的提问来源于stack exchange,提问作者Ruchir Baronia
相关产品推荐
相关产品推荐

