Está en la página 1de 56

Telefona IP

con Asterisk
ADMINISTRADOR AVANZADO

AndrsFuentes
ElicerTats

Asterisk: Administracin avanzada

Versin 1.0

ndice del usuario


..............................................................................................................................................................1
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....................7
1.3 VoIP y TELEFONA IP.............................................................................................................8
1.4 ASTERISK................................................................................................................................8
1.5 INSTALACIN DE ASTERISK............................................................................................14
1.6 ASTERISK FIRST LOOK:.....................................................................................................15
1.7 CDECS DE AUDIO:............................................................................................................16
1.8 CREACIN DE CANALES SIP............................................................................................17
1.9: CREACION DE CANALEX IAX2.......................................................................................18
1.10 INTRODUCCIN AL DIALPLAN......................................................................................18
CAPTULO 2
DIALPLAN Y PROTOCOLOS DE VoIP..........................................................................................22
2.2 EXTENSIONES ESTANDARES...........................................................................................22
2.3 APLICACIONES.....................................................................................................................22
2.4 VARIABLES...........................................................................................................................23
2.5 EXPRESIONES Y OPERADORES........................................................................................24
2.6 FUNCIONES...........................................................................................................................26
2.7 PROTOCOLOS SIP e IAX2....................................................................................................26
2.8 DAHDI....................................................................................................................................29
2.9 MACROS................................................................................................................................30
2.10 ASTDB..................................................................................................................................31
2.11 FUNCIONES DE PBX..........................................................................................................32
2.12 CONFERENCIA...................................................................................................................36
CAPTULO 3
DIALPLAN AVANZADO..................................................................................................................38
3.1 Asterisk CDR...........................................................................................................................38
3.2 Configuracin de CDR en PostgreSQL...................................................................................38
3.3 Distribucin Automtica de Llamadas Colas de Espera.......................................................40
3.4 Integracio con bases de datos relacionales: ODBC...............................................................45
3.5 AGI: Asterisk Gateway Interface.............................................................................................50
3.6 AMI: Asterisk Manager Interface............................................................................................53
BIBLIOGRAFA................................................................................................................................56

Asterisk: Administracin avanzada

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.
2.
3.
4.

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


Insertar el (primer) CD o DVD de instalacin de Centos 6 en el CD/DVD ROM.
Encender o reiniciar el sistema.
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)
Desktops
X Window System
GNOME Desktop Environment
Applications
Editors
Servers
Server Configuration Tools
Network Servers
Development
Development Tools (seleccionar todos)
X Software Development
System

Asterisk: Administracin avanzada

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 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
1

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

Asterisk: Administracin avanzada

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 arvhivo
Ejemplo : chmod 755 /home/asterisk/palabras.txt - Este cambio da todos los permisos menos
el de edicion al archivo 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 comandos:
Es el modo en el que se entra en vim por defecto. En este modo se puede escribir comandos
tales como :w (write, guardar) para que guarde (y no que escriba :w en el texto).
modo INSERTAR (o INSERT):
Es el modo de edicin. Para entrar en este modo basta con escribir una i desde el modo de
comandos, y a partir de ese momento todo lo que se escriba con el teclado se escribir en un
documento, como si de un editor convencional se tratase.
Para volver al modo comandos slo es necesario presionar la tecla esc.
Trabajando con vim
1. Abra un terminal virtual.
2. Asegrese de encontrarse en su directorio home. Cree un archivo llamado vitest usando
vim.
3. 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.
A
B
C
D
E
F
G
H
I
J
K
L
2

alfa
bravo
charlie
delta
eco
fox
golf
hotel
indian
july
kilo
lima

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

Asterisk: Administracin avanzada

M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z

mike
november
oskar
papa
quebec
romeo
sierra
tango
uniforme
victor
whisky
xerox
yanky
zolu

4. 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
5. Abra de nuevo el archivo vitest. Note que la ltima lnea en la pantalla muestra el
nombre del archivo y el nmero de caracteres.
6. Utilizando las teclas <h>, <j>, <k> y <l>, practique movindose a travs del archivo.
7. Usando los comandos vim apropiados para moverse a travs del texto:
Muvase una pgina adelante
Muvase una pgina atrs
Mueva al cursor a la primera lnea en la pantalla
Mueva al cursor a la ltima lnea en el archivo
Mueva el cursor a la primera lnea en el archivo
Mueva el cursor a la lnea 5 del archivo
Mueva el cursor al final de la lnea
Mueva el cursor al final de la lnea

