Кто-то на форумах Twilio интересовался the very same question, и в настоящее время ответ на этот вопрос не является прямым вызовом API REST.
Что вам нужно сделать, когда участник присоединяется к конференции, you'll use the REST API to make Twilio dial back in to your application. Вы можете выбрать, как определить, что вы звоните в свою конференцию, как вам нравится (например, сравнивая исходящие и входящие номера телефонов для равенства); как только вы это обнаружите, вы можете присоединиться к этому вызову непосредственно на конференцию и использовать глаголы TwiML<Say>
и <Play>
, чтобы воспроизвести введение для всех.
Это немного запутанно, но таким образом вы не удаляете каждого участника с конференции (не давая им услышать друг друга на мгновение), а затем воссоединяться с ними.
Вот что-то, что должно напоминать хорошее сквозное решение.
Во-первых, пользователь набирает номер, и вы просматриваете стандартные подсказки, чтобы получить ПИН-код для конференц-зала и их имя.
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Gather action="/conference/pin" finishOnKey="#">
<Say>Please the conference pin number followed by the pound key.</Say>
</Gather>
</Response>
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Say>Say your name and then press the pound key.</Say>
<Record action="/conference/name" finishOnKey="#" />
</Response>
Теперь, после того, как вы установили контакт и запись, произойдут две вещи; ответ от должности до /conference/name
будет содержать <Conference>
глагол, размещение пользователя в комнате:
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Dial>
<Conference>{conference ID}</Conference>
</Dial>
</Response>
... и асинхронный к тому, что она будет использовать REST API, чтобы начать новый вызов обратно в конференц-зал.
POST /2010-04-01/Accounts/{AccountSid}/Calls
From = {your conference phone number}
To = {your conference phone number}
SendDigits = wwww{conference PIN}#
Url = /conference/announce?name={name ID}
Теперь следующий бит вводит в заблуждение. Twilio теперь будет разговаривать с вашим URL-адресом обратного вызова для входящего конца вызова и указанным выше URL-адресом для исходящего конца вызова. Ваш обработчик входящего вызова должен будет обнаружить, что линия конференции возвращает себя и ведет себя по-другому; сначала нужно будет ответить простым TwiML, который позволяет исходящему концу вызова ввести контакт для конференц-зала.
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Gather action="/conference/announce-pin" finishOnKey="#" />
</Response>
Параметр POST SendDigits
обеспечит цифры, которые немного TwiML ожидают. Затем это действие должно отвечать конференцией в новом вызове.
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Dial>
<Conference>{conference ID}</Conference>
</Dial>
</Response>
Последний фрагмент головоломки - TwiML, испускаемый URL-адресом, указанным в POST. Это разметка, которая будет запускаться после того, как вызов loopback будет добавлен в конференцию.
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Play>/conference/name-recordings/{name ID}</Play>
<Say>has joined the call.</Say>
<Hangup />
</Response>
Это работает разметка, играет имя вызывающего абонента и сообщение в конференц-зале, а затем вешает трубку.
Я пытаюсь продумать ваше решение, но я точно не следую. Возможно, если вы ссылаетесь на конкретные вызовы API REST. – Alex
Я предлагаю использовать «/ 2010-04-01/Accounts/{AccountSid}/Conferences/{ConferenceSid}/Участники» для получения каждого вызоваSid, затем POSTing Url для каждого »/ 2010-04-01/Accounts/{ AccountSid}/Calls/{CallSid}, который имеет Play/Say TwiML. Я предполагаю, что это удалит участников с конференции, но я не уверен в этом. – Alex
Это действительно удаляет участников конференции. Я не могу создать образец для вас прямо сейчас, но, возможно, позже сегодня или завтра я смогу описать весь процесс для вас. –