Instalacion Asterisk 1.4.X

11
Instalacion Asterisk 1.4.X De Millenium Phone Center Historial de actualizaciones: 2008-10-9 Ing. Julian Etayo - Creación Artículo 2008-10-20 Ing. Miguel Molina - Actualizado removiendo la llave primaria de campos combinados en el SQL de creación de la tab queue_log. 2008-12-15 Ing. Miguel Molina - Actualizados los links para la versión 2.1.0 de DAHDI. 2009-01-14 Ing. Miguel Molina - Actualizada la sección "Subir el Queue_log a MySQL" con los cambios necesarios para guardar el cuarto parámetro presente en el evento TRANSFER del queue_log, que guarda la duración actual de la llamada en el momento de ser transferida. 2008-02-04 Ing. Julian Etayo - Actualización de paquetes Asterisk, Libpri y dahdi. Tabla de contenidos 1 Inicio de Instalación 2 Descarga y extracción de paquetes 3 Parche del CDR MySQL y del script de inicio 4 Parche para app_queue 5 Compilación de paquetes 6 Sonidos en español 7 Base de datos para el CDR en MySQL 8 Subir el Queue_log a MySQL 9 Base de datos para el CDR en PostgreSQL Inicio de Instalación Para iniciar el proceso de instalación de Asterisk 1.4.X se debe tener la Instalacion_CentOS_5.1_para_Asterisk_-_GNU Descarga y extracción de paquetes A continuacion se descargan los siguientes paquetes: Instalacion Asterisk 1.4.X - Millenium Phone Center http://wiki.millenium.com.co/wiki/index.php/Instalacion_Asterisk_1.4.X 1 de 11 25/09/2009 21:38

Transcript of Instalacion Asterisk 1.4.X

Page 1: Instalacion Asterisk 1.4.X

Instalacion Asterisk 1.4.X

De Millenium Phone Center

Historial de actualizaciones:

2008-10-9 Ing. Julian Etayo - Creación Artículo

2008-10-20 Ing. Miguel Molina - Actualizado removiendo la llave primaria de campos combinados en el

SQL de creación de la tab queue_log.

2008-12-15 Ing. Miguel Molina - Actualizados los links para la versión 2.1.0 de DAHDI.

2009-01-14 Ing. Miguel Molina - Actualizada la sección "Subir el Queue_log a MySQL" con los cambios

necesarios para guardar el cuarto parámetro presente en el evento TRANSFER del queue_log, que guarda la

duración actual de la llamada en el momento de ser transferida.

2008-02-04 Ing. Julian Etayo - Actualización de paquetes Asterisk, Libpri y dahdi.

Tabla de contenidos

1 Inicio de Instalación

2 Descarga y extracción de paquetes

3 Parche del CDR MySQL y del script de inicio

4 Parche para app_queue

5 Compilación de paquetes

6 Sonidos en español

7 Base de datos para el CDR en MySQL

8 Subir el Queue_log a MySQL

9 Base de datos para el CDR en PostgreSQL

Inicio de Instalación

Para iniciar el proceso de instalación de Asterisk 1.4.X se debe tener la

Instalacion_CentOS_5.1_para_Asterisk_-_GNU

Descarga y extracción de paquetes

A continuacion se descargan los siguientes paquetes:

Instalacion Asterisk 1.4.X - Millenium Phone Center http://wiki.millenium.com.co/wiki/index.php/Instalacion_Asterisk_1.4.X

1 de 11 25/09/2009 21:38

Page 2: Instalacion Asterisk 1.4.X

# cd /usr/src/

# wget http://downloads.digium.com/pub/asterisk/releases/asterisk-1.4.23.tar.gz

# wget http://downloads.digium.com/pub/asterisk/releases/asterisk-addons-1.4.7.tar.gz

# wget http://downloads.digium.com/pub/libpri/libpri-1.4.9.tar.gz

# wget http://downloads.digium.com/pub/telephony/dahdi-linux-complete/dahdi-linux-complete-2.1.0.4+2.1.0.2.tar.gz

# for i in *gz;do tar -zxvf $i;done

Parche del CDR MySQL y del script de inicio

Verificamos que el paquete mysql-devel esté, de lo contrario al compilar asterisk-addons no se compilaria el

modulo de mysql.

# yum -y install mysql-devel postgresql-devel

