Anda di halaman 1dari 74

Telefona IP

con Asterisk
Administrador
Avanzado

ElicerTats
AndrsFuentes

Asterisk: Administracin avanzada 1


Versin 1.5

Asterisk: Administracin avanzada 2


CAPTULO 1
ASTERISK: PRIMEROS PASOS

1.1 INSTALACIN DE LINUX Y COMANDOS BSICOS

Prctica 1.1.1: Instalacin del sistema operativo GNU/Linux.

El objetivo de la prctica es adquirir los conocimientos suficientes para reparar un servidor para el
funcionamiento de Asterisk como servidor de comunicaciones.

Instruccines:

1. Configurar el BIOS del sistema para que arranque desde el CD ROM.

2. Insertar el (primer) CD o DVD de instalacin de Centos 6 en el CD/DVD ROM.

3. Encender o reiniciar el sistema.

4. Puede observar que el sistema arranca desde el CD, y aparece en el monitor una pantalla con tres
opciones.

5. Para iniciar la instalacin grfica presionamos la tecla Enter.

6. Aparece una opcin para revisar los medios (CD /DVD) de instalacin. Si Ud. Est seguro de que estos
medios funcionan adecuadamente, puede prescindir (Skip) de la verificacin.

7. En la pantalla inicial de instalacin grfica de Centos 6, se da clic en Next.

8. Escoja el lenguaje para el proceso de instalacin (Recomendado: Ingls) y presione Next.

9. Escoja el idioma en el que trabaja su teclado (Espaol) y clic en Next.

10. En la seccin de particionamiento, escoja la opcin para implementar un esquema personalizado


(customized) y clic en Next.

11. En la nueva pantalla y de ser posible cree tres particiones una para /boot de 100 MB, una para swap,
una para el sistema de archivos / , una para /home. Los tamaos sern escogidos enbase a las
indicaciones del instructor. Click en next.

12. Escoja la instalacin de GRUB para el arranque. Clic en Next.

13. En la seccin de dispositivos de red, configrelos, su instructor le dir si usar DHCP o no. Si no, l le
proveer de una Direccin IP, Mscara de Red, Red y direccin de Broadcast, as como el Hostname,
Gateway y direcciones de DNS. Ingrese estos valores, revselos y de Clic en Next.

14. No seleccione ningn lenguaje adicional aparte del Ingls predeterminado (English (USA)). Clic en
Next.

15. Escoja la opcin correspondiente de Huso Horario de acuerdo a su situacin geogrfica en el mapa
que se le presenta. Clic en Next.

16. Designe una contrasea para el usuario root, confrmela y clic en Next.

17. Ahora escoja categora por categora cada uno de los siguientes paquetes (los que no se mencionan,
deshabilitarlos)

Asterisk: Administracin avanzada 3


Desktops

X Window System

GNOME Desktop Environment

Applications

Editors

Servers

Server Configuration Tools

Network Servers

Development

Development Tools (seleccionar todos)

X Software Development

System

Administration Tools

System Tools

18. Clic en Next para que de inicio la instalacin del sistema operativo. Este proceso tomar alrededor de
30 minutos, dependiendo de las caractersticas tcnicas de los equipos.

19. En el momento en que aparece la pantalla de instalacin completa retire el CD/DVD del CD ROM y de
clic en Reboot, para reiniciar el sistema.

20. Ahora es necesario completar algunos pasos post-instalacin, de Clic en Next.

21. En la pantalla de Bienvenida (Welcome) presione Next.

22. Acepte el Acuerdo de Licencia GPL y clic en Next.

23. Coloque la hora y fecha adecuadas del sistema y clic en Next.

24. Agregue un usuario y contrasea en referencia a su nombre

25. Haga la prueba de sonido, clic en Next.

26. En la ltima pantalla, clic en Finish. El sistema arranca nuevamente y la instalacion ha finalizado.

Si desea ms informacin, puede consultar el siguiente link:

http://www.alcancelibre.org/staticpages/index.php/procedimiento-instalar-centos6

Prctica 1.1.2: Trabajo con la consola de linux, comandos bsicos.

Con esta prctica el alumno sera capaz de manejar adecuadamente la consola o terminal de linux, poder
moverse entre directorios, crear ficheros y carpetas, copiar, mover o borrar estos ltimos. De esta
manera se proveer al alumno la habilidad suficiente para desenvolverse en la terminal.

Abrir una terminal o consola de linux. Mediante la guia del instructor aplicar y observar el funcionamiento

Asterisk: Administracin avanzada 4


de los siguientes comandos1:

"pwd" - Se utiliza para saber en que ruta o directorio estamos trabajando

"ls" - Lista el contenido de un directorio.

Ejemplo: ls /home/asterisk - Lista el contenido del directorio "/home/asterisk"

"cd" - Se utiliza para moverse entre los directorios.

Ej: cd /usr/share - Se va a "/usr/share"

Ruta absoluta: Se indica desde el directorio raiz /. Ej: /usr/local

Ruta relativa: Se indica a partir del directorio actual. Ej: Si estando en /home queremos ir a el
directorio lpic: cd lpic

"mkdir" - Se utiliza para crear un directorio.

Ejemplo.: mkdir /home/asterisk - Crea el directorio "/home/asterisk"

"cp" - Se utiliza para copiar archivos.

Ejemplo : cp /home/asterisk/palabras.txt /home - copia el archivo palabras.txt


"/home/asterisk/palabras.txt" en el directorio "/home"

"mv" - Se utiliza para mover archivos.

Ejemplos.: mv /home/asterisk/palabras.txt /home - Mueve el archivo palabras.txt


"/home/asterisk/palabras.txt" al directorio"/home"

"rm" - Se utiliza para eliminar archivos.

Ejemplo : rm /home/asterisk/palabras.txt - Elimina el archivo palabras.txt que se encuentra en

"touch" - Se utiliza para cambiar el acceso al archivo y modificar el la hora de acceso, tambien para
crear un archivo.

Ejemplo : touch /home/asterisk/palabras.txt - Creara el archivo palabras.txt si este no existe. Sino,


cambiara la hora del ultimo acceso al archivo

"more" - se utiliza para mostrar de a pantallas la informacion.


Ejemplo: more /home/asterisk/palabras.txt - muestra el contenido del archivo palabras.txt de una
pantalla a la vez

"less" - se utiliza para mostrar de a pantallas la informacion.

Ejemplo: more /home/asterisk/palabras.txt - muestra el contenido del archivo palabras.txt de una


pantalla a la vez.

"cat" - Tambien utilizado usualmente para ver el contenido de un archivo.

Ejemplo : cat /home/asterisk/palabras.txt - muestra el contenido del archivo palabras.txt

"man" - Entrega informacion sobre el commando ingresado (man=manual).

Ejemplo : man pwd - Nos da la informacion en linea del comando 'pwd'

"chmod" - Se utiliza para cambiar los permisos de un fichero.

1 http://aprendamos-linux.blogspot.com/2007/04/comando-bsicos-consola-linux.html

Asterisk: Administracin avanzada 5


Ejemplo : chmod 755 /home/asterisk/palabras.txt - Este cambio da todos los permisos menos el de
edicion al archivo palabras.txt

"chown" - Se utiliza para cambiar el propietario y grupo de un fichero.

Ejemplo : chown usuario:grupo /home/asterisk/palabras.txt

"clear" - Se utiliza para limpiar la pantalla

Prctica 1.1.3: Manejo del editor vim

Para la configuracin de asterisk es necesario manipular ficheros de texto. Por tal motivo se requiere que
el alumno conosca el manejo de un editor como el vim (o vi), el cual es uno de los editores mas populares
de sistemas operativos Linux o Unix.

Los modos del vim2:

vim dispone de varios modos en su interfaz. De tal manera dependiendo del modo en el que nos
encontremos una misma tecla puede hacer cosas diferentes. Por ejemplo, en el modo INSERTAR la p
escribir una p en el documento, mientras que en el modo de comandos p (Paste) pega lo que hayamos
copiado.

Los modos ms usados son los siguientes:

Modo ejecucin:

Se trabaja en este modo presionando las teclas [ESC]+[:]. En este modo se puede ejecutar comandos
avanzados en vim.

Modo edicin:

Es el modo de edicin. Para entrar en este modo basta con escribir una [i] desde el modo comando y a
partir de ese momento todo lo que se escriba con el teclado se escribir en el documento, como si de un
editor convencional se tratase.

Para volver al modo comandos slo es necesario presionar la tecla [ESC].

Modo comandos:

Se llega a este modo cuando se presiona la tecla [ESC]. En este modo se puede ejecutar comandos
presionando combinaciones de teclas.

Trabajando con vim:

1. Abra un terminal virtual. Asegrese de encontrarse en su directorio home. Cree un archivo llamado
vitest usando vim. Escriba el siguiente texto y el alfabeto marino en el archivo vitest. Agregar el
alfabeto es una manera fcil de llenar un par de pantallas de informacin necesaria para un uso
posterior. Esta es una sesin de entrenamiento para el uso de vim.

1 uno
2 dos
3 tres
A alfa
B bravo
C charlie
D delta
E eco

2 http://blog.vud1.com/?p=230

Asterisk: Administracin avanzada 6


F fox
G golf
H hotel
I indian
J july
K kilo

2. Regrese al modo comando. Guarde y salga del archivo. Note que tan pronto presione los dos puntos
(:), estos aparecen bajo la ltima lnea de su rea de entrada. Una vez que el bfer est vaco y el
archivo cerrado, Ud ve un mensaje con el nmero de lneas y caracteres en el archivo.

Teclas de movimiento del cursor

3. Abra de nuevo el archivo vitest. Note que la ltima lnea en la pantalla muestra el nombre del archivo
y el nmero de caracteres.

4. Utilizando las teclas <h>, <j>, <k> y <l>, practique movindose a travs del archivo.

5. Usando los comandos vim apropiados para moverse a travs del texto:

Muvase una pgina adelante <Ctrl-f>

Muvase una pgina atrs <Ctrl-b>

Mueva al cursor a la primera lnea en la pantalla H

Mueva al cursor a la ltima lnea en el archivo G

Mueva el cursor a la primera lnea en el archivo :1 <enter>

Mueva el cursor a la lnea 5 del archivo :5 <enter>

Mueva el cursor al final de la lnea $

Mueva el cursor al final de la lnea 0

6. Cambie el archivo vitest de manera que despus de cada letra del alfabeto, un primer nombre comn
sea agregado y que inicie con esa letra. Asegrese de usar distintos mtodos para conmutar del
modo de comandos al modo de edicin (insert). El archivo debera verse ms o menos as:

A alfa Ani

B bravo Ben

C charlie Carlos

Bsqueda global y reemplazo

7. En el modo ejecucin se puede correr el siguiente comando: :%s/texto_buscado/texto_nuevo/g . este


comando sirve para reemplazar texto en todo el archivo. Reemplace todos los espacios en el archivo
vitest con tabs (:%s / / <TAB>/g). Guarde su archivo (:wq, :x o ZZ)

Copiar, cortar y pegar

8. En el modo comando, situarse en una linea en concreto y probar los comandos copiar (yy), pegar (p)
o cortar(dd). En copiar o pegar se puede anteponer un nmero que indica la cantidad de lineas con
las que el comando respectivo trabajar.

Asterisk: Administracin avanzada 7


1.2 GENERALIDADES DE LA TELEFONA TRADICIONAL Y TELEFONA IP

Telefona Tradicional:

La primera transmisin de voz se hizo en 1876 por Graham Bell.

Se usaban lneas dedicadas entre terminales.

Los primeros conmutadores eran operadores telefnicos que enlazaban fsicamente la lnea
origen y la lnea destino.

Conceptos bsicos:

Red Telefnica Pblica Conmutada (Public Switched Telephone Network).

Conmutacin de circuitos.

Todo lo que escuchamos son seales analgicas, muy susceptibles al ruido.

Cuando se amplifica una seal analgica se amplifica tambin el ruido que lleve incorporado.

Las seales digitales pueden ser reconstruidas en cada amplificador

Telefona Digital:

El loop local es lo nico que existe hasta ahora de la telefona analgica.

La seales analgicas son susceptibles a interferencia, esttica y dems efectos no deseados.

La intencin es enviar informacin de la seal para que en el destino sea reconstruida.

Mediante algoritmos de deteccin y correccin de errores se garantiza que en el destino se tenga


informacin igual a la que se envi.

Sealizacin:

Sealizacin Usuario a Red:

Es la manera como el usuario se comunica con la red.

El mtodo ms usado es DTMF (Dual Tone Multi Frequency).

Es una sealizacin inband (en banda).

Sealizacin red a red

Comunicacin entre switches telefnicos.

T1/E1 sobre par trenzado

T1: transmisin digital a 1.544 Mbps, usado en Norte Amrica y Japn.

E1: trasnmisin digital a 2.048-Mbps, usado en Europa.

T3/E3, T4 sobre cable coaxial

T3: 28 T1s, 672 x 64-kbps, 44.736 Mbps.

Asterisk: Administracin avanzada 8


E3: 16 E1s , 512 64-kbps, 34.368 Mbps.

T4: 168 T1s, 4032 64-kbps, 274.176 Mbps.

Synchronous Optical Network (SONET) sobre fibra ptica

SONET es normalmente desarrollado en OC-3, OC-12, and OC-48, que son 155.52 Mbps, 622.08
Mbps, and 2.488 Gbps, respectivamente.

Signaling System 7 (SS7)

Mtodos de Acceso:

BRI (Basic Rate Interface)

Acceso bsico diseado para dar servicio a estaciones de trabajo.

Consiste de dos canales B (bearer) de 64 Kbps controlados por un canal D (data) de 16 Kbps.

Sistema que ha sido popularizado en Europa, mas no en Norte Amrica

PRI (Primary Rate Interface)

Para conexiones distantes, con mayor ancho de banda.

T1: 23 canales B y un D para sealizacin (64 Kbps ) 1.544 Mbps.

E1: 30 canales B y un D para sealizacin (64 Kbps ) 2.048 Mbps. Existe un ltimo canal que sirve
para sincronizacin.

En nuestro pas, cuando se necesitan hasta 30 lneas telefnicas es muy comn solicitar un E1 a
las operadoras telefnicas.

Asterisk: Administracin avanzada 9


1.3 VoIP y TELEFONA IP

El trmino Voz sobre IP concuerda con la manera de trasmitir conversaciones a travs de una red basada
en protocolo IP.

Cuando se habla de Telefona IP se hace referencia a un sistema totalmente organizado y controlado de


comunicaciones telefnicas que usan Voz sobre IP. La Telefona IP incorpora algunas consideraciones:
Latencia y retraso, Jitter, codificacin y compresin de voz, eco, conversin anlogo digital, protocolos de
transporte, diseo de plan de numeracin, entre otros.

Telefona IP

Ventajas

Aprovecha la infraestructura de red existente.

La voz se convierte en bits de informacin que pueden ser encriptados para garantizar seguridad.

Posibilidad de hacer llamadas a travs del Internet.

Permite extender la PSTN hasta lugares muy alejados.

Estndares mundialmente aceptados.

Ms y mejores servicios que la PSTN.

Desventajas

Por la naturaleza de los enlaces de Internet se tiene una menor confiabilidad que la PSTN.

La VoIP es un servicio no orientado a conexin.

En ocasiones se necesita equipos que den prioridad al trfico de voz por ser en tiempo real,
sobretodo en conexiones inalmbricas.

Sistema que no ha sido completamente regulado en nuestro pas.

Asterisk: Administracin avanzada 10


1.4 ASTERISK

Asterisk es un software PBX que usa el concepto de software libre (GPL). Digium, empresa que promueve
Asterisk, invierte en ambos aspectos: el desarrollo de cdigo fuente y en hardware de telefona de bajo
costo que funciona con Asterisk. Asterisk corre en plataformas Linux y otras plataformas Unix con o sin
hardware conectando a la red pblica de telefona (PSTN Public Switched Telephone Network). Asterisk
permite conectividad en tiempo real entre las redes PSTN y redes VoIP.

Asterisk incluye muchos recursos que solo eran encontrados en sistemas de mensajeria unificada
propietarios y costosos, se mencionan los ms comunes:

Registro (Log) de llamadas

Buzn de voz

Grabacin de llamadas

Desvo de llamadas

Trasferencia de llamadas

Salas de Conferencias

Msica en espera

Gestin de colas (call center)

Integracin con interfaces de telefona tradicional a travs de tarjetas o gateways FXO, FXS, o
digitales (E1, T1, BRI entre otros)

IVR

Integracin con sistemas de tarifacin.

Integracin con sistemas de sntesis de voz y reconocimiento del habla.

