Айти — необъятная отрасль знаний. Бывает, что пятнадцать лет делаешь разный софт, под разные операционки, на разных языках программирования. Вроде много всего знаешь. А потом шаг в сторону — а там Нарния SIP, RTP, SDP и PBX. Последние несколько месяцев я плотно занимаюсь голосовой телефонией и периодически ловлю себя на мысли, что для новичков эта область документирована не особо хорошо. Ну а если по какой-то теме еще не написано десять статей “xxx с нуля”, то это прекрасный повод написать Хабрапост для широкого круга читателей. Сегодня я расскажу небольшую, но интересную часть теорикрафта: как облачные системы телефонии взаимодействуют друг с другом и с телекомами. На примере VoxImplant, конечно же.
Основная часть взаимодействия происходит через связку протоколов и стандартов, условно называемых SIP-телефонией. Протокол SIP похож на HTTP: тот же plain text, заголовки, тела запросов, ответы. Но вместо запроса веб-страниц, протокол SIP контролирует голосовые и видеозвонки. Несмотря на 200-страничный RFC, сам протокол весьма лаконичный: он позволяет участникам регистрировать “телефоны”, инициировать звонок, отвечать на него и завершать звонок, а также предлагает несколько сервисных функций. Остальное выполняется через другие протоколы: параметры звонка передаются в теле SIP-сообщений, но кодированы они по протоколу SDP; cам звонок осуществляется по протоколу RTP или в шифрованном виде по SRTP.
Наиболее простой вариант взаимодействия, широко применяемый телекомами, — это транк. Вообще SIP trunking — это подключение абонентов не по телефонному кабелю, а через интернет по протоколу SIP. Но этот термин прижился и для коммуникаций типа “телеком-телеком” или “телеком-облако”. В создании транка участвуют обе взаимодействующие стороны. Вначале IP-адреса телекома добавляются в белый список на стороне облака VoxImplant: это позволит телекому совершать SIP-звонки к облаку без авторизации. Затем клиент связывается с телекомом и информирует его, что входящие звонки необходимо “приземлять” в облако. При этом используется SIP URI, соответствующий аккаунту и приложению пользователя, которое с помощью JavaScript-кода информирует облако, что с этими звонками делать дальше.
Описанный выше транк по сути является однонаправленным: облако будет принимать входящие звонки с зарегистрированных номеров, но у него нет возможности совершать исходящие вызовы с такого номера. То есть на самом деле есть, но про подстановку номеров и маршрутизацию трафика я напишу отдельно — и так уже стена текста получилась.
Если транк — это подключение от телекома в облако, то SIP-регистрация подключается в обратном направлении. Протокол SIP использует сообщение REGISTER, которое информирует сервер о том, что некое абонентское устройство (например, софтфон — программная реализация SIP-клиента) готово принимать звонки. Чтобы облако могло выступать в роли такого устройства, клиенту необходимо получить у телекома SIP-адреса, логины и пароли для своих номеров и добавить эту информацию в админку VoxImpant.
В противоположность транку, SIP-регистрация работает в обе стороны: имея логины и пароли, облако как принимает, так и совершает звонки по указанным номерам. Важное концептуальное отличие заключается в том, что SIP-регистрация — это часть протокола SIP (регулярно отправляемое сообщение REGISTER), в то время как транк — это просто практика использования SIP-решений.
Голая теория без практики мертва, поэтому в качестве примера я покажу, как подключить к VoxImplant номера телефонов популярного облачного решения Mango Office. Первое, что нужно сделать, — это получить SIP-информацию о номерах, которая доступна в разделе Сотрудники и группы в личном кабинете Mango Office, как описано в этой инструкции.
Затем эту информацию необходимо добавить в админку VoxImplant (см. рисунок выше).
После выполнения этих несложных действий звонки на телефоны Mango Office будут автоматически попадать в облако VoxImplant, где с помощью JavaScript с ними можно сделать все, что угодно.
Более сложный пример — это настройка транка от Asterisk к облаку VoxImplant. Со стороны нашего облака нужно всего лишь добавить IP-адреса Asterisk в белый список (см. рисунок выше). А вот со стороны Asterisk конфигурация транка выглядит следующим образом:
Учитывая возможность подстановки номера, с точки зрения клиента SIP-регистрация ничем не отличается от транка. Однако сотрудники телекомов не всегда готовы настраивать транк, а для многих облачных АТС это в принципе технически не предусмотрено. При этом SIP-регистрация позволяет интегрироваться с любым SIP-совместимым сервисом, будь то крупный провайдер телекоммуникационных услуг, инсталляция Asterisk или закрытый облачный сервис.
В рамках нашего блога я стараюсь не только рекламировать VoxImplant, но и рассказывать полезные и интересные вещи про облачную телефонию. Если ваш зоркий глаз углядел в изложенном материале откровенную лажу или спорную неточность, не стесняйтесь писать мне в личку. Все оперативно исправляется и приносит пользу тем, кто приходит на Хабр из поиска. И да, с прошедшим днем сисадмина всех :).
Немного о SIP
Основная часть взаимодействия происходит через связку протоколов и стандартов, условно называемых SIP-телефонией. Протокол SIP похож на HTTP: тот же plain text, заголовки, тела запросов, ответы. Но вместо запроса веб-страниц, протокол SIP контролирует голосовые и видеозвонки. Несмотря на 200-страничный RFC, сам протокол весьма лаконичный: он позволяет участникам регистрировать “телефоны”, инициировать звонок, отвечать на него и завершать звонок, а также предлагает несколько сервисных функций. Остальное выполняется через другие протоколы: параметры звонка передаются в теле SIP-сообщений, но кодированы они по протоколу SDP; cам звонок осуществляется по протоколу RTP или в шифрованном виде по SRTP.
SIP-транк
Наиболее простой вариант взаимодействия, широко применяемый телекомами, — это транк. Вообще SIP trunking — это подключение абонентов не по телефонному кабелю, а через интернет по протоколу SIP. Но этот термин прижился и для коммуникаций типа “телеком-телеком” или “телеком-облако”. В создании транка участвуют обе взаимодействующие стороны. Вначале IP-адреса телекома добавляются в белый список на стороне облака VoxImplant: это позволит телекому совершать SIP-звонки к облаку без авторизации. Затем клиент связывается с телекомом и информирует его, что входящие звонки необходимо “приземлять” в облако. При этом используется SIP URI, соответствующий аккаунту и приложению пользователя, которое с помощью JavaScript-кода информирует облако, что с этими звонками делать дальше.
username@appname.accountname.voximplant.com
Описанный выше транк по сути является однонаправленным: облако будет принимать входящие звонки с зарегистрированных номеров, но у него нет возможности совершать исходящие вызовы с такого номера. То есть на самом деле есть, но про подстановку номеров и маршрутизацию трафика я напишу отдельно — и так уже стена текста получилась.
SIP-регистрация
Если транк — это подключение от телекома в облако, то SIP-регистрация подключается в обратном направлении. Протокол SIP использует сообщение REGISTER, которое информирует сервер о том, что некое абонентское устройство (например, софтфон — программная реализация SIP-клиента) готово принимать звонки. Чтобы облако могло выступать в роли такого устройства, клиенту необходимо получить у телекома SIP-адреса, логины и пароли для своих номеров и добавить эту информацию в админку VoxImpant.
В противоположность транку, SIP-регистрация работает в обе стороны: имея логины и пароли, облако как принимает, так и совершает звонки по указанным номерам. Важное концептуальное отличие заключается в том, что SIP-регистрация — это часть протокола SIP (регулярно отправляемое сообщение REGISTER), в то время как транк — это просто практика использования SIP-решений.
Пример SIP-регистрации VoxImplant в Mango Office
Голая теория без практики мертва, поэтому в качестве примера я покажу, как подключить к VoxImplant номера телефонов популярного облачного решения Mango Office. Первое, что нужно сделать, — это получить SIP-информацию о номерах, которая доступна в разделе Сотрудники и группы в личном кабинете Mango Office, как описано в этой инструкции.
Затем эту информацию необходимо добавить в админку VoxImplant (см. рисунок выше).
После выполнения этих несложных действий звонки на телефоны Mango Office будут автоматически попадать в облако VoxImplant, где с помощью JavaScript с ними можно сделать все, что угодно.
Пример SIP-транка из Asterisk в VoxImplant
Более сложный пример — это настройка транка от 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, но и рассказывать полезные и интересные вещи про облачную телефонию. Если ваш зоркий глаз углядел в изложенном материале откровенную лажу или спорную неточность, не стесняйтесь писать мне в личку. Все оперативно исправляется и приносит пользу тем, кто приходит на Хабр из поиска. И да, с прошедшим днем сисадмина всех :).
Комментарии (5)
s1ma
07.08.2015 12:59+1Как по мне, статья как-то не очем… Тоже не так давно была необходимость настраивать sip для мини call центра, использовал связку asterisk-sonetel, по такому монстру как asterisk информации в рунете маловато. Настройка asterisk-а это еще то развлечение, проще реально прострелить себе ногу.
eyeofhell
07.08.2015 13:02Так это для ознакомления широкого круга читателей :). Я мог бы написать что-нить in-depth про asterisk или freeswitch — но кому кроме пары дюжин начинающих voip инженеров это будет интересно? А тут обзор, можно ознакомиться если слабо представляешь себе что это такое.
aylarov
07.08.2015 15:14+1Смысл VoxImplant в том, чтобы пользоваться им вместо Asterisk, а статья просто про то как их подружить при необходимости.
aylarov
Полезная статья, в будущем не повредит еще написать про то, как использовать функцию callSIP для исходящих звонков через внешние АТС
eyeofhell
Я уже примерно представляю себе название: «1000 и 1 способ прострелить себе ногу при звонке на SIP» :)