首页 > 解决方案 > 有人知道如何使用 Twilio 录制和播放录音吗?

问题描述

我正在尝试实现一个简单的“语音邮件”系统,语音邮件所有者可以记录他们自己的问候语。

我想我可以做这样的事情:

  response.Say("Record your message");
  response.Record(recordingStatusCallback: new Uri("http://<snip>.ngrok.io/voice/playmessage"));
  response.Say("Are you happy with this recording?");
  return TwiML(response);

然后在playmessage方法中

  [HttpPost]
  public TwiMLResult PlayMessage()
  {
    string url = Request.Form["RecordingUrl"];
    var vr = new VoiceResponse();
    vr.Play(url: new Uri(url));
    return TwiML(vr);
  }

它在录制后立即挂断,然后调用 PlayMessage 方法。

我尝试添加一个 RecordingEventEnum.InProgress,如下所示:

response.Record(recordingStatusCallback: new Uri("http://<snip>.ngrok.io/voice/playmessage"), recordingStatusCallbackEvent: new List<Record.RecordingEventEnum> {Record.RecordingEventEnum.InProgress });

并且方法 APPEARS 被调用,但它不播放任何东西,只是挂断。

我还没有得到所有的“如果您对录音感到满意,请按 1,请按 2 再试一次,等等...”的所有内容。

我想我没有正确调用“记录”方法……有人知道魔术酱吗?

谢谢,

基因

标签: twiliotwilio-api

解决方案


使用action属性而不是recordingStatusCallback

response.Record(action: new Uri("http://<snip>.ngrok.io/voice/playmessage"));

文档

action属性采用相对或绝对 URL 作为值。录制完成后,Twilio 将向该 URL 发出 GET 或 POST 请求,包括以下参数。

(注意“下面的参数”包括RecordingUrl。)

不过要小心:

有一个例外:如果 Twilio 接收到空记录,它不会向actionURL 发出请求。当前调用流程将继续使用当前 TwiML 文档中的下一个动词。

话虽这么说,你response.Say("Are you happy with this recording?");应该是PlayMessage()后的一部分Play

还可以查看示例Record a voicemail from the Twilio API doc。


推荐阅读