Lo ms interesante de asterisk es su compatibilidad con mltiples protocolos VoIP como: SIP (Session
Initiation Protocol), H.323, IAX2 (Inter Asterisk eXchange), MGCP (Media Gateway Control Protocol), SCCP
(Skinny Client Control Protocol), entre otros. con la PSTN (HARDWARE)

Versiones de Asterisk:

Existen dos tipos de versiones en asterisk: versiones estandar y versiones LTS (Long Term Support).

Las versiones estandar son mantenidas por un corto periodo de tiempo: 1 ao de soporte completo y 1
ao adicional en el cual se proveen actualizaciones de seguridad

Las versiones LTS tienen un soporte completo por un perodo de 4 aos ms 1 ao adicional para
actualizaciones de seguridad.

En la siguiente tabla se observa el estado actual de las versiones de Asterisk:

Fecha de Actualizaciones End Of


Versin Tipo
liberacin de seguridad Life EOL

1.2.X 2005-11-21 2007-08-07 2010-11-21

1.4.X LTS 2006-12-23 2011-04-21 2012-04-21

Asterisk: Administracin avanzada 11


1.6.0.X Standard 2008-10-01 2010-05-01 2010-10-01

1.6.1.X Standard 2009-04-27 2010-05-01 2011-04-27

1.6.2.X Standard 2009-12-18 2011-04-21 2012-04-21

1.8.X LTS 2010-10-21 2014-10-21 2015-10-21

10.X Standard 2011-12-15 2012-12-15 2013-12-15

Escenarios de uso:

PBX IP PURA:

Una PBX completa que cumple todas las expectativas de una empresa.

INTEGRADO CON PBX HEREDADA:

En este escenario asterisk trabaja con una PBX que esta previamente instalada. Normalmente es menos
costoso que actualizar toda la PBX a IP.

Asterisk: Administracin avanzada 12


INTERCONEXIN DE OFICINAS REMOTAS:

Asterisk posee funcionalidad de un media gateway, es decir, puede convertir las seales analgicas o
digitales de una PBX tradicional o de los telfonos de los usuarios en voz sobre IP y transmitir por la red
corporativa de datos o internet. La convergencia propicia la reduccin del nmero de circuitos o enlaces y
un mejor aprovechamiento de los recursos. Mediante este modelo se puede conectar por ejemplo oficinas
en distintos paises o regiones, eliminando los altos costos en llamadas internacionales.

SERVIDOR DE APLICACIONES:

Adems de las funciones embebidas que asterisk incorpora, se puede hacer uso de herramientas
adicionales como AGI o AMI para proveer soluciones a medida (aplicaciones informticas) mediante
lenguajes de programacin y bases de datos, satisfaciendo ciertas necesidades especficas del cliente.
Esto convierte a Asterisk en un completo servidor de comunicaciones.

Asterisk: Administracin avanzada 13


MEDIA GATEWAY:

Un media gateway permite convertir entre protocolos de telefona tradicional y telefona IP. Aprovechando
de esta manera toda la infraestructura de telefona que se pueda tener y permitiendo la convergencia e
integracin entre diferentes tecnologias de comunicaciones.

CONTACT CENTER:

Este escenario es bastante comn en escenarios de negocio de ventas por telfono o atencin al cliente.
Asterisk puede servir un sistema de colas en el cual un cliente llama y espera a ser atendido por un
agente. De esta manera se pueden crear soluciones ERP (Enterprise resource planning) integrados a
Asterisk. Otras aplicaciones comunes en este escenario son marcacin de campaas, marcacin
automtica, medicin de calidad de servicio entre otros.

Asterisk: Administracin avanzada 14


1.5 Hardware para Asterisk

Tarjetas para telefona analgica:

Foreign eXchange Station (FXS): Emite sealizacin (voltaje), permite conectar telfonos,
generalmente de color verde.

Foreign eXchange Office (FXO): Recibe sealizacin (voltaje), permite conectar lneas telefnicas,
generalmente de color rojo.

Marcas: Digium, Sangoma, OpenVox, Rhino, etc.

Presentacin: 4, 8, 16, 24 puertos FXO FXS (pueden ser mixtos)

Tarjetas para Telefona Digital:

Soportan estndares como E1, T1, BRI, ISDN.

Marcas: Digium, Sangoma, OpenVox, Rhino, etc.

Presentacin: 1, 2, 4, 8 puertos.

Gateways Analgicos o Digitales:

Similares a las tarjetas, puertos FXO, FXS o E1, T1. La interconexin con asterisk se hace atravs de IP
mediante protocolo SIP.

Asterisk: Administracin avanzada 15


Marcas: Grandstream, Astra, Rhino, Cisco, Audiocodes.

ATA's: Adaptadores para telefona analgica. 1 o 2 puertos FXS

Telfonos IP:

Marcas: Grandstream, Astra, Polycom, etc.

Presentacin: Destinados a distintos tipos de usuario, admiten protocolo SIP, IAX2, H.323.

Asterisk: Administracin avanzada 16


1.6 INSTALACIN DE ASTERISK

Consideraciones previas:

Tener un sistema GNU/Linux instalado, recomendable Centos 6. Asegurarse de tener instalado software de
desarrollo, como los paquetes: ncurses, make, gcc, bison, libxml, curl. Trabajar como root.

Practica 1.6.1: Instalacion de asterisk mediante repositorio

Mediante este mtodo, nos aseguramos de tener una versin de asterisk estable para el sistema
operativo elegido, adems de facilitar el proceso de actualizacin del programa. Sin embargo, es posible
que al momento de configurar una aplicacin especfica se requiera un mdulo adicional para que
funcione por lo cual hay que instalar dicha funcin si no est presente.

1. Descargar e instalar el repositorio epel para centos, la versin adecuada del repositorio puede
encuntrarse en http://fedoraproject.org/wiki/EPEL

# yum install http://epel.gtdinternet.com/6/i386/epel-release-6-7.noarch.rpm

2. Verificar que los paquetes asterisk estn presentes en el repositorio:

# yum search asterisk

3. Instalar los paquetes necesarios:

# yum install asterisk asterisk-sounds-core-es-gsm asterisk-voicemail-plain

4. Iniciar el servicio asterisk:

# service asterisk start

5. Contectarse a la consola asterisk:

# asterisk -r

Instalacion de asterisk mediante compilacin:

Al instalar asterisk mediante este mtodo, se tiene un control ms estricto sobre todas las herramientas o
mdulo que se instalan, eligiendo solamente lo que se adecue nuestras necesidades y pudiendo
personalizar la instalacin poniendo o quitando componentes de asterisk.

Como se observ en la parte 1.4 donde se describieron las caractersticas de Asterisk as como los
escenarios posibles de su aplicacin, Asterisk adems de funcionar como una PBX tiene ms aplicaciones
y por lo tanto al momento de su intalacin debemos tener en cuenta que nuestro S.O disponga de
software como: dahdi, drivers ODBC, bases de datos SQL, codecs, entre otros.

Un requisito bsico para realizar una correcta instalacin de Asterisk es instalar primero DAHDI: acrnimo
de Digium Asterisk Hardware Device Interface (conocido antes como Zaptel) que es el software que
asterisk usa para gestionar hardware de telefona. Es recomendable instalar este software aun si no se
tiene ningn hardware de este tipo instalado, ya que DAHDI es una dependencia requerida para construir
el mdulo de timing (relj del sistema asterisk) llamado res_timing_dahdi, mdulo que es usado para
aplicaciones como MeetMe() o troncales IAX las cuales requieren un preciso control y sincronizacin de
tiempo.

Prctica 1.6.2: Instalacin de dahdi

Asterisk: Administracin avanzada 17


1. Si se dispone del hardware adecuado, primero conectarlo a los puertos PCI/PCIe disponibles en el
computador.

2. Trabajar sobre el directorio /usr/src

# cd /usr/src

3. Descargar las fuentes de dahdi desde www.asterisk.org, adems de herramientas adicionales como
libpri (en el caso de que se est configurando E1's)

# wget http://downloads.asterisk.org/pub/telephony/libpri/releases/libpri-1.4.12.tar.gz
# wget http://downloads.asterisk.org/pub/telephony/dahdi-linux-complete/releases/dahdi-linux-
complete-2.6.1+2.6.1.tar.gz

4. Descomprimir los paquetes y proceder a su instalacin:

Libpri: Necesario en el caso de poseer E1's. Si no es el caso, no instalarlo.

# tar xvfz libpri-1.4.12.tar.gz


# cd libpri-1.4.12
# make all
# make install

Dahdi-linux-complete: Drivers de hardware y herramientas de configuracin para Dahdi.

# tar xvfz dahdi-linux-complete-2.6.1+2.6.1.tar.gz


# cd dahdi-linux-complete-2.6.1+2.6.1
# make all
# make install
# make config

5. Cargar el modulo dahdi_dummy para que asterisk lo use como fuente de timing:

# echo dahdi_dummy >> /etc/dahdi/modules.conf

6. Iniciar el servicio dahdi:

# service dahdi start

En una prctica posterior se realizar la configuracin de canales dahdi as como una revisin de las
opciones de configuracin de esta herramienta.

Practica 1.6.3: Instalacion de asterisk mediante compilacin:

1. Trabajar sobre el directorio /usr/src/ :

# cd /usr/src/

2. Descargar una versin estable de asterisk desde www.asterisk.org

# wget http://downloads.asterisk.org/pub/telephony/asterisk/releases/asterisk-1.8.16.0.tar.gz

3. Proceder a descomprimir y compilar el programa

# tar xvfz asterisk-1.8.16.0.tar.gz


# cd asterisk-1.8.16.0
# ./configure
# make menuselect
# make
# make install
# make config
# make samples

4. Iniciar el servicio asterisk:

# service asterisk start

5. Contectarse a la consola asterisk:

Asterisk: Administracin avanzada 18


# asterisk -r

6. NOTA: En Centos 6, cambiar la poltica del sistema de seguridad SELINUX en el fichero


/etc/sysconfig/selinux, a disabled o permissive.

7. Para tener mayor informacin sobre los eventos que cursan por Asterisk, se puede iniciar la conexin
al CLI con el argumento v. El nmero de v's inidicar el nivel de invormacin que se quiere
mostrar, ejemplo:

# asterisk -rvvvv

Asterisk: Administracin avanzada 19


1.7 ASTERISK FIRST LOOK

Una vez realizada la instalacin de asterisk se aprendern algunos comandos bsicos adems de la
estructura de directorios que usa el programa. Para esta prctica hay que conectarse primero al CLI
(consola de asterisk) con el comando:

# asterisk -r

1. Observar la versin, licencia y garantia de asterisk. Adems ver la ayuda de los comandos disponibles
en el CLI:

asterisk*CLI> core show version


asterisk*CLI> core show licence
asterisk*CLI> core show warranty
asterisk*CLI> core show help

2. Comandos para reinicio, parada y recarga de asterisk:

asterisk*CLI> core restart now


asterisk*CLI> core restart when convenient
asterisk*CLI> core restart gracefully
asterisk*CLI> core stop now
asterisk*CLI> core stop when convenient
asterisk*CLI> core stop gracefully
asterisk*CLI> core reload
asterisk*CLI> module reload
asterisk*CLI> core abort shutdown

3. Observar los archivos de configuracin:

# cd /etc/asterisk

4. Ingresar en el directorio en donde se almacenan los mdulos de Asterisk, los cuales sirven para
aadir o quitar funcionalidades al sistema:

# cd /usr/lib/asterisk/modules

5. Ingresar en el directorio de trabajo de Asterisk y en cada uno de sus subdirectorios, aqui se


encuentran los sonidos, musica en espera, agis, claves de encriptacin, etc.:

# cd /var/lib/asterisk
# cd agi-bin
# cd ../firmware
# cd ../images
# cd ../keys
# cd ../moh
# cd ../sounds

6. Ingresar en el directorio de spools y en sus subdirectorios, el cual almacena los mensajes grabados en
el buzn de voz, las conferencias grabadas, etc.

# cd /var/spool/asterisk/outgoing
# cd ../voicemail
# cd ../tmp

7. Finalmente ingresamos en el directorio de logs de Asterisk.

# cd /var/log/asterisk

Asterisk: Administracin avanzada 20


1.8 CDECS DE AUDIO3:

Un cdec de audio es un algoritmo escrito en software, el cual permite la digitalizacin, compresin y


adicin de caracteristicas como adaptacin a las condiciones de la red (para transmisin), nivel de ruido,
silencio y tolerancia a latencia y microcortes, entre otras; para su transmisin y recepcin entre
terminales que establezcan una comunicacin de voz o video. Las principales caractersticas de un cdec
son su sample rating (muestras por segundo) y su bitrate (velocidad de transmicin). Entre los principales
cdecs de audio que sterisk soporta estn los siguientes 4:

Bit rate Sampling


Nombre Descripcin Notas
(kb/s) rate (kHz)
Tiene dos versiones u-law (US,
G.711 Pulse code modulation (PCM) 64 8 Japan) y a-law (Europa) para
muestrear la seal
7 kHz audio-coding within 64 Divide los 16 Khz en dos bandas
G.722 64 16
kbit/s cada una usando ADPCM
Codificacin a 24 y 32 kbit/s
G.722.1 para sistemas con baja perdida 24/32 16 Cdec para audio HD.
de paquetes
Dual rate speech coder for Parte de H.324 video conferencing.
multimedia communications Codifica la seal usando linear
G.723.1 5.6/6.3 8
transmitting at 5.3 and 6.3 predictive analysis-by-synthesis
kbit/s coding. PROPIETARIO
40, 32, 24, 16 kbit/s adaptive
G.726 differential pulse code 16/24/32/40 8 ADPCM; reemplaza a G.721 y G.723.
modulation (ADPCM)
Coding of speech at 8 kbit/s
Bajo retardo (15 ms). Existen
using conjugate-structure
G.729 8 8 algunas revisiones del cdec (g729a,
algebraic-code-excited linear-
g729b, etc). PROPIETARIO
prediction (CS-ACELP)
RegularPulse Excitation Long-
GSM 06.10 13 8 Usado por la tecnologa celular GSM
Term Predictor (RPE-LTP)
Cdec configurable para aceptar
Usa el motor de compresin 2.15-24.6 (NB)
Speex5 8, 16, 32 determinados bitrates y calidad de
vorbis. 4-44.2 (WB)
audio. LIBRE.
Uncompressed audio data De 6 a 40
SILK Variable Usado por skype
samples kbit/s

Como se observa en la tabla, los codecs g729 y g723.1 son de bajo consumo de banda pero para usarlos
hay que pagar licencias. Sin embargo estn disponibles en la red binarios de dichos codecs compilados
por intel, ya que esta ha adquirido licencias para su uso. La web es la siguiente:

http://asterisk.hosting.lv

1. Para instalar estos codecs, ingresar a la pagina web del link indicado, en dicha pgina se descarga el
binario adecuado de acuerdo al tipo de procesador del servidor y versin de Asterisk instalada. Por
ejemplo, para un procesador de 64 bits y versin de Asterisk 1.8 los binarios a descargar seran:

codec_g723-ast18-gcc4-glibc-x86_64-pentium4.so
codec_g729-ast18-gcc4-glibc-x86_64-pentium4.so

2. Copiar los nuevos mdulos al directorio: /usr/lib/asterisk/modules y reiniciar asterisk.

3. Conectarse al CLI y correr el comando:

asterisk*CLI> core show translation

3 http://bytecoders.net/content/elegir-un-c%C3%B3dec-de-audio-para-asterisk.html
4 http://www.voipforo.com/codec/codecs.php
5 http://www.speex.org/

Asterisk: Administracin avanzada 21


1.9 PROTOCOLO SIP

El protocolo SIP es un protocolo de sealizacin (no transporta datos) orientado al establecimiento de


sesiones multimedia (como video, audio, mensajera instantanea, entre otras) que permite:

Localizar un usuario

Contactar un usuario para determinar su voluntad de establecer una sesin

Negociacin de los media (audio/video) que se utilizarn a lo largo de la sesin

Modificar una sesin establecida

Terminar una sesin establecida

Este protocolo ha sido definido por la IETF (The Internet Engineering Task Force) en el documento RFC
(Request for Comments) 3261. En ese documento se explica como deben funcionar programas y/o
dispositivos que quieran implementar el protocolo SIP. Desde un punto de vista del funcionamiento, los
mensajes que se envan son una mezcla entre el protocolo HTTP (Hypertext Transfer Protocol) y el
protocolo SMTP (Simple Mail Transfer Protocol)6.

Para aclarar mejor los conceptos asociados al protocolo SIP visitar el siguiente link:

http://www.sinologic.net/2008-04/aclarando-conceptos-sip-y-voip/

Mtodos/solicitudes y respuestas SIP7:

Dentro del protocolo SIP existen los mtodos, que representan las distintas solicitudes que un dispositivo
puede enviar a otro. As mismo existen las correspondientes respuestas a dichas solicitudes. Se detallan a
continuacin:

Solicitudes SIP:

Hay seis tipos de mtodos / solicitudes:

INVITE Establece una sesin

ACK Confirma una solicitud INVITE

BYE Finaliza una sesin

CANCEL Cancela el establecimiento de una sesin

REGISTER Comunica la localizacin de usuario (nombre de equipo, IP)

OPTIONS Comunica la informacin acerca de las capacidades de envo y recepcin de telfonos SIP

6 Libro Asterisk 1.8.X v1.0 , Pag. 66, Andrea Sannuci


7 http://www.3cx.es/voip-sip/sip-methods.php

Asterisk: Administracin avanzada 22


Respuestas SIP:

Las solicitudes SIP son respondidas con respuestas SIP, de las cuales hay 6 clases:

1xx respuestas informativas, tal como 180, la cual significa telfono sonando

2xx respuestas de xito

3xx respuestas de redireccin

4xx errores de solicitud

5xx errores de servidor

6xx errores globales

Registro SIP:

El registro consiste en que un usuario informe a la red donde puede recibir invitaciones de
comunicaciones por parte de otros usuarios, lo que permite que dicho usuario pudiera recibir un mensaje
en su casa y si luego se trasladaba al trabajo y se registra de nuevo, el mensaje lo recibiera en el
trabajo y no en su casa. El protocolo SIP permite el registro de terminales telefnicos.

La informacin que se brinda al momento del registro entre otras es:

nombre de usuario

direccin ip

tiempo de validez del registro

Fichero de configuracin sip.conf8

En el fichero sip.conf se colocan las opciones que sern usadas cuando se establezcan llamadas a travs
del protocolo SIP, adems se crean los canales SIP.

Canal: Es el medio lgico por el cual se emite una llamada entrante o saliente. Por defecto Asterisk
soporta una serie de canales, los ms importantes son: SIP, IAX y DAHDI. Un canal estar siempre
asociado a un terminal telefnico, a una conexin de un proveedor de telefona o a un servidor de
telefona.

El archivo sip.conf est estructurado en tres bloques:

Una parte general donde se define la configuracin global del protocolo SIP. Al momento de
configurar una extensin o una troncal, si no se definen algunos parmetros, estos sern tomados
desde la parte general del archivo. Un ejemplo son los codecs audio.

Un bloque central donde se configura el registro a los proveedores VoIP y/o otros servidores
Asterisk .

Una parte final donde se configuran las extensiones internas, las troncales y las conexiones a
otros servidores Asterisk.

Las opciones de la seccin general son (se colocan las que son consideradas de mayor importancia):

Parmetro Descripcin
[general] Etiqueta que indica el comienzo de configuracin general.
context=default Indica el contexto donde llegarn por defecto las llamadas no autenticadas si

8 Libro Asterisk 1.8.X v1.0 , Pag. 66, Andrea Sannuci

Asterisk: Administracin avanzada 23


allowguest=yes
Es la direccin IP y el puerto donde Asterisk se pondr a la escucha para las
sealizacin SIP utilizando el protocolo UDP. Como desde la versin 1.8, Asterisk
soporta el protocolo IPv6 es posible configurar cuatro escenarios distintos:
1. 192.168.1.0 Asterisk aceptar conexiones solamente si enviadas a la direccin
IPv4 indicada .
udpbindaddr=0.0.0.0:5060 2. 2600:3c00::f03c:91ff:fedf:a455 - Asterisk aceptar conexiones solamente si
enviadas a la direccin IPv6 indicada .
3. 0.0.0.0 Asterisk aceptar conexiones en todas las direcciones IPv4 presentes en
el servidor Linux .
4. :: - Asterisk aceptar conexiones en todas las direcciones IPv4 e IPv6 presentes en
el servidor Linux .
Es la direccin IP y el puerto donde Asterisk se pondr a la escucha para las
sealizacin SIP utilizando el protocolo TCP. Como para el protocolo UDP es posible
;tcpbindaddr=0.0.0.0:5060
utilizar cuatro escenarios distintos para indicar IP y puerto de escucha. En este caso
se configurar para que escuche en todas las direcciones Ipv4 puerto 5060.
Desde la versin 1.6 es posible configurar Asterisk para que permita la sealizacin
tcpenable=no
SIP sobre el protocolo TCP.
Desde la version 1.8 este parmetro indica que protocolo de transporte se usar en
transport=udp
las llamadas, valores: udp,tcp
Asterisk se presentar con este nombre al momento de comunicarse con otros
useragent=asterisk-#PC
servidores o proveedores SIP.
Si al servidor es asociado un dominio registrado, se puede definir este parmetro
realm=#PC.asterisk.test para que la autentificacin se haga utilizando ese nombre de dominio (digest
authentication RFC2617).
Permite hacer bsquedas de registros DNS SRV basadas en los nombres de dominio
srvlookup=yes para llamadas SIP salientes del tipo: SIP/usuario@dominio. Asterisk hace esta
bsqueda limitndose al primer valor encontrado.
disallow=all Se deshabilita los codecs indicados en las llamadas que se establezcan.
allow=ulaw,gsm,alaw,g729 Se habilitan los codecs indicados en las llamadas que se establezcan.
Se permite el flujo media directo (audio mediante el protocolo RTP) entre los
directmedia=no terminales. El flujo directo solo es posible cuando los terminales no se encuentran
detrs de un NAT . Valores: yes, no
Protocolo para el envo de los DTMF (Dual-Tone Multi- Frequency). Son los tonos que
se generan cuando se presionan las teclas del telfono. Valor: rfc2833 Otro valor
dtmfmode=rfc2833
bastante comn es inband. Con inband los tonos se envan en el flujo audio (protocolo
RTP). Inband no funciona con el codec audio G729 .
language=es El idioma predefinido para los archivos de audio.
Mediante este paramentro, Asterisk enviar un paquete SIP OPTIONS regularmente
qualify=yes
para chequear si el terminal est en linea.
Cada cuantos segundos enviar un paquete OPTIONS al terminal registrado en
Asterisk. Esto permite saber si al terminal es alcanzable. El mtodo OPTIONS del
qualifyfreq=60
protocolo SIP se utiliza tambin para conocer los mtodos disponible en un
determinado cliente.
En casi todos los telfonos SIP, a lo largo de una llamada, es posible presionar un
allowtransfer=yes botn para transferirla a otra extensin. Este parmetro define si Asterisk aceptar
este tipo de solicitudes.
No = no se permiten llamadas entrantes (INVITE) de usuarios no autenticados
allowguest=no (aumenta la seguridad de Asterisk) .
Yes = se permiten llamadas entrantes (INVITE) de usuarios no autenticados .
yes=cuando un INVITE o un REGISTER es rechazado por Asterisk, en lugar de enviar
alwaysauthreject=yes el verdadero motivo del rechazo contestar siempre con un 401 Unauthorized no
permitiendo dar pistas a los que estn intentando acceder al sistema .
Si en una llamada establecida no hay flujo audio por 60 segundos la llamada ser
rtptimeout=60
terminada .
Si en una llamada en espera no hay flujo audio por 240 segundos, la llamada ser
rtpholdtimeout=240
terminada .
allowsubscribe=yes Permite suscribirse al estado de un canal.
Cuenta el numero de canales utilizados por una extensin. Este parmetro junto a las
callcounter=yes funciones GROUP y GROUP_COUNT permite limitar el numero de llamadas
simultaneas que un canal puede hacer.

