Тематические термины: Asterisk , MySQL , MariaDB , Ubuntu .
Asterisk PBX поддерживает возможность хранения конфигурации в различных СУБД. В нашей инструкции рассмотрим связку с MariaDB (MySQL) на Linux Ubuntu. Мы будем использовать ODBC коннектор и метод обработки RealTime или в реальном времени (после изменения конфигурации в базе, нам не нужно будет перезапускать сервер телефонии, чтобы применить настройки).
Подразумевается, что Asterisk уже установлен. Процесс установки и базовой настройки Asterisk подробнее рассмотрен в статье Установка Asterisk на Linux .
Установка сервера баз данных
Сборка Астериска
Настройка
Система управления базами данных
ODBC коннектор
Астериск
Перенос настроек в базу
Extensions
Контекст (правила обработки вызова)
CDR (Call Detail Record)
apt install mariadb-server
Разрешаем автозапуск сервиса и запускаем его:
systemctl enable mysql
systemctl start mysql
Ставим пароль для суперпользователя СУБД:
mysqladmin -u root password
Если Asterisk уже установлен и изначально не собирался с учетом MySQL, необходимо выполнить сборку снова. Сначала смотрим версию установленного Asterisk:
asterisk -V
Войдем в каталог, куда будем загружать исходник:
cd /usr/src
Переходим по ссылке https://downloads.asterisk.org/pub/telephony/asterisk и копируем ссылку на нашу версию продукта. После скачиваем ее, например:
wget https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-18-current.tar.gz
Распаковываем архив и переходим в каталог с распакованным содержимым:
tar -zxf asterisk-*.tar.gz
cd asterisk-*/
Конфигурируем исходник:
./configure … —with-mysqlclient
* где … — опции + with-mysqlclient , который отвечает для работу с MySQL.
Например:
./configure —prefix=/usr —sysconfdir=/etc —localstatedir=/var —libdir=/usr/lib64 —with-dahdi —with-pri —with-iconv —with-libcurl —with-speex —with-mysqlclient
Открываем окно дополнительных настроек:
make menuselect
В разделе Add-ons ставим все опции, связанные с mysql:
Выбираем Save & Exit .
Собираем исходник и устанавливаем его:
make
make install
Подключаемся к MariaDB:
mysql -u root -p
Создаем базу данных и пользователя:
> CREATE DATABASE asterisk DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
> CREATE USER ‘asteruser’@’localhost’ IDENTIFIED BY ‘asterpassword123’;
> GRANT ALL PRIVILEGES ON asterisk.* TO ‘asteruser’@’localhost’;
* данными командами мы создали базу данных asterisk и предоставили к ней доступ пользователю asteruser с паролем asterpassword123 .
Загружаем данные в базу:
> use asterisk
> source /usr/src/asterisk-18.21.0/contrib/realtime/mysql/mysql_config.sql
> source /usr/src/asterisk-18.21.0/contrib/realtime/mysql/mysql_cdr.sql
> source /usr/src/asterisk-18.21.0/contrib/realtime/mysql/mysql_voicemail.sql
* где /usr/src/asterisk-18.21.0 — путь до распакованного исходника.
> q
Переходим по ссылке https://dev.mysql.com/downloads/connector/odbc и выбираем нашу версию операционной системы:
Кликаем по Download и копируем ссылку на скачивание файла:
В командной строке скачиваем файл, воспользовавшись ссылкой:
wget https://dev.mysql.com/get/Downloads/Connector-ODBC/5.3/mysql-connector-odbc-5.3.9-linux-ubuntu16.04-x86-64bit.tar.gz
Распаковываем архив и переходим в него:
tar -xvf mysql-connector-odbc-*.tar.gz
cd mysql-connector-odbc-*
Копируем драйверы:
cp lib/libmyodbc5* /usr/lib64
Устанавливаем odbc драйвер:
./bin/myodbc-installer -d -a -n «MySQL» -t «DRIVER=/usr/lib64/libmyodbc5w.so;»
Для подключения астериска к базе, создаем DSN:
./bin/myodbc-installer -s -a -c2 -n «Asterisk» -t «DRIVER=MySQL;SERVER=127.0.0.1;DATABASE=asterisk;UID=asteruser;PWD=asterpassword123»
* где MySQL — имя драйвера, который мы создали на предыдущем шаге; asterisk , asteruser , asterpassword123 — соответственно, имя базы данных, имя пользователя и пароль для подключения к СУБД.
* в случае необходимости, отредактировать DSN можно в файле /etc/odbc.ini.
Делаем тестовое подключение:
isql Asterisk
+—————————————+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+—————————————+
SQL> show tables
+—————————————————————————+
| Tables_in_asterisk |
+—————————————————————————+
| alembic_version |
| cdr |
| extensions |
| iaxfriends |
| meetme |
…
SQL> quit
Открываем конфигурационный файл с настройкой модулей:
vi /etc/asterisk/modules.conf
Добавляем в него следующие строки:
preload => res_odbc.so
preload => res_config_odbc.so
Настраиваем подключение к базе через DSN:
vi /etc/asterisk/res_odbc.conf
[asterisk-conf]
enabled => yes
dsn => Asterisk
username => asteruser
password => asterpassword123
pre-connect => yes
max_connections => 100
sanitysql => select 1
Перезапускаем Asterisk:
systemctl restart asterisk
Подключаемся к его консоли:
asterisk -r
Проверяем, что астер увидел odbc:
odbc show
На текущем шаге, Asterisk будет использовать конфигурационные файлы. Рассмотрим процесс настройки использования СУБД с добавлением настроек в базу.
Редактируем файл extconfig.conf:
vi /etc/asterisk/extconfig.conf
[settings]
sipusers => odbc,asterisk-conf,sippeers
sippeers => odbc,asterisk-conf,sippeers
* мы добавили две строчки в раздел settings, которые говорят астериску искать пиры через odbc , настройку asterisk-conf .
Перезапускаем астер:
systemctl restart asterisk
В дальнейшем, все номера, которые мы будем добавлять в базу данных начнут использоваться в режиме реального времени (без необходимости перезапускать телефонную станцию).
Подключаемся к базе данных:
mysql -uasteruser -pasterpassword123
Добавим 4-е коротких номера:
> INSERT INTO asterisk.sippeers
(`name`, `defaultuser`, `host`, `type`, `context`, `secret`, `nat`, `callgroup`, `language`, `disallow`, `allow`, `regexten`, `call-limit`)
VALUES
(‘1001’, ‘1001’, ‘dynamic’, ‘friend’, ‘outcalling’, ‘1234’, ‘no’, ‘1’, ‘ru’, ‘all’, ‘alaw,ulaw’, ‘1001’, ‘4’),
(‘1002’, ‘1002’, ‘dynamic’, ‘friend’, ‘outcalling’, ‘1234’, ‘no’, ‘1’, ‘ru’, ‘all’, ‘alaw,ulaw’, ‘1002’, ‘4’),
(‘1003’, ‘1003’, ‘dynamic’, ‘friend’, ‘outcalling’, ‘1234’, ‘no’, ‘1’, ‘ru’, ‘all’, ‘alaw,ulaw’, ‘1003’, ‘4’),
(‘1004’, ‘1004’, ‘dynamic’, ‘friend’, ‘outcalling’, ‘1234’, ‘no’, ‘1’, ‘ru’, ‘all’, ‘alaw,ulaw’, ‘1004’, ‘4’);
* в данном примере мы создаем 4 номера 1001 , 1002 , 1003 , 1004 с правилом обработки вызова в диалплане outcalling и паролем 1234 .
Обновить запись можно командой UPDATE, например:
> UPDATE asterisk.sippeers SET `secret`=’password’ WHERE `name`=’1001′;
Проверить состояние абонентов и транков SIP можно подключившись к консоли Asterisk:
asterisk -r
*CLI> sip show peers
Открываем следующий файл:
vi /etc/asterisk/extconfig.conf
Добавляем в раздел [settings]:
[settings]
…
extensions => odbc,asterisk-conf,extensions
Открываем файл extensions.conf:
vi /etc/asterisk/extensions.conf
Создаем диалплан (группу правил):
[outcalling]
switch => Realtime/outcalling@extensions
Перезапускаем астер:
systemctl restart asterisk
Подключаемся к базе и добавляем правило в диалплан outcalling:
mysql -uasteruser -pasterpassword123
> INSERT INTO asterisk.extensions VALUES (NULL, ‘outcalling’, ‘_XXXX’, ‘1’, ‘DIAL’, ‘SIP/${EXTEN},,m’);
Теперь настроем хранение журнала вызовов в базе данных.
Открываем следующий файл:
vi /etc/asterisk/cdr_adaptive_odbc.conf
Добавляем в самый низ:
[cdr]
connection=asterisk-conf
table=cdr
alias src => source
alias channel => source_channel
alias dst => dest
alias dstchannel => dest_channel
Перезапускаем астериск:
systemctl restart asterisk
Пробуем позвонить через наш астериск и после звонка смотрим записи в базе:
mysql -uasteruser -pasterpassword123 -e «SELECT * FROM asterisk.cdr»
Получим примерно следующее:
| accountcode | src | dst | dcontext | clid | channel | dstchannel | lastapp | lastdata | start | answer | end | duration | billsec | disposition | amaflags | userfield | uniqueid | linkedid | peeraccount | sequence |
+————-+——+——+————+—————+——————-+——————-+———+————-+———————+———+———————+———-+———+————-+—————+————+—————+—————+————-+———-+
| NULL | 1001 | 1004 | outcaling | «1001» <1001> | SIP/1001-00000000 | SIP/1004-00000001 | Dial | SIP/1004,,m | 2017-12-07 16:11:24 | NULL | 2017-12-07 16:11:32 | 7 | 0 | NO ANSWER | DOCUMENTATION | NULL | 1512652284.0 | 1512652284.0 | NULL | 0 |
Или в более читаемом виде:
Поле | Пример значения | Описание поля |
---|---|---|
accountcode | NULL | Дополнительное поле для идентификации клиента. Может использоваться, если не хватает стандартного набора параметров. |
src | 1001 | Кто звонит. |
dst | 1004 | Кому позвонили. |
dcontext | outcaling | Контекст (группа правил обработки звонка). |
clid | «1001» <1001> | Caller identification или CID. Состоит из имени и номера звонящего. |
channel | SIP/1001-00000000 | Канал, который принимает вызов. |
dstchannel | SIP/1004-00000001 | Канал исходящего вызова. |
lastapp | Dial | Dialplan обработки вызова. |
lastdata | SIP/1004,,m | Что передавалось в lastapp. |
start | 2017-12-07 16:11:24 | Начало звонка. |
answer | NULL | Время, за которое подняли трубку. NULL — трубку не подняли. |
end | 2017-12-07 16:11:32 | Дата и время окончания звонка. |
duration | 7 | Длительность звонка в секундах. |
billsec | 0 | Время разговора (с момента поднятия трубки). |
disposition | NO ANSWER | Состояние вызова. Возможные варианты: — ANSWERED — отвечен. — NO ANSWER — ответа нет. — CONGESTION / FAILED — ошибка вызова. — BUSY — занято. |
amaflags | DOCUMENTATION | Не используется. |
userfield | NULL | Пользовательские параметры для канала. |
uniqueid | 1512652284.0 | Уникальный идентификатор канала звонящего. |
linkedid | 1512652284.0 | Уникальный идентификатор канала звонящего. |
peeraccount | NULL | Код учетной записи канала Стороны 2. |
sequence | 0 | Номер последовательности канала. |
Также существуют продукты, позволяющие в графическом интерфейсе смотреть CDR. Например, веб-приложение Asterisk CDR Viewer Mod.
Zulip — программное обеспечение для реализации корпоративного чата. Разработан в 2012 году, в 2014 был…
Zookeeper — cервис-координатор, который позволяет обеспечить контроль синхронизации данных. Разработан на Java компанией Apache Software…
Zimbra — программное обеспечение для реализации почтового сервиса или, если сказать точнее, автоматизации совместной деятельности…
Zabbix — бесплатная система мониторинга. Позволяет отслеживать состояние сетевых узлов, компьютеров и серверов. Возможности: Поддержка…
YouTube — компания-владелец одноименного портала для просмотра и хранения видео. Чтобы пользоваться данным порталом достаточно…
Yota — провайдер, предоставляющий доступ к сети Интернет по беспроводной связи. Впервые, сервис начал работать…