Как связать 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.
В данном разделе будет описана пошаговая настройка системы для работы драйвера 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
После сохранения данных проверим, область видимости драйвера командой
# 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
Проверим подключение к Mysql через указанный [<DSN_name>], который был прописал в файл odbc.ini. Проверить подключени можно следующей командой:
# echo "select 1" | isql -v <DSN_name> <USERNAME> <PASSWORD>
Должно вывести следующее как на скриншоте ниже
Установка Asterisk c модулями ODBC
Не всегда администраторы, поддерживающие asterisk, собирают его с модулями необходимыми для работы с odbc. Поэтому в данном пункте будет показано, как пересобрать астериск с нужными модулями.
Для того, чтобы пересобрать asterisk, нужно перейти в директорию исходных файлов Asterisk. В данном случае — это /usr/src/asterisk-13.21.0/.
Поскольку астериск уже установлен, поэтому заново выполнять команду ./configure не нужно. Поэтому перейдем к следующему шагу make menuselect.
Теперь необходимо выбрать все модули, в которых в названии есть odbc.
Ниже приведена таблица с названием раздела и именем модуля.
Call Detail Recording | cdr_odbc cdr_adaptive_odbc |
Channel Event Logging | cel_odbc |
Resource Modules | res_odbc res_odbc_transaction |
Далее, как и при обычной установке астериска выполняем 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
Сохраняете изменения в этом файле, далее нужно вносить изменения в файл cdr_odbc.conf (если установлен FreePBX – cdr_adaptive_odbc.conf).
- [<connection_name>] — имя подключения к БД
- connection – Имя dsn. Которое указывалось в res_odbc.conf
- loguniqueid – разрешить логирование uniquieid
- table – таблица для заполнения истории звонков
В итоге должно получиться как на скриншоте ниже:
Далее сохраняются изменения и необходимо их применить. Для этого открывается консоль астериска командой 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 из консоли астериска. Если выполнено все правильно то должно получиться как на скриншоте ниже.
После выполнения указанных выше действий вы сможете просматривать историю вызовов (CDR – call detail records). Также можно выполнять действия с данной таблицей из диалплана обращаясь к ней встроенной функцией астериска CDR()— что позволяет гибко оперировать логикой звонка.
Если включить фантазию и немного подумать, можно прикрутить еще и использование дополнительных таблиц через дополнительный файл func_odbc.conf. Но это уже другая статья
Остались вопросы?
Я - Першин Артём, менеджер компании 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()