Получение CDR-данных от сервера Asterisk

Данный материал предназначен для альфа-тестирования пакета OTRS-Billing v1.3.0, для подготовки работы с сервером Asterisk.

В этом руководстве рассматривается случай, когда у Вас уже есть сервер Asterisk с установленным компонентом cdr_mysql и OTRS v5.0.X.

Альфа-версию OTRS-Billing v1.3.0a для Linux Вы можете загрузить здесь: otrs_billing_v1.3.0a_R3.zip

Смотрите также: Модуль интеграции OTRS с АТС Asterisk

 

OTRS-Billing 1.3.0 получает от Asterisk CDR-данные из БД MySQL из таблиц с информацией о вызовах.

При первоначальной настройке создайте на MySQL сервере Asterisk БД 'asteriskcdr', в которой будут находится таблицы с CDR-данными.

Для этого выполните следующие шаги:

1. Войдите на сервер с полными правами (sudo su). Подключитесь к серверу MySQL:

mysql -u root -p
Enter password: введите_ваш_пароль_для_root

2. Выполните запрос:

CREATE DATABASE IF NOT EXISTS asteriskcdr
CHARACTER SET utf8
COLLATE utf8_general_ci;

3. Создайте на MySQL сервере Asterisk нового пользователя и разрешите ему выполнение запроса SELECT для БД, (asteriskcdr), содержащей информацию о вызовах.

Для создания пользователя, выполните запросы на MySQL Asterisk:

CREATE USER 'cdrget'@'ip_address_otrs' IDENTIFIED BY 'password';
GRANT SELECT ON asteriskcdr.* TO 'cdrget'@'ip_address_otrs';
FLUSH PRIVILEGES;

Где:

asteriskcdr - БД, в которой будут собираться CDR-данные;

cdrget - имя пользователя;

password - пароль;

'ip_address_otrs' - ip адрес сервера OTRS, с которого будет выполняться подключение.

В случае, если OTRS находится на том же сервере, что и Asterisk, установите ip адрес - 'localhost'.

 

OTRS-Billing использует дополнительный столбец id, который по умолчанию не входит в структуру таблиц.

Для существующей таблицы (если таблица уже есть) его необходимо добавить, выполнив MySQL запрос:

ALTER TABLE asteriskcdr.cdr ADD id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY; 

Где: asteriskcdr.cdr - База_данных . Таблица_CDR

 

Настройка ротации CDR таблиц Asterisk по месяцу

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

Поэтому, для сохранения оптимальной производительности, предпочтительно использовать ротацию таблиц по месяцу.

Для настройки ротации таблиц необходимо отредактировать файл конфигурации cdr_mysql.conf, создать скрипт cdr_rotate.sh и поставить расписание в CRON.

Для этого выполните следующие шаги:

Определите или создайте нового пользователя 'smdruser', от которого будут создаваться и заполняться таблицы в БД asteriskcdr:

1. Подключитесь к северу MySQL

mysql -u root -p
Enter password: введите_ваш_пароль_для_root

2. Выполните запросы:

CREATE USER 'smdruser'@'localhost' IDENTIFIED BY 'Pwd';
GRANT ALL PRIVILEGES ON asteriskcdr.* TO 'smdruser'@'localhost';
FLUSH PRIVILEGES;

Где: smdruser и Pwd – пользователь и пароль MySQL

3. Создайте в директории /etc/asterisk скрипт cdr_rotate.sh в вашем редакторе, например, в nano:

nano /etc/asterisk/cdr_rotate.sh

4. Скопируйте в скрипт строки:

#!/bin/bash
read YYYY MM DD <<<$(date +"%Y %m %d")
sed -i "s/ cdr.*/ cdr$YYYY$MM/g" /etc/asterisk/cdr_mysql.conf
mysql -D asteriskcdr -u smdruser -pPwd -e "
CREATE TABLE  IF NOT EXISTS asteriskcdr.cdr$YYYY$MM(
  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 '',
  channel VARCHAR(80) NOT NULL DEFAULT '',
  dstchannel VARCHAR(80) NOT NULL DEFAULT '',
  lastapp VARCHAR(80) NOT NULL DEFAULT '',
  lastdata VARCHAR(80) NOT NULL DEFAULT '',
  duration INT(11) NOT NULL DEFAULT 0,
  billsec INT(11) NOT NULL DEFAULT 0,
  disposition VARCHAR(45) NOT NULL DEFAULT '',
  amaflags INT(11) NOT NULL DEFAULT 0,
  accountcode VARCHAR(20) NOT NULL DEFAULT '',
  uniqueid VARCHAR(32) NOT NULL DEFAULT '',
  userfield VARCHAR(255) NOT NULL DEFAULT '',
  PRIMARY KEY (id),
  INDEX IDX_UNIQUEID (uniqueid),
  UNIQUE INDEX UK_ID (id)
)
CHARACTER SET utf8
COLLATE utf8_general_ci;"

/usr/sbin/asterisk -rx 'module reload cdr_mysql.so'
# Exit
exit 0

Где: smdruser и Pwd – пользователь и пароль MySQL.

5. Сохраните и закройте файл нажав в nano Ctrl+X

Пример скрипта cdr_rotate.sh можно загрузить здесь: cdr_rotate.sh

6. Смените владельца, от которого будет выполняться скрипт на asterisk:

chown asterisk /etc/asterisk/cdr_rotate.sh