<Ctrl-f>
<Ctrl-b>
H
G
:1 <enter>
:5 <enter>
$
0

8. 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
9. Practique algo ms con los comandos que se encuentran en la hoja de resumen.
10. Guarde el archivo pero no salga de vim.
Bsqueda global y reemplazo
11. Reemplace todos los espacios en el archivo vitest con tabs (:%s / / <TAB>/g)
12. Guarde su archivo (:wq, :x o ZZ)
Trabajando con otros editores
13. Su sistema tiene otros editores en modo texto y grfico que estn disponibles. Inicie
alguno de ellos: nano, gedit, etc.

Asterisk: Administracin avanzada

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.
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.

Asterisk: Administracin avanzada

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

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 hablamos de Telefona IP nos referimos 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.

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

Asterisk: Administracin avanzada

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:
Versin

Tipo

1.2.X

Fecha de
liberacin

Actualizaciones
de seguridad

End Of Life
EOL

2005-11-21

2007-08-07

2010-11-21

1.4.X

LTS

2006-12-23

2011-04-21

2012-04-21

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.

Asterisk: Administracin avanzada

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.
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

Asterisk: Administracin avanzada

10

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.
MEDIA GATEWAY:

Asterisk: Administracin avanzada

11

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.

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)

Asterisk: Administracin avanzada

12

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.
Marcas: Grandstream, Astra, Rhino, Cisco, Audiocodes.

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

Telfonos IP:

Asterisk: Administracin avanzada

13

Marcas: Grandstream, Astra, Polycom, etc.


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

1.5 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.

Instalacin mediate 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.
Practica 1.5.1: Instalacion de asterisk mediante compilacin
Trabajar sobre el directorio /usr/src/,

# cd /usr/src/
Descargar una versin estable de asterisk desde www.asterisk.org

# wget
http://downloads.asterisk.org/pub/telephony/asterisk/releases/aste
risk-1.8.9.0.tar.gz
Proceder a descomprimir y compilar el programa

#
#
#
#
#
#
#
#

tar xvfz asterisk-1.8.9.0.tar.gz


cd asterisk-1.8.9.0
./configure
make menuselect
make
make install
make config
make samples

Iniciar el servicio asterisk:4

# service asterisk start


Contectarse a la consola asterisk:

Asterisk: Administracin avanzada

14

# asterisk -r
NOTA: En Centos 6, cambiar la poltica del sistema de seguridad SELINUX en el fichero
/etc/sysconfig/selinux, a disabled o permissive.
Instalacin desde 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.
Practica 1.5.2: Instalacion de asterisk mediante repositorio
Descargar e instalar el repositorio epel para centos, la versin adecuada del repositorio puede
encuntrarse en http://fedoraproject.org/wiki/EPEL

# yum install
http://download.fedoraproject.org/pub/epel/6/i386/epel-release-65.noarch.rpm
Verificar que los paquetes asterisk estn presentes en el repositorio:

# yum search asterisk


Instalar los paquetes necesarios:

# yum install asterisk asterisk-souds-core-es-gsm asteriskvoicemail-plain


Iniciar el servicio asterisk:

# service asterisk start


Contectarse a la consola asterisk:

# asterisk -r
1.6 ASTERISK FIRST LOOK:
Observamos los archivos de configuracin de ejemplo:

# cd /etc/asterisk
Ingresamos en el directorio en donde se almacenan los mdulos de Asterisk.:

# cd /usr/lib/asterisk/modules
Ingresamos en el directorio de libreras de Asterisk y en cada uno de sus subdirectorios:

#
#
#
#
#
#
#

cd
cd
cd
cd
cd
cd
cd

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

Asterisk: Administracin avanzada

15

Ingresamos en el directorio de spools y en sus subdirectorios:

# cd /var/spool/asterisk/outgoing
# cd ../voicemail
# cd ../tmp
Finalmente ingresamos en el directorio de logs de Asterisk.

# cd /var/log/asterisk
1.7 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, nivel de
ruido, silencio y tolerancia a latencia y microcortes, entre otras; todo esto 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:

Nombre

Descripcin

Bit rate
(kb/s)

Sampling
rate (kHz)

