Asterisk 1.8 пишем CDR в MySQL базу

Для того чтобы Asterisk мог записывать данные о звонках в базу, должен быть установлен пакет “Asterisk-addons”. Для Asterisk версии ниже 1.8, нужна скачать этот самый пакет с сайта. Для 1.8 все проще, он идет в комплекте с ядром, нужно не забыть его включить. Для начала надо установить модули для CDR Mysql

apt-get install mysql-client mysql-client libmysqlclient15-dev mysql-server mysql-common

далее собираем астериск с галками

—> 1. Applications [*] 1. app_addon_sql_mysql 2. Call Detail Recording [*] 1. cdr_addon_mysql 3. Channel Drivers 4. Format Interpreters 5. Resource Mod


Итак логинемся в базу

# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.0.77 Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>

Создаем базу

mysql> create database asterisk;

Создаем в базе “asterisk” таблицу “cdr”, вот с такой структурой

mysql> use asterisk;
mysql>  
CREATE TABLE `cdr` (
`id` int(11) unsigned NOT NULL auto_increment,
`calldate` datetime NOT NULL default '1970-01-01 00:00:01',
`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 '',
`filename` varchar(255) NULL default '',
`dnid` varchar(120) NULL default '',
PRIMARY KEY (`id`),
KEY `calldate` (`calldate`),
KEY `accountcode` (`accountcode`),
KEY `uniqueid` (`uniqueid`),
KEY `dst` (`dst`),
KEY `src` (`src`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;
Query OK, 0 rows affected (0.04 sec)

Теперь даем доступ для пользователя “asterisk_user” с паролем “Some_Pass_Aster01″ к базе “asterisk” только с локалхоста.

mysql> grant all on asterisk.* to 'asterisk_user'@'localhost' identified by 'Some_Pass_Aster01';
mysql> flush privileges;

Теперь укажем нашему Астериску писать CDR базу, для этого в файле “/etc/asterisk/cdr_mysql.conf” меняем строчки:

global]
hostname=localhost
dbname=asterisk
table=cdr
password=Some_Pass_Aster01
user=asterisk_user
sock=/var/lib/mysql/mysql.sock

Для применения изменений перезапускаем “Asterisk”. Чтобы убедиться что мы все сделали правильно в консоле Астерсика вводим

test*CLI> cdr mysql status
Connected to asterisk on socket file /var/lib/mysql/mysql.sock using table cdr for 5 hours, 22 minutes, 7 seconds.
  Wrote 5 records since last restart.

Если у вас такое же сообщение то все настроено верно

Запись опубликована в рубрике Asterisk, CentOS с метками , . Добавьте в закладки постоянную ссылку.

24 комментария: Asterisk 1.8 пишем CDR в MySQL базу

  1. Алексей говорит:

    Подскажите пожалуйста, а как включить Asterisk-addons на версии 1.8. Что то никак не соображу..

    • admin говорит:

      когда вы собираете Астериск – “make menuselect”, первый же раздел, включаете все галочки, где упоминается mysql. Но перед этим у вас уже должен быть установлен MySQL-сервер.

      • Алексей говорит:

        спасибо большое за статью, все работает
        сейчас записи прикручивать буду

  2. aleksander говорит:

    А как быть с русскими ФИО , у меня в поле CallID на русском.
    И в любых редакторах одни кракозябли

    • admin говорит:

      посмотрите как виден CallId в Астериске и проверьте в какой кодировке пишет в базу.
      я обычно использую utf8.

  3. aleksander говорит:

    А если в таблице русские символы , какую кодировку сделать надо ?

  4. Михаил говорит:

    mysqlserver установлен,
    когда я набираю make menuselect
    у меня отсутствует cdr_addon_mysql.
    Версия 1.8.12
    Что делать?

    • admin говорит:

      проверьте чтобы в системе были “mysql mysql-devel” пакеты.
      Так же можно посмотреть какого пакета не хватает таким образом: выбирает в menuselect нужный пакет, если он выглядит как – X, то смотрите внизу слева подсказку, какого пакета нет в системе, обычно как “пакет”(E)

    • ZHMEK говорит:

      В 1.8 не надо cdr_addon_mysql.

  5. Михаил говорит:

    у меня в menuselect вообще отсутствует cdr_addon_mysql/
    вот:
    Press ‘h’ for help.

    — extended —
    XXX chan_mobile
    [ ] chan_ooh323
    [ ] format_mp3
    [*] res_config_mysql
    — deprecated —
    [*] app_mysql
    [ ] app_saycountpl
    [*] cdr_mysql

    • admin говорит:

      Так вы уже выбрали поддержку CDR в MySQL. Называется cdr_mysql.so.
      можете собирать Астериск, у вас будет работать.

  6. Sasha говорит:

    Все поставил, все заработало, теперь интересует 2а вопроса как в базу записать с какого номера звонили и какие шаги проходили в IVR

    • admin говорит:

      1. смотрите в CDR
      2. Смотрите в сторону ODBC, написание функции и расстановка в нужных местах dialplana

  7. Равиль говорит:

    Привет всем. А у меня по ходу база снесена
    *CLI> cdr mysql status
    No such command ‘cdr mysql status’ (type ‘core show help cdr mysql’ for other possible commands).
    Хотя последняя запись от 03,03,2013 г. есть
    Сносить базу или что то можно исправить?

    • admin говорит:

      проверь что собран с поддержкой MYSQL
      запусти module reload cdr_mysql.so
      Так же проверь что есть доступ в базу, не был сменен пароль для астериска.

  8. Диана говорит:

    У меня уже есть БД астериск, я думала олн у всех бывает встроенная, нет?
    В любом случае базу не создала и решила идти дальше, создаю таблицу
    Прям беру и копирую

    mysql> use asterisk;
    mysql> CREATE TABLE `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 ”,
    `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`),
    KEY `calldate` (`calldate`),
    KEY `accountcode` (`accountcode`),
    KEY `uniqueid` (`uniqueid`),
    KEY `dst` (`dst`),
    KEY `src` (`src`)
    ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;

    И тут мне выдают ошибку ERROR 1064 (42000): You have an error in your SQL syntax; check the macorresponds to your MySQL server version for the right syntax to use n> CREATE TABLE `cdr` ( `id` int(11) unsigned NOT NULL auto_increment, ‘ at line 1

    Что делать?

    • admin говорит:

      Вам нужно сначала скопировать в текстовый блокнот, а проверить что копируется то что нужно вставить в мускуль.
      Если внимательно посмотреть на ошибку – n> CREATE TABLE `cdr` (, то как бы мускуль говорит что у вас n> откуда то взялось.

  9. Диана говорит:

    Можно еще вопрос задать?
    А как можно будет статистику IVR записать в базу mysql?

    • admin говорит:

      Нужно понять как вы будете делать ИВР? используя AGI, или программируя в diaplane.
      CDR – пишет только информацию о звонке, но не пишет информацию о DTMF нажатиях. Для этого нужно писать в ручную, при создания самого ИВР.
      Если ИВР сложный и вам нужна помощь, можете обратится ко мне, контакты есть в блоге.

  10. Ritm говорит:

    Установил asterisk-addons, сконфигурировал связку астера с Mysql
    Почему-то вылезает ошибка cdr_addon_mysql.c:320 mysql_log: Failed to insert into database: (1366) Incorrect integer value: ” for column ‘id’ at row 1
    Что это может быть? Скрипт для создания базы отработал нормально….

    • admin говорит:

      у вас астериск 1.8?
      лучше устанавливайте Астериск 11 версию.
      По ошибке предпологаю, что поля не правильные, структуру таблицы cdr проверьте.

  11. Дмитрий говорит:

    Подскажи, пожалуйста, как писать cdr в мускл на определенные каналы(sip линии). Если нельзя явно указать ЧТО именно надо писать, как это организовать в самом диалплане? Мне в принципе канонический цдр не надо. Надо только имя канала, время начала звонка, конца звонка, соответственно длительность, ну и а-номер, б-номер.

    • admin говорит:

      если вам нужно писать только определенные каналы, то используйте в диаплане команду
      same => n,NoCDR()
      При этом звонки проходящие не будут писаться.
      Если вам нужно писать в свою собственную таблицу, то используйте func_odbc.В начале звонка INSERT в таблицу, в конце UPDATE этой записи.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Я не Верблюд!!!.