Приложение Twilio - обновление ресурса вызова завершает вызов

Я новичок в Twilio и пытаюсь разработать приложение на C#, которое будет взаимодействовать с автоматизированным деревом телефонов. Проблема в том, что начало телефонного дерева каждый раз немного отличается, поэтому вместо того, чтобы пытаться автоматизировать все различные перестановки, я создаю конференц-связь между телефонным деревом, приложением и моим личным номером телефона. Я надеюсь ответить на свой телефонный звонок, взаимодействовать с деревом, пока я не дойду до «автоматизированной» части, а затем положу трубку и позволю приложению взаимодействовать с конференц-связью с этого момента.

Пока мне удалось успешно создать конференцию, используя два вызова CallResource.Create(). Проблема, с которой я сейчас сталкиваюсь, заключается в том, что когда я использую CallResource.Update() с деревом Sid, после выполнения Twiml он зависает на этом ресурсе вызова, и я не могу понять, почему. Звонок на мой телефонный номер все еще продолжается, но независимо от того, какие сообщения я отправляю на ресурс вызова дерева, он вешает трубку после этого.

  1. Любая помощь о том, как обновить вызов с помощью некоторого твимла, не повесив трубку
  2. Или, может быть, есть лучший способ сделать то, что я ищу, вместе?

Любой совет приветствуется! Ниже приведен код, который я использую

Спасибо, Шон

          public void MakeCall()
    {
        var accountSid =  ConfigurationManager.AppSettings["TwilioAccountSid"];
        var authToken =  ConfigurationManager.AppSettings["TwilioAuthToken"];
        var mePhoneNumber = ConfigurationManager.AppSettings["MyPhoneNumber"];
        var treePhoneNumber = ConfigurationManager.AppSettings["TreePhoneNumber"];

        var conferenceName = "treeNavigate" + Guid.NewGuid();

        TwilioClient.Init(accountSid, authToken);

        Twimlet treeConferenceTwimlet = new Twimlet();
        treeConferenceTwimlet.Endpoint = "conference";
        treeConferenceTwimlet.Parameters.Add("Name", conferenceName);
        treeConferenceTwimlet.Parameters.Add("Message", "Hi Tree");

        Twimlet meConferenceTwimlet = new Twimlet();
        meConferenceTwimlet.Endpoint = "conference";
        meConferenceTwimlet.Parameters.Add("Name", conferenceName);
        meConferenceTwimlet.Parameters.Add("Message", "Hi Me");

        var meCall = CallResource.Create(
            to: new PhoneNumber(mePhoneNumber),
            from: new PhoneNumber(mePhoneNumber),
            url: new Uri(meConferenceTwimlet.GetFormattedURL()));

        var treeCall = CallResource.Create(
            to: new PhoneNumber(treePhoneNumber),
            from: new PhoneNumber(mePhoneNumber),
            url: new Uri(treeConferenceTwimlet.GetFormattedURL()));
        
        CallResource.Update(
            pathSid: treeCall.Sid,
            twiml: new Twilio.Types.Twiml("<Response><Say>I can hear this on the conference but then it hangs up right after</Say></Response>"));

    }

    public class Twimlet
    {
       private String baseUrl = "http://twimlets.com/";
       public Dictionary<String, String> Parameters { get; set; }
       public String Endpoint { get; set; }

       public Twimlet()
       {
           this.Parameters = new Dictionary<string, string>();
       }

       public String GetFormattedURL()
       {
           return String.Format(
               "{0}{1}?{2}", 
               this.baseUrl, 
               this.Endpoint, 
               String.Join("&", this.Parameters.Select(x => String.Format("{0}={1}", HttpUtility.UrlEncode(x.Key), HttpUtility.UrlEncode(x.Value)))));
       }
   }

1 ответ

Евангелист разработчиков Twilio здесь.

Когда телефонный звонок с поддержкой Twilio выполняет TwiML, он делает это до тех пор, пока не исчерпает TwiML, а затем повесит трубку. В этом случае, когда вы обновляете вызов новым TwiML только с элементом, он произносит слова, а затем завершается.

Способ сохранить этот вызов на линии конференции состоит в том, чтобы сделать что-то после его завершения. Вы могли бы, например,<Pause>какое-то время.

Это не делает это отличным ответом, но я не уверен, каковы ваши планы с этим звонком после этого. <Say>так что трудно предложить, как вы могли бы сделать это лучше. Если вы можете объяснить, я могу отредактировать этот ответ с другими предложениями.

Другие вопросы по тегам