источник: (http://www.voip-info.org/wiki/view/Asterisk+cdr+mysql)


Asterisk может сохранять CDR записи в базе данных MySQL как альтернативу текстовых CSV файлов и других форматов баз данных.

Как загрузить cdr_mysql


Обязанный лицензированию библиотек MySQL клиента, приложение MySQL биллинга – больше не интегрированная часть стандартного распределения Астериска. Сейчас оно находится в asterisk-addons CVS директории.

Следуйте инструкциям на http://www.asterisk.org/index.php?menu=download для загрузки сабверсии

# cd /usr/src
# svn checkout http://svn.digium.com/svn/asterisk/branches/1.2 asterisk-1.2

Вы должны установить пакеты mysql и mysql-devel.
  • В Linux, базированном на RPM, вы должны проверить наличие MySQL, например так:
rpm -qa | grep mysql
  • Для debian или других dpkg-пободных систем, проверьте так:
dpkg -l mysql-server libmysqlclient*dev
  • В FreeBSD, вы найдете MySQL в портах библиотеки, /usr/ports/databases/mysql4-server

Компиляция


Запустите "make clean", затем "make", затем "make install" в добавленной директории, которую вы создали. Если произойдут неисправности из-за жалобы на отсутствующий файл “asterisk.h”, вы можете как скопировать этот файл из директории Астериска, так и создать непостоянную ссылку ("ln -s ...") для /usr/src/Asterisk, которая укажет на директорию источника астериска.

Примерный конфигурационный файл, который можно найти на страничке cdr_mysql.conf.

Скопируйте Примерный конфигурационный файл в /etc/asterisk/cdr_mysql.conf и отредактируйте его в соответсвии вашим требованиям. Затем отредактируйте modules.conf для загрузки cdr_addon_mysql.so и в конце перезапустите Астериск; перед перезапуском вы должны, как водится, проверить, что ваши cdr таблицы были созданы корректно и доступны для username и пароля, которые вы определили.

Таблицы, определенные для cdr_mysql Астериска


Это описание БД, которую вы используете для установки в Mysql для поддержки биллинга.

Создание базы данных


mysql --user=root --password=password -h dbhost


CREATE DATABASE asterisk;

GRANT INSERT
ON asterisk.*
TO asterisk@localhost
IDENTIFIED BY 'yourpassword';

USE asterisk;

CREATE TABLE `cdr` (
`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 '',
`userfield` varchar(255) NOT NULL default ''
);

ALTER TABLE `cdr` ADD INDEX ( `calldate` );
ALTER TABLE `cdr` ADD INDEX ( `dst` );
ALTER TABLE `cdr` ADD INDEX ( `accountcode` );


Пожалуйста заметьте, что права, предоставленные в GRANT выше – это самые малые, которые будут нужны пользователю Астериска. Чтобы позволить пользователю больше, чем просто добавить новые данные в таблицу, смотри MySQL manual on the topic

Для trunk версии начиная с 29 дек 2007 нужны права на чтение:
GRANT INSERT, SELECT ...
потому что cdr_addon_mysql теперь делает DESC 'cdr'; чтобы проверить поля таблицы.

Подсказка: Скопируйте и вставьте эту SQL команду в текстовый файл, сохраните под соответствующим именем, затем выполните следующую команду:

mysql --user=username --password=password databasename < nameoftextfile

Вуаля! Таблица создалась для вас!

Интересное замечание: в версиях предшествующих v1.2 имя таблицы, “cdr”, жестко-закодировано в mysql интерфейсе, поэтому если таблица создавалась под другим именем, mysql CDR вычислительная машина не будет работать. В x1.2 имя таблицы конфигурируется через опцию “table=” option в cdr_mysql.conf.

Хранение Unique ID


Q: Может случиться, что поле "uniqueid" не было заполненов MySQL CDR ДБ. Это неиспользуемое поле или ошибка?

A: Вам надо определить MYSQL_LOGUNIQUEID во время компиляции для использования этого поля.

У вас две опции в /usr/src/asterisk-addons:
1. Добавьте CFLAGS+=-DMYSQL_LOGUNIQUEID к Makefile.
2. Добавьте a #define MYSQL_LOGUNIQUEID наверху cdr_addon_mysql.c.

Окончательно выполните “make clean”, “make”, “make install”. Be sure to check the Makefile for the presence of this flag after having done a CVS update! У вас будет большая вероятность захотеть проиндексировать уникальное поле в cdr таблице для лучшего выполнения.

Вы также будете вынуждены добавить колонку `uniqueid` в вашу mysql базу данных после колонки `accountcode`:
ALTER TABLE `cdr` ADD `uniqueid` VARCHAR(32) NOT NULL default '' after `accountcode`;

Для чего мне это нужно? Например, вы запускаете скрипт AGI и вам надо связать данные AGI с таблицей CDR. Проблема в том, что AGI скрипт потеряет связь с вызовом так быстро, как вызвавший даст отбой, вам нужен путь для поиска корректного cdr элемента (который будет создан только после того, как вызов завершится).
Если вы получили следующую ошибку, пока компилировали cdr_mysql:

/usr/bin/ld: cannot find -lz

убедитесь, что у вас установлен пакет zlib-devel.

Смотри также