Asterisk: Administracin avanzada 24


Las opciones de la seccin central son:

Parmetro Descripcin
Con esta linea empieza el segundo bloque del archivo sip.conf y se utiliza para registrarse a
servidores externos; normalmente proveedores SIP u otros servidores Asterisk. El parmetro
se deja comentado y a seguir se presentan algunos ejemplos:
- register => fulano:sesamo@sip.provider1.com
Para el registro con el proveedor el username ser fulano, la contrasea sesamo y el dominio
sip.provider1.com. Si el proveedor usa un puerto que no es el 5060 hay que especificarlo al
register => final de la lnea de esta forma:
- register => fulano:sesamo@sip.provider1.com:5061
En los dos casos las llamadas entrantes llegaran a la extensin s y al contexto que se define
en la configuracin de la extensin. Si queremos que las llamadas entre a una extensin
definida, tenemos que aadir al final de la linea el numero. Este numero puede ser arbitrario
siempre y cuando los proveedores SIP no especifiquen diversamente:
- register => fulano:contrasea@sip.provider1.com/1234
Asterisk pierde el registro, este parmetro representa el numero de segundos que Asterisk
registertimeout=20
esperar antes de volver a intentar registrarse.
este parmetro representa el numero de intentos que Asterisk
registerattemps har para registrarse. Si ponemos 0, los intentos sern infinitos.
Valor 10
Desde la versin 1.6.2.X se puede subscribir el estado de un buzn de voz de un servidor
remoto. En este ejemplo el buzn 1234 y contexto SIP_remote. Para subscribirse en la
mwi =>
configuracin de la extensin se indicar: mailbox=1234@SIP_Remote.
Valor: 1234:password@mysipprovider.com/1234

Finalmente se tiene las opcione especficas para los canales (se colocan las que son consideradas de
mayor importancia):

Parmetro Descripcin
Nombre del canal SIP con el cual un terminal ser identificado. No es necesariamente el
[nombre]
nmero que se usar para contactar a dicho canal.
friend=es un user y peer al mismo tiempo
user: una extensin que se autentica al servidor Asterisk usando el campo From para
type=friend hacer llamadas.
peer una extensin que se autentica para las llamadas entrantes utilizando la
direccin IP y el puerto
Si el terminal se conecta remotamente con un IP dinmico se pone dynamic. En caso
host=dynamic
contrario se pone la direccin IP.
secret= La contrasea para la extensin. Personalizar.
Si este parmetro es configurado, cuando la extensin se conecte al servidor Asterisk,
ste
controlar si hay mensajes de voz pendientes y en caso positivo se lo comunicar
;mailbox=
usando MWI = Message Waiting Indicator. que es una seal audio o vdeo que puede ser
recibida por la mayora de los telfonos IP o Softphone. Ejemplo:
numerobuzon@contextovoicemail
context=telefonos El contexto a que tendr acceso el canal.
callerid=Fulano <201> El nombre y el numero que identifica la extensin cuando llama. Personalizar
Estos dos parmetros definen una de las funcionalidades avanzadas de Asterisk, es decir
;callgroup
la posibilidad de capturar la llamada de una telfono que est timbrando, desde otro
;pickgroup
telfono.
accountcoce=201 Cdigo que aparecer en el registro de llamadas para este canal.

Para mayor profundidad y referencia en cuanto a la configuracin del fichero sip.conf, referirse al
siguiente link:

http://www.voip-info.org/wiki/view/Asterisk+config+sip.conf

Asterisk: Administracin avanzada 25


Prctica 1.9.1. Configuracin del fichero sip.conf

1. Abrir el fichero /etc/asterisk/sip.conf y segn los parametros explicados en la tabla anterior, colocar lo
siguiente:

[general]
context=default
udpbindaddr=0.0.0.0:5060
realm=instructor.asterisk.test
tcpenable=no
transport=udp
srvlookup=yes
useragent=instructor
disallow=all
allow=ulaw,gsm,g729
directmedia=no
dtmfmode=rfc2833
language=es
qualify=yes
;insecure=invite,port
allowtransfer=yes
allowguest=no
qualifyfreq=60
alwaysauthreject=yes
rtptimeout=60
rtpholdtimeout=240
allowsubscribe=yes
callcounter=yes
[telefono-201]
type=friend
secret=*4st3r1sK
callerid=Recepcion #PC <201>
context=telefonos
host=dynamic
disallow=all
allow=ulaw,gsm
;mailbox=201@default
[telefono-251]
type=friend
secret=*4st3r1sK
callerid=Alumno #PC <251>
context=softphones
host=dynamic
disallow=all
allow=ulaw,gsm
;mailbox=251@default

2. Ingresar a la consola de asterisk y recargar la configuracion SIP:

asterisk*CLI> sip reload

3. Ahora se debe configurar los telfonos IP con los datos de las cuentas SIP creadas. Esto depende de
terminal. Entonces los terminales se registran y se puede observar su estado con el siguiente
comando:

asterisk*CLI> sip show peers

4. Cuando se deben configurar muchas extensiones, se pueden crear templates (plantillas) donde se
definen todos los parmetros compartidos por todas las extensiones. Luego por cada una de ellas, se
configuran solamente los parmetros que la diferencian de las dems. Para crear un template la
primera linea debe tener esta sintaxis: [nombreplantilla](!) . Crear una plantilla para hardphones,
otra para softphones:

[hardphones-oficina](!)
type=friend
secret=*4st3r1sK

Asterisk: Administracin avanzada 26


context=telefonos
host=dynamic
disallow=all
allow=ulaw,gsm
[softphones-oficina](!)
type=friend
secret=*4st3r1sK
context=softphones
host=dynamic
disallow=all
allow=ulaw,gsm

5. Usando las plantillas creadas configurar cuatro canales ms:

[telefono-201](hardphones-oficina)
callerid=Recepcion #PC <201>
;mailbox=201@default
[telefono-202](hardphones-oficina)
callerid=Secretaria #PC <202>
;mailbox=202@default
[telefono-203](hardphones-oficina)
callerid=Gerencia #PC <203>
;mailbox=203@default
[telefono-251](softphones-oficina)
callerid=Alumno #PC <251>
;mailbox=251@default
[telefono-252](softphones-oficina)
callerid=Ventas #PC <252>
;mailbox=252@default
[telefono-253](softphones-oficina)
callerid=ATC #PC <253>
;mailbox=253@default

6. Ingresar nuevamente a la consola de asterisk, recargar y revisar la nueva configuracin:

asterisk*CLI> sip reload


asterisk*CLI> sip show peers

Asterisk: Administracin avanzada 27


1.10 PROTOCOLO IAX2

IAX fue creado por Mark Spencer (tambin creador de AsterisK) para paliar una serie de problemas o
incovenientes que se encontr al utilizar SIP en VoIP y que pens que deba ser mejorado.
Las principales diferencias ente IAX y SIP son las siguientes:

Ancho de banda

IAX utiliza un menor ancho de banda que SIP ya que los mensajes son codificados de forma binaria
mientras que en SIP son mensajes de texto. Asimismo, IAX intenta reducir al mximo la informacin de
las cabeceras de los mensajes reduciendo tambin el ancho de banda.

NAT

En IAX la sealizacin y los datos viajan conjuntamente con lo cual se evitan los problemas de NAT que
frecuentemente aparecen en SIP. En SIP la sealizacin y los datos viajan de manera separada y por eso
aparecen problemas de NAT en el flujo de audio cuando este flujo debe superar los routers y firewalls. SIP
suele necesitar un servidor STUN para estos problemas.

Estandarizacin y uso

SIP es un protocolo estandarizado por la IETF hace bastante tiempo y que es ampliamente implementado
por todos los fabricantes de equipos y software. IAX fue estandarizado hace poco tiempo y es por ello
queno se encuentra en muchos dispositivos existentes en el mercado.

Utilizacin de puertos

IAX utiliza un solo puerto (4569) para mandar la informacin de sealizacin y los datos de todas sus
llamadas. Para ello utiliza un mecanismo de multiplexin o "trunking". SIP, sin embargo utiliza un puerto
(5060) para sealizacin y 2 puertos RTP por cada conexin de audio (como mnimo 3 puertos). Por
ejemplo para 100 llamadas simultaneas con SIP se usaran 200 puertos (RTP) ms el puerto 5060 de
sealizacin. IAX utilizara slo un puerto para todo (4569)

Flujo de audio al utilizar un servidor

En SIP si utilizamos un servidor la sealizacin de control pasa siempre por el servidor pero la informacin
de audio (flujo RTP) puede viajar extremo a extremo sin tener que pasar necesariamente por el servidor
SIP. En IAX al viajar la sealizacin y los datos de forma conjunta todo el trfico de audio debe pasar
obligatoriamente por el servidor IAX. Esto produce una aumento en el uso del ancho de banda que deben
soportar los servidores IAX sobretodo cuando hay muchas llamadas simultneas.

Otras funcionalidades

IAX es un protocolo pensado para VoIP y transmisin de video y presenta funcionalidades interesantes
como la posibilidad de enviar o recibir planes de marcado (dialplans) que resultan muy interesante al
usarlo conjuntamente con servidores Asterisk. SIP es un protocolo de proposito general y podra transmitir
sin dificultad cualquier informacin y no slo audio o video. 9

