Инструменты пользователя

Инструменты сайта


doc:1cajam:astcastomize_v6:odbc

Пример настроек MySQL ODBC

Таблицы базы данных

Допустим MySQL уже установлен на ПК c Asterisk.
MySQL содержит учетную запись:

  • user - asteriskuser
  • pass - admin

MySQL уже содержит базу данных asteriskcdrdb

CREATE DATABASE asteriskcdrdb;

Сервер на базе CentOS 6 (32 bit)

Подключимся к СУБД mysql к базе данных asteriskcdrdb:

mysql -u'asteriskuser' -p'admin' asteriskcdrdb

создадим таблицу для хранения CEL записей:

CREATE TABLE IF NOT EXISTS `asteriskcdrdb`.`cel` (
  `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
  `eventtype` VARCHAR(30) COLLATE utf8_unicode_ci NOT NULL,
  `eventtime` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
   ON UPDATE CURRENT_TIMESTAMP,
  `userdeftype` VARCHAR(255) COLLATE utf8_unicode_ci NOT NULL,
  `cid_name` VARCHAR(80) COLLATE utf8_unicode_ci NOT NULL,
  `cid_num` VARCHAR(80) COLLATE utf8_unicode_ci NOT NULL,
  `cid_ani` VARCHAR(80) COLLATE utf8_unicode_ci NOT NULL,
  `cid_rdnis` VARCHAR(80) COLLATE utf8_unicode_ci NOT NULL,
  `cid_dnid` VARCHAR(80) COLLATE utf8_unicode_ci NOT NULL,
  `exten` VARCHAR(80) COLLATE utf8_unicode_ci NOT NULL,
  `context` VARCHAR(80) COLLATE utf8_unicode_ci NOT NULL,
  `channame` VARCHAR(80) COLLATE utf8_unicode_ci NOT NULL,
  `appname` VARCHAR(80) COLLATE utf8_unicode_ci NOT NULL,
  `appdata` VARCHAR(80) COLLATE utf8_unicode_ci NOT NULL,
  `amaflags` INT(11) NOT NULL,
  `accountcode` VARCHAR(20) COLLATE utf8_unicode_ci NOT NULL,
  `peeraccount` VARCHAR(20) COLLATE utf8_unicode_ci NOT NULL,
  `uniqueid` VARCHAR(150) COLLATE utf8_unicode_ci NOT NULL,
  `linkedid` VARCHAR(150) COLLATE utf8_unicode_ci NOT NULL,
  `userfield` VARCHAR(255) COLLATE utf8_unicode_ci NOT NULL,
  `peer` VARCHAR(80) COLLATE utf8_unicode_ci NOT NULL,
  UNIQUE KEY `id` (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

создадим таблицу для хранения CDR записей (в данном примере имя таблицы PT1C_cdr)

CREATE TABLE IF NOT EXISTS `asteriskcdrdb`.`PT1C_cdr` (
   `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
   `calldate` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',
   `clid` VARCHAR(80) NOT NULL DEFAULT '',
   `src` VARCHAR(80) NOT NULL DEFAULT '',
   `dst` VARCHAR(80) NOT NULL DEFAULT '',
   `dcontext` VARCHAR(80) NOT NULL DEFAULT '',
   `lastapp` VARCHAR(200) NOT NULL DEFAULT '',
   `lastdata` VARCHAR(200) NOT NULL DEFAULT '',
   `duration` FLOAT UNSIGNED NULL DEFAULT NULL,
   `billsec` FLOAT UNSIGNED NULL DEFAULT NULL,
   `disposition` ENUM('ANSWERED','BUSY','FAILED','NO ANSWER','CONGESTION') NULL DEFAULT NULL,
   `channel` VARCHAR(50) NULL DEFAULT NULL,
   `dstchannel` VARCHAR(50) NULL DEFAULT NULL,
   `amaflags` VARCHAR(50) NULL DEFAULT NULL,
   `accountcode` VARCHAR(20) NULL DEFAULT NULL,
   `uniqueid` VARCHAR(32) NOT NULL DEFAULT '',
   `userfield` VARCHAR(200) NOT NULL DEFAULT '',
   `did` VARCHAR(200) NOT NULL DEFAULT '',
   `answer` DATETIME NOT NULL,
   `end` DATETIME NOT NULL,
   `recordingfile` varchar(255) NOT NULL default '',
   `peeraccount` varchar(20) NOT NULL default '',
   `linkedid` varchar(32) NOT NULL default '',
   `sequence` int(11) NOT NULL default '0',       
   PRIMARY KEY (`id`),
   INDEX `calldate` (`calldate`),
   INDEX `dst` (`dst`),
   INDEX `src` (`src`),
   INDEX `dcontext` (`dcontext`),
   INDEX `clid` (`clid`)
)ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

В базе данных должны существовать две таблицы:

> USE asteriskcdrdb;
> SHOW TABLES;
+-------------------------+
| Tables_in_asteriskcdrdb |
+-------------------------+
| PT1C_cdr                |
| cel                     |
+-------------------------+
2 rows in set (0.00 sec)

Настройка ODBC

Для работы логирования CEL записей необходима библиотека:

ls -l /usr/lib/libmyodbc3_r.so

Если библиотеки нет, ее следует установить

