Твилио евангелист здесь.
Звучит так, как будто это может быть хорошее место для use some <Conference>
s.
Позволяет определить действующих лиц в вашем сценарии: Agent1, Agent2, Field.
Допустим, что поле вызывает Agent1. Вместо соединения двух напрямую с <Dial>
вы можете <Dial>
Поместить поле в <Conference>
(позвоните на конференциюA), а затем используйте REST API для инициирования исходящего вызова Agent1. Когда они отвечают <Dial>
их в то же самое <Conference>
. Системе необходимо будет захватить CallSid как Agent1, так и Field, а также Sid <Conference>
, сохраняя их в некотором типе хранилища, который будет использоваться позже.
Использование <Conference>
в этом сценарии дает вам больше возможностей манипулировать каждой нотой вызова независимо от другого, кроме того, если вы используете <Dial>
для подключения поля и агента1.
Итак, Agent2 вызывает поле. Агент2 прошел бы тот же процесс, как раз наоборот. Агент2 набирается на номер <Conference>
(позволяет называть его ConferenceB), и ваша система будет использовать REST API для вызова поля. Когда ответы Field отвечают, они получают <Dial>
ed на ту же конференцию, что и Agent2. Опять же, системе необходимо будет захватить CallSid как Agent2, так и Field, а также Sid <Conference>
, сохраняя их в некотором типе хранилища, который будет использоваться позже.
Теперь Field необходимо указать системе для подключения Agent2 с Agent1. Для этого вы можете использовать атрибут hangupOnStar <Dial>
в TwiML, который вы передаете Twilio, когда вы набираете поле в ConferenceB. Глагол <Dial>
будет выглядеть примерно так:
<Dial hangupOnStar="true" action="[process_hangup_url]">
<Conference>ConferenceB</Conference>
</Dial>
hangupOnStar говорит Twilio отсоединять абонент (Field) от кого бы они ни <Dial>
издания (конференция), но по-прежнему делает запрос к URL, определенному в атрибуте действия <Dial>
глаголов , Это важно, потому что, когда Field должен сообщить системе перенаправить Agent2 в ConferenceA с помощью Agent1, а запрос на атрибут URL в s-action дает системе возможность запросить Поле, чтобы узнать, что он хочет сделать. Таким образом, вы могли бы Twilio выполнить некоторые TwiML так:
<Response>
<Gather action=[gather_handler]>
<Say>Press 1 to connect this caller to another<Say>
</Gather>
</Response>
Если поле нажимает одну, систему (кто знает все CallSids для всех участвующих сторон здесь, и конференц-МОРС), можно использовать REST API для перенаправления Agent2 из ConferenceB и в ConferenceA.
Это немного сложнее системы, но оно должно работать на вас.
Надежда, что помогает
могли бы вы объяснить, почему этот код работает, чтобы помочь будущим читателям? – WhatsThePoint