问题描述
我正在尝试实现一个简单的“语音邮件”类型的系统,语音邮件所有者可以在其中录制自己的问候语。
我想我可以做这样的事情:
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。