Как указано в ссылке https://github.com/twilio/voice-quickstart-android#bullet5,
нам нужно создать приложение TwiML, и URL-адрес голосового запроса должен быть установлен, например, для https://twiliodev.mycompany.com/makeCall, чтобы позвонить. Затем, что должно быть написано в функции makecall для подключения текущего вызова, потому что, если мы используем команду Dial, она выполняет другой вызов.
Примечание. Я использую программируемый голос Twilio для подключения двух устройств Android с помощью VOIP.
Теперь вопрос в том, какой ответ Twiml должен быть отправлен в функции MakeCall для подключения вызова, потому что в следующей функции, если я верну пустой ответ, вызов не будет подключен.
[HttpPost]
public ActionResult MakeCall()
{
var response = new VoiceResponse();
return TwiML(response);
}
Редактировать @Alan Спасибо за ответ. Поскольку я использую С # на стороне сервера. Я использовал Dial Verb как
var dial = response.Dial(callerId: from);
Который соединить вызов и немедленно отключить клиентский глагол bcoz отсутствует. Теперь, как добавить клиентский глагол в глагол набора номера, я использую клиентский глагол как
dial.Append(client);
и ответ Twiml
<Response>
<Dial callerId="client:21f421792"></Dial>
<Client>2170561
</Client>
</Response>
И его ошибка схемы возврата bcoz Я думаю, что правильная схема
<Response>
<Dial callerId="client:21f421792">
<Client>2170561
</Client></Dial>
</Response>
Не могли бы вы помочь, как добавить глагол Client в команду Call?
Спасибо.
Редактировать 2
Как предлагает @philnash, этот С # ссылка предназначена для вызова от браузера к клиенту, и в этом случае он использует новый клиент для набора номера как
var dial = new Dial();
но я использую Android VOIP SDK для звонков между двумя устройствами Android. Для чего, если я использую новый объект Dial, он разместит новый вызов как дочерний вызов. Которые я не хочу создавать. И по запросу @philnash полный код функции makeCall
[HttpPost]
public ActionResult MakeCall()
{
var response = new VoiceResponse();
string from,to;
if (Request.HttpMethod == HttpMethod.Post.Method)
{
from = Request.Form["From"];
to = Request.Form["To"];
}
else
{
from = Request.QueryString["From"];
to = Request.QueryString["To"];
}
var dial = response.Dial(callerId: from);
var client = new Client(to);
dial.Append(client);
return TwiML(response);
}
Редактировать 3
<?xml version="1.0" encoding="utf-8"?>
<Response>
<Dial>
<Client>2170561
</Client>
</Dial>
</Response>
Как я заметил для VOIP-вызова, если клиентский xml-тег находится внутри Dial-тега, он успешно подключается, но подсчитывает две ноги для каждого вызова и взимает плату за два вызова. По умолчанию Twilio выполняет два вызова в каждом вызове, когда одно устройство хочет позвонить на другое устройство, или я ошибаюсь?
Опять же, обратите внимание, я говорю о VOIP-подключении двух устройств Android через URL-адрес запроса Twiml к нашему серверу.
Append
вставляетеclient
вdial
, это действительно должно быть вложено в вывод XML. Это странное поведение. Кроме того, я не уверен, что вы имеете в виду о дочерних вызовах, когда у вас есть две конечные точки (в данном случае 2 клиента), у вызова будет две ветви, и одна будет дочерней. - person philnash   schedule 19.03.2020