yum install mysql-connector-odbc

Параметры доступа к драйверам описываются в файле:
/etc/odbcinst.ini

; настройка драйвера
[MySQL]
Description        = ODBC for MySQL
Driver             = /usr/lib/libmyodbc3_r.so ; имя драйвера и местоположение могут отличаться для разных ОС
Setup              = /usr/lib/libodbcmyS.so
Driver64	   = /usr/lib64/libmyodbc5.so ; имя драйвера и местоположение могут отличаться для разных ОС
Setup64		   = /usr/lib64/libodbcmyS.so 
FileUsage          = 1
UsageCount         = 5

Все возможные соединения («коннекторы») описываются в файле:
/etc/odbc.ini

; настройка соединения
[MySQL-asteriskcdrdb]
Driver          = MySQL
Description     = MySQL connection to 'asteriskcdrdb' database
Server          = localhost
Port          = 3306
Database     = asteriskcdrdb
Option          = 3

Проверить настройки ODBC возможно утилитой isql

isql -v MySQL-asteriskcdrdb asteriskuser admin 
  • «-v» - выводить отладку
  • «MySQL-asteriskcdrdb» - имя конектора из /etc/odbc.ini
  • «asteriskuser» - имя пользователя MySQL
  • «admin» - пароль пользователя MySQL

Настройка конфигурации Asterisk

Опишем ресурс доступа к базе данных: /etc/asterisk/res_odbc.conf

; настройка соединения 
[PT1C_asteriskcdrdb]
enabled=>yes
dsn=>MySQL-asteriskcdrdb
pooling=>no
limit=>1
pre-connect=>yes
username=>asteriskuser; имя пользователя базы данных
password=>admin ; пароль пользователя базы данных

Опишем правило логированиря CEL записей:
/etc/asterisk/cel_odbc.conf

[PT1C_cel]
connection=PT1C_asteriskcdrdb
loguniqueid=yes
table=cel

Опишем правило логированиря CDR записей:
/etc/asterisk/cdr_adaptive_odbc.conf

[PT1C_Global]
connection=PT1C_asteriskcdrdb
table=PT1C_cdr
alias recordingfile=>recordingfile
alias start=>calldate

Далее следует перезагрузить asterisk:

CLI> core restart now

Обратно к инструкции...

Контроль

Выполнить в консоли астериск:
Статус CDR

CLI> cdr show status 

Call Detail Record (CDR) settings
----------------------------------
  Logging:                    Enabled
  Mode:                       Simple
  Log unanswered calls:       No
  Log congestion:             No

* Registered Backends
  -------------------
    Adaptive ODBC

Статус CEL

CLI> cel show status 
CEL Logging: Enabled
CEL Tracking Event: ALL
CEL Tracking Event: CHAN_START
CEL Tracking Event: CHAN_END
CEL Tracking Event: HANGUP
CEL Tracking Event: ANSWER
CEL Tracking Event: APP_START
CEL Tracking Event: APP_END
CEL Tracking Event: BRIDGE_START
CEL Tracking Event: BRIDGE_END
CEL Tracking Event: CONF_START
CEL Tracking Event: CONF_END
CEL Tracking Event: PARK_START
CEL Tracking Event: PARK_END
CEL Tracking Event: BLINDTRANSFER
CEL Tracking Event: ATTENDEDTRANSFER
CEL Tracking Event: TRANSFER
CEL Tracking Event: HOOKFLASH
CEL Tracking Event: 3WAY_START
CEL Tracking Event: 3WAY_END
CEL Tracking Event: CONF_ENTER
CEL Tracking Event: CONF_EXIT
CEL Tracking Event: USER_DEFINED
CEL Tracking Event: LINKEDID_END
CEL Tracking Event: BRIDGE_UPDATE
CEL Tracking Event: PICKUP
CEL Tracking Event: FORWARD
CEL Tracking Application: ALL
CEL Event Subscriber: ODBC CEL backend
CEL Event Subscriber: CEL Custom CSV Logging
CEL Event Subscriber: CEL PGSQL backend
CEL Event Subscriber: CEL Radius Logging

Должны быть подгружены модули:

module show like odbc
Module                         Description                              Use Count 
cdr_adaptive_odbc.so           Adaptive ODBC CDR backend                0              
cel_odbc.so                    ODBC CEL backend                         0         
func_odbc.so                   ODBC lookups                             0         
res_config_odbc.so             Realtime ODBC configuration              0         
res_odbc.so                    ODBC resource                            0         

статус ODBC

pbx*CLI> odbc show 
ODBC DSN Settings
-----------------
  Name:   PT1C_asteriskcdrdb
  DSN:    MySQL-asteriskcdrdb
    Last connection attempt: 1969-12-31 19:00:00
  Pooled: No
  Connected: Yes

Окончательная проверка

Совершите пару звонков и выполните команды:

mysql -sse "SELECT * FROM cel" -u'asteriskuser' -p'admin' asteriskcdrdb
mysql -sse "SELECT * FROM PT1C_cdr" -u'asteriskuser' -p'admin' asteriskcdrdb

таблицы не должны быть пустыми.
Обратно к инструкции...

doc/1cajam/astcastomize_v6/odbc.txt · Последние изменения: 2018/04/10 14:03 — tpor