Денис Здесенко
14.06.2020
3151

Важные функции и инструменты, отличающие PJSIP от SIP (Фичи PJSIP)

Про PjSIP написано не мало статей, как на русском языке, так и англоязычных, но большинство из них по большей степени просто представляют собой описание самой библиотеки и ее модульности. В данной статье будут рассмотрены некоторые интересные особенности и функции библиотеки res_pjsip. Configuration Wizard В первую очередь хотелось бы рассказать про такой мощную вещь, как PjSIP […]

Про PjSIP написано не мало статей, как на русском языке, так и англоязычных, но большинство из них по большей степени просто представляют собой описание самой библиотеки и ее модульности. В данной статье будут рассмотрены некоторые интересные особенности и функции библиотеки res_pjsip.

Configuration Wizard

В первую очередь хотелось бы рассказать про такой мощную вещь, как PjSIP Configuration Wizard. Ранее, в статье «PJSIP. Глубокая настройка глобальных параметров» я упоминал, и бегло рассматривал её.

Итак, что же это такое? Configuration Wizard – это инструмент разработанный для того, чтобы упростить настройку стандартных сценариев в Астериске (начиная с версии 13.2, именно в ней визард был введен), таких как, например, настройка транка, учетной записи и прочих. Предоставляет большую гибкость и контроль, используя объекты chan_pjsip, он сводит работу к одному единственному объекту объекту «wizard».

В качестве примера рассмотрим создание транка без регистрации:

Пример стандартной конфигурации
Пример аналогичной конфигурации с использованием Configuration Wizard

Результат будет одинаковым, но вот количество конфигов разнится. Также можно сказать, что визард создает стандартные объекты chan_pjsip вне нашего поля зрения (например, создание эндпоинта и aor с тем же именем что и визард или добавление outbound_auth в endpoint).

Если нам необходимо выполнить настройки с помощью визарда, то все конфиги мы пишем не в pjsip.conf, а в pjsip_wizard.conf, но это не означает, что он больше не нужен, как и остальные конфиг файлы. Например, секции transport, system и global все еще должны быть определены в pjsip.conf

Вот еще несколько нюансов, на которые стоит обратить внимание при работе с configuration wizard:

  • Между именами, созданными визардом, и именами объектов (endpoint, aor и проч.) из pjsip.conf, которые были созданы вручную, не будет конфликта (но только если у созданных визардом объектов присутствует параметр @pjsip_wizard=[имя визарда])
  • Конечная точка и aor создаются для каждого wizard’a (с тем же именем, что и визард)
  • Параметры передаются с помощью префиксов endpoint/ и aor/ и т.д.
  • sends_auth вызывает создание объекта исходящей аутентификации (имя будет вида [имя визарда]-oauth)
  • accepts_auth вызывает создание объекта входящей аутентификации (имя будет вида [имя визарда]-iauth)
  • sends_registrations вызывает создание объекта исходящей регистрации для каждого удаленного хоста (имя будет вида [имя визарда]-reg-[n], где n от 0 и увеличивается для каждого удаленного хоста.)
  • Если задан параметр accepts_registrations, стоит помнить то, что параметр remote_hosts не должен быть указан. Это вызовет конфликт при попытке регистрации.
  • Все созданные визардом объекты видны в CLI и AMI, также, как и созданные руками в pjsip.conf

Ну и в завершении разговора о визарде можно рассмотреть пример использования визарда в связке с использованием шаблона для создания множественных учетных записей:

Конфиг для нескольких номеров

Скрипт для перехода с chan_sip на res_pjsip

Еще одним очень полезным инструментом может стать скрипт для миграции с chan_sip на pjsip – написанный на питоне sip_to_pjsip.py. Он присутствует во всех сборках Астериска использующих res_pjsip. Его прямое предназначение — преобразование файла конфигурации chan_sip (sip.conf) в аналогичный файл с конфигурацией для res_pjsip (pjsip.conf).

