Twilio在循环中收集/播放录音

时间:2014-05-15 18:02:25

标签: c# asp.net-web-api twilio twiml

我正在使用WebAPI构建Twilio IVR并且遇到了一些麻烦。我试图循环播放录音,并在每个录音结束时提供按1删除录音的选项。

我无法在C#WebAPI实现中找到任何示例,以下内容无法正常工作,我不知道如何解决此问题。

我所知道的;

  • 需要收集输入的数字
  • 以某种方式将记录sid传回api以了解要删除的记录。

以下是我到目前为止编写的代码:

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示例虽然如此,但我可能只是错过了标记,因为我应该对此采取不同的方式。

1 个答案:

答案 0 :(得分:0)

Twilio福音传教士在这里。

你看起来非常接近。让我们看一下在用户按下一个的情况下传回记录SID,因为通过使用动作URL你可以在Gather动词上设置一个状态来保持某种状态,这是相对容易做到的:

action = baseUrl + "/api/Recording/Delete?recordingSid=" + recording.Sid;

现在,当用户按下一个时,Twilio将向Action URL发出请求,其中包含recordingSid参数。

删除录制后,您只需重定向回“消息”端点即可继续收听更多录制内容。为了跟踪您已经收听的录音,您可能需要在操作URL中传递一些其他参数,您可以通过删除工作流程将其传递回监听工作流程。

希望有所帮助。