Twilio通话录音GET请求异常:无法获取录音并附至邮件
问题描述
- 尝试将Twilio通话录音作为附件添加到邮件中,代码可正常处理公共URL的音频文件,但处理Twilio录音时始终失败
- 已添加Basic鉴权逻辑,但仍无法运行,当前代码如下:
const request = require('request'); // configure authentication var auth = "Basic " + Buffer.from(context.accountSid + ":" + context.authToken).toString("base64"); // recording url url = 'https://api.twilio.com/2010-04-01/Accounts/AC..../Recordings/' + event.recordingSid + '.mp3'; // request with authentication const options = { url: url, headers: { 'Authorization': auth, }, encoding: null }; // get audio file and attach to mail request.get(options, (error, response, body) => { if (error) { console.error(error); return; }; if (response.statusCode !== 200) { console.error("Failed to fetch Twilio recording:", response.statusCode, response.statusMessage); return; }; const msg = { // some configuration for message attachments: [ { content: body.toString('base64'), filename: 'Call.mp3', encoding: 'base64', type: "audio/mpeg" } ] }; // send mail }); };
报错信息
REDACTED - may contain security sensitive information
message: "self.uri.auth.split is not a function"
修复方案
1. 替换维护停止的request库
request库已停止维护,存在兼容性问题,建议改用axios(更稳定且API更清晰),改写后的核心代码如下:
const axios = require('axios'); async function fetchAndAttachRecording() { try { // 拼接录音URL const recordingUrl = `https://api.twilio.com/2010-04-01/Accounts/AC..../Recordings/${event.recordingSid}.mp3`; // 带鉴权请求录音文件,指定返回arraybuffer const response = await axios.get(recordingUrl, { auth: { username: context.accountSid, password: context.authToken }, responseType: 'arraybuffer' }); // 构建邮件附件 const msg = { // 邮件主题、收件人等配置 attachments: [ { content: Buffer.from(response.data).toString('base64'), filename: 'Call.mp3', encoding: 'base64', type: 'audio/mpeg' } ] }; // 执行发送邮件逻辑 } catch (err) { console.error('获取录音失败:', err.message); } }
2. 修复原request代码的问题
如果坚持使用request,请检查并调整以下几点:
- 显式声明
url为const,避免全局变量污染:const url = 'https://api.twilio.com/...' - 确保
context.accountSid和context.authToken是有效字符串,避免null/undefined导致鉴权头异常 - 检查发送邮件的代码是否正确处理
msg对象,排除邮件库自身的配置错误
3. 验证Twilio API权限
- 直接用Postman或浏览器测试录音URL:输入账号SID作为用户名,Auth Token作为密码,确认能正常下载录音文件
- 检查该录音资源是否未被删除,且账号拥有访问权限
内容的提问来源于stack exchange,提问作者Hanna Burkhardt
相关产品推荐
相关产品推荐