Se debe parchar el asterisk addons para que el módulo cdr_addon_mysql.so almacene el UNIQUEID en la

base de datos como se muestra a continuación:

# cd /usr/src/asterisk-addons-1.4.7/cdr

# vim cdr_addon_mysql.c

Ahora agregamos debajo de:

#define DATE_FORMAT "%Y-%m-%d %T"

la siguiente línea

#define MYSQL_LOGUNIQUEID

Ahora se realiza el siguiente parche para que el script de inicio ejecute asterisk con la prioridad real-time:

# cd /usr/src/asterisk-1.4.23/contrib/init.d

# vim rc.redhat.asterisk

Ahora agregamos en la función start() antes de la línea:

daemon $DAEMON $ASTARGS

la siguiente línea:

ASTARGS="$ASTARGS -p"

Parche para app_queue

Instalacion Asterisk 1.4.X - Millenium Phone Center http://wiki.millenium.com.co/wiki/index.php/Instalacion_Asterisk_1.4.X

2 de 11 25/09/2009 21:38

Page 3: Instalacion Asterisk 1.4.X

Nota: Parche Oficial Mike

Con el ánimo de mejorar la visualización de llamadas en cola en el panel, se modificó el app_queue de

Asterisk para que al ejecutar el comando "show queues" por el CLI o bien por manager como es utilizado en

el panel, en la lista de llamadas en cola no apareciera el nombre del canal que no es relevante sino el

CallerID numérico de la llamada entrante

# cd /usr/src/asterisk-1.4.23/apps

# wget http://www.millenium.com.co/asterisk/app_queue.c.diff

# patch < app_queue.c.diff

Compilación de paquetes

Para realizar la compilación es importante seguir el siguiente orden: Dahdi, Libpri, Asterisk, Asterisk-

Addons, como se muestra a continuación:

# cd /usr/src/dahdi-linux-complete-2.1.0.4+2.1.0.2

# make clean; make all; make install; make config

Apenas esté instalado el Dahdi, editamos qué módulos queremos tener cargados en el sistema de acuerdo al

hardware instalado en el archivo

# vim /etc/dahdi/modules

En este ejemplo podemos ver la porción del archivo en donde desactivamos todos los módulos, este sería el

caso cuando no tenemos hardware instalado.

Instalacion Asterisk 1.4.X - Millenium Phone Center http://wiki.millenium.com.co/wiki/index.php/Instalacion_Asterisk_1.4.X

3 de 11 25/09/2009 21:38

Page 4: Instalacion Asterisk 1.4.X

# Contains the list of modules to be loaded / unloaded by /etc/init.d/dahdi.## NOTE: Please add/edit /etc/modprobe.d/dahdi or /etc/modprobe.conf if you# would like to add any module parameters.## Format of this file: list of modules, each in its own line.# Anything after a '#' is ignore, likewise trailing and leading# whitespaces and empty lines.

# Digium TE205P/TE207P/TE210P/TE212P: PCI dual-port T1/E1/J1# Digium TE405P/TE407P/TE410P/TE412P: PCI quad-port T1/E1/J1# Digium TE220: PCI-Express dual-port T1/E1/J1# Digium TE420: PCI-Express quad-port T1/E1/J1#wct4xxp

# Digium TE120P: PCI single-port T1/E1/J1# Digium TE121: PCI-Express single-port T1/E1/J1# Digium TE122: PCI single-port T1/E1/J1#wcte12xp

# Digium T100P: PCI single-port T1# Digium E100P: PCI single-port E1#wct1xxp

# Digium TE110P: PCI single-port T1/E1/J1#wcte11xp

# Digium TDM2400P/AEX2400: up to 24 analog ports# Digium TDM800P/AEX800: up to 8 analog ports# Digium TDM410P/AEX410: up to 4 analog ports#wctdm24xxp

# X100P - Single port FXO interface# X101P - Single port FXO interface#wcfxo

# Digium TDM400P: up to 4 analog ports#wctdm

# Xorcom Astribank Devices#xpp_usb

Continuamos con la instalación de libpri y el resto de asterisk:

# cd /usr/src/libpri-1.4.9

# make clean; make; make install

# cd /usr/src/asterisk-1.4.23

# make clean; ./configure; make menuselect

En este menú se deben seleccionar los componentes que se requieren para la instalación. Los requeridos ya

