Para
llevar un completo control de todos los eventos de llamadas en Asterisk
o hacer un sistema de facturación no hay como CEL (Channel Event
Logging). Sin embargo para ciertas tareas puede ser más que suficiente
almacenar los CDR (Call Detail Record) de Asterisk en una BBDD MySQL.
Desde la versión 1.8 ya viene incluido y no hace falta descargarse las “addons”.
Simplemente necesitamos instalar la dependencia “libmysqlclient-dev” y “mysql-server” si la BBDD va a ir en el mismo servior y al compilar asterisk seleccionar la opción “Add-ons > [*]cdr_mysql
Yo voy a tener la BBDD en otro servidor (192.168.3.3). Así que la creamos.
1- Nos conectamos a MySQL:
2- Creamos la database:
3- Creamos un usuario “asterisk” para esta database “asteriskCDR”:
4- Creamos la tabla:
Una vez hecho esto ponemos como índices para optimizar la búsqueda por estos campos:
5- Si queremos le damos permiso para acceder solo desde nuestra PBX Asterisk (192.168.3.2):
Para que se pueda acceder a la BBDD desde otro servidor puede que necesitemos configurar nuestra database editando el archivo /etc/mysql/my.cnf y cambiando la opción “bind-address = 127.0.0.1″ por “bind-address = 0.0.0.0″ y reiniciando el servidor “service mysql restart”.
A continuación configuramos nuestra PBX Asterisk (192.168.3.2) para guardar los CDR en esa database.
Editamos el archivo /etc/asterisk/cdr_mysql.so y ponemos algo tal que así:
Salvamos el archivo y comprobamos desde el CLI> que tenemos soporte para el módulo cdr_mysql.so
Para que empiece a grabar los CDR en la database descargamos y cargamos el módulo:
Y comprobamos que está todo bien:
y tiene que aparecer entre los “Registered Backends” mysql.
Listo
NOTA sobre uniqueid
Para habilitar uniqueid hay que seguir este How-To:
http://www.voip-info.org/wiki/view/Asterisk+cdr+mysql
Los únicos campos escribibles son:
${CDR(accountcode)} The channel’s account code (read-write).
${CDR(uniqueid)} The channel’s unique id.
${CDR(userfield)} The channels uses specified field (read-write).
Desde la versión 1.8 ya viene incluido y no hace falta descargarse las “addons”.
Simplemente necesitamos instalar la dependencia “libmysqlclient-dev” y “mysql-server” si la BBDD va a ir en el mismo servior y al compilar asterisk seleccionar la opción “Add-ons > [*]cdr_mysql
Yo voy a tener la BBDD en otro servidor (192.168.3.3). Así que la creamos.
1- Nos conectamos a MySQL:
# mysql -u root -p
2- Creamos la database:
mysql> CREATE DATABASE asteriskCDR;
3- Creamos un usuario “asterisk” para esta database “asteriskCDR”:
mysql> GRANT INSERT ON asteriskCDR.* TO asterisk@localhost IDENTIFIED BY 'password';
4- Creamos la tabla:
mysql> USE asteriskCDR;
Database changed
mysql> 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 '',
`uniqueid` VARCHAR(32) NOT NULL default '',
`linkedid` VARCHAR(32) NOT NULL default '',
`sequence` VARCHAR(32) NOT NULL default '',
`peeraccount` VARCHAR(32) NOT NULL default ''
);
Una vez hecho esto ponemos como índices para optimizar la búsqueda por estos campos:
ALTER TABLE `cdr` ADD INDEX ( `calldate` );
ALTER TABLE `cdr` ADD INDEX ( `dst` );
ALTER TABLE `cdr` ADD INDEX ( `accountcode` );
5- Si queremos le damos permiso para acceder solo desde nuestra PBX Asterisk (192.168.3.2):
GRANT ALL ON asteriskCDR.* TO asterisk@'192.168.3.2' IDENTIFIED BY 'nuestro passwd';
Para que se pueda acceder a la BBDD desde otro servidor puede que necesitemos configurar nuestra database editando el archivo /etc/mysql/my.cnf y cambiando la opción “bind-address = 127.0.0.1″ por “bind-address = 0.0.0.0″ y reiniciando el servidor “service mysql restart”.
A continuación configuramos nuestra PBX Asterisk (192.168.3.2) para guardar los CDR en esa database.
Editamos el archivo /etc/asterisk/cdr_mysql.so y ponemos algo tal que así:
[global]
hostname=192.168.3.3 ;ip de nuestra database. Si fuese local pondríamos localhost
dbname=asteriskCDR
table=cdr
password=el que sea
user=asterisk
port=3306
sock=/tmp/mysql.sock
[columns]
;static "" =>
;alias =>
alias start => calldate
alias callerid => clid
;alias src => src
;alias dst => dst
;alias dcontext => dcontext
;alias channel => channel
;alias dstchannel => dstchannel
;alias lastapp => lastapp
;alias lastdata => lastdata
;alias duration => duration
;alias billsec => billsec
;alias disposition => disposition
;alias amaflags => amaflags
;alias accountcode => accountcode
;alias userfield => userfield
;alias uniqueid => uniqueid
Salvamos el archivo y comprobamos desde el CLI> que tenemos soporte para el módulo cdr_mysql.so
CLI> module show like cdr_mysql.so
Module Description Use Count
cdr_mysql.so MySQL CDR Backend 0
1 modules loaded
Para que empiece a grabar los CDR en la database descargamos y cargamos el módulo:
CLI> module unload cdr_mysql.so
== Unregistered 'mysql' CDR backend
CLI> module load cdr_mysql.so
Loaded cdr_mysql.so
== Parsing '/etc/asterisk/cdr_mysql.conf': == Found
-- Found alias start for column calldate
-- Found alias callerid for column clid
Loaded cdr_mysql.so => (MySQL CDR Backend)
Y comprobamos que está todo bien:
CLI> cdr mysql status
Connected to asteriskCDR@192.168.3.3, port 3306 using table cdr for 1 hours, 1 minutes, 49 seconds.
Wrote 2 records since last restart.
CLI> cdr show status
Call Detail Record (CDR) settings
----------------------------------
Logging: Enabled
Mode: Simple
Log unanswered calls: No
* Registered Backends
-------------------
mysql
csv
cdr-custom
y tiene que aparecer entre los “Registered Backends” mysql.
Listo
NOTA sobre uniqueid
Para habilitar uniqueid hay que seguir este How-To:
http://www.voip-info.org/wiki/view/Asterisk+cdr+mysql
Los únicos campos escribibles son:
${CDR(accountcode)} The channel’s account code (read-write).
${CDR(uniqueid)} The channel’s unique id.
${CDR(userfield)} The channels uses specified field (read-write).