我正在尝试实现一个简单的'语音邮件'类型的系统,其中语音邮件所有者可以记录自己的问候。
我想我可以这样做:
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再试一次,等等…的东西。
我想我没有正确地调用'record'方法…有人知道魔法酱吗?
谢谢,
基因使用action
属性代替recordingStatusCallback
:
response.Record(action: new Uri("http://<snip>.ngrok.io/voice/playmessage"));
From the doc:
action
属性接受相对URL或绝对URL作为值。当记录完成后,Twilio将对包含以下参数的URL发出GET或POST请求。
(注意下面的参数)包括RecordingUrl
.)
但要小心:
有一个例外:如果Twilio接收到一个空记录,它将不会向
action
URL发出请求。当前调用流将继续使用当前TwiML文档中的下一个动词。
也就是说,你的response.Say("Are you happy with this recording?");
应该是Play
之后的PlayMessage()
的一部分。
还可以看看从Twilio API文档中录制语音邮件的示例。