vienen por defecto. Para salir sin guardar '<esc>' para salir guardando 'x'

# make; make install; make config; make samples

# cd /usr/src/asterisk-addons-1.4.7

# make clean; ./configure; make menuselect

En este menú se deben seleccionar los componentes que se requieren para la instalación. Los requeridos ya

vienen por defecto. Para salir sin guardar '<esc>' para salir guardando 'x'

Si en algún momento se genera un error por falta de alguna libreria, es necesario digitar # make distclean;

antes de make clean. Esto asegura que el configure vuelva a evaluar las librerias recién instaladas.

# make; make install; make samples

Instalacion Asterisk 1.4.X - Millenium Phone Center http://wiki.millenium.com.co/wiki/index.php/Instalacion_Asterisk_1.4.X

4 de 11 25/09/2009 21:38

Page 5: Instalacion Asterisk 1.4.X

Sonidos en español

Gracias a Voip para novatos se dispone de un set de sonidos, para instalarlos se debe realizar lo siguiente:

# cd /var/lib/asterisk/sounds

# wget http://www.voipnovatos.es/voces/voipnovatos-core-sounds-es-gsm-1.4.tar.gz

# wget http://www.voipnovatos.es/voces/voipnovatos-extra-sounds-es-gsm-1.4.tar.gz

# tar -zxvf voipnovatos-core-sounds-es-gsm-1.4.tar.gz

# tar -zxvf voipnovatos-extra-sounds-es-gsm-1.4.tar.gz

El sonido 1M es importante para el buzón de voz, por tanto se debe hacer el siguiente truco:

# cd /var/lib/asterisk/sounds/digits/es

# cp 1.gsm 1M.gsm

# cp 1M.gsm ../

Base de datos para el CDR en MySQL

Para que el CDR escriba correctamente se debe crear una base de datos y garantizar el acceso a la misma de

la siguiente manera:

# mysql

Ahora dentro de mysql

mysql> CREATE DATABASE asterisk;

mysql> USE asterisk;

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 '' );

mysql> ALTER TABLE `cdr` ADD INDEX ( `calldate` );

mysql> ALTER TABLE `cdr` ADD INDEX ( `dst` );

mysql> ALTER TABLE `cdr` ADD INDEX ( `accountcode` );

mysql> grant all privileges on asterisk.* to cdr@localhost identified by 'bdcdr';

mysql> exit;

Y lo editamos como se muestra a continuación. Si el MySQL es local, dejamos la opción "port" comentada,

Instalacion Asterisk 1.4.X - Millenium Phone Center http://wiki.millenium.com.co/wiki/index.php/Instalacion_Asterisk_1.4.X

5 de 11 25/09/2009 21:38

Page 6: Instalacion Asterisk 1.4.X

ya que es más eficiente conectarse por socket UNIX que por conexión TCP/IP dentro de la misma máquina.

El código detecta que al colocar "localhost" en el hostname, no tener puerto asignado y un socket

especificado, se conectará por el socket.

vim /etc/asterisk/cdr_mysql.conf

[global]hostname=localhostdbname=asterisktable=cdrpassword=bdcdruser=cdr;port=3306sock=/var/lib/mysql/mysql.sockuserfield=1

Ahora cambiamos el cdr para que almacene las llamadas no contestadas tambien

vim /etc/asterisk/cdr.conf

cambiamos

;unanswered = no

por

unanswered = yes

Subimos el dahdi y el asterisk recién instalados

# service dahdi restart# service asterisk restart

Confirmamos que este operando

# asterisk -r

CLI> cdr mysql status

Subir el Queue_log a MySQL

Primero se debe crear la tabla queue_log dentro de la base de datos por defecto asterisk como se muestra a

continuación:

Instalacion Asterisk 1.4.X - Millenium Phone Center http://wiki.millenium.com.co/wiki/index.php/Instalacion_Asterisk_1.4.X

6 de 11 25/09/2009 21:38

Page 7: Instalacion Asterisk 1.4.X

# mysql

mysql> use asterisk

