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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 04:46:37