Notas
Tiene dos versiones u-law (US, Japan) y
a-law (Europa) para muestrear la seal

G.711

Pulse code modulation (PCM)

64

G.722

7 kHz audio-coding within 64


kbit/s

64

16

Divide los 16 Khz en dos bandas cada


una usando ADPCM

G.722.1

Codificacin a 24 y 32 kbit/s
para sistemas con baja perdida
de paquetes

24/32

16

Cdec para audio HD.

G.723.1

Dual rate speech coder for


multimedia communications
transmitting at 5.3 and 6.3
kbit/s

5.6/6.3

Parte de H.324 video conferencing.


Codifica la seal usando linear predictive
analysis-by-synthesis coding. Para el
codificador de high rate utiliza MP-MLQ y
para el de low-rate usa ACELP.
PROPIETARIO

G.726

40, 32, 24, 16 kbit/s adaptive


differential pulse code
modulation (ADPCM)

16/24/32/40

ADPCM; reemplaza a G.721 y G.723.

G.729

Coding of speech at 8 kbit/s


using conjugate-structure
algebraic-code-excited linearprediction (CS-ACELP)

Bajo retardo (15 ms). Existen algunas


revisiones del cdec (g729a, g729b, etc).
PROPIETARIO

GSM 06.10

RegularPulse Excitation LongTerm Predictor (RPE-LTP)

13

Usado por la tecnologa celular GSM

LPC10

Linear-predictive codec

2.4

10 coeficientes. La voz suena un poco


"robotica"

Speex5

Usa el motor de compresin


vorbis.

iLBC
SILK

3
4
5

Uncompressed audio data


samples

8, 16, 32

2.15-24.6 Cdec configurable para aceptar


(NB)
determinados bitrates y calidad de audio.
4-44.2 (WB) LIBRE.

13.3

De 6 a 40
kbit/s

Variable

Usado por skype

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

Asterisk: Administracin avanzada

16

1.8 CREACIN DE CANALES SIP


Definicin de canal: Medio 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.
Prctica 1.8: Configuracin sip.conf
Para la creacin de canales sip, hay que editar el archivo sip.conf en el cual se definen las
opciones generales y especficas para todos y cada uno los dispositivos que usen el protocolo
sip.
Abrir el fichero sip.conf y revisar los siguientes parmetros de configuracin:
- bindaddr
- context
- type
- host
Ahora vayamos al ultimo del archivo y creemos las configuraciones para 2 telefonos SIP.

[201]
type=friend
host=dynamic
secret=pass
[202]
type=friend
host=dynamic
secret=pass
Ingresamos a la consola de asterisk y recarguemos la configuracion.

# asterisk -r
*CLI> sip reload
o simplemente

*CLI> reload
Ahora debemos configurar los telfonos IP con los datos de las cuentas SIP que creamos. Esto
depende del telfono.
Si tenemos bien configurado el telfono y estn correctamente conectados a la misma red que
la central asterisk podemos verlos si se han registrado.

*CLI> sip show peers


......
En el archivo extensions.conf tenemos que crear extensiones que nos permitan comunicarnos
con los telfonos sip que creamos. Para ello creemos en el contexto [default] las extensiones
201 y 202:

exten => 500,1,Dial(SIP/500,60)


exten => 600,1,Dial(SIP/600,60)
Ahora podemos probar llamando desde un telfono a la extensin del otro. En el CLI de asterisk
podemos observar como transcurre la llamada.
Ahora probaremos ms opciones de nuestras cuentas SIP y la aplicacin Dial. Recuerde que el
nombre de la cuenta SIP no necesariamente es numrica ni est asociada a una extensin con
el mismo nombre.

Asterisk: Administracin avanzada

17

1.9: CREACION DE CANALEX IAX2


Editar el fichero iax.conf y colocar lo siguiente:

[general]
disallow=all
allow=ulaw,gsm
qualify=yes
requirecalltoken=no
maxregexpire=1200
language=es
qualify=yes
[302]
type=friend
username=302
secret=asterisk
context=entrada
callerid=Anonimo <302>
host=dynamic
1.10 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.

En las figuras siguientes, 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 aplicaciones que sern ejecutadas en orden.

Asterisk: Administracin avanzada

18

Configuracin bsica 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.