Чтобы скрипт корректно отработал для всех файлов, что были вызваны в файле sip.conf с помощью команды include, лучше всего запускать его из каталога /etc/asterisk

Вызывается скрипт командой:

#sip_to_pjsip.py [опции] [входной файл] [выходной файл]

Чтобы понять, о чем вообще речь, рассмотрим пример конвертации и работы скрипта с файлом sip.conf, в котором прописаны простейшие настройки транка и пары учетных записей для телефонов:

Конфигурация sip.conf до конвертации
Вывод при запуске скрипта
Конфигурация pjsip.conf после конфигурации

Publishing Extension State

Publishing Extension State или же публикация состояния экстеншена – механизм, позволяющий публиковать состояние экстеншена для другой сущности (например, Kamailio, т.к. имеет поддержку композитора состояний событий). Другими словами, это означает, что вместо того, чтобы каждое устройство подписывалось на Астериск и получало сообщение NOTIFY при изменении состоянии экстеншена, в PJSIP настраивается отправка одного PUBLISH запроса для каждого изменения состояния экстеншена другому объекту, т.е. публикация состояния позволяет функции SUBSCRIBE и NOTIFY обрабатываться другим объектом. Эти запросы запускаются на основании хинтов прописанных в диалплане. На схеме это выгдядит примерно таким образом:

Схема отправки сообщений PUBLISH

Настраивается в файле pjsip.conf путем указания исходящей публикации в секции outbound publish. Пример конфигурации:

Пример конфигурации исходящей публикации

Опция @body указывает тип тела для публикации и является обязательным параметром.

Опция @context указывает фильтр для контекста.

Опция @exten указывает фильтр для экстеншенов.

Дополнительной опцией, которая требуется для исходящей публикации, является опция multi_user, включающая поддержку в секции исходящей публикации для публикации другим пользователям. Без этой опции все запросы PUBLISH будут отправляться одному и тому же пользователю.

Количество исходящих публикаций не ограничено, при условии, что имена у них будут разные.

RLS

Resource List Subscriptions (RLS) – это механизм, введенный с 13й версии Астериска, который используется для уменьшения объема трафика связанного с SUBSCRIBE сообщениями и для упрощения его обработки станцией.

Немного подробнее о необходимости, т.е. для чего был реализован этот механизм. Предположим, есть офис на 30 сотрудников, у каждого свой сиповый ip-телефон. Каждое из этих устройств подписывается на состояние всех остальных в офисе, т.е. плодить по 29 подписок (не 30, потому что нет необходимости подписываться на себя же). Исходя из этого наш Астериск будет поддерживать 870 подписок. Увеличим количество сотрудников с ip-телефонами – соответственно возрастет количество поддерживаемых подписок, причем в геометрической прогрессии. Такую ситуацию назвали N-squared problem. Иначе говоря, объем трафика и количество серверных ресурсов пропорциональны квадрату количества пользователей системы. Итак, исходя из этого можно столкнуться с двумя нюансами:

  1.  При одновременном запуске, все устройства будут посылать свои сип-подписки одновременно, сильно увеличивая нагрузку на процессор станции
  2.  Появляется необходимость поддерживать N-квадратные сип-диалоги, что требует больше системных ресурсов (например, возрастает объем необходимой оперативной памяти)

С причинами разобрались, теперь переходим к описанию конфигурации. Как и многие другие настройки RLS прописывается в файле pjsip.conf, а именно в секции resource_list. Пример простейшей настройки ресурс-листа:

Простейшая настройка ресурс-листа

