Как связать Asterisk с Mysql через коннектор ODBC
В рабочей практике приходится сталкиваться с различными задачами, где необходимо во время вызова обращаться к базам данных из диалплана. Стандартная команда MYSQL не совсем удобна. Плюс ко всему необходимо хранить историю вызовов, а также событий звонков астериска. Для этого используются таблицы cdr и cel соответственно. Для всего этого используется драйвер ODBC. ODBC – программный интерфейс […]
В рабочей практике приходится сталкиваться с различными задачами, где необходимо во время вызова обращаться к базам данных из диалплана. Стандартная команда MYSQL не совсем удобна. Плюс ко всему необходимо хранить историю вызовов, а также событий звонков астериска. Для этого используются таблицы cdr и cel соответственно. Для всего этого используется драйвер ODBC.
ODBC – программный интерфейс для работы с БД. Разработан был компанией Microsoft и Simba Technologies. Этот интерфейс позволяет подключать сторонние программные продукты к БД.
В данной статье будет рассмотрена установка и конфигурирование драйверов ODBC на систему Centos 6.9. А также установка Asterisk c модулями odbc и настройка asterisk для работы с mysql.
В данном разделе будет рассмотрен порядок действий для установки драйвера ODBC, а также настройка параметров для корректной работы драйвера.
Для работы драйвера необходимо установить ряд пакетов из репозиториев:
- libtool
- libtool-ltdl
- libtool-ltdl-devel
- mysql-connector-odbc
- libiodbc
- libiodbc-devel
yum install libtool libtool-ltdl libtool-ltdl-devel mysql-connector-odbc libiodbc libiodbc-devel
Если вы не знаете установлены эти пакеты у вас или нет. Можете воспользоваться следующей командой:
yum list installed | egrep 'odbc|libtool|mysql'
Она выводит список всех установленных пакетов. В названии которых встречаются слова odbc или libtool или mysql.
![](https://voxlink.ru/wp-content/uploads/2019/07/pic1-2.png)
В данном разделе будет описана пошаговая настройка системы для работы драйвера ODBC. Расскажем, какие файлы нужно редактировать для внесения настроек, как проверить правильность внесенных данных, а также какие пункты нужно менять в изменяемых файлах.
После установки драйвера необходимо указать в конфигурационном файле /etc/odbcinst.ini пути к файлам драйверов. Для этого необходимо найти установленные файлы:
- libmyodbc5.so
- libodbcmyS.so
- libmyodbc8w.so — файл драйвера кодировки unicode
- libmyodbc8a.so – файл драйвера кодировки ANSI
Для того, чтобы найти эти файлы воспользуемся консольной утилитой find.
# locate libmyodbc5.so
# locate libodbcmyS.so
# locate libmyodbc8w.so
# locate libmyodbc8a.so
Перепишем указанные директории в файл настроек ODBC. Для этого откроем его любым текстовым редактором, в данном случае это vim
# vim /etc/odbcinst.ini
Теперь надо указать пути к файлам. За это отвечают параметры Driver, Driver64, Setup, Setup64. Названия соответствуют разрядности системы i686 и x86_64. В итоге должно пучиться как на примере ниже:
[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
[MySQL ODBC 8.0 Unicode Driver]
Driver = /usr/lib64/libmyodbc8w.so
UsageCount = 1
[MySQL ODBC 8.0 ANSI Driver]
Driver = /usr/lib64/libmyodbc8a.so
UsageCount = 1
![](https://voxlink.ru/wp-content/uploads/2019/07/pic2-3.png)
После сохранения данных проверим, область видимости драйвера командой
# odbcinst -q -d
В итоге должно отобразиться следующее:
# odbcinst -q -d
[MySQL]
[MySQL ODBC 8.0 Unicode Driver]
[MySQL ODBC 8.0 ANSI Driver]
Если после выполнения данной команды у вас в консоле отобразились данные строки, то вы всё верно настроили. Теперь надо редактировать файл, где будет указан идентификатор подключения к БД — /etc/odbc.ini. Важные поля:
- [<DSN_name>] — DSN имя для подключения к mysql (в дальнейшем будет использоваться в конфигурациях Asterisk)
- driver – указывается название драйвера для связи с Mysql (прописывается имя указанной в файле /etc/odbcinst.ini)
- server – адрес хоста mysql сервера
- database – База данных для подключения
- Port – порт подключения к mysql
- Socket – файл сокета подключения к mysql
- Charset –указывается кодировка записей
После редактирования должно получиться следующее:
[MySQL-asteriskcdrdb]
Description=MySQL connection to 'asteriskcdrdb' database
driver=MySQL ODBC 8.0 ANSI Driver
server=localhost
database=asteriskcdrdb
Port=3306
Socket=/var/lib/mysql/mysql.sock
option=3
Charset=utf8
![](https://voxlink.ru/wp-content/uploads/2019/07/pic3-3.png)
Проверим подключение к Mysql через указанный [<DSN_name>], который был прописал в файл odbc.ini. Проверить подключени можно следующей командой:
# echo "select 1" | isql -v <DSN_name> <USERNAME> <PASSWORD>
Должно вывести следующее как на скриншоте ниже
![](https://voxlink.ru/wp-content/uploads/2019/07/pic4-2.png)
Установка Asterisk c модулями ODBC
Не всегда администраторы, поддерживающие asterisk, собирают его с модулями необходимыми для работы с odbc. Поэтому в данном пункте будет показано, как пересобрать астериск с нужными модулями.
Для того, чтобы пересобрать asterisk, нужно перейти в директорию исходных файлов Asterisk. В данном случае — это /usr/src/asterisk-13.21.0/.
Поскольку астериск уже установлен, поэтому заново выполнять команду ./configure не нужно. Поэтому перейдем к следующему шагу make menuselect.
![](https://voxlink.ru/wp-content/uploads/2019/07/pic5-3-1024x596.png)
Теперь необходимо выбрать все модули, в которых в названии есть odbc.
Ниже приведена таблица с названием раздела и именем модуля.
Call Detail Recording | cdr_odbc cdr_adaptive_odbc |
Channel Event Logging | cel_odbc |
Resource Modules | res_odbc res_odbc_transaction |
![](https://voxlink.ru/wp-content/uploads/2019/07/pic9-1.png)
![](https://voxlink.ru/wp-content/uploads/2019/07/pic10.png)
![](https://voxlink.ru/wp-content/uploads/2019/07/pic11.png)
Далее, как и при обычной установке астериска выполняем Save & Qiut, make, make install.
Конфигурирование Asterisk для работы с Mysql
Для того, чтобы Asterisk писал в БД события и историю вызовов необходимо его сконфигурировать. Для этого надо указать настройки в нескольких файлах, которые находятся в директории /etc/asterisk. В данном разделе будет описано в какие файлы необходимо внести изменения, какие данные необходимо внести в них, а также возможность проверки правильности настроек.
Первым отредактируем файл res_odbc.conf. Если вы используете FreePBX, вам необходимо редактировать файл res_odbc_additional.conf.
В этом файле указывается:
- новый [<DSN_name>], который в дальнейшем будет использоваться в другом конфигурационном файле астериска
- enabled – включение/отключение доступности текущего подключения к Mysql
- dsn – DSN_name драйвера ODBC используемое для подключения к Mysql (указывается dsn имя, прописанное в файле /etc/odbc.ini)
- pre—connect – возможность подключения при старте Астериска
- username – пользователь mysql. (Если используется FreePBX, имя пользователя можно взять в файле /etc/freepbx.conf)
- password – пароль пользователя mysql (Если используется FreePBX его можновзять в файле /etc/freepbx.conf)
- database – имя базы данных, к которой астериск будет подключаться
В итоге должно получиться следующее:
[asteriskcdrdb]
enabled=>yes
dsn=>MySQL-asteriskcdrdb
pre-connect=>yes
username=><MYSQL_USERNAME>
password=><MYSQL_PASSWORD
database=>asteriskcdrdb
![](https://voxlink.ru/wp-content/uploads/2019/07/pic6-2-1024x297.png)
Сохраняете изменения в этом файле, далее нужно вносить изменения в файл cdr_odbc.conf (если установлен FreePBX – cdr_adaptive_odbc.conf).
- [<connection_name>] — имя подключения к БД
- connection – Имя dsn. Которое указывалось в res_odbc.conf
- loguniqueid – разрешить логирование uniquieid
- table – таблица для заполнения истории звонков
В итоге должно получиться как на скриншоте ниже:
![](https://voxlink.ru/wp-content/uploads/2019/07/pic7-2.png)
Далее сохраняются изменения и необходимо их применить. Для этого открывается консоль астериска командой asterisk —rvvvv. Из этой консоли выполнить две команды:
- module reload res_odbc.so — применяет изменения файла res_odbc.conf
- module reload cdr_odbc.so — применяет изменения файла cdr_odbc.conf
> module reload res_odbc.so
> module reload cdr_odbc.so
Проверить правильность настроек можно командой odbc show из консоли астериска. Если выполнено все правильно то должно получиться как на скриншоте ниже.
![](https://voxlink.ru/wp-content/uploads/2019/07/pic8-2.png)
После выполнения указанных выше действий вы сможете просматривать историю вызовов (CDR – call detail records). Также можно выполнять действия с данной таблицей из диалплана обращаясь к ней встроенной функцией астериска CDR()— что позволяет гибко оперировать логикой звонка.
Если включить фантазию и немного подумать, можно прикрутить еще и использование дополнительных таблиц через дополнительный файл func_odbc.conf. Но это уже другая статья
![](/wp-content/uploads/2019/05/Screenshot_2.jpg)
Остались вопросы?
Я - Першин Артём, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.
категории
- DECT
- Linux
- Вспомогательный софт при работе с Asterisk
- Интеграция с CRM и другими системами
- Интеграция с другими АТС
- Использование Elastix
- Использование FreePBX
- Книга
- Мониторинг и траблшутинг
- Настройка Asterisk
- Настройка IP-телефонов
- Настройка VoIP-оборудования
- Новости и Статьи
- Подключение операторов связи
- Разработка под Asterisk
- Установка Asterisk
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 сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.
Не скорректировали текст:
Я использовал: whereis
И к сожалению, не дали примера, ни ссылки на другой материал, как применяется функция CDR().
Если не против, я добавлю такую ссылку: Вы искали CDR()