Asterisk PJSIP Realtime
Настройка ODBCреалтайм хранилища для объектов PJSIP - AORs, AUTHs, ENDPOINTs.
Требуемые пакеты
yum install mysql-connector-odbc unixODBC unixODBC-devel libmyodbc
Создадим базу данных MySQL
mysqladmin -u root -p create realtimedb
Создайте пользователя и задайте права на БД:
mysql -u root -p -e "grant all privileges on realtimedb.* to db_user@localhost identified by 'db_password';" mysql -u root -p -e "flush privileges;"
Импортируем схему базы данных
wget https://asterisk-pbx.ru/downloads/schema/realtime.sql
mysql -u root -p realtimedb < realtime.sql
Настроим unixODBC
Файл odbcinst.ini создается при установке unixodbc и, как правило, не требует изменений:
# Driver from the mysql-connector-odbc package # Setup from the unixODBC package [MySQL] Description = ODBC for MySQL Driver = /usr/lib/libmyodbc5.so Setup = /usr/lib/libodbcmyS.so Driver64 = /usr/lib64/libmyodbc5.so Setup64 = /usr/lib64/libodbcmyS.so FileUsage = 1
В файле odbc.iniнастроим dsn:
nano /etc/odbc.ini
(файл odbc.ini по умолчанию не создан)
[asterisk] Driver = MySQL Description = MySQL connection to ‘asterisk’ database Server = localhost Port = 3306 Database = realtimedb UserName = db_user Password = db_password
Настроим Asterisk res_odbc
/etc/asterisk/res_odbc.conf
[asterisk] enabled => yes dsn => asterisk username => db_user password => db_password pre-connect => yes
В файле /etc/asterisk/modules.confвключите загрузку модулей odbc:
[modules] preload => res_odbc.so preload => res_config_odbc.so
Проверим подключение в Asterisk:
asterisk -rx 'core reload' && asterisk -rx 'odbc show'
ODBC DSN Settings ----------------- Name: asterisk DSN: asterisk Number of active connections: 1 (out of 1)
Asterisk sorcery.conf
Sorcery определяет иерархию использования данных в Asterisk.
В данном случае мы укажем, что модуль res_pjsipхранит данные перечисленных объектов (aors, auths, endpoints, domain_alias и contact) в реалтайм хранилище:
/etc/asterisk/sorcery.conf [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
формат:
object type [/options] = wizard name, wizard configuration data
где, в данном примере wizard name - realtime, а wizard configuration data - имя объекта из /etc/asterisk/extconfig.conf.
Для использования смешанной конфигурации (реалтайм и статической), используется следующая схема:
endpoint=realtime,ps_endpoints endpoint=config,pjsip.conf,criteria=type=endpoint
Asterisk Realtime extconfig.conf
Свяжем объекты pjsip с реалтайм коннектором res_odbc (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
формат:
объект ⇒ драйвер, имя коннектора, <имя таблицы>
Если имя таблицы не задано, то по умолчанию назначается, как имя объекта.
Подробнее о реалтайм конфигурации - Asterisk Realtime: extconfig.conf
Asterisk конфигурация PJSIP
Транспорт PJSIP лучше определить в текстовой конфигурации:
/etc/asterisk/pjsip.conf
[transport-udp] type = transport protocol = udp bind = 0.0.0.0:5060 local_net = 192.168.0.0/24 external_media_address = extern ip address external_signaling_address = extern ip address allow_reload=true
Заполнение базы данных PJSIP
Для создания внутренних номеров, достаточно заполнить минимальными параметрами три ключевых таблицы:
- ps_aors
insert into ps_aors (id, max_contacts) values (1001, 1);
- ps_auths
insert into ps_auths (id, auth_type, password, username) values (1001, 'userpass', 'Pass', 1001);
- ps_endpoints
insert into ps_endpoints (id, transport, aors, auth, context, disallow, allow, direct_media) values (1001, 'transport-udp', '1001', '1001', 'testing', 'all', 'alaw,ulaw,opus', 'no');
tips&tricks: Импорт из csv файла
Для автоматизации наполнения таблиц MySQL удобно использовать csv файлы.
Создайте следующий csv файл, например при помощи приложения OpenOffice Calc:
1000,transport-udp,1000,1000,from-internal,all,"alaw,ulaw,opus","no", 1001,transport-udp,1001,1001,from-internal,all,"alaw,ulaw,opus","no",
где в каждой новой строке данные уникального номера.
Импортируйте данный в таблицу MySQL:
LOAD DATA INFILE '/usr/src/ps_endpoints.csv' INTO TABLE ps_endpoints FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n';
где /usr/src/ps_endpoints.csvпуть к csv файлу.
Обновление данных
Для обновления уже заполненyых строк, используйте команду UPDATE. Например добавим значение в колонку remove_existing:
update ps_aors set remove_existing = 'yes';
MariaDB [realtimedb]> select id,max_contacts,remove_existing from ps_aors; +------+--------------+-----------------+ | id | max_contacts | remove_existing | +------+--------------+-----------------+ | 1000 | 1 | yes | | 1001 | 1 | yes | +------+--------------+-----------------+