SIP-регистрация, бранч, софтфон и другие страшные слова облачных АТС

50743f231a944bfabdf2f762db8c905f.pngАйти — очень большая штука. Бывает, что пятнадцать лет делаешь разный софт, под разные операционки, на разных языках программирования. Вроде много что знаешь. А потом шаг в сторону —, а там Нарния SIP, RTP, SDP и PBX. Последние несколько месяцев я довольно плотно занимаюсь голосовой телефонией, и несколько раз ловил себя на мысли, что документированная эта область для новичков не то чтобы очень хорошо. Ну, а если для чего-то еще не написано десять статей «xxx с нуля» — то это хороший повод написать хабрапост для широкого круга читателей. Длинные посты я не очень люблю, поэтому расскажу небольшую, но интересную часть теорикрафта: как облачные системы телефонии взаимодействуют друг с другом и с телекомами. На примере voximplant, конечно же.

1b7dc5e8db294738a9469d4f1a05a2d7.png
Большая часть взаимодействия происходит через связку протоколов и стандартов, условно называемых «SIP-телефония». SIP — это один из протоколов, с которого все обычно начинается. Он очень похож на HTTP — тот же plain text, заголовки, тела запросов, ответы. Но вместо запроса web-страничек, SIP-протокол контролирует голосовые и видео звонки. При этом сам протокол, несмотря на 200-страничный RFC, очень лаконичный: он позволяет участникам регистрировать «телефоны», инициировать звонок и отвечать на него, завершать звонок, плюс немного сервисных функций. Все остальное делается через другие протоколы. Например, параметры звонка передаются в теле SIP сообщений, но кодированы они по протоколу SDP. А сам звонок осуществляется по протоколу RTP или в шифрованном виде по SRTP.

8f6f7597f73c4e5986c7b80cf3ca1bdf.png
Самый простой вариант взаимодействия, широко применяемый самими телекомами, это «транк». Вообще «SIP trunking» — это подключение абонентов не по телефонному кабелю, а через интернет по протоколу SIP. Но и для телеком-телеком или телеком-облако коммуникаций термин прижился. Транк делается с двух сторон. В начале со стороны облака voximplant IP адреса телекома добавляются в белый список: это позволит телекому совершать к нашему облаку SIP-звонки без авторизации. После чего клиент связывается с телекомом и информирует его, чтобы тот «приземлял» входящие звонки в наше облако. При этом используется SIP url, соответствующее аккаунту и приложению пользователя, которое с помощью javascript будет информировать облако что с этими звонками делать дальше.

username@appname.accountname.voximplant.com

Важным моментом является то, что такой транк по сути «односторонний»: наше облако будет принимать входящие звонки с зарегистрированных номеров, но у него нет возможности «позвонить» с такого номера. То есть на самом деле есть, но про подстановку номеров и раутинг траффика я напишу отдельно — и так уже wall of text получилось.

8fbdecb1021f4d00971de2a676d2ba77.png
Если транк — это подключение от телекома в облако, то SIP-регистрация работает в обратном направлении. У SIP потокола есть сообщение REGISTER (откуда и название), которое информирует сервер о том, что некое абонентское устройство готово принимать звонки. Чтобы облако могло выступать в роли абонентского устройства, клиенту необходимо получить у телекома SIP-адреса, логины и пароли от своих номеров и добавить эту информацию у нас в админке.

В отличие от транка, SIP-регистрация работает в обе стороны: имея логины и пароли, облако как принимает, так и совершает звонки по указанным номерам. Еще одним отличием является то, что SIP-регистрация — это часть протокола SIP (регулярно отправляемое сообщение REGISTER), в товремя как транки — это просто практика использования SIP решений.

0320ae83f55944648deb73e683ffb9eb.png
Голая теория без практики не очень интересна, поэтому в качестве примера я покажу как подключить к voximplant номера телефонов популярного облачного решения mango-office. Первое что нужно сделать — это получить SIP-информацию о номерах, которая доступна в разделе название раздела личного кабинета mango office, как описано в этой инструкции.

Затем эту информацию необходимо добавить в админке voximplant, как уже было показано выше. После выполнения этих несложных действий звонки на телефоны mango-office будут автоматически попадать в облако voximplant, где с помощью javascript с ними можно сделать все что угодно.

Более сложный пример — это настройка транка от asterisk к облаку voximplant. Со стороны нашего облака нужно всего лишь добавить ip-адреса asterisk в белый список как это показано выше. А вот со стороны asterisk конфигурация транка выгладит следующим образом:

[voximplant]
type=friend
host=testapp.testuser.voximplant.com
secret=asterisk-pass-for-vox
fromdomain=testapp.testuser.voximplant.com
fromuser=asterisk
remotesecret=vox-pass-for-asterisk

Учитывая возможность подстановки номера, с точки зрения клиента SIP регистрация ничем не отличается от транка. Зачем тогда два способа? Причина проста — не все телекомы готовы настраивать транк. А для многих облачных АТС это технически не предусмотрено. В то время как SIP регистрация позволяет интегрироваться с любым SIP-совместимым сервисом, будь то крупный телеком провайдер, инсталляция asterisk или закрытый облачный сервис.

В рамках нашего блога я стараюсь не только рекламировать voximplant, но и рассказывать полезные и интересные вещи про облачную телефонию. Если ваш зоркий глаз углядел в изложенном материале откровенную лажу или спорную неточность — не стесняйтесь писать мне в личку, все оперативно исправляется и приносит пользу тем, кто приходит на Хабр из поиска. И да, с прошедшим днем сисадмина всех :).

© Habrahabr.ru