Seccin [general]
static=yes
Si static es yes y writeprotect es no, para guardar los cambios hechos desde la consola de
asterisk tendremos que escribir el comando dialplan reload.
writeprotect=no;
En caso contrario se actualizar automticamente pero perderemos todos los comentarios
presentes en el archivo
autofallthrough=yes
Si es yes cuando alguna llamada, por algn motivo se sale del plan se terminar
priorityjumping=yes
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 n=+101 donde n
es el numero de la lnea que se est ejecutando. Si est en yes har ese salto sino no.
Seccin [globals]
En esta seccin se definen las variables globales que se van a poder utilizar en el resto de los
contextos.
Por
ejemplo
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.
Resto de Contextos []

Asterisk: Administracin avanzada

19

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

Seguridad: Permitir llamadas a ciertos destinos solo de telfonos especficos (por


ejemplo llamadas internacionales solo desde gerencia)

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

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.

Autenticacin: Solicitar contrasea para realizar llamadas a algunas extensiones.

Privacidad: Crear listas


extensin/extensiones.

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


del da.

negras

de

nmeros

que

no

pueden

contactar

una

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.
Casos prcticos:
Prctica 1.10.1. Crear un contexto llamado pruebas y en l escribir las siguientes
aplicaciones del dialplan. Recargar en cada paso asterisk y probar.
Reproducir sonido de bienvenida:

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


exten => 500,2,Hangup()
Comprobacin de latencia y eco:

exten
exten
exten
exten

=>
=>
=>
=>

600,1,Playback(demo-echotest)
600,2,Echo()
600,3;Playback(demo-echodone)
600,4,Hangup()

Reproducir la fecha actual:

exten => 501,1,Answer()


exten => 501,n,SayUnixTime(,,ABdY \'digits/at\' kM)
exten => 501,n,Hangup()
Extension start

Asterisk: Administracin avanzada

20

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


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

exten
exten
exten
exten

=>
=>
=>
=>

s,1,Answer()
s,1,WaitExten(15)
s,n,BackGround(demo-congrats)
s,n,Hangup()

En este caso presentamos la extensin start s que es la que recibe las llamadas cuando se esta
en ese contexto pero no se sabe la extensin. Tambin se puede entrar desde otra extensin
como en este caso marcando la extensin 1000. Con Goto podemos ir al contexto, extensin y
prioridad que queramos.
Prctica 1.10.2. Configurar un canal 301 en el sip.conf. En el extensions.conf crear el
contexto interno realizar lo siguiente dentro de l:
Llamadas entre canales SIP:

exten => 201,1,Answer()


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

Asterisk: Administracin avanzada

21

CAPTULO 2
DIALPLAN Y PROTOCOLOS DE VoIP
2.1. 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
Z
N
[1237-9]
[a-z]
[A-Z]
.
!

Acepta un nmero del 0 al 9


Acepta un nmero del 1 al 9
Acepta un nmero del 2 al 9
Acepta cualquier nmero dentro de los corchetes,
el smbolo - denota un rango
Acepta cualquier letra minscula
Acepta cualquier letra mayscula
Comodn, acepta uno o ms caracteres
Comodn, acepta cero o ms caracteres

Caso prctico: Cambiar el contexto de las llamadas entre canales sip, especificando
las extensiones con patrones de numeracin para la prctica 1.10.2

2.2 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.3 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

Asterisk: Administracin avanzada

22

Prctica 2.3: Creacin de un men de bienvenida


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

exten
exten
exten
exten
exten
;
exten
exten
;
exten
exten
;
exten
exten
;
exten
exten
exten
;
exten
exten
exten

=>
=>
=>
=>
=>

s,1,Set(TIMEOUT(digit)=5)
s,n,Set(TIMEOUT(response)=5)
s,n,Wait(1)
s,n(menu),Background(pbx/pbx_menu)
s,n,Waitexten(5)

=> 1,1,Goto(interno,101,1)
=> 1,n,Hangup()
=> 2,1,Goto(interno,201,1)
=> 2,n,Hangup()
=> 3,1,Goto(interno,202,1)
=> 3,n,Hangup()
=> i,1,Playback(pbx/opcion_i)
=> i,n,Goto(ivr_menu,s,menu)
=> i,n,Hangup
=> t,1,Playback(pbx/opcion_t)
=> t,n,Goto(interno,101,1)
=> t,n,Hangup

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.

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 des de 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
Concatenacin:
VAR1=abcdef

Asterisk: Administracin avanzada

23

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 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).
Ejemplo de uso:

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


