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.

Herramientas personales