有人知道如何使用 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 });

方法似乎被调用,但它没有播放任何东西,只是挂断了。

我还没有完成“如果您对录音感到满意,请按 1,请按 2 重试,等等……”的所有内容

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

谢谢,

基因

解决方法

使用 action 属性代替 recordingStatusCallback

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

来自doc

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

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

不过要小心:

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

也就是说,您的 response.Say("Are you happy with this recording?"); 应该是 PlayMessage() 之后的 Play 的一部分。

另请查看 Twilio API 文档中的示例 Record a voicemail