Как подключить один экземпляр приложения Twilio к другому через SIP? - PullRequest
1 голос
/ 24 октября 2019

У меня есть приложение, которое использует программируемый голос Twilio.

Приложение в основном является колл-центром. Развернуто несколько экземпляров, каждый из которых имеет свой собственный номер телефона Twilio и пул доступных операторов-людей, которые могут отвечать на входящие вызовы. Когда от клиента поступает вызов GSM на телефонный номер Twilio, Twilio вызывает WebHook на нашей стороне, а затем мы просто находим доступного человека из пула и возвращаем TwiML следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<Response>
    <Say>Hello. Connecting you to the available operator.</Say>
    <Dial callerId="{callCenterNumber}">{operatorNumber}</Dial>
</Response>

Сейчасклиент подключен к доступному человеку из пула экземпляра приложения. Пока все хорошо.

Теперь я хочу разобраться со случаем, когда в пуле экземпляра приложения, который был первоначально вызван, не было найдено доступных операторов. В этом случае я хочу, чтобы исходный экземпляр приложения подключался к номеру телефона Twilio другого экземпляра и считался клиентом этого экземпляра, чтобы исходный клиент-человек был подключен к оператору из пула другого экземпляра. Для этого экземпляр A просто возвращает <Dial callerId="{callCenterNumber}">{anotherCallCenterNumber}</Dial> (набирая anotherCallCenterNumber вместо operatorNumber в приведенном выше примере).

Итак, вместо этого соединения: Customer => Call Center A => Operator from A's pool, у меня есть Customer => Call Center A => Call Center B => Operator from B's pool соединение.

Он также отлично работает, и я могу связать еще больше экземпляров центра обработки вызовов, пока где-нибудь не будет найден доступный оператор.

Проблема в том, что я хочу использовать протокол SIP для связи между экземплярамивместо телефонных номеров GSM, потому что мне нужно передать некоторые дополнительные данные (язык и т. д.), чтобы следующий экземпляр знал, как обрабатывать вызов, и находил подходящего оператора, чтобы ответить на него. Заголовки SIP выглядят как подходящее решение для передачи этих данных. Все остальное останется прежним.

Итак, я настроил конечную точку SIP для каждого экземпляра приложения и настроил запрос URL-адресов WebHook аналогично обычным URL-адресам телефонных номеров. Теперь, чтобы набрать другой экземпляр центра обработки вызовов через SIP, я возвращаю следующий TwiML:

<?xml version="1.0" encoding="UTF-8"?>
<Response>
    <Say>Hello. No available operators were found. Connecting you to Call Center B.</Say>
    <Dial>
        <Sip>sip:callcenter@instanceB.sip.us1.twilio.com?x-customHeader=customData</Sip>
    </Dial>
</Response>

На этом этапе я ожидаю, что Twilio вызовет instanceB WebHook домена SIP, поэтому я могу обработать вызов инаправьте его так же, как я использовал в обычных телефонных номерах.

Вместо этого вызов немедленно сбрасывается, и в отладчике Twilio я вижу следующее предупреждение:

32009 - The user you tried to dial is not registered with the corresponding SIP Domain

ПослеВ некоторых исследованиях я понял, что конечная точка callcenter должна быть зарегистрирована в instanceB.sip.us1.twilio.com домене SIP. Но, похоже, единственный способ сделать это - использовать клиентское приложение софтфона, такое как X-Lite или Jitsi. Я установил X-Lite локально и добавил учетную запись callcenter. Теперь, когда Call Center A получает вызов и инструктирует Twilio, чтобы он позвонил в Call Center B (sip:callcenter@instanceB.sip.us1.twilio.com), мой локальный программный телефон начинает звонить, и если я отвечу на него, я буду подключен к клиенту, вызывающему Call Center A. Это не то, чтоЯ вообще хочу!

Кроме того, я обнаружил, что если я позвоню по номеру любому адресу софта, даже незарегистрированному, например sip:unknown@instanceB.sip.us1.twilio.com, то, как ни странно, Twilio будет без каких-либо жалоб вызывайте WebHook instanceB SIP Domain. Но это тоже не то, что мне нужно. Мне нужно соединение Twilio => Twilio через SIP таким же образом, как оно работало при использовании телефонных номеров.

Итак, чтобы подвести итог:

  1. Является ли описанный сценарий с Twilio-to-Twilio через SIP-связь возможна вообще, так же, как Twilio-to-Twilio по телефонным номерам?
  2. Почему Twilio возвращает ошибку The user you tried to dial is not registered with the corresponding SIP Domain, когда он получает TwiML, инструктирующий ему набрать незарегистрированную конечную точку SIP, но прив то же время он не возвращает эту ошибку, когда я набираю ту же незарегистрированную конечную точку из клиента программного телефона?

1 Ответ

1 голос
/ 06 ноября 2019

К сожалению, вы не можете сделать это через SIP. Twilio не размещает для вас конечные точки SIP.

...