Меню

Настройка cdr asterisk odbc



Хранение конфига Asterisk в СУБД MySQL / MariaDB

Asterisk PBX поддерживает возможность хранения конфигурации в различных СУБД. В нашей инструкции рассмотрим связку с MariaDB (MySQL) на Linux Ubuntu. Мы будем использовать ODBC коннектор и метод обработки RealTime или в реальном времени (после изменения конфигурации в базе, нам не нужно будет перезапускать сервер телефонии, чтобы применить настройки).

Процесс установки и базовой настройки Asterisk подробнее рассмотрен в статье Установка Asterisk на Linux.

Установка СУБД

apt-get install mariadb-server

Разрешаем автозапуск сервиса и запускаем его:

systemctl enable mysql

systemctl start mysql

Ставим пароль для суперпользователя СУБД:

mysqladmin -u root password

Сборка Asterisk

Если Asterisk уже установлен и изначально не собирался с учетом MySQL, необходимо выполнить сборку снова. Сначала смотрим версию установленного Asterisk:

Переходим по ссылке https://downloads.asterisk.org/pub/telephony/asterisk и копируем ссылку на нашу версию продукта. После скачиваем ее, например:

Распаковываем архив и переходим в каталог с распакованным содержимым:

tar -xvf asterisk-*.tar.gz

* где . — опции + 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

Открываем окно дополнительных настроек:

В разделе Add-ons ставим все опции, связанные с mysql:

Выбираем Save & Exit.

Собираем исходник и устанавливаем его:

Настройка

Подключаемся к MariaDB:

Создаем базу данных и пользователя:

> CREATE DATABASE asterisk DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

> GRANT ALL PRIVILEGES ON asterisk.* TO ‘asteruser’@’localhost’ IDENTIFIED BY ‘asterpassword123’;

* данными командами мы создали базу данных asterisk и предоставили к ней доступ пользователю asteruser с паролем asterpassword123.

Загружаем данные в базу:

* где /usr/src/asterisk-15.1.2 — путь до распакованного исходника.

ODBC коннектор

Переходим по ссылке https://dev.mysql.com/downloads/connector/odbc и выбираем нашу версию операционной системы:

Кликаем по Download и копируем ссылку на скачивание файла:

В командной строке скачиваем файл, воспользовавшись ссылкой:

Распаковываем архив и переходим в него:

tar -xvf mysql-connector-odbc-*.tar.gz

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.

Делаем тестовое подключение:

SQL> show tables

Asterisk

Открываем конфигурационный файл с настройкой модулей:

Добавляем в него следующие строки:

preload => res_odbc.so
preload => res_config_odbc.so

Настраиваем подключение к базе через DSN:

[asterisk-conf]
enabled => yes
dsn => Asterisk
username => asteruser
password => asterpassword123
pre-connect => yes
max_connections => 100
sanitysql => select 1

systemctl restart asterisk

Подключаемся к его консоли:

Проверяем, что астер увидел odbc:

Добавление настроек в базу

На текущем шаге, Asterisk будет использовать конфигурационные файлы. Рассмотрим процесс настройки использования СУБД с добавлением настроек в базу.

Создание extensions

Редактируем файл 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:

*CLI> sip show peers

Правила вызова (контекст)

Открываем следующий файл:

Добавляем в раздел [settings]:

[settings]
.
extensions => odbc,asterisk-conf,extensions

Открываем файл 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/$,,m’);

Call Detail Record (CDR)

Теперь настроем хранение журнала вызовов в базе данных.

Открываем следующий файл:

Добавляем в самый низ:

