Приложение Twilio - обновление ресурса вызова завершает вызов
Я новичок в Twilio и пытаюсь разработать приложение на C#, которое будет взаимодействовать с автоматизированным деревом телефонов. Проблема в том, что начало телефонного дерева каждый раз немного отличается, поэтому вместо того, чтобы пытаться автоматизировать все различные перестановки, я создаю конференц-связь между телефонным деревом, приложением и моим личным номером телефона. Я надеюсь ответить на свой телефонный звонок, взаимодействовать с деревом, пока я не дойду до «автоматизированной» части, а затем положу трубку и позволю приложению взаимодействовать с конференц-связью с этого момента.
Пока мне удалось успешно создать конференцию, используя два вызова CallResource.Create(). Проблема, с которой я сейчас сталкиваюсь, заключается в том, что когда я использую CallResource.Update() с деревом Sid, после выполнения Twiml он зависает на этом ресурсе вызова, и я не могу понять, почему. Звонок на мой телефонный номер все еще продолжается, но независимо от того, какие сообщения я отправляю на ресурс вызова дерева, он вешает трубку после этого.
- Любая помощь о том, как обновить вызов с помощью некоторого твимла, не повесив трубку
- Или, может быть, есть лучший способ сделать то, что я ищу, вместе?
Любой совет приветствуется! Ниже приведен код, который я использую
Спасибо, Шон
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>
так что трудно предложить, как вы могли бы сделать это лучше. Если вы можете объяснить, я могу отредактировать этот ответ с другими предложениями.