You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何使用Twilio Functions从Twilio <gather>提取通话语音音频文件

从Twilio 中提取语音音频文件的解决方案

我明白你要的是从Twilio的<Gather>组件里拿到原始语音音频,而不是转写后的文本结果——这个需求确实不像调用event.SpeechResult()那么直接,我来给你分享两个可行的实现思路:

方法1:结合通话录音获取完整音频文件

这是最直接的方案,通过在<Gather>中启用录音功能,让Twilio帮你保存用户的语音输入,之后获取录音文件的URL:

  • 在你的TwiML配置里,给<Gather>添加record="true"属性,同时指定recordingStatusCallback来接收录音完成的通知。示例TwiML:
<Response>
  <Gather input="speech" action="/handle-gather-response" record="true" recordingStatusCallback="/process-recording">
    <Say>请说出你要办理的业务</Say>
  </Gather>
</Response>
  • 当用户完成语音输入后,Twilio会向你设置的recordingStatusCallback接口发送POST请求,请求参数里包含RecordingUrl——这个就是用户语音输入的音频文件链接,你可以直接下载该链接对应的文件,或者存储到自己的服务器。

注意:这个录音链接是临时有效的,建议收到通知后立即下载音频文件到本地存储;另外要遵守当地的通话录音法规,必须提前告知用户通话正在录音。

方法2:用Media Streams实时获取音频流

如果需要在用户说话的过程中实时获取音频数据(而不是等<Gather>结束后拿到完整录音),可以使用Twilio的Media Streams功能:

  • 在TwiML中给<Gather>添加<Stream>标签,指向你的WebSocket服务器地址:
<Response>
  <Gather input="speech" action="/handle-gather-response">
    <Stream url="wss://your-custom-server.com/receive-audio" />
    <Say>请说出你的需求</Say>
  </Gather>
</Response>
  • 你的WebSocket服务器会收到Twilio发送的实时音频数据包(默认是PCMU格式),你可以在服务器端将这些数据包拼接起来,再用工具(比如FFmpeg)转换成WAV、MP3等通用音频格式。

额外提示

  • 如果你使用录音方案,可以通过Twilio的Call API主动获取录音信息:调用CallResource.Fetch()方法,传入通话SID,然后从返回的Recordings列表中找到对应的录音项,获取RecordingUrl
  • Media Streams需要你自己处理音频数据的解析和格式转换,适合有实时处理需求的场景(比如实时语音分析)。

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

火山引擎 最新活动