labelTrue:labelFalse)
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

Operadores aritmticos

expr1 + expr2
expr1 - expr2
expr1 * expr2
expr1 / expr2
Asterisk: Administracin avanzada

24

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 !, Expresiones regulares: :, =~
Multiplicativos: *, /, %
Aditivos: +, Comparacin: =, !=, <, >, <=, >=
Lgicos: |, &
Condicionales: ? :
Prctica 2.5: Creacin de un buzn de voz
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
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 6

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
6

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

Asterisk: Administracin avanzada

25

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()
Crear otra extensin dentro del contexto adecuado para la revisin de los mensajes de voz
para el usuario7

exten => 99,1,Answer()


exten => 99,n,VoiceMailMain(${CALLERID(num)}@default)
exten => 99,n,HangUp()
exten => 98,1,Answer()
exten => 98,n,VoiceMailMain()
exten => 98,n,HangUp()
2.6 FUNCIONES
Las funciones aaden ms potencia al momento de trabajar con expresiones, se pueden
considerar como variables inteligentes. Algunos usos de funciones son por ejemplo el clculo
de la longitud de una variable, obtener fecha y hora, entre otras.
Para verlo de otra manera, las funciones permiten ejecutar una tarea dentro de la lgica del
dialplan de asterisk, la tarea ejecutada proporciona valores (variables) que se pueden usar
dentro del dialplan para incrementar su funcionalidad.
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 las funciones del dialplan de asterisk se puede dirigir hacia:
http://www.voip-info.org/wiki/view/Asterisk+functions

2.7 PROTOCOLOS SIP e 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
7

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

Asterisk: Administracin avanzada

26

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.8
Pactica 2.7: Interconexin de servidores asterisk 9

MEDIANTE PROTOCOLO SIP:


QUITO (sip.conf):

[general]
...
insecure=invite,port
8
9

http://www.voipforo.com/IAX/IAXvsSIP.php
http://www.voip-info.org/wiki/view/Asterisk+-+dual+servers

Asterisk: Administracin avanzada

27

;register => quito:asterisk2012@dir_ip_guayaquil


[guayaquil]
type=peer
context=entrada_trunk
host=dir_ip_guayaquil
disallow=all
allow=g723.1,g729,gsm
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

MEDIANTE PROTOCOLO IAX2:


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
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
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.
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

28

2.8 DAHDI
DAHDI, acrnimo de Digium Asterisk Hardware Device Interface (conocido antes como
Zaptel) 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() las cuales
requieren un preciso control y sincronizacin de tiempo.
Prctica 2.8: Instalacin de dahdi
Si se dispone del hardware adecuado, primero conectarlo a los puertos PCI/PCIe disponibles en
el computador.
Trabajar sobre el directorio /usr/src

# cd /usr/src
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-linuxcomplete/releases/dahdi-linux-complete-2.6.0+2.6.0.tar.gz
Descomprimir los paquetes y proceder a su instalacin:
Libpri:

#
#
#
#

tar xvfz libpri-1.4.12.tar.gz


cd libpri-1.4.12
make all
make install

Dahdi-linux-complete:

#
#
#
#
#

tar xvfz dahdi-linux-complete-2.6.0+2.6.0.tar.gz


cd dahdi-linux-complete-2.6.0+2.6.0
make all
make install
make config

Iniciar el servicio dahdi:

# service dahdi start


Revisar que dahdi reconoci e inicio nuestro hardware:

# dahdi_hardware -v
Recompilar asterisk (vease Practica 1.5.1: Instalacion de asterisk mediante compilacin)
Generar configuracin de dahdi:

# dahdi_gencof

Editar el fichero de configuracin chan_dahdi.conf, como ejemplo se presenta lo siguiente:

[channels]
Asterisk: Administracin avanzada

29

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
callerid=pstn
group=0
context=from-pstn
channel => 1
;;PUERTO FXS
signalling=fxo_ks
callerid="Recepcion" <101>
mailbox=101@default
group=1
context=interno
channel => 2
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]
Asterisk: Administracin avanzada

30

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.

2.10 ASTDB
Vamos a configurar un contador en una extensin, que cuando llamemos a nuestra extensin
nos diga los numeros desde el 0 en adelante hasta que cortemos la llamada.

exten => 200,1,Answer()