mysql> CREATE TABLE `queue_log` (`fecha` datetime NOT NULL default '0000-00-00 00:00:00',`cdr_uniqueid` varchar(32) NOT NULL default '',`dcontext` varchar(80) default NULL,`agente` varchar(30) default NULL,`evento` varchar(30) NOT NULL default '',`parametro_1` varchar(30) default NULL,`parametro_2` varchar(30) default NULL,`parametro_3` varchar(30) default NULL,`parametro_4` varchar(30) default NULL,`ip_pbx` varchar(15) default NULL);

mysql> exit;

Ahora se debe crear el archivo cron_queue_log.php en la carpeta por defecto:

# mkdir /var/cron/

# cd /var/cron

# vim cron_queue_log.php

Instalacion Asterisk 1.4.X - Millenium Phone Center http://wiki.millenium.com.co/wiki/index.php/Instalacion_Asterisk_1.4.X

7 de 11 25/09/2009 21:38

Page 8: Instalacion Asterisk 1.4.X

<?

# =================== ARCHIVO DE CONFIGURACION ============include("variables.php");# ==================== CONEXION AL SERVIDOR ================include("conexion.php");# =========================================================

# SE VERIFICA QUE EXISTA EL ARCHIVOfile_exists($filename) or die("El archivo $filename no fue encontrado");

# SE GUARDA LA FECHA DE INICIO DEL PROCESO $fecha=date("Y-m-d H:i:s");#$fecha="2006-08-01 07:00:00";

#echo "Inicio del proceso $fecha\n";

$newfile = "$filename $fecha";

copy($filename, $newfile) or die ("No se pudo copiar $filename a $newfile");

$fp = fopen($filename,"w") or die ("No se pudo crear el archivo $filename");fclose($fp);

# APERTURA DEL ARCHIVO #echo "$filename\n";$fp = fopen($newfile,"r") or die ("No se pudo abrir el archivo");