Parmetros de configuracin:

Son tiles los parmetros generales del sip.conf, adicionalmente se colocan los siguientes de mayor
importancia:

9 http://www.voipforo.com/IAX/IAXvsSIP.php

Asterisk: Administracin avanzada 28


Parmetro Descripcin
[general] Esta etiqueta define el inicio de la parte general de la configuracin del protocolo IAX2
El puerto UDP usado por este protocolo. Este parmetro va configurado antes del
bindport=4569
bindaddr.
Es la direccin IP y el puerto donde Asterisk se pondr a la escucha para las sealizacin
bindaddr=0.0.0.0 IAX2 utilizando el protocolo UDP. Si se indica 0.0.0.0 Asterisk escuchar en todas la
direcciones IP presentes en el servidor Linux.
Mejora la seguridad contra brute force password attacks retrasando el envo de los
delayreject=yes
rechazos de autentificacin .
Con este parmetro se define el ancho de banda disponible para las llamadas y en base
bandwith=high a este se escogern los codecs audio a utilizar entre los configurados. Este parmetro
acepta como valores: low, medium, high
minregexpire=60 Tiempo mnimo de espiracin del registro de las troncales IAX2
maxregexpire=60 Tiempo mximo de espiracin del registro de las troncales IAX2
encryption=yes Se habilita el cifrado de la sealizacin y del flujo media
forceencryption=no No se fuerza el uso del cifrado
Define el tamao mximo de los datos (bytes) que pueden pasar por una troncal IAX2
;trunkmaxsize=128000 cuando se configura el parmetro trunk=yes. Con 128000 bytes pasarn por la troncal
800 llamadas con codec alaw y paquetes audio de 20ms
Cuando el trafico que pasa por una troncal IAX2 es bastante alto, si los paquetes UDP los
fragmenta el sistema operativo Linux, hay la posibilidad que se verifique una mala
trunkmtu=1240 calidad del audio. Configurando este parmetro con el valor 1240, significa que ser el
mismo Asterisk el que se encargar de fragmentar los paquetes audio ms grandes de
1240 byte, mejorando la calidad del audio en las conversaciones
Si no se recibe un ACK despus de una NEW enviado dentro de 2000ms, para evitar que
autokill=ues
el servidor Asterisk se estanque, se anula la solicitud
En septiembre del 2009 hubo una actualizacin del protocolo IAX2 para mejorar la
calltokenoptional=0.0.0. seguridad. Este parmetro con el que sigue hace referencia a esa nueva
0/0.0.0.0 implementacin. Como la mayora de los telfonos IAX no la soportan se indica que es
opcional para todas las direcciones IP. 0.0.0.0/0.0.0.0
requirecalltoken=auto Se requiere el calltoken solo si el telfono lo soporta

Para los canales, son vlidos los parametros de configuracin vistos en sip.conf.

Prctica 1.10.1 Configuracin del fichero iax.conf

Editar el fichero iax.conf, poner los parmetros indicados para la seccin general y crear un canal iax.
Recuerde que tambin se puede aplicar el concepto de plantillas usado en el sip.conf

[general]
bindport=4569
bindaddr=0.0.0.0
delayreject=yes
srvlookup=yes
language=es
bandwidth=high
disallow=all
allow=ulaw ,gsm,g729
minregexpire=60
maxregexpire=60
encryption=yes
forceencryption=no
;trunkmaxsize=128000
trunkmtu=1240
autokill=yes
calltokenoptional=0.0.0.0/0.0.0.0
requirecalltoken=auto
[telefono-301]
type=friend
host=dynamic
secret=*4st3r1sk-I

Asterisk: Administracin avanzada 29


context=softphones
;mailbox=301@default
qualify=yes
callerid=Ventas Externo <301>
requirecalltoken=auto

Recargar la configuracin de asterisk y observar los canales iax creados:

asterisk*CLI> iax2 reload


asterisk*CLI> iax2 show peers

Asterisk: Administracin avanzada 30


1.11 CONFIGURACIN DE CANALES DAHDI

1. Esta prctica es una continuacin de la prctica 1.6.2 en donde se instal dahdi. Lo que sigue es la
configuracin de los canales asociados a la tarjeta instalada en el servidor. Revisar que dahdi
reconoci e inicio nuestro hardware:

# dahdi_hardware -v

2. Generar configuracin de dahdi:

# dahdi_gencof

3. Editar el fichero de configuracin chan_dahdi.conf. Se deben configurar tanto canales FXO como FXS
si se posee, como ejemplo se presenta lo siguiente:

[channels]
usecallerid=yes
callwaiting=yes
usecallingpres=yes
callwaitingcallerid=yes
threewaycalling=yes
transfer=yes
canpark=yes
cancallforward=yes
callreturn=yes
echocancel=yes
echocancelwhenbridged=yes
busydetect=yes
faxdetect=both
language=es
group=0
context=default
;;PUERTO FXO
signalling=fxs_ks
group=0
context=entrada-pstn
channel => 1
;;PUERTO FXS
signalling=fxo_ks
callerid="Recepcion" <1001>
mailbox=1001@default
group=1
context=telefonos
channel => 2

Asterisk: Administracin avanzada 31


CAPTULO 2
DIALPLAN

2.1 INTRODUCCIN AL DIALPLAN

El Dialplan es el ncleo de Asterisk ya que en este se configura toda la lgica, y se determina como se
van a atender las llamadas salientes y entrantes. En lenguaje natural, un ejemplo muy sencillo de un
Dialplan podra ser el siguiente, cuando un usuario marca un nmero:

Si el nmero empieza por 0, llamar al destino con un proveedor externo.

Si el nmero tiene 3 cifras y empieza por 1, llamar a un usuario concreto.

Si ese usuario, no responde en 60 segundos, reproducir un mensaje de alerta.

Estructura del dialplan (extensions.conf)

El archivo de configuracin estensions.conf es el ms importantes para la puesta en marcha de nuestra


central asterisk. En l se define todo lo relacionado con el plan de llamadas. Cualquier numero marcado
desde una extensin ser procesado dentro de este archivo. Como el sip.conf est dividido en tres
bloques:

La parte general donde se configuran algunos parmetros generales.

La parte globals donde se definen las variables globales que se van a utilizar en la central.

Una ultima parte donde queda toda las configuracin de las llamadas.

En la tabla se muestran los parmetros de la seccin general y globals:

Parmetro Descripcin
[general] Inicio de la configuracin general del dialplan.
Si static es yes y writeprotect es no, para guardar los cambios hechos desde la consola
static=yes
de asterisk tendremos que escribir el comando dialplan reload.
En caso contrario se actualizar automticamente pero perderemos todos los
writeprotect=no;
comentarios presentes en el archivo.
autofallthrough=yes Si es yes cuando alguna llamada, por algn motivo se sale del plan se terminar.
Algunas aplicaciones y/o funciones tienen la capacidad, bajo algunas circunstancias de
"saltar" desde la prioridad donde se encuentran a una prioridad que normalmente es
priorityjumping=yes
n=+101 donde n es el numero de la lnea que se est ejecutando. Si est en yes har
ese salto sino, no.
En esta seccin se definen las variables globales que se van a poder utilizar en el resto
de los contextos. Por ejemplo:
[globals] CONSOLE=Console/dsp ;indica que cuando hagamos referencia a la variable CONSOLE
estamos llamando a /Console/dsp
Las variables suelen ponerse siempre en mayusculas para diferenciarlas posteriormente.

Contextos

Los contextos son colecciones de extensiones agrupadas bajo un criterio comn. Se pueden usar para
implementar algunas caractersticas como:

Seguridad y autenticacin: Permitir llamadas a ciertos destinos solo de telfonos especficos (por
ejemplo llamadas internacionales solo desde gerencia). Inclusive se puede solicitar contrasea
para realizar llamadas a algunos nmeros.

Ruteo de llamadas: Rutear las llamadas basadas en su origen.

Asterisk: Administracin avanzada 32


Contestador automtico: Recibir a los llamantes y pedirles que ingresen cierta extensin.

Menus multinivel: Menus para categoras dentro de una empresa como contabilidad, ventas,
gerencia, etc.

Privacidad: Crear listas negras de nmeros que no pueden contactar una extensin/extensiones.

Daytime/Nightime: Varial el comportamiento de las extensiones dependiendo de la hora del da.

Cada contexto se pone con un nombre entre corchetes []. Todas las lineas de un determinado contexto
tienen el mismo formato:

exten => extension,prioridad,Comando(parametros)

La extensin hace referencia al numero marcado desde una terminal telefnica.

La prioridad se refiere al orden en que se ejecutan las instrucciones. Primero se ejecuta la de prioridad 1,
luego la 2 y sucesivamente. Asterisk procesa las lneas secuencialmente, comenzando del nmero ms
bajo al ms alto. Se puede colocar la prioridad n (next), con lo cual asterisk incrementar la prioridad en 1
en cada linea de ejecucin.

El comando hace referencia a la accin a ejecutar.

Extension

En asterisk se define como un conjunto de comandos que se ejecutan para realizar una determinada
tarea que provee un servicio. Desde el punto de vista de la programacin, una extensin sera el nombre
de un script que se ejecuta para proveer una funcin especfica. La extensin puede ser alfanumrica.

En las figura siguiente, se puede observar como cuando se cursa una llamada, esta pertenece a un
Dialplan, dentro de esta pertenecer a un contexto, y aqu a una extensin que como se dijo es un
conjunto de comandos que sern ejecutadas en orden.

Cuando se hace una llamada desde un telfono, asterisk busca a que contexto pertenece dicho canal (en
sip.conf o iax.conf) y lo enlaza con el contexto especificado en el dialplan, ejecutando la extensin
asociada a ese contexto que fue marcada desde el telfono. Como ejemplo observar el grfico inferior:

Asterisk: Administracin avanzada 33


Prctica 2.1.1 Trabajando con el dialplan.

Crear un contexto llamado pruebas y en l escribir las siguientes aplicaciones del dialplan. Recargar la
configuracin con los siguientes comandos y probar:

asterisk*CLI> dialplan reload

Reproducir sonido de bienvenida:

exten => 500,1,Playback(demo-congrats)


exten => 500,2,Hangup()

Comprobacin de latencia y eco:

exten => 501,1,Playback(demo-echotest)


same => 2,Echo()
same => 3;Playback(demo-echodone)
same => 4,Hangup()

Reproducir la fecha actual:

exten => 502,1,Answer()