Разберем немного подробнее содержимое секции:

  • type – тип секции
  • event – пакет событий (в нашем случае presence – определение используется устройство или нет. Так же есть еще 2 вида событий – dialog и message-summary)
  • list_item – раздел с именами устройств принадлежащих к ресурс-листу.
  • full_state — по умолчанию опция отключена и нужна для того чтобы протокол RFC4662 не частичное уведомление состояния, а полное.
  • В дополнение к вышесказанному можно отметить, что есть еще одна опция notification_batch_interval, запускающая таймер, во время которого все дальнейшие изменения состояния устройств в ресурс листе объединяются с исходным изменением, которое таймер запустило, и по истечении времени таймера, все изменения отправляются в одном сообщении NOTIFY. Измеряется в милисекундах.
Подписаться
Уведомление о
guest
0 Комментарий
Inline Feedbacks
View all comments

Остались вопросы?

Я - Кондрашин Игорь, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.

VoIP оборудование

ближайшие курсы

ближайшие Вебинары

ONLINE

10 доводов в пользу Asterisk

Распространяется бесплатно.

Asterisk – программное обеспечение с открытым исходным кодом, распространяется по лицензии GPL. Следовательно, установив один раз Asterisk вам не придется дополнительно платить за новых абонентов, подключение новых транков, расширение функционала и прочие лицензии. Это приближает стоимость владения станцией к нулю.

Безопасен в использовании.

Любое программное обеспечение может стать объектом интереса злоумышленников, в том числе телефонная станция. Однако, сам Asterisk, а также операционная система, на которой он работает, дают множество инструментов защиты от любых атак. При грамотной настройке безопасности у злоумышленников нет никаких шансов попасть на станцию.

Надежен в эксплуатации.

Время работы серверов некоторых наших клиентов исчисляется годами. Это значит, что Asterisk работает несколько лет, ему не требуются никакие перезагрузки или принудительные отключения. А еще это говорит о том, что в районе отличная ситуация с электроэнергией, но это уже не заслуга Asterisk.

Гибкий в настройке.

Зачастую возможности Asterisk ограничивает только фантазия пользователя. Ни один конструктор шаблонов не сравнится с Asterisk по гибкости настройки. Это позволяет решать с помощью Asterisk любые бизнес задачи, даже те, в которых выбор в его пользу не кажется изначально очевидным.

Имеет огромный функционал.

Во многом именно Asterisk показал какой должна быть современная телефонная станция. За многие годы развития функциональность Asterisk расширилась, а все основные возможности по-прежнему доступны бесплатно сразу после установки.

Интегрируется с любыми системами.

То, что Asterisk не умеет сам, он позволяет реализовать за счет интеграции. Это могут быть интеграции с коммерческими телефонными станциями, CRM, ERP системами, биллингом, сервисами колл-трекинга, колл-бэка и модулями статистики и аналитики.

Позволяет телефонизировать офис за считанные часы.

В нашей практике были проекты, реализованные за один рабочий день. Это значит, что утром к нам обращался клиент, а уже через несколько часов он пользовался новой IP-АТС. Безусловно, такая скорость редкость, ведь АТС – инструмент зарабатывания денег для многих компаний и спешка во внедрении не уместна. Но в случае острой необходимости Asterisk готов к быстрому старту.

Отличная масштабируемость.

Очень утомительно постоянно возвращаться к одному и тому же вопросу. Такое часто бывает в случае некачественного исполнения работ или выбора заведомо неподходящего бизнес-решения. С Asterisk точно не будет такой проблемы! Телефонная станция, построенная на Asterisk может быть масштабируема до немыслимых размеров. Главное – правильно подобрать оборудование.

Повышает управляемость бизнеса.

Asterisk дает не просто набор полезных функций, он повышает управляемость организации, качества и комфортности управления, а также увеличивает прозрачность бизнеса для руководства. Достичь этого можно, например, за счет автоматизации отчетов, подключения бота в Telegram, санкционированного доступа к станции из любой точки мира.

Снижает расходы на связь.

Связь между внутренними абонентами IP-АТС бесплатна всегда, независимо от их географического расположения. Также к Asterisk можно подключить любых операторов телефонии, в том числе GSM сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.