same => n,Set(COUNT=0)
same => n(say),SayNumber(${COUNT})
same => n,Set(COUNT=$[${COUNT} + 1])
same => n,GoTo(say)
Al llamar a la extensin 200 vamos a escuchar como nos dice los nmeros desde el 0 en
adelante hasta que colguemos.
Ahora vamos a hacer que al llamar de nuevo, no empieze desde 0 sino desde donde me haya
quedado. Para ello usamos la base de datos de asterisk, donde almacenaremos nuestra
variable COUNT.

exten => 200,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)
Ahora podemos comprobar 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
Ahora vamos a probar la llamada lista negra, que no es mas que una familia en la base de
datos que permite guardar numero que vamos a bloquear las llamadas.
Vamos al CLI de asterisk y ejecutamos el siguiente comando

*CLI> database put blacklist 100 1


Aqui lo que hacemos es guardar el numero 100 en la lista negra. Ahora con la funcin
BLACKLIST() podemos comprobar si el callerid de la persona que llama es parte de la lista
negra. Nos devuelve 1 si es parte de la lista o 0 si no lo es. Vamos a hacer la comprobacin
correspondiente:

exten => 300,1,GotoIf($[${BLACKLIST()}]?bloqueado,1)


same => n,Dial(sip/${EXTEN})
Asterisk: Administracin avanzada

31

exten => bloqueado,1,Answer()


same => n,Playback(vm-goodbye)
same => n,Hangup()
Podemos comprobar llamando desde un numer que tenga el callerid bloquedo o cambiando el
valor del callerid con la aplicacin set.
Como sabemos ahora el CallerId tiene nombre y nmero, y cualquiera de los dos puede ser
bloqueado en la lista negra. Vamos a probar agregando el valor de un nombre tambien para
probar.

*CLI> database put blacklist Juan 1


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

2.11 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. 10
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
Prctica 2.11: Configuracin de funciones adicionales de PBX
Editar el fichero features.conf. Ver los siguientes parmetros indicados en las tablas para una
correcta configuracin.

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

Asterisk: Administracin avanzada

32

Asterisk: Administracin avanzada

33

Asterisk: Administracin avanzada

34

Ahora, se habilitar estas funciones en el dialplan: 11

[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
Y en el contexto interno:

[interno]
include => parkedcalls
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.

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

Asterisk: Administracin avanzada

35

2.12 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: 12
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
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
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.
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)
12 http://voztovoice.org/?q=node/205

Asterisk: Administracin avanzada

36

same => n,Hangup


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

37

CAPTULO 3
DIALPLAN AVANZADO
3.1 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.13

3.2 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 postgresql91-devel postgresql91-server postgres91


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

# /etc/init.d/postgresql-9.1 initdb
Configurar el acceso a la base de datos en el fichero /var/lib/pgsql/data/pg_hba.conf, de la
siguiente manera:

host
host
host

all
all
asteriskDB

all
all
asterisk

127.0.0.1/32
192.168.1.0/24
127.0.0.1/32

trust
md5
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
13 http://www.voip.unam.mx/mediawiki/index.php/El_registro_detallado_de_llamadas_de_Asterisk_CDR_-_Integracin_con_PostgresSQL

Asterisk: Administracin avanzada

38