same => n,SayUnixTime(,,ABdY \'digits/at\' kM)
same => n,Hangup()

Extension start:

exten => 503,1,Goto(pruebas2,s,1)

Crear ahora el contexto pruebas2 y poner en l lo siguiente:

exten => s,1,Answer()


same => 1,WaitExten(15)
same => n,BackGround(demo-congrats)
same => n,Hangup()

Grabacin de audio y reproduccin del mismo:

exten => _504,1,Answer()


same => n,Wait(2)
same => n,Record(/tmp/prompt${EXTEN:2}:wav)
same => n,Wait(2)
same => n,Playback(/tmp/prompt${EXTEN:2})
same => n,Wait(2)
same => n,Hangup()

Prctica 2.1.2 Llamadas entre terminales:

Se probar ahora el realizar llamadas entre los terminales SIP, DAHDI e IAX que se han configurado. Crear
el contexto interno y escribir la siguiente configuracin:

1. Llamadas a canales SIP:

exten => 201,1,Answer()


same => n,Dial(SIP/201,20,r)
same => n,Hangup()

exten => 202,1,Answer()


same => n,Dial(SIP/201,20,r)
same => n,Hangup()
exten => 251,1,Answer()
same => n,Dial(SIP/251,20,r)
same => n,Hangup()

2. Llamadas a canales IAX2:

exten => 301,1,Answer()


same => n,Dial(IAX2/301,20,r)
same => n,Hangup()

Asterisk: Administracin avanzada 34


3. Llamadas a canales DAHDI:

exten => 1001,1,Answer()


same => n,Dial(DAHDI/1,20,r)
same => n,Hangup()
exten => 1002,1,Answer()
same => n,Dial(DAHDI/2,20,r)
same => n,Hangup()

Asterisk: Administracin avanzada 35


2.2 PATRONES DE NUMERACION

El dialplan no esta limitado solo a nmeros fijos, se pude utilizar tambin patrones de nmeros para
controlar el flujo de las llamadas.

Para esto el identificador de extensin debe iniciar con el smbolo _. Los caracteres que pueden usarse
son los siguientes:

X Acepta un nmero del 0 al 9


Z Acepta un nmero del 1 al 9
N Acepta un nmero del 2 al 9
[137-9] Acepta cualquier nmero dentro de los corchetes, el smbolo - denota un rango
[a-z] Acepta cualquier letra minscula
[A-Z] Acepta cualquier letra mayscula
. Comodn, acepta uno o ms caracteres
! Comodn, acepta cero o ms caracteres

Prctica 2.2.1 Cambiar el contexto de las llamadas entre canales sip, especificando las
extensiones con patrones de numeracin para la prctica 2.1.2

2.3 EXTENSIONES ESTANDARES

i: extensin invlida; usada cuando al pedir el ingreso de una extensin, sta no existe dentro del
contexto actual.

t: timeout extensin; usada cuando al pedir el ingreso de una extensin, se supera el tiempo de
espera al no haber ingresado nada.

s: start extenson; usada para entrar en un contexto con cualquier extensin.

2.4 VARIABLES

Asterisk puede usar variables globales, compartidas o variables de canal como argumentos para los
comandos dentro del dialplan. Estas son referenciadas dentro del dialplan usando la siguiente sintaxis:

${NOMBRE:offset:longitud}

Si se usan los indicadores offset y logitud la variable resultante es un substring de la variable original, que
comienza en la posicin indicada por el offset y contiene un nmero de caracteres indicado por longitud
contados hacia la derecha. El primer carcter se cuenta en la posicin 0.

Si offset es negativo, la posicin se toma desde la izquierda.

Si longitud es omitido o es negativo, se toma todos los caracteres indicados despues de la


posicin offset. Ejemplos:

${123456789:1} Retorna la cadena 23456789

${123456789:-4} Retorna la cadena 6789

${123456789:0:3} Retorna la cadena 123

${123456789:2:3} Retorna la cadena 345

${123456789:-4:3} Retorna la cadena 678

Asterisk: Administracin avanzada 36


Concatenacin:

VAR1=abcdef , VAR2=123456 -> ${VAR1:-4:3}9z${VAR2:-3} Retorna la cadena cde9z456

Variables de canal definidas automticamente:

${CALLERID}: Caller ID actual, nombre y nmero.

${CONTEXT}: Contexto actual.

${EXTEN}: Extensin actual.

${CHANNEL}: Canal actual.

${DIALSTATUS}: Estado de la llamada: unavailable,congestion, busy, noanswer, answer, cancel, hangup.

${DATETIME}: Hora actual.

Un comando til para ver el contenido es NoOp: NoOp(${VARIABLE})

2.5 FUNCIONES

Las funciones son usadas dentro del dialplan para dinamizarlo. No pueden ser usadas directamente como
las aplicaciones, en vez de esto, las funciones retornan valores como si se tratasen de variables
inteligentes. De hecho al trabajar con funciones se asumen las mismas consideraciones que con las
variables.

Su sintaxis es la siguiente:

NOMBRE_FUNCION(argumentos)

Tambin se puede obtener el valor de una funcin, somo si se tratase de una variable:

${NOMBRE_FUNCION(argumento)}

Adems, se puede encapsular una funcin en otra:

${NOMBRE_FUNCION_1(${NOMBRE_FUNCION_3(argumento)})}

Para conocer un listado de funciones de asterisk y lo que estas realizan, dirigirse hacia:

http://www.voip-info.org/wiki/view/Asterisk+functions

Prctica 2.5.1 Trabajando con funciones:

1. Creacin de un contador utilizando la funcin INC()

[contador]
exten => 601,1,Verbose(Contador incremental)
;valor inicial
same => n,Set(CONTADOR=0)
;ahora se incrementa el valor
same => n(increm),NoOp(${INC(CONTADOR)})
same => n,Verbose(El valor es: ${CONTADOR})
same => n,PlayDigits(${CONTADOR})
same => n,Wait(1)
same => n,Goto(increm)

2. Con los conocimientos adquiridos, implementar un contador decremental con la funcion DEC()

Asterisk: Administracin avanzada 37


2.6 APLICACIONES

Las aplicaciones son los obreros del dialplan. Cada aplicacin se encarga de realizar una accin
especfica sobre el canal activo, como por ejemplo reproducir un sonido, recibir un nmero marcado
desde el terminal telefnico, marcar a un canal, colgar la llamada, entre muchas otras tareas.

Dicho de otra manera, una aplicacin ejecuta una tarea que es percibible por el usuario.

Su sntaxis es la siguiente:

NOMBRE_APLICACION(argumentos)

Answer(), Dial() y Hangup() son solo unos pocos ejemplos de aplicaciones del dialplan. Algunas
aplicaciones no requieren de argumentos. Para conocer todas las aplicaciones del dialplan de asterisk,
puede referirse hacia:

http://www.voip-info.org/wiki/view/Asterisk+-+documentation+of+application+commands

Prctica 2.6.1: Creacin de un men de bienvenida

1. Crear el contexto ivr_menu y colocar en l las siguientes extensiones:

exten => s,1,Set(TIMEOUT(digit)=5)


same => n,Set(TIMEOUT(response)=5)
same => n,Wait(1)
same => n(menu),Background(pbx/pbx_menu)
same => n,Waitexten(5)
;
exten => 1,1,Goto(interno,201,1)
exten => 1,n,Hangup()
;
exten => 2,1,Goto(interno,251,1)
exten => 2,n,Hangup()
;
exten => 3,1,Goto(interno,301,1)
exten => 3,n,Hangup()
;
exten => i,1,Playback(pbx/opcion_i)
exten => i,n,Goto(ivr_menu,s,menu)
exten => i,n,Hangup
;
exten => t,1,Playback(pbx/opcion_t)
exten => t,n,Goto(interno,201,1)
exten => t,n,Hangup

2. Modificar el sip.conf para crear los canales necesarios para la prctica y asignarlos al contexto
adecuado. Adems, crear un contexto (de bienvenida) en el cual se debe colocar una extensin para
saltar al contexto ivr_menu.

Prctica 2.6.2: Instalacin de un motor de text-to-speech (tts), para reproducir contenido


dinmico leido desde una base de datos.

Se utilizar el programa festival, que es un motor tts libre. Asterisk posee un mdulo y aplicacin para
usar festival, si no es as, asegurarse de instalar festival y recompilar asterisk.

# yum install festival

Instalacin de las voces en espaol:

# yum install hispavoces*

Toda la programacin y contenido para sintenizar las voces en espaol se lo tiene gracias a un proyecto

Asterisk: Administracin avanzada 38


espaol de la Junta de Andalucia. Una vez instaladas las voces, se pueden ubicar en:
/usr/share/festival/lib/voices/es/ Aqu estn presentes los directorios: JuntaDeAndalucia_es_sf_diphone y
JuntaDeAndalucia_es_pa_diphone.

Modificar el fichero de configuracin de festival: /usr/share/festival/lib/festival.scm, antes de la ltima


linea colocar lo siguiente:

;(language__spanish)
(set! voice_default 'voice_JuntaDeAndalucia_es_sf_diphone)
(define (tts_textasterisk string mode)
"(tts_textasterisk STRING MODE)
Apply tts to STRING. This function is specifically designed for use in server mode so a single
function call may synthesize the string. This function name may be added to the server safe
functions."
(let ((wholeutt (utt.synth (eval (list 'Utterance 'Text string)))))
(utt.wave.resample wholeutt 8000)
(utt.wave.rescale wholeutt 5)
(utt.send.wave.client wholeutt)))

Correr el servidor festival:

# festival_server

Asterisk: Administracin avanzada 39


2.7 EXPRESIONES Y OPERADORES

Una expresin es una combinacin de variables, operadores y valores que se concatenan de forma
ordenada para producir un resultado. Una expresin puede por ejemplo comparar valores, modificar una
cadena de caracteres o realizar operaciones matemticas.

Se representan de la siguiente manera: $[expr1]

Operadores lgicos

expr1 | expr2 (OR)

expr1 & expr2 (AND)

!expr (Complemento) Retorna verdadero (true) si hay una cadena no vacia o un valor distinto de
cero, caso contrario retorna falso (false).

Operadores de comparacin

expr1 = expr2

expr1 != expr2

expr1 < expr2

expr1 > expr2

expr1 <= expr2

expr1 >= expr2

Compara cadenas de caracteres o valores, retornando 1 si es verdadero o 0 si es falso. Ejemplo de uso:

exten => s,n,GotoIf($[ $[ "${FOO}" = "1" ] & $[ "${BAR}" = "2" ] ]?labelTrue:labelFalse)

Operadores aritmticos

expr1 + expr2

expr1 - expr2

expr1 * expr2

expr1 / expr2

expr1 % expr2

Operadores condicionales

expr1 ? expr2 :: expr3

Se evalua expr1, si es verdadero el resultado es expr2, si es falso, expr3

Orden de ejecucin de los operadores

Parentesis: (, )

Operadores unarios !, -

Asterisk: Administracin avanzada 40


Expresiones regulares: :, =~

Multiplicativos: *, /, %

Aditivos: +, -

Comparacin: =, !=, <, >, <=, >=

Lgicos: |, &

Condicionales: ? :

Prctica 2.7: Creacin de un buzn de voz

1. Editar el fichero voicemail.conf, como lo indique el instructor:

[general]
format=wav
serveremail=direccion@queenvia.com
attach=yes
delete=no
maxmsg=100
maxsecs=180
minsecs=2
skipms=3000
maxsilence=10
silencethreshold=128
maxlogins=3
emailsubject=Nuevo Mensaje de ${VM_CALLERID}
emailbody=Buenos das ${VM_NAME},\n\nHemos recibido un mensaje en su buzon de voz
emaildateformat=%A, %B %d, %Y at %r

2. Con esto tenemos ms que suficiente para componer mensajes para el buzon de voz y enviarlos por
email. Ahora vienen los contextos. Como siempre, si es [default] es el genrico, y luego los contextos
especficos. Ejemplo.

[default]
1234 => 5678,Buzon de Ejemplo,ejemplo@buzones.com

En primer lugar, el nmero del buzn, luego lo utilizaremos en el Dialplan para la aplicacin
Voicemail as referirnos a este buzn.

En segundo lugar, la contrasea para acceder al buzn. Tendremos que crear una extesin en el
Dialplan para que el usuario pueda acceder a su buzn de forma interna. Esto solo es til si no
marcamos la opcin de borrado de mensajes del buzn al ser enviados por email

En tercer lugar, nombre del buzn que luego utilizaremos en variables como VM_NAME

En cuarto lugar, Email del destinatario de los mensajes de este buzn 10

3. Crear dentro del contexto adecuado las extensiones y sntaxis adecuada para que cuando se llama a
un canal SIP o IAX, dependiendo del estado del canal se guarde un mensaje de voz al usuario.

exten => _X!,1,Dial(SIP/${EXTEN},20,rt)


exten => _X!,n,GotoIf($[ $["${DIALSTATUS}" = "NOANSWER"] | $["${DIALSTATUS}" =
"BUSY"]]?buzon:terminar)
exten => _X!,n(buzon),VoiceMail(${EXTEN}@default,ub)
exten => _X!,n(terminar),HangUp()

10 http://10000horas.com/asterisk/2011/01/30/conquistando-el-dialplan-i-aplicaciones-asterisk-voicemail/

Asterisk: Administracin avanzada 41


4. Crear otra extensin dentro del contexto adecuado para la revisin de los mensajes de voz para el
usuario11

exten => *99,1,Answer()


same => n,VoiceMailMain(${CALLERID(num)}@default)
same => n,HangUp()

exten => *98,1,Answer()


same => n,VoiceMailMain()
same => n,HangUp()

11 http://voztovoice.org/?q=node/53

Asterisk: Administracin avanzada 42


2.8 INTERCONEXIN DE CENTRALES

Pactica 2.8.1 Interconexin de servidores asterisk12

MEDIANTE PROTOCOLO SIP

1. QUITO (sip.conf):

[general]

insecure=invite,port
;register => quito:asterisk2012@dir_ip_guayaquil
[guayaquil]
type=peer
context=entrada_trunk
host=dir_ip_guayaquil
disallow=all
allow=g723.1,g729,gsm

2. GUAYAQUIL (sip.conf):

[general]

insecure=invite,port
;register => guayaquil:asterisk2012@dir_ip_quito
[quito]
type=peer
context=entrada_trunk
host=dir_ip_quito
disallow=all
allow=g723.1,g729,gsm

12 http://www.voip-info.org/wiki/view/Asterisk+-+dual+servers

Asterisk: Administracin avanzada 43


MEDIANTE PROTOCOLO IAX2:

3. QUITO: (iax.conf)

[guayaquil]
type=friend
secret=asterisk2012
auth=md5
context=entrada_trunk
host=dir_ip_guayaquil
trunk=yes
allow=g723.1,g729,gsm
qualify=yes

4. GUAYAQUIL (iax.conf):

[quito]
type=friend
secret=asterisk2012
auth=md5
context=entrada_trunk
host=dir_ip_quito
trunk=yes
allow=g723.1,g729,gsm
qualify=yes

5. Los terminales en los dos servidores deben tener distinta numeracin, caso contrario, el nmero de
origen (CALLERID deben ser modificado al momento de realizar la llamada.

6. Crear el contexto adecuado para realizar las llamadas de salida, colocando extensiones con prefijos
para diferenciar el destino. De igual manera crear un contexto de entrada para recibir las llamadas
provenientes desde el servidor remoto.

Asterisk: Administracin avanzada 44


2.9 MACROS

Un macro es similar a una funcin en cualquier lenguaje de programacin, es decir, un segmento de


codigo que puede llamarse o usarse en cualquier parte del programa. Permite simplificar el uso de tareas
repetitivas en el dialplan.

Dentro del dialplan, se define una macro como un contexto ms, de la forma:

[macro-nombremacro]

En donde la cadena de texto nombremacro indica el nombre que se le dar a la macro. Luego dicho
nombre servir para llamarla dentro del dialplan, de la siguiente manera:

[contexto]
exten => ext,pri,Macro(nombremacro,arg1,arg2,...,argn)

Los argumentos son valores numricos o texto que se pasan a la macro para que luego esta pueda
trabajar internamente con una serie de variables: ${ARG1}, ${ARG2},..., ${ARGn}; que se asignan en
orden segn el nmero de argumentos enviados a la macro. Ademas tambin se tiene las variables
MACRO_CONTEXT, MACRO_EXTEN y MACRO_PRIORITY, que indican el contexto, la extension y la prioridad
original en la que se llamo al macro.

Prctica 2.9: Para entender mejor el funcionamiento de las macros, se crear una para el
buzn de voz. Modificar el fichero extensions.conf con lo siguiente:

[macro-voicemail]
exten => s,1,Dial(${ARG1}/${ARG2},10)
same => n,GotoIf($[$["${DIALSTATUS}" = "BUSY"] | $["${DIALSTATUS}" = "NOANSWER"]]?
buzon:terminar)
same => n(buzon),VoiceMail(${ARG1}@${ARG3},bu)
same => n(terminar),Hangup()

Ahora, en el contexto [interno], llamar a la macro de la siguiente manera:

[interno]
exten => _[23]XX,1,Macro(buzon,SIP,${EXTEN},acierte)

Los argumentos SIP, ${EXTEN} y acierte, pasaran a guardarse en ${ARG1}, ${ARG2} y ${ARG3}
respectivamente para ser usados por la macro.

Asterisk: Administracin avanzada 45


2.10 FUNCIONES DE PBX

El archivo features.conf es donde se configura el parqueo de las llamadas y asignar una funcin a una
determinada combinacin de teclas. Es aqu, por ejemplo, donde se definine cuales son las teclas que se
debe presionar para transferir una llamada, grabarla, iniciar una aplicacin, y muchas ms.

Las funciones que se configurarn sern las siguientes:

Call parking: Desde un canal mediante una combinacin de teclas, se puede dejar la llamada
parqueada en un canal virtual. Una vez se cierre la presente llamada, se puede tomar desde
otro canal la llamada parqueada y continuar la conversacin. 13

Transferencia atendida: Realizar la transferencia de llamada desde un origen hacia un destino,


pudiendo hablar antes con el destino para indicarle la situacin. La llamada solo se transfiere
cuando el agente (quien transfiere la llamada) cuelga.

Transferencia desatendida: Se realiza la transferencia al momento de marcar el canal de destino,


entonces el agente deja de actuar inmediatamente con el canal.

Funciones personalizadas: Se puede programar una tarea especfica en el dialplan para realizar.

Todo esto se configurar en el archivo features.conf, el cual puede contener los siguientes parmetros:

13 http://www.voztovoice.org/?q=node/78

Asterisk: Administracin avanzada 46


Asterisk: Administracin avanzada 47
Ahora, se habilitar estas funciones en el dialplan: 14

Prctica 2.11: Configuracin de funciones adicionales de PBX

1. Editar el fichero features.conf. Ver los siguientes parmetros indicados en las tablas para una correcta
configuracin.

[globals]
DYNAMIC_FEATURES=test1#automon#disconnect#atxfer#parkcall#automixmon

Contexto para las llamadas parqueadas:

[subscribe]
exten => _70Z,hint,park:${EXTEN}@parkedcalls
exten => 710,hint,park:710@parkedcalls

2. Y en el contexto interno:

14 http://voztovoice.org/?q=node/80

Asterisk: Administracin avanzada 48


[interno]
include => parkedcalls

3. Y finalmente al momento de marcar con la aplicacin dial, colocar opciones adicionales para hacer
uso de las funciones configuradas, las opciones son las siguientes (se presentan con algunos
ejemplos)

exten => 2000,1,Dial(SIP/2000,30,hH)

h: permite al llamado colgar la llamada usando la tecla **

H: permite al llamante colgar la llamada usando la tecla **


exten => 2000,1,Dial(SIP/2000,30,kK)

k: permite al llamado parquear la llamada digitando la secuencia de teclas definida en


features.conf

K: permite al llamante parquear la llamada digitando la secuencia de teclas definida en


features.conf
exten => 2000,1,Dial(SIP/2000,30,tT)

t: permite al llamado transferir la llamada digitando la secuencia de teclas definida en


features.conf

T: permite al llamante transferir la llamada digitando la secuencia de teclas definida en


features.conf
exten => 2000,1,Dial(SIP/2000,30,wW)

w: permite al llamado empezar la grabacin de la llamada digitando la secuencia de teclas


definida en features.conf. Asterisk, en este caso, crear dos archivos audio, uno por cada
interlocutor.

W: permite al llamante empezar la grabacin de la llamada digitando la secuencia de teclas


definida en features.conf. Asterisk, en este caso, crear dos archivos audio, uno por cada
interlocutor.
exten => 2000,1,Dial(SIP/2000,30,xX)

x: permite al llamado empezar la grabacin de la llamada digitando la secuencia de teclas


definida en features.conf. La diferencia con las opciones w y W es que en este caso los dos
canales (llamante y llamado) se grabaran en un nico archivo audio

X: lo mismo de arriba pero para el llamante.

Asterisk: Administracin avanzada 49


2.11 CONFERENCIA

Una importante caracterstica de asterisk es la posibilidad de crear conferencias audio. En esta parte se
aprender como configurar el archivo meetme.conf y algunos ejemplos de como usar una conferencia.

Pactica 2.12: Creacin de salas de conferencia en asterisk:15

1. Se editara el fichero /etc/asterisk/meetme.conf:


[general]
audiobuffers=32

;Numero de paquetes audio de 20ms que sern guardados en un buffer de memoria cuando pertenecen a
canales que no son DADHI. Esto permite sincronizar el audio de los distintos participantes y evitar
retrasos. Puede ser un valor entre 2 y 32
[rooms]
;
; la sintaxis es: conf => confno[,pin][,adminpin]
;
conf => 3500
conf => 3501,1234
conf => 3502,1234,5678

En el primer ejemplo se define un cuarto de conferencias cuya extensin es 3500 y a todos los usuarios
es permitido entrar. En el segundo la extensin es la 3501 y para entrar los usuarios tendrn que digitar
el PIN 1234. En la tercero la extensin es la 3502. Los usuarios tendrn que usar el PIN 1234 y los
administradores el PIN 5678

2. Ahora se modifica el dialplan para utilizar las conferencias, aadiendo un nuevo contexto:

[conferencias]
exten => _350[012],1,Meetme(${EXTEN},scM(default))
same => n,Hangup

3. Llamando la extensin 3500,3501 o 3502 se entrar en el cuarto de conferencia (configurado en


meetme.conf) . Las tres opciones colocadas indican lo siguiente:

s: Con esta opcin se activa el men del cuarto de conferencias para usuarios y administradores.
Marcando la tecla asterisco se escuchar el men .

c: Al entrar en un cuarto de conferencia se le anunciar al usuario el nmero de personas


presentes .

M(default): Cuando en el cuarto de conferencia est solamente una persona, sta escuchara la
msica de espera de la clase default.

4. Ahora, se probar las salas de conferencia limitando el nmero de usuarios, para lo cual se har uso
de una macro:

[macro-meetme]
exten => s,1,MeetMeCount(${MACRO_EXTEN},count)
same => n,Gotoif($[${count} > ${confmax}]?llena)
same => n,MeetMe(${MACRO_EXTEN},scM(default))
same => n,Hangup
same => n(llena),Playback(conf-invalid)
same => n,Hangup

15 http://voztovoice.org/?q=node/205

Asterisk: Administracin avanzada 50


5. La llamada a la macro se hace de la siguiente manera:

exten => _350[012],1,Set(confmax=5)


same => n,Macro(meetme)
same => n,Hangup

Asterisk: Administracin avanzada 51


CAPTULO 3
DIALPLAN AVANZADO

3.1 ASTDB

La base de datos de asterisk es un mtodo de almacenamiento de datos persistentes en asterisk. Es un


sencillo motor de DB tipo berkeley v1. El fichero que contiene los datos de la DB asterisk est ubicado
en: /var/lib/asterisk/astdb.

Todos los datos se registran o recuperan a travs de dos parmetros: family (familia) y registro (key)
usando la funcion DB de la siguiente manera:

Lectura:
same => n,Set(VARIABLE=${DB(family/key)}

Escritura:
same => n,Set(DB(family/key)=VALOR)

Prctica 3.1.1: Se implementar un contador con memoria en asterisk y adems se utilizar


astDB para crear listas negras:

1. Se configurar un contador en una extensinque diga los numeros desde el 0 en adelante hasta que
se corte la llamada.

exten => 603,1,Answer()


same => n,Set(COUNT=0)
same => n(say),SayNumber(${COUNT})
same => n,Set(COUNT=$[${COUNT} + 1])
same => n,GoTo(say)

2. Al llamar a la extensin 603 se escucharan los nmeros desde el 0 en adelante hasta que se cuelgue.
Si se hace de nuevo la llamada, no empieze desde 0 sino desde donde se haya quedado. Para ello se
usara la base de datos de asterisk, donde se almacena la variable COUNT.

exten => 603,1,Answer()


same => n,Set(COUNT=${DB(test/count)})
same => n,GotoIf($[${ISNULL(${COUNT})}]?:say)
same => n,Set(DB(test/count)=0)
same => n,Goto(2)
same => n(say),SayNumber(${COUNT})
same => n,Set(COUNT=$[${COUNT} + 1])
same => n,Set(DB(test/count)=${COUNT})
same => n,GoTo(say)

3. Ahora se comprueaba que si se vuelve a llamar a la extensin 200 va a continuar desde donde se
quedo anteriormente, aun si se reinicia el servicio de Asterisk.

BLACKLIST

4. Ahora se probara la llamada lista negra, que no es mas que una familia en la base de datos que
permite guardar el numero que se bloqueara para las las llamadas.

asterisk*CLI> database put blacklist 100 1

5. Aqui lo se hace es guardar el numero 100 en la lista negra. Ahora con la funcin BLACKLIST() se
comprueba si el callerid de la persona que llama es parte de la lista negra:

Asterisk: Administracin avanzada 52


exten => 201,1,GotoIf($[${BLACKLIST()}]?bloqueado,1)
same => n,Dial(sip/${EXTEN})
exten => bloqueado,1,Answer()
same => n,Playback(vm-goodbye)
same => n,Hangup()

6. Como se sabe el CallerId tiene nombre y nmero del llamante, y cualquiera de los dos puede ser
bloqueado en la lista negra. Ahora probar agregando el valor de un nombre:

asterisk*CLI> database put blacklist Juan 1

Si el telefono que llama tiene un callerid con nombre Juan tambien ser bloqueado.

Prctica 3.1.2: Realizar una aplicacin para consulta y registro de notas de estudiantes
usando la DB asterisk. Se presentan los diagramas de flujo de la aplicacin solicitada:

Funciones tiles para la prctica:

ISNULL(${VARIABLE}) Devuelve 1 si la variable no contiene datos (est vacia), caso contrario 0.

EXISTS(${VARIABLE}) Devuelve 1 si la variable contiene datos (no est vacia), caso contrario 0.

DB_EXISTS(family/key) Devuelve 1 si existe el registro en la BD asterisk, caso contrario 0.

Profesores registro de notas Alumnos consulta de notas

Asterisk: Administracin avanzada 53


Datos de trabajo:

Alumnos Profesores
cedula alumno cedula profesor

1716151413 Pepito Perez 1016151413 Gustavo Gonsalez

1715141312 Juanito Jimenez 1015141312 Boris Borja

1714131211 Lizeth Lopez 1014131211 Samir Sanchez

1713121110 Maria Mueces


Contraseas profesores
Notas
cedula contrasea
cedula nota
1016151413 012345
1716151413
1015141312 123456
1715141312
1014131211 234567
1714131211

1713121110

Asterisk: Administracin avanzada 54


3.2 Asterisk CDR

El registro detallado de llamadas (CDR por sus siglas en ingls) es la manera en que Asterisk registra,
valga la redundancia, toda la informacin concerniente a las llamadas realizadas en el sistema. Est
informacin tiene distintos propsitos, siendo el mas comn el de la tarificacin para el cobro de los
servicios, y de aqu su importancia.

Por defecto, Asterisk crea un archivo localizado en /var/log/asterisk/cdr-csv/ llamado Master.csv , el cual
contiene la informacin del registro en formato CSV (Valores Separados por Comas), el cual es fcilmente
exportable a MS Excel. El archivo /etc/asterisk/cdr.conf es el archivo que establece el comportamiento y la
informacin que aparecer en el registro; sin embargo, es posible personalizar o seleccionar la
informacin que queremos que aparezca en el mismo por medio del archivo
/etc/asterisk/cdr_custom.conf.

Adems de lo anterior, es posible almacenar el CDR en una base de datos para mejorar la fiabilidad de los
datos, existen mdulos para que Asterisk almacene el CDR haciendo uso de manejadores como MySQL,
ODBC, SQLite, y PostgresSQL.16

3.2.1 Configuracin de CDR en PostgreSQL

Para almacenar el CDR en una base de datos SQL como postgres, es necesario tener un servidor de dicha
BD corriendo, adems de poseer los permisos adecuados y estructura dentro de la base para guardar la
informacin del CDR, esto se logra mediante los siguientes pasos:

Instalar las dependencias necesarias de la BD postgreSQL:

# yum install postgresql-devel postgresql-server postgresql pgadmin3

Inicializar la base de datos postgres (se hace solo una vez):

# /etc/init.d/postgresql initdb

Configurar el acceso a la base de datos en el fichero /var/lib/pgsql/data/pg_hba.conf, de la siguiente


manera:

host all all 127.0.0.1/32 trust


host all all 192.168.11.0/24 md5
host asteriskDB asterisk 127.0.0.1/32 md5

Tambin, editar el fichero /var/lib/pgsql/data/postgres.conf, colocando las siguientes lneas:

listen_addresses = '*'
port = 5432

Para terminar la configuracin del servidor de BD, iniciar el servicio postgres:

# service postgresql start

Conectarse al cli de postgres, crear el usuario y la base de datos necesarios:

# su postgres
$ createuser -s -D -R -l -P -e asterisk
$ createdb -O asterisk -e asteriskDB
$ exit

Crear una tabla con los campos necesarios para el CDR, se har uso de un fichero de texto en el cual est
presente la configuracin de la tabla para la BD, que es la siguiente:

/*FICHERO cdr_pgsql.sql */
CREATE TABLE cdr (

16 http://www.voip.unam.mx/mediawiki/index.php/El_registro_detallado_de_llamadas_de_Asterisk_CDR_-_Integracin_con_PostgresSQL

Asterisk: Administracin avanzada 55


calldate timestamp NOT NULL ,
clid varchar (80) NOT NULL ,
src varchar (80) NOT NULL ,
dst varchar (80) NOT NULL ,
dcontext varchar (80) NOT NULL ,
channel varchar (80) NOT NULL ,
dstchannel varchar (80) NOT NULL ,
lastapp varchar (80) NOT NULL ,
lastdata varchar (80) NOT NULL ,
duration int NOT NULL ,
billsec int NOT NULL ,
disposition varchar (45) NOT NULL ,
amaflags int NOT NULL ,
accountcode varchar (20) NOT NULL ,
uniqueid varchar (150) NOT NULL ,
userfield varchar (255) NOT NULL
);

Cargar la estructura de la tabla a la BD:

# pgsql -U asterisk -d asteriskDB -h localhost -W < cdr_pgsql.sql

Compilar asterisk con el soporte para CDR en postgreSQL, tener precaucin de verificar si el mdulo se
selecciona al momento de realizar el comando make menuselect.

Finalmente configurar el fichero /etc/asterisk/cdr_pgsql.conf, habilitando el acceso a la base de datos


creada en postgres para asterisk:

[global]
hostname=localhost
port=5432
dbname=asteriskDB
password=password
user=asterisk
table=cdr

Reiniciar asterisk y conectarse mediante una herramienta para visualizar los datos, como pgadmin,
colocando los datos de acceso configurados previamente:

Empezar a realizar llamadas y observar como se guarda la informacin de cada llamada realizada.
Verificar cada campo y analizar la informacin que se obtiene desde el CDR.

Revisar la aplicacin NoCDR y la funcin CDR del dialplan.

En el cli de asterisk, revisar los comandos presentes para la administracin de las conferencias.

Asterisk: Administracin avanzada 56


3.3 Distribucin Automtica de Llamadas Colas de Espera

Cuando se llama un centro de atencin al cliente, sin saberlo, se est dentro de un sistema de
distribucin automtica de llamadas. Cmo funciona? Cada llamada que llega se pone en una cola de
espera respetando la prioridad con que ha llegado. Cuando uno de los operadores que atienden las
llamadas est libre, la llamada ser transferida a ese operador. A lo largo de la espera, segn la
configuracin, el llamante escuchar distintos anuncios (que posicin tiene en la cola, el tiempo estimado
de espera y un largo etctera).

Quizs este es el servicio ms importante y estratgico para una empresa. En base a la calidad del
servicio que ofrece y el tiempo promedio de espera, los clientes la estarn evaluando.

Cmo se configura en Asterisk la gestin de las colas? A travs de dos archivos:

agents.conf
queues.conf

En el primero se configuran, definiendo algunas variables y parmetros, los agentes que atendern las
colas. En el queues.conf se configuran las colas (pueden ser una o ms), los agentes miembros de la cola
y que tipo de estrategia se utilizar para enrutar las llamadas a los distintos operadores.

Configuracin de Agentes: El fichero a editar es /etc/asterisk/agents.conf, se presenta una tabla 17 con


las principales opciones de configuracin y su funcin.

Parmetro Descripcin
[general] Etiqueta que da inicio a la parte general del archivo .
Si se define en yes el estado del agente se almacena en la base de datos interna de
persistentagents Asterisk. De esta forma cuando se reinicia Asterisk estos datos sern recargados.
Valor yes
multiplelogin Define si est permitido a una extensin conectarse como agente mltiple. Valor no
[agents] A partir de esta etiqueta inicia la configuracin de los agentes .
maxlogintries Nmero de intentos permitidos a un agente para autenticarse.
Nmero de segundos que tiene un agente para contestar una llamada entrante. Si no
autologoff
contesta dentro de ese tiempo, ser desconectado de la cola. Valor 15
yes = si la extensin desde la cual el agente se conecta se vuelve no disponible,
autologoffunavail
automticamente el agente ser desconectado de la cola
Para atender una llamada un agente tiene que presionar la tecla indicada en el
ackcall
prximo parmetro. Valor no (no tiene que presionarla) .
acceptdtmf #
permite al agente terminar una llamada presionando la tecla configurada en el
endcall
prximo parmetro .
enddtmf *
Numero de milisegundos que Asterisk esperar antes de volver a llamar un agente
wrapuptime
que acaba de terminar una llamada. Valor 5000
musiconhold Msica de espera predefinida para el agente. Valor default
locucin que el agente escuchar al terminar una llamada. Si se deja comentado ser
;goodbye=vm-goodbye
la predefinida (vm-goodbye)
updatecdr Actualiza o no el CDR con el nombre del agente. Yes
recordagentcalls Grabar o no las llamadas de los agentes.
recordformat Formato audio de las llamadas grabadas. Valor wav
De manera predefinida las llamadas grabadas se guardan en la carpeta:
;savecallsin /var/spool/asterisk/monitor Si se quiere personalizar la carpeta se indica en este
parmetro. Se deja comentado .

17 Libro Asterisk 1.6.2.X v. 2.0 , Pag. 241, Andrea Sannuci

Asterisk: Administracin avanzada 57


Avisa al agente que est conectado permanentemente a la cola, de la llegada de una
custom_beep
llamada. Valor beep
Ahora se configuran los agentes. Las sintaxis es:
agent agent => agentid,agentpassword,name
Ej: agent => 2000,1234,Fulano

Existen dos maneras de configurar los agentes, la forma atendida (tambin llamada esttica) y la forma
desatendida (tambin llamada dinmica). Difieren entre ellas en la forma como los agentes se conectan
a la cola y reciben llamadas de esta.

En la manera atendida, el agente mediante el proceso adecuado, se loguea en la cola y est


permanentemente conectado a esta a la espera de llamadas, para tal motivo debe mantener abierto un
canal. En la manera destatenida, el agente indica a la cola en que terminal (telfono, softphone) puede
recibir las llamadas sin embargo no est permanentemente conectado a esta, por lo tanto es la cola quien
se encarga de enviar las llamadas entrantes al terminal del agente.

Configuracin de Colas: El fichero a editar es /etc/asterisk/queues.conf, se presenta una tabla 18 con las
principales opciones de configuracin y su funcin.

Parmetro Descripcin
[general] Etiqueta que define la parte general del archivo .
yes = se guardan los datos de los miembros de la cola activos en la base de datos
persistentmembers interna de Asterisk. Si se reinicia la PBX los miembros sern reasignados a las colas
correspondientes.
Normalmente una cola funciona de la siguiente manera. Hay unos cuantos usuarios
esperando por ser atendidos por los agentes. Cuando el usuario que est de primero
en la cola viene atendido el segundo se vuelve primero e ser atendido por el primer
agente disponible. Este comportamiento no tiene en cuenta que pueden haber
autofill muchos agentes disponibles y que podran atender los clientes sin esperar que
lleguen a ser los primeros de la cola de espera. Con este parmetro se define otro tipo
de comportamiento. Los clientes sern atendidos de manera paralela hasta que haya
agentes disponibles. De esta forma se reducen considerablemente los tiempos de
espera. Valor yes
El tipo de aplicacin utilizada para grabar las conversaciones de una cola. Puede ser
monitor-type
Mixmonitor o monitor .
Actualiza o no el valor del campo dstchannel del CDR (el registro de las llamadas) con
updatecdr
el nombre del agente.
Si un agente hace parte de ms de una cola y se ha definido su tiempo de descanso
shared_lastcall entre una llamada y otra (el parmetro wraptime), con este parmetro se define si ese
tiempo va respetado por las distintas colas de que el agente es miembro. Valor yes
Con esta etiqueta se define la primera cola de espera , para el ejemplo, se llama
[ventas]
ventas.
musiclass La msica de espera para los clientes en la cola. Valor default
Este parmetro permite crear una anuncio para que los agentes que pertenecen a
;announce=queue-ventas ms de una cola para que sepan, antes de atender una llamada, de que cola proviene
el cliente. Se deja comentado
En este parmetro se define la lgica con que se enrutarn las llamadas de una cola a
los agentes:
leastrecent: Asigna la siguiente llamada al agente que ms tiempo lleva sin
atender una llamada.
fewestcalls: Asigna la siguiente llamada al agente que menos llamadas ha
atendido.
strategy random: Asigna la siguiente llamada aleatoriamente a cualquier agente disponible.
ringall: Llama todos los agentes disponibles a la vez hasta que uno conteste.
rrmemory: Distribuye las llamadas por turnos entre los agentes disponibles y
recuerda el ltimo agente al que intent llamar.
linear: Llama los agentes siguiendo el orden definido en este archivo de
configuracin. Si son agentes dinmicos segn el orden con que se han registrado a
la cola .

18 Libro Asterisk 1.6.2.X v. 2.0 , Pag. 244, Andrea Sannuci

Asterisk: Administracin avanzada 58


wrandom: asigna la llamada aleatoriamente usando una mtrica basada en
penalidades.
Parmetro utilizado para la estadsticas de la cola. En base al numero de segundos
servicelevel configurados, en los reportes aparecer el numero de llamadas contestadas dentro del
tiempo definido. Valor 120
Si el cliente en la cola antes de ser atendido presiona una tecla del telfono ser
context enviado al contexto definido en este parmetro y a la prioridad correspondiente al
dgito que ha marcado. Valor ventas-exit
En la cola se pueden configurar dos distintos tipos de tiempos de espera. Uno a nivel
de aplicacin (dialplan) define el tiempo mximo que un cliente podr quedar en la
cola. Pasado ese tiempo sin ser atendido, el cliente saldr de la cola y se ejecutara la
siguiente prioridad presente en el dialplan. El segundo es el tiempo mximo que
timeout
timbrar la extensin de un agente antes de considerarlo no disponible y pasar al
siguiente. Este parmetro y los siguientes dos se utilizan para definir que tipo de
tiempo de espera tendr la prioridad. Este primer parmetro define por cuantos
segundos timbrar la extensin del agente. Valor 15
numero de segundos de espera antes de llamar otro agente si el primero no ha
retry
contestado dentro de los 15 segundos definidos en el parmetro anterior. Valor: 4
En este parmetro se define si se toma en consideracin el tiempo de espera definido
timeoutpriority
a nivel de aplicacin o a nivel de archivo de configuracin. Valor app (aplicacin)
El peso de la cola. Ms alto el valor, ms prioridad tendr la cola. Si hay agentes que
weight atienden ms de una cola, las colas con peso ms alto sern atendidas con prioridad
respecto a las colas con peso ms bajo. Valor 0
wrapuptime Tiempo de descanso de un agente entre una llamada y otra (en segundos) Valor 15
autopause yes = lo agentes que no atendern una llamada sern puestos en pausa
Numero mximo de personas que pueden estar esperando en la cola. Valor 50 Si se
maxlen
pone 0 no se fijar ningn limite
yes = una serie de variables sern creadas justo antes de conectar un miembro de la
setinterfacevar
cola con un cliente (vase archivo predefinido queues.conf)
yes = otra serie de variables sern creadas justo antes de conectar un miembro de la
setqueueentryvar
cola con un cliente (vase archivo predefinido queues.conf)
yes = otra serie de variables relacionadas con la cola sern creadas justo antes de
setqueuevar conectar un miembro de la cola con un cliente (vase archivo predefinido
queues.conf)
Antes de conectar el agente con el cliente se puede ejecutar la macro indicada en
;membermacro=macro
este parmetro. Se deja comentado
Cada cuanto segundos anunciar al cliente en la coda su posicin y tiempo estimado de
announce-frequency
espera. Valor 90
Para evitar que cada vez que la posicin y/o el tiempo estimado de espera de un
cliente cambie se le presente un anuncio, este parmetro define un tiempo (en
min-announce-frequency
segundos) que se esperar antes de comunicarle su nueva posicin/tiempo estimado.
Valor 15
;periodic-announce- Cada cuantos segundos presentar un anuncio personalizado al cliente en la cola de
frequency=60 espera. Se deja comentado
;random-periodic-
Los anuncio pueden ser presentado segn un orden aleatorio. Se deja comentado
announce=no
Anunciar junto a la posicin en la cola el tiempo estimado de espera. Puede ser yes,
announce-holdtime
no, u once (una sola vez)
announce-position Anuncia al cliente su posicin en la lista de espera.
Valores:
yes: si
no: no se le anuncia
more: si la posicin del cliente en la cola de espera es ms alta del numero
especificado en el prximo parmetro, se le anunciar que hay ms de valor del
prximo parmetro clientes esperando en la cola .
limit: solo los clientes con una posicin en la cola de espera menor o igual al valor
del parmetro que sigue, escucharn el anuncio de su posicin en la cola de
espera .
announce-position-limit 5
Con este parmetro se redondea los minutos y los segundos de espera anunciados al
announce-round-seconds
cliente. Valor 20
;queue-youarenext=queue- A partir de esta linea se pueden personalizar las locuciones predefinidas de la cola de
youarenext espera.

Asterisk: Administracin avanzada 59


;periodic-
En este parmetro de definen los anuncios peridicos personalizados separados por
announce=anuncio1,anuncio
una coma. Se deja comentado
2
;monitor-format=gsm|wav| formatos audio en que se grabarn las conversaciones de la cola de espera (si se deja
wav49 comentado, no se grabaran)
monitor-type Se define la aplicacin para grabar la conversaciones. Puede ser monitor y mixmonitor
Este parmetro con el que sigue, son los ms importantes en la configuracin de la
cola. Aqu se define si un cliente puede o no entrar a una cola de espera si no hay
agentes disponibles. Los distintos valores que se pueden utilizar, separados por una
coma, son:
paused: un agente es considerado no disponible si est en pausa (aplicacin
PauseQueueMember)
penalty: un agente es considerado no disponible si el valor de su penalidad es
menor al valor asociado a la variable QUEUE_MAX_PENALTY
inuse: un agente es considerado no disponible si el estado de su extensin es INUSE
joinempty
ringing: un agente es considerado no disponible si su extensin est timbrando
unavailable: un agente es considerado no disponible si el estado de su extensin
es UNAVAILABLE
invalid: un agente es considerado no disponible si el estado de su extensin es
INVALID
unknown: un agente es considerado no disponible si el estado de su extensin es
UNKNOW
wrapup: un agente es considerado no disponible si est en su tiempo de descanso
(wraptime) despus de haber atendido una llamada
Este parmetro aplica a los clientes que ya estn en la cola de espera y en base a los
leavewhenempty valores indicados, si todos los agentes se vuelven no disponibles, el cliente ser
sacado de la cola.
;eventwhencalled = yes Estos dos para metros configurados en yes, generan una serie de eventos
;eventmemberstatus = yes relacionados con la cola en el AMI de Asterisk
yes = Se anuncia al agente, antes de contestar la llamada, cuanto tiempo el cliente ha
reportholdtime
esperado en la cola
ringinuse no = no se envan las llamadas a agentes cuyo estado de la extensin es INUSE
Tiempo en segundos que el sistema esperar antes de conectar el agente con el
cliente. De esta forma aunque hayan agentes disponibles, el cliente esperar ese
memberdelay
tiempo antes de ser conectado con un agente. til si se quiere que el cliente escuche
algn anuncio o comunicacin. Valor 5
yes = el tiempo de espera para que una agente conteste una llamada se resetea si el
timeoutrestart
estado de la extensin es BUSY o CONGESTION
En el archivo queuerules.conf se configuran distintos escenarios para manejar las
;defaultrule=myrule colas con el sistema de penalidades. En el caso que se haya configurado un escenario
para esta cola, en este parmetro se define el nombre. Se deja comentado
member => Agent/2000 A partir de esta linea se definen los miembros de la cola. La sintaxis es:
member => Agent/2001 member => tecnologa/extensin,penalidad,nombre,extensin
member => Agent/2002 Se ponen los tres agentes configurados en el archivo agent.conf

Prctica 3.3: Distribucin automtica de llamadas

Conocidos los parmetros adecuados para la configuracin de colas y agentes, editar los ficheros
agents.conf y queues.conf

agents.conf

[general]
persistentagents=yes
multiplelogin=no
[agents]
maxlogintries=3
autologoff=15
autologoffunavail=yes
ackcall=no
acceptdtmf=#
endcall=yes
enddtmf=*

Asterisk: Administracin avanzada 60


wrapuptime=5000
musiconhold=default
;goodbye=vm-goodbye
updatecdr=yes
;group
recordagentcalls=no
recordformat=wav
;savecallsin=/home/calls
custom_beep=beep
agent => 2000,1234,Pepito Perez
agent => 2001,1235,Juanito Jimenez
agent => 2002,1236,Luchito Lopez

queues.conf

[general]
persistentmembers=yes
autofill=yes
monitor-type=mixmonitor
updatecdr=no
shared_lastcall=yes

[ventas]
musicclass=default
;announce=queue-ventas
strategy=random
servicelevel=120
context=ventas-exit
timeout=15
retry=4
timeoutpriority=app
weight=0
wrapuptime=2
autofill=yes
autopause=yes
maxlen=50
setinterfacevar=yes
setqueueentryvar=yes
setqueuevar=yes
;membermacro=macro
announce-frequency=90
min-announce-frequency=15
;periodic-announce-frequency=60
;random-periodic-announce=no
announce-holdtime=once
announce-position=more
announce-position-limit=5
announce-round-seconds=30
;periodic-announce=queue-periodic-announce
;periodic-announce=anuncio1,anuncio2
;monitor-format=gsm|wav|wav49
monitor-type=mixmonitor
joinempty=paused,unavailable,invalid,unknown
leavewhenempty=paused,unavailable,invalid,unknown
;eventwhencalled = yes
;eventmemberstatus = yes
reportholdtime=yes
ringinuse=no
memberdelay=5
timeoutrestart=yes
;defaultrule=myrule

Asterisk: Administracin avanzada 61


member => Agent/2000
member => Agent/2001
member => Agent/2002

Agentes de manera atendida: Una vez terminado de configurar estos ficheros, se crea un contexto en el
dialplan mediante el cual los agentes pueden ingresar a la cola.

[login]
exten => 777,1,Answer()
same => n, AgentLogin()
same => n,HangUp()

Finalmente crear un contexto en el cual recibir las llamadas entrantes que irn a la cola:

[colas]
exten => 600,1,Answer()
same => n,MixMonitor(${UNIQUEID}.gsm,b)
same => n,Queue(ventas,t,,,30)
same => n,HangUp()

Agentes de manera desatendida: Con este mtodo, se usarn las aplicaciones AddQueueMember y
RemoveQueueMember que permiten agregar un agente en la cola y quitarlo respectivamente. Los
agentes no necesariamente deben estar presentes en el fichero agents.conf

[login]
exten => 777,1,Answer()
same => n, AgentLogin()
same => n,HangUp()
;Ingreso en la cola
exten => 778,1,Answer()
same => n,Addqueuemember(ventas,SIP/${CALLERID(num)})
same => n,Playback(agent-loginok)
same => n,HangUp()

;Salida de la cola
exten => 779,1,Answer()
same => n,Removequeuemember(ventas,SIP/${CALLERID(num)})
same => n,Playback(agent-loginok)
same => n,HangUp()

Asterisk: Administracin avanzada 62


3.4 Integracio con bases de datos relacionales: ODBC

La integracin de asterisk con bases de datos relacionales se realiza a travs del uso del mdulo odbc.
Una vez asegurada la interconexin entre la BD y asteris, es posible realizar lecturas o escrituras a la
base de datos. As, se saca ventaja de toda la potencia que ofrece el guardar la informacin dentro de
una base de datos relacional.

El conector ODBC es una capa de software que permite a Asterisk comunicarse con bases de datos
relacionales sin requerir el uso de una aplicacin nica para cada base de datos que se quiera soportar.

Prctica 3.4.1: Se configurar el escenario que se observa en la imagen, el objetivo es tener


una tabla en la cual se posee 4 campos: Matricula, Nombre, Nota, Evaluacin. Dicha tabla
guarda informacin referente a un curso en el cual los estudiantes pueden consultar su nota y
evaluar el desempeo de su profesor, adems el profesor podr calificar a sus estudiantes.
Todo esto realizado a travs de un telfono.

Primero, se debe instalar odbc en linux:

# yum install -y unixODBC unixODBC-devel libtool-ltdl libtool-ltdl-devel postgresql-odbc

Luego, hay que configurar el driver odbc para la base de datos, en este caso PostgreSQL
versin 9.1, esto se logra editando el fichero: /etc/odbcinst.ini, el cual debe contener lo
siguiente:

# Driver from the postgresql-odbc package


# Setup from the unixODBC package

[PostgreSQL]
Description = ODBC for PostgreSQL
#Driver = /usr/lib/psqlodbc.so
Setup = /usr/lib64/libodbcpsqlS.so
Driver = /usr/pgsql-9.1/lib/psqlodbc.so
FileUsage = 1

Probar el correcto funcionamiento del driver:

# odbcinst -q -d

Luego de esto, se debe crear el conector que ser usado por asterisk para integrarse con PostgreSQL a
travs de ODBC, esto se configura en el fichero /etc/odbc.ini, los datos son los siguientes 19:
19http://ofps.oreilly.com/titles/9780596517342/asterisk-DB.html

Asterisk: Administracin avanzada 63


[asterisk-connector]
Description = PostgreSQL connection to 'asterisk' database
Driver = PostgreSQL
Database = asteriskDB
Servername = direccion_ip_o_nombre_del_server
UserName = asterisk
Password = 4st3r1sk
Port = 5432
Protocol = 8.1
ReadOnly = No
RowVersioning = No
ShowSystemTables = No
ShowOidColumn = No
FakeOidIndex = No
ConnSettings =

Una vez editado el fichero hay que probar que el conector funcione adecuadamente, correr para ello el
siguiente comando:

# echo "select 1" | isql -v asterisk-connector

El cual devuelve:

+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL> +------------+
| ?column? |
+------------+
|1 |
+------------+
SQLRowCount returns 1
1 rows fetched

Llegado a este punto, est listo el conector y la base de datos, lo que sigue es configurar asterisk
correctamente para el uso del connector odbc. Para asegurarse esto, se debe recompilar asterisk.

Una vez terminado el proceso de recompilacin, hay que editar el fichero /etc/asterisk/res_odbc.conf, en
donde se colocan los datos para que asterisk use el conector ODBC. El fichero debe contener lo siguiente:

[ENV]

[odbc-pg]
enabled => yes
dsn => asterisk-connector
username => asterisk
password => 4st3r1sk
pooling => no
limit => 1
pre-connect => yes

http://astbook.asteriskdocs.org/en/2nd_Edition/asterisk-book-html-chunk/getting_funky.html

Asterisk: Administracin avanzada 64


Recargar asterisk y correr el comando odbc show (en el cli de asterisk) mediante lo cual se comprueba si
se tuvo xito en la conexin hacia la BD mediante ODBC.

Finalmente se debe editar el fichero /etc/asterisk/func_odbc.conf, en este fichero se configurar 'Funciones


ODBC' en lenguaje SQL para leer o escribir datos en la BD. Se hace uso de la funcin del dialplan
SQL_ESC, la cual permite pasar datos desde el diaplan a la BD y adems de las variables: ARGn y VALn,
que se usan para leer o escribir a la BD respectivamente.

Configurar func_odbc.conf

[profesor] ;NOMBRE DE LA FUNCION ODBC


dsn=odbc-pg
writesql=update clase set nota='${SQL_ESC(${VAL1})}' where matricula='${SQL_ESC($
{ARG1})}'
;Esta consulta setea la nota al alumno

[nota] ;NOMBRE DE LA FUNCION ODBC


dsn=asterisk-connector
readsql=SELECT nota,nombre FROM clase WHERE matricula='${SQL_ESC(${ARG1})}'
;Esta consulta lee la nota y el nombre del alumno

[evaluacion] ;NOMBRE DE LA FUNCION ODBC


dsn=asterisk-connector
writesql=update clase set evaluacion='${SQL_ESC(${VAL1})}' where matricula='${SQL_ESC($
{ARG1})}'
;Esta consulta setea la evaluacin al profesor por parte del alumno

