Asterisk Realtime
De Linuxmall Wiki
Asterisk Realtime
por: Pablo Umanzor A.
Este howto contiene 2 partes, la primera indica la forma de instalar el CDR en una base de datos y la segunda la instalacion de realtime en los anexos del sistema esto ultimo muy util cuando se requiera administrar un alto volumen de anexos.
Si necesitamos analizar el detalle de las llamadas que ha realizado nuestro Asterisk y asi controlar nuestros recursos es posible hacerlo enviando el CDR (Call Detail Record) a una base de datos como Mysql o Postgresql.
Para ello es necesario
a) Instalar MySQL-Server o Postgresql en la misma maquina b) usar un servidor mysql existente en otra maquina. c) Para facilitar la creacion de tablas y bases de datos se recomiendo instalar phpmyadmin
Para el primer caso en Debian Etch instalar mysql-server y las librerias libmysqlclient15-dev y libmysqlclient15off
apt-get install mysql-server libmysqlclient15off libmysqlclient15-dev
bajar el archivo asterisk-addons
wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-addons-1.4.11.tar.gz
descomprimir el archivo
tar xvfz asterisk-addons-1.4.11.tar.gz
Luego dentro del directorio /usr/src/asterisk-addons-1.4.11 y ejecutar
make clean make menuconfig
Seleccionar la opcion "Call Detail Recording
y checkear si la opcion [*] 1. cdr_addon_mysql
se encuentra activa (con *) , si no se encuentra activa - es decir con una X en vez de * es por que no se ha instalado las dependencias necesarias para salir presionar la letra X luego recompilar con
make make install make samples
Posteriormente ir al directorio de archivos de configuracion de Asterisk /etc/asterisk y editar los archivos cdr_mysql.conf y res_mysql.conf
archivo cdr_mysql.conf
[global] hostname=localhost dbname=asterisk table=cdr password=clave user=usuario port=3306 ;sock=/tmp/mysql.sock userfield=1
archivo res_mysql.conf
[general] dbhost = 127.0.0.1 dbname = asterisk dbuser = usuario dbpass = clave dbport = 3306 ;dbsock = /tmp/mysql.sock
Si nuestra base de datos mysql se encuentra en otra maquina cambiar hostname y dbhost con la ip que corresponda
luego se debe crear la tabla "cdr" en nuestra DB
# estructura de la tabla CDRs (en script para 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 ' ',
uniqueid varchar(32) NOT NULL default ' ',
userfield varchar(255) NOT NULL default ' ',
KEY `calldate` (`calldate`),
KEY `dst` (`dst`),
KEY `accountcode` (`accountcode`)
) ENGINE=MyISAM ;
por ultimo reiniciar Asterisk e ingresar a la consola para verificar si los cambios y la tabla ha sido reconocida con el comando
Asterisk*CLI> realtime mysql status
para registrar el uniqueid, se debe recompilar asterisk-addons previamente hay que agregar al principio del archivo
/usr/src/asterisk-addons-1.4.X/cdr/cdr_addon_mysql.c
la linea
#define MYSQL_LOGUNIQUEID
guardar el archivo y recompilar asterisk-addons
Teniendo ya nuestro CDR en la DB podemos hacer consultas directamente en mysql o usar la aplicacion CDR tool, la cual puede bajar directamente desde
* http://areski.net/asterisk-stat-v2/
Luego simplemente en el archivo lib/defines.php cambiar los datos de conexion a la DB
define ("HOST", "localhost");
define ("PORT", "3306");
define ("USER", "usuario");
define ("PASS", "clave");
define ("DBNAME", "nombre_db");
define ("DB_TYPE", "mysql"); // mysql or postgres
define ("DB_TABLENAME", "tabla");
Usando Mysql para manejar los usuarios, peers y extensiones
Para habilitar esta funcionalidad no es necesario compilar nuevamente Asterisk, simplemente hay que disponer de una base de datos mysql (ejemplo que se llame asterisk) y crear la siguiente tabla:
CREATE TABLE `sipfriends` ( `name` varchar(40) NOT NULL default ' ', `type` varchar(10) NOT NULL default ' ', `username` varchar(40), `fromuser` varchar(40), `fromdomain` varchar(40), `secret` varchar(40), `md5secret` varchar(40), `auth` varchar(10), `mailbox` varchar(20), `subscribemwi` varchar(10), `vmexten` varchar(20), `callerid` varchar(40), `cid_number` varchar(40), `callingpres` varchar(20), `usereqphone` varchar(10), `language` varchar(10), `incominglimit` varchar(10), `context` varchar(40) NOT NULL default ' ', `subscribecontext` varchar(40), `amaflags` varchar(20), `accountcode` varchar(20), `musicclass` varchar(20), `mohsuggest` varchar(20), `allowtransfer` varchar(20), `callgroup` varchar(20), `pickupgroup` varchar(20), `autoframing` varchar(10), `disallow` varchar(20) default 'all', `allow` varchar(20), `maxcallbitrate` varchar(15), `host` varchar(40) default 'dynamic', `outboundproxy` varchar(40), `ipaddr` varchar(20) NOT NULL default ' ', `defaultip` varchar(20), `port` int(6) NOT NULL default '0', `fullcontact` varchar(40), `insecure` varchar(20), `qualify` varchar(15), `regseconds` int(11) NOT NULL default '0', `regexten` varchar(20), `regserver` varchar(20), `rtptimeout` varchar(15), `rtpholdtimeout` varchar(15), `rtpkeepalive` varchar(15), `lastms` int(11) NOT NULL default '-1', `setvar` varchar(200), PRIMARY KEY (`name`), INDEX host (host, port), INDEX ipaddr (ipaddr, port) ) TYPE=MyISAM;
luego en el archivo /etc/asterisk/extconfigs.conf vamos a encontrar algo como
;sipusers => odbc,asterisk ;sippeers => odbc,asterisk
descomentar y cambiarlo por:
sipusers => mysql,asterisk,sipfriends sippeers => mysql,asterisk,sipfriends
donde el primer campo indica el tipo de conexion y base de datos que estamos usando en este caso mysql, luego asterisk es el nombre de la base de datos y sipfriends en el nombre de la tabla, obviamente los 2 ultimos campos se pueden cambiar por otros nombres segun sea el caso.
por ultimo reiniciar asterisk y ya tenemos listo nuestro nuevo sistema con soporte Realtime lo que significa que solo tendremos que modificar la base de datos y los cambios seran activados en linea, la informacion de los anexos y peers estara reflejada directamente en la tabla sipfriends, con esto ya no sera posible usar el comando
sip show peers
ya que todo se escribe y actualiza en la tabla sipfriends, para mas comodidad instalar phpmyadmin y administrar las bases de datos con este programa.