$ 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 (
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 -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, caso contrario,
iniciar la compilacin de asterisk mediante el siguiente comando:

# ./configure --with-postgres=/usr/pgsql-9.1
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.

Asterisk: Administracin avanzada

39

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.

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
tabla14 con las principales opciones de configuracin y su funcin.
Parmetro

Descripcin

[general]

Etiqueta que da inicio a la parte general del archivo .

persistentagents

Si se define en yes el estado del agente se almacena en la base de datos interna de


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.

autologoff

Nmero de segundos que tiene un agente para contestar una llamada entrante. Si no
contesta dentro de ese tiempo, ser desconectado de la cola. Valor 15

autologoffunavail

yes = si la extensin desde la cual el agente se conecta se vuelve no disponible,


automticamente el agente ser desconectado de la cola

ackcall

Para atender una llamada un agente tiene que presionar la tecla indicada en el
prximo parmetro. Valor no (no tiene que presionarla) .

acceptdtmf

endcall

permite al agente terminar una llamada presionando la tecla configurada en el


prximo parmetro .

enddtmf

wrapuptime

Numero de milisegundos que Asterisk esperar antes de volver a llamar un agente


que acaba de terminar una llamada. Valor 5000

musiconhold

Msica de espera predefinida para el agente. Valor default

;goodbye=vm-goodbye

locucin que el agente escuchar al terminar una llamada. Si se deja comentado ser
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

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

Asterisk: Administracin avanzada

40

;savecallsin

De manera predefinida las llamadas grabadas se guardan en la carpeta:


/var/spool/asterisk/monitor Si se quiere personalizar la carpeta se indica en este
parmetro. Se deja comentado .

custom_beep

Avisa al agente que est conectado permanentemente a la cola, de la llegada de una


llamada. Valor beep

agent

Ahora se configuran los agentes. Las sintaxis es:


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
tabla15 con las principales opciones de configuracin y su funcin.
Parmetro

Descripcin

[general]

Etiqueta que define la parte general del archivo .

persistentmembers

yes = se guardan los datos de los miembros de la cola activos en la base de datos
interna de Asterisk. Si se reinicia la PBX los miembros sern reasignados a las colas
correspondientes.

autofill

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
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

monitor-type

El tipo de aplicacin utilizada para grabar las conversaciones de una cola. Puede ser
Mixmonitor o monitor .

updatecdr

Actualiza o no el valor del campo dstchannel del CDR (el registro de las llamadas) con
el nombre del agente.

shared_lastcall

Si un agente hace parte de ms de una cola y se ha definido su tiempo de descanso


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

[ventas]

Con esta etiqueta se define la primera cola de espera , para el ejemplo, se llama
ventas.

musiclass

La msica de espera para los clientes en la cola. Valor default

;announce=queue-ventas

Este parmetro permite crear una anuncio para que los agentes que pertenecen a
ms de una cola para que sepan, antes de atender una llamada, de que cola proviene
el cliente. Se deja comentado

strategy

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.
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 .

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

Asterisk: Administracin avanzada

41

wrandom: asigna la llamada aleatoriamente usando una mtrica basada en


penalidades.
servicelevel

Parmetro utilizado para la estadsticas de la cola. En base al numero de segundos


configurados, en los reportes aparecer el numero de llamadas contestadas dentro del
tiempo definido. Valor 120

context

Si el cliente en la cola antes de ser atendido presiona una tecla del telfono ser
enviado al contexto definido en este parmetro y a la prioridad correspondiente al
dgito que ha marcado. Valor ventas-exit

timeout

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
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

retry

numero de segundos de espera antes de llamar otro agente si el primero no ha


contestado dentro de los 15 segundos definidos en el parmetro anterior. Valor: 4

timeoutpriority

En este parmetro se define si se toma en consideracin el tiempo de espera definido


a nivel de aplicacin o a nivel de archivo de configuracin. Valor app (aplicacin)

weight

El peso de la cola. Ms alto el valor, ms prioridad tendr la cola. Si hay agentes que
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

maxlen

Numero mximo de personas que pueden estar esperando en la cola. Valor 50 Si se


pone 0 no se fijar ningn limite

setinterfacevar

yes = una serie de variables sern creadas justo antes de conectar un miembro de la
cola con un cliente (vase archivo predefinido queues.conf)

setqueueentryvar

yes = otra serie de variables sern creadas justo antes de conectar un miembro de la
cola con un cliente (vase archivo predefinido queues.conf)

setqueuevar

yes = otra serie de variables relacionadas con la cola sern creadas justo antes de
conectar un miembro de la cola con un cliente (vase archivo predefinido
queues.conf)

;membermacro=macro

Antes de conectar el agente con el cliente se puede ejecutar la macro indicada en


este parmetro. Se deja comentado

announce-frequency

Cada cuanto segundos anunciar al cliente en la coda su posicin y tiempo estimado de


espera. Valor 90

min-announce-frequency

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
segundos) que se esperar antes de comunicarle su nueva posicin/tiempo estimado.
Valor 15

;periodic-announcefrequency=60

Cada cuantos segundos presentar un anuncio personalizado al cliente en la cola de


espera. Se deja comentado

;random-periodicannounce=no

Los anuncio pueden ser presentado segn un orden aleatorio. Se deja comentado

announce-holdtime

Anunciar junto a la posicin en la cola el tiempo estimado de espera. Puede ser yes,
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

announce-round-seconds