Terminado esto, se posee el siguiente esquema de configuracin en cuanto a ODBC:

No olvidar que se debe tener una tabla llena de datos para poder realizar las acciones mencionadas
anteriormente, crear tabla clase y cargar datos a la tabla:

# psql -U asterisk -d asteriskDB -h localhost -W < clase.sql


# psql -U asterisk -d asteriskDB -h localhost -W < valores.sql

El contenido de los ficheros a cargarse es el siguiente:

/*clase.sql*/
CREATE TABLE clase (
id serial,
matricula int NOT NULL,
nombre varchar(20) NOT NULL,
nota int NOT NULL,
evaluacion int NOT NULL,
fecha timestamp without time zone NOT NULL,

Asterisk: Administracin avanzada 65


UNIQUE (matricula)
);

/*valores.sql*/
INSERT INTO clase (matricula,nombre,nota,evaluacion) VALUES ('123450','Fulano
Fufu','0','0'),
('123456','Zutano Zapata','0','0'),('234567','Mengano Mata','0','0'),('345678','Pepito
Perez','0','0');

Finalmente editar el dialplan para poder realizar lo pedido. Se har uso de la funcin ODBC_() para
leer/escribir a la BD. Su sntaxis es la siguiente:

Lectura:

Set(VARIABLE=${ODBC_funcionODBC(ARG1,ARG2,...,ARGn)})

En este caso, la funcin ODBC_, busca en el fichero func_odbc.conf el nombre de la funcin dado por
'funcionODBC'. Se pasan las variables ARG1-ARGn, pueden ser 0 o ms variables, de acuerdo a lo
requerido por la sentencia SQL en func_odbc.conf. Finalmente se ejecuta la consulta y el valor obtenido se
setea a VARIABLE.

Escritura:

Set(ODBC_funcionODBC(ARG1,ARG2,...,ARGm)=VAL1,VAL2,...,VALn)

En este caso, la funcin ODBC_, busca en el fichero func_odbc.conf el nombre de la funcin dado por
'funcionODBC'. Se pasan las variables ARG1-ARGn, pueden ser 0 o ms variables pero tambin se pasan
los valores VAL1-VALn los cuales indican a la sentencia SQL en func_odbc.conf que sern usados para una
accin de escritura. Finalmente se ejecuta la consulta y se actualiza la base de datos con los nuevos
parmetros.

Ejemplo de dialplan para uso de ODBC:

exten => 9999,1,Answer()


same => n,Festival(Ingrese? opcion uno? para leer? su nota? o? 2? para evaluar? al profesor?)
same => n,Waitexten(5)

exten => 1,1,Festival(Ingrese? su numero? de? matricula?)


same => n,Read(codigo,,6)
same => n,Set(ARRAY(nota,nombre)=${ODBC_nota(${codigo})})
same => n,Festival(${nombre}? su nota? es? ${nota}?)
same => n,HangUp()

exten => 2,1,Festival(Ingrese? su numero? de? matricula?)


same => n,Read(codigo,,6)
same => n,Set(ARRAY(nota,nombre)=${ODBC_nota(${codigo})})
same => n,GotoIf($[ISNULL(${nombre})]?incorrecto:)
same => n(ingrese),Festival(Ingrese? la nota? del profesor? entre? cero? y diez?)
same => n,Read(calf,,2)
same => n,GotoIf($[${calf} > 10]?mal:continuar)
same => n(continuar),Set(ODBC_evaluacion(${codigo})=${calf})
same => n,Festival(Calificaion? ingresada correctamente?)
same => n,Festival(La? calificacion ingresada fue? ${calf}?)
same => n(incorrecto),HangUp()
same => n(mal),Festival(Vuelva? a ingresar? la calificacion?)
same => n,Goto(ingrese)

exten => 3,1,Festival(Digite? el numero? de? matricula? del estudiante?)


same => n,Read(matricula,,6)
same => n,Set(ARRAY(nota,nombre)=${ODBC_nota(${matricula})})
same => n,GotoIf($[ISNULL(${nombre})]?nocorrect:)
same => n(ingresar),Festival(Ingrese? la nota? del estudiante? ${nombre}? entre? cero? Y?
diez?)

Asterisk: Administracin avanzada 66


same => n,Read(notas,,2)
same => n,GotoIf($[${notas} > 10]?incorrecto:continue)
same => n(continue),Set(ODBC_profesor(${matricula})=${notas})
same => n,Festival(Calificaion? actualizada correctamente? para el? estudiante? ${nombre}?)
same => n,Festival(La? calificacion ingresada fue? ${notas}?)
same => n(nocorrect),HangUp()
same => n(incorrecto),Festival(Vuelva? a ingresar? la calificacion?)

Asterisk: Administracin avanzada 67


3.5 AGI: Asterisk Gateway Interface

El Asterisk Gateway Interface (AGI) permite desarrollar aplicaciones externas que pueden
interactuar con Asterisk. Estas aplicaciones pueden escribirse en distintos lenguajes de
programacin y de hecho existen libreras en Perl, PHP, Python, Ruby que simplifican la
escritura de estas aplicaciones.

La versatilidad de usar un AGI estriba en que se puede usar toda la potencia del lenguage de
programacin que se est usando, para hacer tericamente cualquier tarea, accin o proceso a
travs de asterisk. Como un ejemplo sera el control de seguridad de un edificio, o el
lanzamiento de una alarma de alerta y llamada al responsable cuando la temperatura en un
invernadero supere un lmite fijado o el envo de datos del llamante a un CRM, etc. Como se
menciona, todo depende de la potencia del lenguaje de programacin y de la imaginacin y
uso que se quiera hacer de la central.

Cuando se trabaja con AGI, la interaccin entre esta y Asterisk se implifica de la siguiente
manera:

Normalmente cuando se usa un AGI, el intercambio de informacin se realiza a travs de los


descriptores STDIN/STDOUT.

Tipos de AGI:

AGI estandar: Es aquel AGI que se puede usar localmente. Generalmente es un programa
escrito en algn lenguaje de programacin, cuyo ejecutable/binario se coloca en
/var/lib/asterisk/agi-bin. La forma de llamar a esta agi desde el dialplan es la siguiente:

exten => _X.,pri,Agi(nombreagi,arg1,arg2,...,argn)

Entonces Asterisk buscar el programa en /var/lib/asterisk/agi-bin, le enviar los argumentos


correspondientes y esperar el fin de su ejecucin para continuar con la ejecucin normal del
dialplan.

En este tipo de AGI, se lanza un proceso por cada llamada a esta, por lo cual si se tiene un flujo
intenso y grande de llamadas se puede llegar a colapsar el servidor.

Fast AGI: Similar al AGI anterior, solamente que ahora, el AGI est ubicado en un servidor
distinto a asterisk, y su llamada se realiza mediante el URL completo. El flujo de datos usa el
protocolo TCP, puerto 45:73. Se llama de la siguiente manera:

exten => _X.,pri,Agi(agi://192.168.1.1/nombreagi,arg1,...,argn)

De igual manera se pueden pasar argumentos al AGI. La ventaja de este tipo de AGI es que se
alivia la carga del servidor Asterisk al ejecutarse los procoesos resultantes de la llamada al AGI
en otro servidor.

EAGI: Enhanced AGI, similar al AGI estandar pero se transmite tambin el audio del canal de
entrada para su tratamiento dentro del AGI.

Asterisk: Administracin avanzada 68


DeadAGI: Sin soporte a partir de Asterisk 1.8. Un AGI especial que se invoca y usa las
variables del canal despues de haberse colgado

Para conocer Todas las respuestas y comandos que se pueden usar en el AGI, refirase al libro:
Asterisk: The Definitive Guide, 3ra Edicin, Pag, 481,483-485. Leif Madsen, Jim Van Meggelen
& Russel Bryant. Editorial O'reilly.

Prctica 3.5.1: Implementacin de AGI con perl:20

Perl es un pontente lenguaje de scripting, no necesita compilarse y su sntaxis es parecida a


otros lenguajes como php o python. Adems posee la facilidad de instalar bibliotecas
adicionales para usar caractersticas especiales como conexion a bases de datos o tratamiento
de objetos web. En este caso, se instalar la librera Asterisk::AGI.

La librera, as como tambin su documentacin se encuentran en:

http://search.cpan.org/~jamesgol/asterisk-perl-1.03/lib/Asterisk/AGI.pm

Descargar, descomprimir e instalar:

# tar xvfz asterisk-perl-1.03.tar.gz


# perl Makefile
# make install

Ahora, con la librera lista, se puede programar un AGI que realizar suma, resta, multiplicacin
o potencia con 2 variables enviadas desde asterisk y un operador mediante el cual se decide
que tarea realizar. El contenido del script es el siguiente:

#!/usr/bin/perl
use Asterisk::AGI;
$AGI = new Asterisk::AGI;
%input = $AGI->ReadParse();

$op1 = $AGI->get_variable('var1');
$op2 = $AGI->get_variable('var2');
$ope = $AGI->get_variable('menu');

for ($ope) {
/1/ and do {$total=$op1+$op2;};
/2/ and do {$total=$op1-$op2;};
/3/ and do {$total=$op1*$op2;};
/4/ and do {$total=$op1**$op2;};
}

$AGI->set_variable('RESULTADO',$total);

Escribir en el dialplan el contexto y las lneas necesarias para llamar y hacer funcionar el AGI:

20http://www.asterisk.name/writing-agi-scripts-in-perl.html

Asterisk: Administracin avanzada 69


exten => 111,1,Answer()
same => n,Festival(Ingrese tres numeros)
same => n,Festival(Ingrese el primer valor)
same => n,Read(var1,,3,,,3)
same => n,Festival(Ingrese el segundo valor)
same => n,Read(var2,,3,,,3)
same => n,Festival(Uno Suma Dos Resta Tres Multiplicacion Cuatro Potencia)
same => n(op),Read(menu,,1,,,3)
same => n,GotoIf($[$["${menu}"="0"]|$["${menu}">"4"]]?ingresar:continuar)
same => n(ingresar),Festival(Valor incorrecto ingrese un valor entre uno y cuatro)
same => n,Goto(op)
same => n(continuar),Agi(operacion.pl,var1,var2,menu1)
same => n,Festival(El resultado es: ${RESULTADO})
same => n,HangUp()

Prctica 3.5.2: Instalacin de AGIs para el uso de tts y motor asr de google:

Se descargarn e instalarn un par de AGIs listas, para poder usar los servicios de google en lo
referente a sntesis de voz y reconocimiento del habla. Toda la documentacin, as como los
scripts se encuentran en las siguientes pginas:

http://zaf.github.com/asterisk-speech-recog/
http://zaf.github.com/asterisk-googletts/

Se debe cumplir los requisitos previos: tener instalado perl-libwww flac y mpg123:

# yum install flac perl-libwww-perl


# yum install http://pkgs.repoforge.org/mpg123/mpg123-1.13.4-
1.el6.rf.x86_64.rpm

Descargar, descomprimir y localizar los ficheros googletts.agi y speech-recog.agi. Copiarlos al


directorio de AGI's de asterisk.

Su uso es como sigue:

TTS:
Agi(googletts.agi,Texto a decir,[lenguage,tecla_interrupcion])

Lenguage: es, it, us, uk, etc.

ASR:
Agi(speech-recog.agi,[timeout,lenguage,tecla_int,NOBEEP])

Lenguaje: es_EC, en_US, etc.

Esta agi retorna 4 variables a asterisk, que son:


${utterance}: El texto reconocido.
${confidence}: La probabilidad de haber reconocido lo dicho, dada entre 0 y 1
${status}: Devuelve 0 si la tarea se complet con xito, otro valor si hubo errores.
${id}: Identificador proporcionado por google.

Asterisk: Administracin avanzada 70


3.6 AMI: Asterisk Manager Interface

AMI (Asterisk Manager Interface) es una interfaz de monitoreo y gestin presente en Asterisk
que interactua con la PBX recibiendo eventos; al mismo tiempo permite enviar acciones que
Asterisk ejecutar. La AMI trabaja en el puerto predefinido 5038 TCP y para activarla hay que
modificar el archivo de configuracin manager.conf.

La nica limitacin es que Asterisk no est preparado para recibir muchas peticiones a travs
del AMI, lo que puede causar su inestabilidad.

Tambin es posible usar AMI a travs de HTTP gracias a que asterisk implementa un sencillo
servidor HTTP. Esto permite a una aplicacin externa la administracin de Asterisk a travs de
este protocolo. AMI a travs de HTTP se configura en /etc/asterisk/http.conf

Prctica 3.6.1: Trabajando con AMI

Editar el fichero /etc/asterisk/manager.conf, colocar en l lo siguiente:

[general]
enabled=yes
webenabled=yes
bindaddr=127.0.0.1

[curso_asterisk]
secret=4st3r1sk
read=system,call,agent,user,config,dtmf,reporting,cdr,dialplan
write=system,call,agent,user,config,command,reporting,originate

Guardar y recargar asterisk, observar los clientes del manager con el comando manager show
users. Finalmente, usar telnet para probar la conexin y enviar algunos comandos:

# telnet localhost 5038


Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Asterisk Call Manager/1.1

Action: Login
Username: curso_asterisk
Secret: 4st3r1sk

Response: Success
Message: Authentication accepted

Action: Ping

Response: Success
Ping: Pong
Timestamp: 1282739190.454046

Action: Logoff

Asterisk: Administracin avanzada 71


Response: Goodbye

Message: Thanks for all the fish.


Connection closed by foreign host.

Prctica 3.6.2: Instalacin de una interfaz de administracin para asterisk. 21

Haciendo uso de AMI se instalar una interfaz grfica para Asterisk, mediante la cual se podr
administrar al programa.

Primero, realizar un backup de todos los ficheros de configuracin de asterisk:

# cp -r /etc/asterisk /etc/asterisk_bck

Editar el fichero manager.conf, colocar en l lo siguiente:

[general]
enabled=yes
webenabled=yes
port=5038
httptimeout=60
bindaddr=dir_ip_servidor
[admin]
secret=contrasea
read=system,call,log,verbose,agent,user,config,dtmf,reporting,cdr,dialplan
write=system,call,agent,user,config,command,reporting,originate

Editar tambin el fichero http.conf:


[general]
enabled=yes
enablestatic=yes
bindaddr=dir_ip_servidor
bindport=8088

Recargar Asterisk, y proceder a la instalacin del GUI, se usar asterisk-GUI ya que esta bien
integrado a Asterisk adems es desarrollado por digium. Primero se debe tener subversion en
el sistema:

# yum install subversion


# cd /usr/src

Copiar con subversion la ltima versin de asterisk-GUI:

# svn co http://svn.asterisk.org/svn/asterisk-gui/branches/2.0
# cd 2.0
# ./configure
# make
# make install
# make checkconfig

Una vez terminado, desde el navegador se puede acceder a la GUI. El usuario y contrasea son
los que se configuraron en el manager.conf. El link es el siguiente:

http://dir_ip_servidor:8088/asterisk/static/config/cfgbasic.html

Si no funciona, probar con el siguiente link:

http://dir_ip_servidor:8088/static/config/cfgbasic.html

21 http://voztovoice.org/?q=node/91

Asterisk: Administracin avanzada 72


BIBLIOGRAFA

Telefona IP con Asterisk. Sidevox.


http://ofps.oreilly.com/titles/9780596517342/AGI.html
http://10000horas.com/asterisk/tag/google-asr/
http://www.ardumania.es/2011/11/reconocimiento-de-voz-de-google/
http://www.asteriskguide.com/mediawiki/index.php/Extending_Asterisk_with_AMI/AG
Libro Asterisk 1.8.X v1.0 . VozToVoice
www.voztovoice.org
www.sinologic.net
Asterisk The Definitive Guide. O'reilly.

Asterisk: Administracin avanzada 73


ndice del usuario
CAPTULO 1
ASTERISK: PRIMEROS PASOS........................................................................................................3
1.1 INSTALACIN DE LINUX Y COMANDOS BSICOS........................................................3
1.2 GENERALIDADES DE LA TELEFONA TRADICIONAL Y TELEFONA IP....................8
1.3 VoIP y TELEFONA IP...........................................................................................................10
1.4 ASTERISK...............................................................................................................................11
1.5 Hardware para Asterisk............................................................................................................15
1.6 INSTALACIN DE ASTERISK............................................................................................17
1.7 ASTERISK FIRST LOOK......................................................................................................20
1.8 CDECS DE AUDIO:............................................................................................................21
1.9 PROTOCOLO SIP...................................................................................................................22
1.10 PROTOCOLO IAX2.............................................................................................................28
1.11 CONFIGURACIN DE CANALES DAHDI.......................................................................31
CAPTULO 2
DIALPLAN........................................................................................................................................32
2.1 INTRODUCCIN AL DIALPLAN........................................................................................32
2.2 PATRONES DE NUMERACION...........................................................................................36
2.3 EXTENSIONES ESTANDARES...........................................................................................36
2.4 VARIABLES...........................................................................................................................36
2.5 FUNCIONES...........................................................................................................................37
2.6 APLICACIONES.....................................................................................................................38
2.7 EXPRESIONES Y OPERADORES........................................................................................40
2.8 INTERCONEXIN DE CENTRALES..................................................................................43
2.9 MACROS................................................................................................................................45
2.10 FUNCIONES DE PBX..........................................................................................................46
2.11 CONFERENCIA...................................................................................................................50
CAPTULO 3
DIALPLAN AVANZADO..................................................................................................................52
3.1 ASTDB....................................................................................................................................52
3.2 Asterisk CDR...........................................................................................................................55
3.2.1 Configuracin de CDR en PostgreSQL................................................................................55
3.3 Distribucin Automtica de Llamadas Colas de Espera.......................................................57
3.4 Integracio con bases de datos relacionales: ODBC...............................................................63
3.5 AGI: Asterisk Gateway Interface.............................................................................................68
3.6 AMI: Asterisk Manager Interface............................................................................................71
BIBLIOGRAFA................................................................................................................................73

Asterisk: Administracin avanzada 74

Anda mungkin juga menyukai