while ($linea= fgets($fp)) { #echo "$linea<br>"; $arreglo=explode('|',$linea); $arreglo[0]=trim($arreglo[0]); $arreglo[1]=trim($arreglo[1]); $arreglo[2]=trim($arreglo[2]); $arreglo[3]=trim($arreglo[3]); $arreglo[4]=trim($arreglo[4]); $arreglo[5]=trim($arreglo[5]); $arreglo[6]=trim($arreglo[6]); $arreglo[7]=trim($arreglo[7]); $arreglo[8]=trim($arreglo[8]);

$fecha=date('Y-m-d H:i:s',$arreglo[0]);

#Consulta sin insercion de fecha $query = "INSERT INTO queue_log VALUES ('$fecha','$arreglo[1]','$arreglo[2]','$arreglo[3]','$arreglo[4]','$ar

#echo "$query\n";

# EJECUTA CONSULTA POSTGRES #pg_exec($dbp,$query); # EJECUTA CONSULTA MYSQL mysql_query($query,$dbp); // DEBUG: or die("Error insertando registros en la consulta $query con error ".mysq }

# CIERRA CONEXION POSTGRES#pg_close($dbp);# CIERRA CONEXION MYSQL mysql_close($dbp);# CIERRA ARCHIVOfclose($fp);

$fecha=date("Y-m-d H:i:s");echo "Fin del proceso $fecha\n";?><META HTTP-EQUIV=Refresh CONTENT="1; URL=rep_queue_log.php">

Ahora de debe hacer ejecutable:

chmod 770 cron_queue_log.php

También se deben crear los siguientes archivos editando según cada campaña:

Instalacion Asterisk 1.4.X - Millenium Phone Center http://wiki.millenium.com.co/wiki/index.php/Instalacion_Asterisk_1.4.X

8 de 11 25/09/2009 21:38

Page 9: Instalacion Asterisk 1.4.X

vim variables.php

<?# ===================== IMAGEN DE LA CAMPANA ====================$imagen= "<img src=imagenes/millenium.jpg width=470 height=95>";# =================== Variables de base de datos ===============

# =================== Variables del programa ===================

# Ubicacion del archivo queues_log $filename = "/var/log/asterisk/queue_log";

# Segundos para medir el nivel de servicio$segundos_nivel_servicio=20;

# Cadena de caracteres con ip del pbx$ip_pbx="127.0.0.1";

# ===============================================================

?>

vim conexion.php

<?php# CONEXION AL SERVIDOR # ===============================================require_once('librerias/libreria.mysql.php');$dbp=crear_conexion_servidor();# ===============================================?>

mkdir libreriascd libreriasvi libreria.mysql.php

<?PHP/*function crear_conexion_reportes(){ return myconectar('127.0.0.1','5432' ,'reportes' ,'root' ,'');}*/

function crear_conexion_servidor(){ return myconectar('127.0.0.1','3306' ,'asterisk' ,'cdr' ,'bdcdr');}

function myconectar($host,$port,$bd,$usuario,$clave){ $conn = mysql_connect($host, $usuario ,$clave); mysql_select_db($bd,$conn); if (!$conn) die ("No me pude conectar con la Base de Datos.\n"); return($conn);}function desconectar1($conn){ mysql_close($conn);}?>

Finalmente creamos el cron de siguiente manera:

crontab -e

Instalacion Asterisk 1.4.X - Millenium Phone Center http://wiki.millenium.com.co/wiki/index.php/Instalacion_Asterisk_1.4.X

9 de 11 25/09/2009 21:38

Page 10: Instalacion Asterisk 1.4.X

Ahora insertamos la siguiente línea:

# MODULO DE ESTADISTICAS# ============================================================================0 * * * * /usr/bin/php -q /var/cron/cron_queue_log.php# ============================================================================

Base de datos para el CDR en PostgreSQL

Estando conectados con el usuario postgres, se crea la base de datos (Recuerde que la codificación por

defecto en PostgreSQL es UTF8):

# su postgres

$ psql

postgres=# CREATE DATABASE asterisk OWNER postgres;

Ahora nos conectamos a la base de datos asterisk

postgres=# \c asteriskAhora está conectado a la base de datos «asterisk».

asterisk=#

CREATE TABLE "public"."cdr" ( "calldate" TIMESTAMP WITHOUT TIME ZONE NOT NULL, "clid" VARCHAR(80) DEFAULT ''::character varying NOT NULL, "src" VARCHAR(80) DEFAULT ''::character varying NOT NULL, "dst" VARCHAR(80) DEFAULT ''::character varying NOT NULL, "dcontext" VARCHAR(80) DEFAULT ''::character varying NOT NULL, "channel" VARCHAR(80) DEFAULT ''::character varying NOT NULL, "dstchannel" VARCHAR(80) DEFAULT ''::character varying NOT NULL, "lastapp" VARCHAR(80) DEFAULT ''::character varying NOT NULL, "lastdata" VARCHAR(80) DEFAULT ''::character varying NOT NULL, "duration" BIGINT DEFAULT 0 NOT NULL, "billsec" BIGINT DEFAULT 0 NOT NULL, "disposition" VARCHAR(45) DEFAULT ''::character varying NOT NULL, "amaflags" BIGINT DEFAULT 0 NOT NULL, "accountcode" VARCHAR(20), "uniqueid" VARCHAR(40) DEFAULT ''::character varying NOT NULL, "userfield" VARCHAR(255) DEFAULT ''::character varying NOT NULL) WITHOUT OIDS;

CREATE INDEX "cdr_idx" ON "public"."cdr" USING btree ("clid");

CREATE INDEX "cdr_idx1" ON "public"."cdr" USING btree ("dstchannel");

CREATE INDEX "cdr_idx2" ON "public"."cdr" USING btree ("calldate");

CREATE INDEX "cdr_idx3" ON "public"."cdr" USING btree ("accountcode");

CREATE INDEX "cdr_idx4" ON "public"."cdr" USING btree ("uniqueid");

Se modifica el archivo cdr_pgsql.conf

vim /etc/asterisk/cdr_pgsql.conf

Instalacion Asterisk 1.4.X - Millenium Phone Center http://wiki.millenium.com.co/wiki/index.php/Instalacion_Asterisk_1.4.X

10 de 11 25/09/2009 21:38

Page 11: Instalacion Asterisk 1.4.X

[global]hostname=192.168.54.30port=5432dbname=asteriskpassword=user=postgrestable=cdr

Obtenido de "http://wiki.millenium.com.co/wiki/index.php/Instalacion_Asterisk_1.4.X"

Esta página fue modificada por última vez el 00:07, 29 ago 2009.

El contenido está disponible bajo los términos de la GNU Free Documentation License 1.2

Instalacion Asterisk 1.4.X - Millenium Phone Center http://wiki.millenium.com.co/wiki/index.php/Instalacion_Asterisk_1.4.X

11 de 11 25/09/2009 21:38