Con este parmetro se redondea los minutos y los segundos de espera anunciados al
cliente. Valor 20

;queue-youarenext=queueyouarenext

A partir de esta linea se pueden personalizar las locuciones predefinidas de la cola de


espera.

Asterisk: Administracin avanzada

42

;periodicannounce=anuncio1,anuncio
2

En este parmetro de definen los anuncios peridicos personalizados separados por


una coma. Se deja comentado

;monitor-format=gsm|wav|
wav49

formatos audio en que se grabarn las conversaciones de la cola de espera (si se deja
comentado, no se grabaran)

monitor-type

Se define la aplicacin para grabar la conversaciones. Puede ser monitor y mixmonitor

joinempty

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
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

leavewhenempty

Este parmetro aplica a los clientes que ya estn en la cola de espera y en base a los
valores indicados, si todos los agentes se vuelven no disponibles, el cliente ser
sacado de la cola.

;eventwhencalled = yes
;eventmemberstatus = yes

Estos dos para metros configurados en yes, generan una serie de eventos
relacionados con la cola en el AMI de Asterisk

reportholdtime

yes = Se anuncia al agente, antes de contestar la llamada, cuanto tiempo el cliente ha


esperado en la cola

ringinuse

no = no se envan las llamadas a agentes cuyo estado de la extensin es INUSE

memberdelay

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
tiempo antes de ser conectado con un agente. til si se quiere que el cliente escuche
algn anuncio o comunicacin. Valor 5

timeoutrestart

yes = el tiempo de espera para que una agente conteste una llamada se resetea si el
estado de la extensin es BUSY o CONGESTION

;defaultrule=myrule

En el archivo queuerules.conf se configuran distintos escenarios para manejar las


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


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

A partir de esta linea se definen los miembros de la cola. La sintaxis es:


member => tecnologa/extensin,penalidad,nombre,extensin
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
Asterisk: Administracin avanzada

43

enddtmf=*
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
240
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=mixmonitos
joinempty=paused,unavailable,invalid,unknown
leavewhenempty=paused,unavailable,invalid,unknown
;eventwhencalled = yes
;eventmemberstatus = yes
reportholdtime=yes
ringinuse=no
Asterisk: Administracin avanzada

44

memberdelay=5
timeoutrestart=yes
;defaultrule=myrule
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()
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.

Asterisk: Administracin avanzada

45

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: 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 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

46

Prctica 3.4.2: 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 libtoolltdl-devel postgresql91-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
siguientes16:

[asterisk-connector]
Description
=
Driver
=
Database
=
Servername
=
UserName
=
Password
=
Port
=
Protocol
=
ReadOnly
=
RowVersioning
=
ShowSystemTables
=
ShowOidColumn
=
FakeOidIndex
=
ConnSettings
=

PostgreSQL connection to 'asterisk' database


PostgreSQL
asteriskDB
192.168.0.209
asterisk
4st3r1sk
5432
8.1
No
No
No
No
No

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!
|
16http://ofps.oreilly.com/titles/9780596517342/asterisk-DB.html
http://astbook.asteriskdocs.org/en/2nd_Edition/asterisk-book-html-chunk/getting_funky.html

Asterisk: Administracin avanzada

47

|
|
| 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]
[asterisk-connector]
enabled => yes
dsn => asterisk-connector
username => asterisk
password => 4st3r1sk
pooling => no
limit => 1
pre-connect => yes
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=asterisk-connector
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
Asterisk: Administracin avanzada

48

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 -W < clase.sql


psql -U asterisk -d asteriskDB -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,
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)

Asterisk: Administracin avanzada

49

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?)
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?)
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.

Asterisk: Administracin avanzada

50

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.
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.

Asterisk: Administracin avanzada

51

Prctica 3.5.1: Implementacin de AGI con perl:17


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:

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()
17http://www.asterisk.name/writing-agi-scripts-in-perl.html

Asterisk: Administracin avanzada

52

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.41.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.

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
Asterisk: Administracin avanzada

53

[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
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. 18
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
18 http://voztovoice.org/?q=node/91

Asterisk: Administracin avanzada

54

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

Asterisk: Administracin avanzada

55

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 v. 1.0 . VozToVoice
www.voztovoice.org
www.sinologic.net
Asterisk The Definitive Guide. O'reilly.

Asterisk: Administracin avanzada

56

También podría gustarte