И назначьте права [755]:

chmod 755 /etc/asterisk/cdr_rotate.sh

7. Внесите изменения в файле /etc/asterisk/cdr_mysql.conf в разделе [global]

[global]
hostname = localhost
dbname = asteriskcdr
table = cdr201702
user = smdruser
password = Pwd
port = 3306
charset = UTF-8

Где: smdruser и Pwd – пользователь и пароль MySQL.

Обратите внимание, что для корректной работы скрипта cdr_rotate.sh полe "table" и его значение между знаком равно (=) должно быть разделено пробелом (table = cdr201702).

8. Создайте задание в планировщике CRON для пользователя asterisk, кторое будет выполняться 1-го числа каждого месяца в 00:00 :

Запустите редактор crontab от пользователя asterisk:

crontab -u asterisk –e

9. Добавьте задание в crontab:

0 0 1 * * /etc/asterisk/cdr_rotate.sh  >> /dev/null

10. Сохраните и закройте файл планировщика.

11. Проверьте тестовым запуском, что скрипт работает корректно, выполнив команду:

su asterisk -s /bin/sh -c '/etc/asterisk/cdr_rotate.sh'

В результате выполнения скрипта в файле /etc/asterisk/cdr_mysql.conf должно измениться значение поля table с cdr201702 на cdrТекущийГодТекущийМесяц и создана таблица "cdrТекущийГодТекущийМесяц" в БД asteriskcdr.

 

Настройка приема данных в OTRS-Billing

Настройка параметров подключения происходит на закладке: Тлф.Сеть->Биллинг: Источники CDR

Возможен прием данных из таблиц с ротацией по месяцу и без ротации.

Для большой нагрузки, предпочтительно использовать ротацию таблиц по месяцу.

На закладке "Биллинг: Источники CDR" создайте новую АТС Asterisk и заполните поля настроек, как показано на примере:

Asterisk CDR settings

Назначение полей:

Заголовок – Обозначение АТС;

Тип АТС – тип АТС;

Дескриптор АТС – уникальный идентификатор АТС в системе;

Server IP – IP адрес MySQL-сервера с БД вызовов Asterisk;

Порт – порт сервера MySQL, по умолчанию, порт 3306;

MySQL пользователь – имя пользователя, которому разрешено подключение к MySQL-серверу Asterisk;

MySQL пароль – пароль пользователя, которому разрешено подключение к MySQL-серверу Asterisk;

CDR БД – БД с таблицами CDR Asterisk;

CDR таблица – имя таблицы с информацией о вызовах Asterisk. Для таблиц с ротацией, в поле "CDR таблица:", вводится имя таблицы и код YYYYMM, например: cdrYYYYMM.

Для таблиц без ротации вводится имя таблицы и код YYYYMM не используется;

Часовой пояс АТС – часовой пояс АТС;

Размещение – Место размещения АТС;

Комментарий – комментарий АТС;

Обрабатывать входящие – флаг устанавливает идентификацию региона из которого совершен вызов;

АТС-монтор – добавляет АТС в вывод контроля приема CDR-данных на закладку ”Монитор АТС”:

PBX Monitor

Информация в модуле ”Монитор АТС” обновляется раз в минуту.

Автоматически выбрать таблицу по дате звонка – флаг устанавливает автоматический выбор таблицы из полученной даты звонка.

 

Добавление линий.

Для добавления, нажмите на значок «СО-Линии» и значок «Добавить» :

Asterisk CO add

Заполните поля линий:

- Внутренние линии

Asterisk internal CO settings

Поле "Вх.линии(CO)" имеет допустимые значения CO*,CO*. Звездочка (*) означает любые следующие символы. Например: SIP/10*, SIP/2*

Данная запись означает, что все строки, значения входящих линий которых начинается с SIP/10*, SIP/2*, будут отнесены к внутренним линиям.

- Внешние линии

Asterisk external CO settings

Поле "Вх.линии(CO)" имеет допустимые значения CO*,CO*. Звездочка (*) означает любые следующие символы. Например: DAHDI/i1*, SIP/Trunk2*

Данная запись означает, что все строки, значения входящих линий которых начинается с DAHDI/i1*, SIP/Trunk2*, будут отнесены к внешним линиям.

Для правильной идентификации вызовов по линиям оператора, необходимо указать:

- Код страны;

- Код города;

- Префикс для выхода на международную сеть;

- Префикс для выхода на междугороднюю сеть;

- Длину местного номера от – до, знаков.

Опция E.164 входящие. - Опция устанавливается, в случае, если от оператора все Номера-А приходят в формате E.164 (международном).

Внешние линии после создания должны быть назначены в соответствующем этому оператору тарифному плану на закладке: Биллинг: Тарифные планы->Показать планы->Редактировать:

OTRS Asterisk rates

 

Дальнейший запуск системы тарификации, в основном, соответствует документу для OTRS-Billing v1.2.0:

Admin_guide_v120_ru.pdf

 

После завершения настройки, записи вызовов в интерфейсе "Просмотр звонков" будут идентифицированны по абонентам и регионам:

Asterisk CDR View

 

Обратная связь с Разработчиком.

Если Вам нужна дополнительная информация или Вы нашли ошибку в пакете OTRS-Billing 1.3.0a, пожалуйста, напишите нам об этом на email адрес, указанный в разделе "Задать вопрос".

 

 

2018 IP-LAB.RU