Иван Санников
19.02.2019
11772

Настройка realtime для PJSIP на Centos 7

В рамках данной статьи будет  рассмотрена пошаговая настройка realtime хранилища для канального драйвера PJSIP. Данный механизм позволяет хранить в базе данных большинство конфигураций объектов PJSIP, таких как endpoints, aors, auth, transports, без использования конфигурационного файла pjsip.conf. Используемое программное обеспечение:— Centos 7— Asterisk 16 с PJSIP— Mariadb 5.5 Для соединения Asterisk с базой данных будет использоваться […]

realtime для PJSIP

В рамках данной статьи будет  рассмотрена пошаговая настройка realtime хранилища для канального драйвера PJSIP. Данный механизм позволяет хранить в базе данных большинство конфигураций объектов PJSIP, таких как endpoints, aors, auth, transports, без использования конфигурационного файла pjsip.conf.

Используемое программное обеспечение:
— Centos 7
— Asterisk 16 с PJSIP
— Mariadb 5.5

Для соединения Asterisk с базой данных будет использоваться механизм ODBC. Следовательно необходимо установить следующие зависимости:

yum install python-pip unixODBC unixODBC-devel mysql-connector-odbc pyodbc python-devel mysql-connector-python

Далее необходимо пересобрать Asterisk с поддержкой ODBC. Для этого в пункте menuselect при пересборке Asterisk необходимо выбрать для установки в разделе Resource Modules подпункты res_config_odbc, res_odbc.

Активация odbc при пересборке Asterisk

Также необходимо отметить для установки в PBX Modules, подпункт pbx_realtime

Установка pbx_realtime

Далее необходимо создать базу и пользователя для реалтайм, для этого необходимо залогиниться в mysql командой: mysql -u root -p

База данных создается командой: create database asterisk;

Далее необходимо создать логин и пароль пользователя к созданной базе:

 GRANT ALL PRIVILEGES ON asterisk.* TO ast_user@localhost IDENTIFIED BY 'ast_password';
 FLUSH PRIVILEGES;

Начиная с 12 версии Asterisk использует Alembic — инструмент для удобного управления базами данных при использовании realtime схемы. Alembic — многофункциональный инструмент, который позволяет управлять миграцией схем существующих баз, управления схемами, созданием новых баз данных и таблиц.

Сначала необходимо установить Alembic с помощью утилиты pip:
pip install alembic

Установка Alembic

Далее необходимо перейти в директории с исходным кодом Asterisk, в поддиректорию contrib/ast-db-manage, примерный вид команды выглядит следующим образом:

cd /usr/src/asterisk-16.1.1/contrib/ast-db-manage

В данной директории находится образец конфигурационного файла config.ini.sample, для использования Alembic в этот файл необходимо внести данные подключения к базе, но сначала необходимо сделать копию файла командой cp config.ini.sample config.ini и далее все правки будут вноситься в файл config.ini

В файле необходимо найти параметр sqlalchemy.url, отвечающий за подключение к базе данных, и внести в него тип используемой СУБД, параметры учетной записи mysql и имя базы данных:
sqlalchemy.url = mysql://ast_user:ast_password@localhost/asterisk

Настройка конфигурационного файла утилиты Alembic

Теперь можно запустить Alembic для создания необходимых таблиц:
alembic -c config.ini upgrade head

Пример удачно выполненного заполнения таблиц

При выдаче ошибки:

File "/usr/lib64/python2.7/site-packages/sqlalchemy/dialects/mysql/mysqldb.py", line 104, in dbapi
  return __import__("MySQLdb")
ImportError: No module named MySQLdb

необходимо установить mysql-python, командой: pip install  mysql-python

Ошибка Alembic и установка необходимого модуля

После отработки Alembic необходимо проверить наличие таблиц в базе asterisk:

mysql -u root -p
use asterisk;
show tables;

таблицы для realtime

Следующим шагом необходимо сконфигурировать ODBC. Сначала настраивается способ подключения ODBC к MySQL, для этого необходимо в файле /etc/odbcinst.ini прописать параметры драйвера MySQL (по-молчанию они могут быть уже прописаны)
pic9 (параметры ODBCinst)

Параметры ODBCinst

Далее необходимо указать ODBC какую базу данных использовать, для этого необходимо описать в файле /etc/odbc.ini секцию asterisk, внеся параметры:

[asterisk]
Driver = MySQL
Description = MySQL connection to ‘asterisk’ database
Server = localhost
Port = 3306
Database = asterisk
UserName = ast_user
Password = ast_password
Socket = /var/lib/mysql/mysql.sock
Параметры odbc.ini

Далее необходимо указать модулю res_odbc Asterisk, параметры подключения к базе через ODBC, для этого используется файл /etc/asterisk/res_odbc.conf

[asterisk]
enabled => yes
dsn => asterisk
max_connections => 1
username=>ast_user
password=>ast_password
database=>asterisk
Настройки res_odbc.conf

Далее необходимо запустить odbc в Asterisk, командой asterisk -rx „module reload res_odbc.so“

Просмотреть подключение ODBC в Asterisk можно командой odbc show all

Загрузка модуля ODBC в Asterisk

