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

如何在Twilio双向媒体流中完整录制通话双方的音频?

如何在Twilio双向媒体流中完整录制通话双方的音频?

我基于Twilio的双向媒体流开发了一个电话代理服务,现在想要实现完整录制所有呼入通话的功能,但遇到了一个棘手的问题。

我原本使用twilio-media-stream-save-audio-file这个npm包来把媒体流保存为wav文件,但Twilio官方文档里明确指出:

双向媒体流仅能接收呼入轨道。

这就导致,当我通过Twilio的WebSocket接收media类型消息并触发录制时,只能录到来电者的音频,完全捕获不到我的服务器发回给Twilio的音频——这部分音频是我用Eleven Labs生成的AI语音。

我尝试手动分别录制两路音频,但这种方式带来了很多难以处理的问题:比如音频重叠时的同步问题,还有发送clear消息时需要截断 outbound 音频,最后生成的录音只能大概还原80%的通话内容,和实际通话的完整音频有偏差。

我目前的录制代码如下:

录制来电者音频:

sendAudio(audio: string): void {
      const audioInput = {
        encodedAudioData: audio,
      };
      this.sendMessage("audio_input", audioInput);

      // Record caller audio
      if (this.callerSpeaking) {
        this.mediaStreamSaver.twilioStreamMedia(audio);
      }
   
  }

录制AI生成的回复音频:

async sendAudioToTwilio(audioBase64: string, twilioConnection: TwilioSocket) {

    const twilioMediaMessage = {
      event: "media",
      streamSid: twilioConnection.streamSid,
      media: {
        payload: audioBase64,
      },
    };

    if (twilioConnection.ws.readyState === 1) {
      // Record AI audio
      if (this.aiSpeaking && !this.callerSpeaking) {
        this.mediaStreamSaver.twilioStreamMedia(audioBase64);
      }

      twilioConnection.ws.send(JSON.stringify(twilioMediaMessage));
    } else {
      console.error(
        "Twilio WebSocket is not open. Current state:",
        twilioConnection.ws.readyState
      );
    }
  }

已经尝试过但无效的方案:

  • Record Verb:本质是用于录制语音信箱的功能,和媒体流场景不兼容
  • 带record属性的Dial Verb:仅适用于普通通话场景,无法支持媒体流的录制需求

备注:内容来源于stack exchange,提问作者Code on the Rocks

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 16:13:03