[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 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» | 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» 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 Время разговора (с момента поднятия трубки).
disposition NO ANSWER Состояние вызова. Возможные варианты:
— ANSWERED — отвечен.
— NO ANSWER — ответа нет.
— CONGESTION / FAILED — ошибка вызова.
— BUSY — занято.
amaflags DOCUMENTATION Не используется.
userfield NULL Пользовательские параметры для канала.
uniqueid 1512652284.0 Уникальный идентификатор канала звонящего.
linkedid 1512652284.0 Уникальный идентификатор канала звонящего.
peeraccount NULL Код учетной записи канала Стороны 2.
sequence Номер последовательности канала.

Также существуют продукты, позволяющие в графическом интерфейсе смотреть CDR. Например, веб-приложение Asterisk CDR Viewer Mod.

Источник

Подключение Asterisk к MySQL через драйвер ODBC

В первых версиях Asterisk для сбора и хранения данных CDR и CEL в MySQL использовался драйвер cdr_mysql.so и cel_mysql.so, соответственно. В настоящий момент эти драйверы устарели и разработчики рекомендуют использовать технологию ODBC.

ODBC (Open Database Connectivity) — это программный интерфейс (API) доступа к базам данных, разработанный фирмой Microsoft, в сотрудничестве с Simba Technologies на основе спецификаций Call Level Interface (CLI), который разрабатывался организациями SQL Access Group, X/Open и Microsoft. Впоследствии CLI был стандартизован ISO. Стандарт CLI призван унифицировать программное взаимодействие с СУБД, сделать его независимым от поставщика СУБД и программно-аппаратной платформы. Спасибо Википедии.

Проще говоря, драйвер ODBC позволяет подключать какое-либо приложение или программу (в нашем случае это Asterisk) к различным базам данных.

В этой статье мы рассмотрим, как подключить Asterisk к MySQL для записи CDR на сторонний сервер.

— Сервер с Asterisk 13, на ОС Centos 6.5 (x86_64) / Ubuntu Server 14.10 (x86_64)

— Сервер с MySQL 5.5, на какой ОС нам в принципе не важно.

Для установки драйвера на Red Hat подобных ОС, необходимо ввести следующую команду:

Для Debian подобных ОС, необходимо выполнить следующую команду:

Далее необходим отредактировать файл /etc/odbcinst.ini. В Centos он уже существует, в Ubuntu он существует, но файл пустой.

Проверьте правильно ли указаны пути к драйверам ODBC.

1) Для Centos x86_x64:

Далее проверяем видит ли ODBC драйвер для MySQL. Вводим команду

и должны увидеть следующее:

После этого отредактируем файл /etc/odbc.ini, это файл используется для создания идентификатора для Asterisk. Т.е. Asterisk, в своей конфигурации, будет ссылается на название, указанное в этом файле.

Т.е. в нашем примере, Asterisk в своих конфигурационных файлах будет использовать идентификатор [MySQL-asteriskcdrdb].

Если мы хотим подключиться к сторонней базе данных, т.е. установленной на другом сервере, нежели Asterisk, то в файле /etc/odbc.ini необходимо просто изменить строчку server=localhost на server=IPадресБД (в нашем примере 192.168.7.17)

Далее необходимо проверить сможем ли мы подключиться к базе данных, используя утилитку ISQL. Введите следующую команду и вы должны увидеть схожий вывод.

Теперь перейдем к настройкам MySQL.

1) Подключаемся к MySQL

2) Создадим базу данных asteriskcdrdb

3) Переходим в базу данных

4) Создадим две таблицы CDR и CEL.

5) Дадим права пользователю asterisk на работы с БД asteriskadcdb

Если сервер с БД и Asterisk разные машины, то необходимо внести такую запись.

Далее необходимо пересобрать Asterisk, выбрав модули связанные с odbc.

В файл /etc/asterisk/res_odbc.conf добавляем следующие строчки.

Параметр DSN отвечает за подключение Asterisk к базе данных, указанной в файле /etc/odbc.ini. Этот параметр говорит Asterisk, что необходимо открыть и поддерживать соединение с базой данных при загрузке модуля res_odbc.so.

Перезапустим сервис Asterisk

Через CLI Asterisk проверим подключение к БД через драйвер ODBC/

Далее отредактируем файлы, связанные с CDR и CEL.

Источник

Asterisk CDR — запись в базу данных MySQL через cdr_mysql

Причины записи CDR в базу данных MySQL

В первую очередь возникает вопрос — зачем вообще нужно записывать CDR в базу данных MySQL сервера? Дело в том, что в отличие от многих других баз, asterisk может делать запись в mysql собственными средствами, без дополнительных программ. Кроме того, установка и настройка баз MySQL является простой операцией, а сама распространенность баз данных MySQL дает возможность рекомендовать этот формат баз данных для хранения статистики звонков — CDR.

Этапы настройки записи CDR в MySQL

Настройка сохранения истории звонков asterisk (CDR) в базу данных формата MySQL состоит из двух частей, каждая из которых состоит из нескольких этапов. Части могут настраиваться независимо и параллельно (до определенного момента).

Часть 1. Установите и настройте MySQL сервер

  1. Установите MySQL сервер
  2. Создайте базу данных для asterisk
  3. Создайте таблицу для asterisk

Часть 2 — настройка asterisk

  1. Установите компоненты для работы с MySQL: MySQL client и библиотеку для поддержки MySQL
  2. Пересоберите asterisk для работы с MySQL — cdr_mysql
  3. К этому моменту должна быть выполнена часть 1.
  4. Проверьте подключение к MySQL Server
  5. Настройте asterisk для работы с MySQL