Для использования Астериском, базы данных для настройки PJSIP через реалтайм, необходимо прописать конструкцию вида {object_type} = {sorcery_wizard_name},{wizard_arguments},в файле /etc/asterisk/sorcery.conf для каждого типа объектов PJSIP.
Необходимо описать пять объектов:
— endpoint
— auth
— aor
— domain
— identify

Подробнее о PJSIP и объектах можно почитать в статье.

Возможно использовать оба механизма хранения параметров PJSIP (реалтайм и файл конфигурации), для этого в sorcery.conf прописываются два типа конфигурации в порядке их использования.

Пример наполнения файла sorcery.conf для использования realtime:
[res_pjsip] ; Realtime PJSIP configuration wizard

endpoint=realtime,ps_endpoints
auth=realtime,ps_auths
aor=realtime,ps_aors
domain_alias=realtime,ps_domain_aliases
contact=realtime,ps_contacts
[res_pjsip_endpoint_identifier_ip]
identify=realtime,ps_endpoint_id_ips

Пример использования двух параметров с приоритетом realtime:

 auth=realtime,ps_auths
 auth=config,pjsip.conf,criteria=type=aor

После того как связали объекты PJSIP с базой данных, необходимо указать Asterisk использовать базу данных вместо конфигурационного файла. Для этого необходимо модифицировать файл /etc/asterisk/extconfig.conf, добавив в него строки:
[settings]

ps_endpoints => odbc,asterisk
ps_auths => odbc,asterisk
ps_aors => odbc,asterisk
ps_domain_aliases => odbc,asterisk
ps_endpoint_id_ips => odbc,asterisk
ps_contacts => odbc,asterisk
/etc/asterisk/extconfig.conf
Обратите внимание что в рамках данной статьи не все объекты PJSIP описаны через реалтайм, например transport необходимо будет описать в стандартном виде через pjsip.conf

Описание объекта transport-udp в файле pjsip.conf (если используется чистая установка Asterisk, данную секцию можно найти в файле и раскоментировать)

 [transport-udp]
type=transport
protocol=udp
bind=0.0.0.0

В следующем примере показано как завести два внутренних номера через realtime.

Для этого необходимо звнести в базу asterisk следующие параметры:
— в таблицу ps_aors: id — внутренний номер и max_connects — колличество одновременных подключений;

— в таблицу ps_auth: id — внутренний номер, auth_type — тип авторизации, password — пароль и username — внутренний номер;

— в таблицу ps_endpoints:   id — внутренний номер, transport — в данном случае секция описанная в файле pjsip.conf, aors — соответсвующий id из таблицы ps_aors, auth — соответсвующий id из таблицы ps_auth, context — используемый контекст, например, from-internal, disallow — запрещаемые кодеки (обычно all), allow — разрешаемые кодеки, direct_media — разрешить/запретить прямую передачу голоса.

Пример заведения двух внутренних номеров 7001 и 7002 через realtime.
Залогиниться в базу и выполнить следующие команды:

INSERT INTO ps_aors (id, max_contacts) VALUES (7001, 1);
INSERT INTO ps_aors (id, max_contacts) VALUES (7002, 1);
INSERT INTO ps_auths (id, auth_type, password, username) VALUES (7001, 'userpass', 'Qwerty123', 7001);
INSERT INTO ps_auths (id, auth_type, password, username) VALUES (7002, 'userpass', 'Qwerty123', 7002);
INSERT INTO ps_endpoints (id, transport, aors, auth, context, disallow, allow, direct_media) VALUES (7001, 'transport-udp', '7002', '7002', 'from-internal', 'all', 'alaw', 'no');
INSERT INTO ps_endpoints (id, transport, aors, auth, context, disallow, allow, direct_media) VALUES (7002, 'transport-udp', '7002', '7002', 'from-internal', 'all', 'alaw', 'no');
В данном примере указаны минимально необходимые параемтры, если посмотреть на количество полей каждой таблицы — то видно что там их гораздо больше.

Обратите внимание, что при использовании realtime нет необходимости перезапускать Asterisk, для применения настроек при заведении новых номеров — все изменения автоматически будут приняты Asterisk`ом.

Для просмотра зарегистрировавшихся внутренних номеров можно воспользоваться командой: pjsip show endpoints, в примере приведенном на скриншоте ниже видно что номер 7001 прошел регистрацию успешно.

pjsip show endpoints

На этом минимальная настройка PJSIP через механизм realtime завершена.

Телефонная книга CallMetrix
Корпоративный телефонный справочник для удобной связи между сотрудниками организации
Скачать описание CallMetrix
Подписаться
Уведомить о
guest
4 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Роман
Роман
29.04.2020 21:20

А что насчёт настроек транков? где и как описать секцию type=registration

Evhenii
Evhenii
10.09.2021 21:59

Вместо python2 поставил python3, команда alembic не работает. Кто-то может подсказать, какую использовать вместо этого?

Jesus
Jesus
23.09.2021 12:49

Присоединяюсь к вопросу, почему не разобрана настройка транка для realtime pjsip?
И где можно найти разбор?

Дмитрий
Дмитрий
14.03.2022 07:43
auth=config,pjsip.conf,criteria=type=aor

а тут не опечатка случайно? в начале auth а в конце aor

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

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

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


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

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 сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.