我正在使用WebAPI构建Twilio IVR并且遇到了一些麻烦。我试图循环播放录音,并在每个录音结束时提供按1删除录音的选项。
我无法在C#WebAPI实现中找到任何示例,以下内容无法正常工作,我不知道如何解决此问题。
我所知道的;
以下是我到目前为止编写的代码:
public HttpResponseMessage Messages() {
string baseUrl = Url.Request.RequestUri.GetComponents(UriComponents.SchemeAndServer, UriFormat.Unescaped);
var twilio = new TwilioRestClient(_accountSid, _authToken);
var recordings = twilio.ListRecordings(null, DateTime.Today, null, null);
var twilioResponse = new TwilioResponse();
if (recordings != null && recordings.Recordings.Count > 0)
{
var msgCount = 1;
var msgTotal = recordings.Recordings.Count();
foreach (var recording in recordings.Recordings)
{
var caller = twilio.GetCall(recording.CallSid);
var callerNumber = Regex.Replace(caller.From, @"([0-9]{1})", "$1,");
var callDate = recording.DateCreated.ToString("dddd MMMM d");
var callTime = recording.DateCreated.ToString("h m t");
twilioResponse.Say(string.Format("Playing message {0} of {1}, from {2} on {3} at {4} M.", msgCount, msgTotal, callerNumber, callDate, callTime),
new { voice = "woman" });
var voiceFile = string.Format("{0}2010-04-01/Accounts/{1}/Recordings/{2}.mp3", twilio.BaseUrl, _accountSid, recording.Sid);
twilioResponse.Play(voiceFile);
//twilioResponse.BeginGather(new
// {
// action = baseUrl + "/api/Recording/Delete",
// numDigits = 1,
// });
//twilioResponse.Say("TO DELETE THIS MESSAGE PRESS 1");
//twilioResponse.EndGather();
msgCount++;
}
}
return Request.CreateResponse(HttpStatusCode.OK, twilioResponse.Element, Configuration.Formatters.XmlFormatter);
}
之前我曾使用过Twilio的API,但对我来说这是一个新的,我真的不知道这是否可行。他们拥有的PHP示例虽然如此,但我可能只是错过了标记,因为我应该对此采取不同的方式。
答案 0 :(得分:0)
Twilio福音传教士在这里。
你看起来非常接近。让我们看一下在用户按下一个的情况下传回记录SID,因为通过使用动作URL你可以在Gather动词上设置一个状态来保持某种状态,这是相对容易做到的:
action = baseUrl + "/api/Recording/Delete?recordingSid=" + recording.Sid;
现在,当用户按下一个时,Twilio将向Action URL发出请求,其中包含recordingSid参数。
删除录制后,您只需重定向回“消息”端点即可继续收听更多录制内容。为了跟踪您已经收听的录音,您可能需要在操作URL中传递一些其他参数,您可以通过删除工作流程将其传递回监听工作流程。
希望有所帮助。