И отдельным пунктом вынесены возможные ошибки, возникающие в процессе настройки MySQL / asterisk.

Установка и настройка MySQL

Установка MySQL Server

Для установки сервера MySQL в Debian достаточно набрать команду:
apt-get install mysql-server

В операционной системе RHEL / CentOS также все довольно просто:
yum install mysql-server

При этом будет установлена текущая (актуальная) версия mysql сервера (на момент написания статьи это версия 5.5).
В процессе установки будет необходимо задать пароль пользователя root для mysql. Не забудьте этот пароль, он Вам еще понадобится!
Для установки и первоначальной настройки MySQL сервера Вы можете воспользоваться статьей «Установка и первоначальная настройка MySQL в linux».

Запуск сервиса MySQL

Для запуска сервиса в CentOS выполните команду:
service mysqld start

Подключение к серверу SQL для выполнения запросов

Для подключения к MySQL серверу (чтобы можно было выполнять команды SQL) Вы можете воспользоваться любыми своими имеющимися инструментами, например PHPMyAdmin. Либо же можете воспользоваться встроенными средствами командной строки из пакета MySQL — mysql:
mysql -u имя-пользователя-SQL -p
например:
mysql -u root -p
после нажатия Enter будет запрошен пароль для пользователя. После ввода пароля и нажатия Enter, будет выведено приглашение MySQL:
mysql>_

Теперь Вы можете выполнять запросы SQL.

Создание базы данных (и пользователя этой базы данных) для asterisk cdr

Для создания базы данных (назовем ее asteriskcdr, Вы можете выбрать любое другое имя) выполните команду SQL:

Если Вы хотите создать отдельного пользователя (например, asterisk_user) для работы с этой базой данных, при этом выставить ему пароль например, asterisk_password, выполните команду SQL:

Теперь Вам необходимо назначить этому вновь созданному пользователю asterisk_user права для доступа к базе данных (например, права только для добавления / обновления записей и для просмотра базы). Для этого выполните команду SQL:

Если же Вы хотите дать этому пользователю полные права на базу данных, вместо предыдущей команды выполните эту команду SQL:

Если Вы хотите, чтобы пользователь MySQL мог подключаться удаленно к серверу MySQL (с другого компьютера), то (при создании, а также предоставлении ему прав доступа к БД) его имя следует указывать в формате:
имя-пользователя@хост
например:
asterisk_user@192.168.1.1

Если же Вы не знаете, с каких IP будет подключаться пользователь, либо Вам необходимо, чтобы он подключался с любых IP адресов, укажите имя пользователя в следующем формате:
имя-пользователя@’%’
например:
asterisk_user@’%’

В этом случае команда для предоставления полных прав [на работу с MySQL] пользователю asterisk_user, который может подключаться к MySQL с любых IP адресов, будет выглядеть так:

Создание таблицы для asterisk

Для создания таблицы asterisk CDR подключитесь к созданной базе данных и выполните следующий запрос:

Обратите внимание: в этой таблице (в отличие от таблиц asterisk cdr, представленных в интернете) присутствуют поля: start, answer, end. Эти поля присутствуют в самом CDR, имеют место быть в таблице CDR для Microsoft SQL, но почему-то отсутствуют в большинстве рекомендаций по созданию таблиц CDR для баз MySQL.
Дело в том, что (как указано на сайте voip-info.org), любые стандартные столбцы CDR в базе данных MySQL могут быть исключены простым удалением из таблицы (или переименованием столбца). При этом никаких сообщений об ошибках не возникает — просто соответствующая информация не пишется в базу данных (Standard columns may also be excluded now, simply by dropping the column name from the table, renaming the column, or aliasing the cdrname from a nonexistent variable (e.g. foo => amaflags)).
Поэтому в случае, если в Вашей таблице нет столбцов answer и end (вместо start можно использовать calldate), то рекомендую их туда добавить (иначе время ответа на звонок придется вычислять путем сложения и вычитания нескольких других полей, что далеко не всегда удобно).

Обратите также внимание, что в новых версиях asterisk [не уверен, но предполагаю, что речь идет об asterisk 10-й, 11-й версии и новее] столбец calldate является копией столбца start, в отличие от старых версий asterisk, где столбец calldate является копией столбца end.

Настройка asterisk

Установка компонентов для работы asterisk с MySQL: mysql client и библиотеки mysql для сборки asterisk

Для установки клиента mysql (неважно, установлен ли asterisk на том же компьютере, что и сервер MySQL или нет) запустите в debian следующую команду:
apt-get install mysql-client

