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

如何通过Twilio语音函数向呼叫者流式返回音频?

如何向呼叫者流式返回音频?

实现方案

Twilio语音函数支持直接流式返回音频,无需等待完整文件上传。你可以用Node.js的PassThrough流配合Twilio的响应对象,将实时获取的音频流直接推送给呼叫者,实现边接收边播放。

完整代码示例

const stream = require('stream');
const twilio = require('twilio');

exports.handler = async function(context, event, callback) {
  // 你的实时音频可读流(示例中为mp3.body)
  const readable = mp3.body;
  const passThroughStream = new stream.PassThrough();

  // 配置流式响应头,启用分块传输
  const twilioResponse = new Twilio.Response();
  twilioResponse.setHeaders({
    'Content-Type': 'audio/mpeg', // 根据音频格式调整,如audio/wav
    'Transfer-Encoding': 'chunked'
  });

  // 管道连接流,将实时音频传递给Twilio
  readable.pipe(passThroughStream);
  twilioResponse.setBody(passThroughStream);

  // 音频流结束后,执行后续交互逻辑
  passThroughStream.on('end', () => {
    const postAudioResponse = new twilio.twiml.VoiceResponse();
    postAudioResponse.gather({ numDigits: 1 }, node => {
      node.say('请按1继续,按2退出');
    });
    // 后续逻辑可通过回调返回新的TwiML,或配置Webhook跳转
    callback(null, postAudioResponse);
  });

  // 添加错误监听,避免流异常导致通话中断
  readable.on('error', err => callback(err));
  passThroughStream.on('error', err => callback(err));

  // 返回流式音频响应
  callback(null, twilioResponse);
};

关键要点

  • Content-Type必须匹配:严格对应你的音频格式(MP3用audio/mpeg,WAV用audio/wav),否则Twilio无法解析播放。
  • 分块传输必不可少:Transfer-Encoding: chunked让Twilio能边接收数据边播放,消除等待延迟。
  • 错误处理要到位:给流添加错误监听,避免因音频源异常导致通话崩溃。
  • 后续流程衔接:音频播放完成后,Twilio会执行end事件中定义的后续交互逻辑,比如收集用户按键输入。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 15:26:20