В случае, если у Вас установлен RHEL / CentOS, выполните такую команду:
yum install mysql

Теперь необходимо установить библиотеки mysql. Они дадут возможность собирать программы, предназначенные для работы с MySQL.
Для debian это будет команда:
apt-get install libmysqlclient-dev

Для RHEL / CentOS выполните:
yum install mysql-devel

Повторная сборка asterisk для работы с MySQL

Перейдите в папку с исходными кодами (откуда устанавливался asterisk) и запустите команду конфирурирования:
cd /usr/src/asterisk-11.4.0/
./configure
make menuselect

В открывшемся меню включите использование следующих компонентов:

  • Add-ons => res_config_mysql
  • Add-ons => cdr_mysql

После выхода (с сохранением) из меню выбора компонентов выполните сборку и повторную установку asterisk:
make
make install

Команду make samples не делать ни в коем случае, это сотрет имеющиеся конфигурационные файлы! Команду make config также выполнять не нужно, поскольку [предполагается, что] asterisk уже установлен и настроен в Вашей системе.

Теперь необходимо перезапустить сервис астериска для того, чтобы свежеустановленный asterisk начал свою работу.

Проверка связи с MySQL Server

Давайте проверим работу с сервером MySQL, подключившись к нему с помощью mysql клиента.
Для этого из командной строки запустите:
mysql —host= имя-сервера-MySQL -u имя-пользователя-БД -p
например:
mysql —host=192.168.1.1 -u asterisk_user -p
при этом будет запрошен пароль пользователя asterisk_user, укажите его.

При успешном подключении появится приглашение:
mysql>
теперь можно ввести команды mysql, например:
exit — для выхода

Настройка asterisk для работы с MySQL Server

Для настройки asterisk откройте файл /etc/asterisk/cdr_mysql.conf и впишите туда подобные строки (здесь указан лишь пример):

Вы можете раскомментировать нужные Вам строки или вписать новые.

После выполнения вышеуказанных действий запустите asterisk и попробуйте подключить модуль cdr_mysql.so. Для этого запустите подключение к asterisk:
asterisk -rvvv
И из командной строки asterisk (asterisk CLI) выполните следующую команду:
module load cdr_mysql.so
При возникновении ошибок решение см. в конце статьи. В случае, если Вы исправили ошибку, и Вам необходимо выгрузить и повторно загрузить модуль, выполните команды:
module unload cdr_mysql.so
module load cdr_mysql.so
В случае успеха asterisk может выдать несколько уведомлений и загрузит модуль. Убедиться в том, что модуль загружен, можно выполнив команду:
module show like cdr_mysql.so
После этого перезагрузите конфигурацию CDR и убедитесь, что звонки фиксируются в базе данных. Для перезагрузки конфигурации CDR выполните команды:
reload cdr
reload cdr_mysql.so
или
reload
На этом настройка asterisk закончена.

Возможные ошибки, возникающие в процессе настройки MySQL / asterisk

Error 1130 (HY000): Host ‘. ‘ is not allowed to connect to this MySQL server

Если Вы подключаетесь к серверу MySQL удаленно (с другого компьютера), то может возникать подобное сообщение. Данное сообщение означает, что сервер MySQL не настроен на возможность подключения к нему извне (точнее, что пользователю, под которым Вы пытаетесь подключиться, не разрешено подключение извне). Вам необходимо создать нового пользователя вида user@host, например asterisk_user@192.168.1.1 или asteriskcdr@’%’ (второй вариант дает возможность пользователю asteriskcdr подключаться с любого IP адреса).

Error 1045 (28000): Access denied for user ‘. ‘ (using password: NO)

При попытке подключения к серверу MySQL с помощью клиента mysql появляется указанное выше сообщение: это (вероятнее всего) означает, что Вы не задали пароль пользователя MySQL при подключении к серверу.

Error 1045 (28000): Access denied for user ‘. ‘ (using password: YES)

Если при попытке подключения к серверу MySQL с помощью клиента mysql появляется указанное выше сообщение, то это означает, что Вы указали неверный пароль для пользователя MySQL при подключении к серверу.

Error 2003 (HY000): Can’t connect to MySQL server on ‘. ‘ (113)

Если при попытке подключения к серверу MySQL с помощью клиента mysql (с другого компьютера) появляется указанное выше сообщение, это значит, что у Вас закрыт доступ к порту MySQL данного компьютера. Вероятнее всего, это вызвано неверной настройкой (а точнее, отсутствием настройки на работу с MySQL) службы iptables. Для начала попробуйте просто отключить iptables (остановить службу) и попробуйте подключиться ещё раз.

Источник

Adblock
detector