Вы находитесь на странице: 1из 81

Telefona IP con Asterisk Administracin Avanzada

Telefona IP
con Asterisk
Administracin
Avanzado

Pg. 1
Telefona IP con Asterisk Administracin Avanzada

Telefona IP con Asterisk Administracin Avanzada


Versin 2.1
Ing. Elicer Tats

Pg. 2
Telefona IP con Asterisk Administracin Avanzada

ndice de contenido

CAPTULO 1 ASTERISK: PRIMEROS PASOS...................................................................5

1.1 INSTALACIN DE LINUX Y COMANDOS BSICOS...............................................................5


Prctica 1.1.1: Instalacin del sistema operativo GNU/Linux....................................................5
Prctica 1.1.2: Trabajo con la consola de linux, comandos bsicos...........................................6
1.2 GENERALIDADES DE LA TELEFONA TRADICIONAL Y TELEFONA IP............................10
Prctica 1.2.1: Tabla de refuerzo...............................................................................................12
1.3 VoIP y TELEFONA IP............................................................................................................. 13
Prctica 1.3.1: Explique con sus palabras la diferencia entre Voz sobre IP y telefona IP.......13
1.4 ASTERISK............................................................................................................................... 14

1.5 Hardware para Asterisk......................................................................................................... 18

1.6 INSTALACIN DE ASTERISK................................................................................................20


Practica 1.6.1: Instalacion de asterisk mediante repositorio.....................................................20
Prctica 1.6.2: Instalacin de dahdi..........................................................................................21
Practica 1.6.3: Instalacion de asterisk mediante compilacin:..................................................22
1.7 ASTERISK FIRST LOOK.........................................................................................................23
Practica 1.7.1: Comandos bsicos en Asterisk:.........................................................................23
1.8 CDECS DE AUDIO:.............................................................................................................. 24
Practica 1.8.1: Instalacin del codec g.729 y g.723..................................................................25
1.9 PROTOCOLO SIP................................................................................................................... 26
Prctica 1.9.1. Configuracin del fichero sip.conf....................................................................30
1.10 PROTOCOLO IAX2............................................................................................................... 32
Prctica 1.10.1 Configuracin del fichero iax.conf..................................................................34
1.11 CONFIGURACIN DE CANALES DAHDI.............................................................................35

CAPTULO 2 DIALPLAN....................................................................................................36

2.1 INTRODUCCIN AL DIALPLAN.............................................................................................36


Prctica 2.1.1 Trabajando con el dialplan.................................................................................38
Prctica 2.1.2 Llamadas entre terminales:................................................................................39
2.2 PATRONES DE NUMERACION..............................................................................................40

2.3 EXTENSIONES ESTANDARES...............................................................................................40

2.4 VARIABLES............................................................................................................................. 41

2.5 FUNCIONES............................................................................................................................ 42
Prctica 2.5.1 Trabajando con funciones..................................................................................42
2.6 APLICACIONES...................................................................................................................... 43
Prctica 2.6.1: Creacin de un men de bienvenida.................................................................43

Pg. 3
Telefona IP con Asterisk Administracin Avanzada

Prctica 2.6.2: Instalacin de un motor de text-to-speech (tts), para reproducir audio a partir
de texto......................................................................................................................................44
2.7 EXPRESIONES Y OPERADORES..........................................................................................45
Prctica 2.7: Creacin de un buzn de voz...............................................................................46
2.8 INTERCONEXIN DE CENTRALES.......................................................................................49
Pactica 2.8.1 Interconexin de servidores asterisk..................................................................49
2.9 MACROS................................................................................................................................. 51
Prctica 2.9: Macro buzn de voz.............................................................................................51
2.10 FUNCIONES DE PBX............................................................................................................ 52
Prctica 2.10: Configuracin de funciones adicionales de PBX...............................................54
2.11 Dialplan para llamadas de salida.........................................................................................56
Prctica 2.11.1 Creacin de dialplan para llamadas de salida...................................................56
Prctica 2.11.2 Llamadas de salida con limitacin...................................................................57
2.12 CONFERENCIA..................................................................................................................... 58
Pactica 2.12.1: Creacin de salas de conferencia en asterisk:.................................................58
2.13 Distribucin Automtica de Llamadas Colas de Espera................................................60
Prctica 2.13.1: Distribucin automtica de llamadas..............................................................64
2.14 CCSS (Call Completion Supplementary System) Rellamada.........................................66
Prctica 2.14.1: Configuracin de CCSS..................................................................................66
2.15 Generacin Automtica de Llamadas.................................................................................68

CAPTULO 3 DIALPLAN AVANZADO...............................................................................70

3.1 ASTDB..................................................................................................................................... 70
Prctica 3.1.1: Uso de AstDB...................................................................................................70
Prctica 3.1.2: Aplicacin de AstDB.........................................................................................71
3.2 Asterisk CDR.......................................................................................................................... 73
3.2.1 Configuracin de CDR en PostgreSQL...........................................................................73
3.3 AGI: Asterisk Gateway Interface...........................................................................................75
Prctica 3.3.2: Instalacin de AGIs para el uso de tts y motor asr de google...........................76
3.5 AMI: Asterisk Manager Interface...........................................................................................77
Prctica 3.5.1: Trabajando con AMI.........................................................................................77

CAPTULO 4 SEGURIDAD EN ASTERISK........................................................................78


Prctica 4.3.1 Instalacin y configuracin de fail2ban.............................................................79

CAPTULO 5 ASTERISK GRFICO...................................................................................80


Prctica 5.1.1: Instalacin de AsteriskNOW con FreePBX......................................................80

BIBLIOGRAFA...................................................................................................................81

Pg. 4
Telefona IP con 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. Configurar el BIOS del sistema para que arranque desde el CD ROM.

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

3. Encender o reiniciar el sistema.

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

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

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

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

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

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

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


(customized) y clic en Next.

11. En la nueva pantalla y de ser posible cree tres particiones una para /boot de 300 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 Siguiente.

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

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

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

15. Designe una contrasea para el usuario root, confrmela y clic en Siguiente.

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.

Si desea ms informacin, puede consultar el siguiente link:

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

Pg. 5
Telefona IP con Asterisk Administracin Avanzada

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

Pg. 6
Telefona IP con 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 fichero.

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

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

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

clear Se utiliza para limpiar la pantalla

date Usado para configurar la hora o revisar la hora tanto del sistema como del bios

history Usado para revisar el historial de comando sejecutados en el sistema.

Pg. 7
Telefona IP con Asterisk Administracin Avanzada

Prctica 1.1.3: Manejo del editor vim

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

Los modos del vim2:

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

Los modos ms usados son los siguientes:

Modo ejecucin:

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

Modo edicin:

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

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

Modo comandos:

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

Trabajando con vim:

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

1 uno
2 dos
3 tres
A alfa
B bravo
C charlie
D delta
E eco
F fox
G golf
H hotel
I indian
J july
K kilo

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

Pg. 8
Telefona IP con Asterisk Administracin Avanzada

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

Teclas de movimiento del cursor

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

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

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

Muvase una pgina adelante <Ctrl-f>

Muvase una pgina atrs <Ctrl-b>

Mueva al cursor a la primera lnea en la pantalla H

Mueva al cursor a la ltima lnea en el archivo G

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

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

Mueva el cursor al final de la lnea $

Mueva el cursor al final de la lnea 0

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

A alfa Ani

B bravo Ben

C charlie Carlos

Bsqueda global y reemplazo

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


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

Copiar, cortar y pegar

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

Pg. 9
Telefona IP con Asterisk Administracin Avanzada

1.2 GENERALIDADES DE LA TELEFONA TRADICIONAL Y TELEFONA IP

Conceptos bsicos:

Red Telefnica Pblica Conmutada (Public Switched Telephone Network).

Conmutacin de circuitos.

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.

Se transmite la voz mediante una seal analgica con una frecuencia mxima de 4khz.

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.

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.

Se digitaliza la voz, tomando 8000 muestras por segundo de un tamao de palabra de 8 bits, lo que
da una tasa de transmisin de 64kbps para cada canal de voz. Esta codificacin se denomina PCM
(Pulse code modulation), en espaol, modulacin por impulsos codificados.

Las seales digitales pueden ser reconstruidas en cada amplificador

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

Pg. 10
Telefona IP con Asterisk Administracin Avanzada

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.

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

Pg. 11
Telefona IP con Asterisk Administracin Avanzada

Prctica 1.2.1: Tabla de refuerzo

Complete la siguiente tabla con la informacin adecuada:

Significado de PSTN (en


espaol)
Ancho de banda de una seal
analgica para transmisin de
voz
Tasa de transmisin de una
seal codificada en PCM

Nmero de canales de voz de E1

Nmero de canales de voz de T1

Tasa de transmisin de E1

Tasa de transmisin de T1

Pg. 12
Telefona IP con Asterisk Administracin Avanzada

1.3 VoIP y TELEFONA IP


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

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


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

Telefona IP

Ventajas

Aprovecha la infraestructura de red existente.

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

Posibilidad de hacer llamadas a travs del Internet.

Permite extender la PSTN hasta lugares muy alejados.

Estndares mundialmente aceptados.

Ms y mejores servicios que la PSTN.

Desventajas

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

La VoIP es un servicio no orientado a conexin.

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

Sistema que no ha sido completamente regulado en nuestro pas.

Prctica 1.3.1: Explique con sus palabras la diferencia entre Voz sobre IP y telefona IP

.............................................................................................................................................................
.............................................................................................................................................................
.............................................................................................................................................................
.............................................................................................................................................................
.............................................................................................................................................................
.............................................................................................................................................................
.............................................................................................................................................................

Pg. 13
Telefona IP con Asterisk Administracin Avanzada

1.4 ASTERISK
Asterisk es un software con licenciamiento libre (GPLv2), destinado a la implementacin de servidores de
comunicaciones y aplicativos para telefona. Digium, empresa que promueve Asterisk, invierte en ambos
aspectos: el desarrollo de cdigo fuente y en hardware de telefona que funciona con Asterisk. Asterisk
funciona en plataformas Linux y otras plataformas Unix con o sin hardware conectando a la red pblica de
telefona (PSTN). Asterisk permite conectividad en tiempo real entre las redes PSTN y redes VoIP.

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

Registro (Log) de llamadas

Buzn de voz

Grabacin de llamadas

Desvo de llamadas

Trasferencia de llamadas

Salas de Conferencias

Msica en espera

Gestin de colas (call center)

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

IVR

Integracin con sistemas de tarifacin.

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

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

Versiones de Asterisk3:

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:

Actualizacione
Version Tipo Liberacin EOL
s de seguridad

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

3 https://wiki.asterisk.org/wiki/display/AST/Asterisk+Versions

Pg. 14
Telefona IP con Asterisk Administracin Avanzada

11.x LTS 2012-10-25 2016-10-25 2017-10-25

12.x Standard 2013-12-20 2014-12-20 2015-12-20

13.x LTS 2014-10-24 2018-10-24 2019-10-24

2015-10 2016-10 2017-10


14.x Standard
(tentative) (tentative) (tentative)

2016-10 2020-10 2021-10


15.x LTS
(tentative) (tentative) (tentative)

Escenarios de uso:

PBX IP PURO:

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

INTEGRADO CON PBX HEREDADA:

En este escenario asterisk trabaja con una PBX que esta previamente instalada. Normalmente es menos

Pg. 15
Telefona IP con Asterisk Administracin Avanzada

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

Pg. 16
Telefona IP con Asterisk Administracin Avanzada

MEDIA GATEWAY:

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

CONTACT CENTER:

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

Pg. 17
Telefona IP con Asterisk Administracin Avanzada

1.5 Hardware para Asterisk

Tarjetas para telefona analgica:

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

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

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

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

Tarjetas para Telefona Digital:

Soportan estndares como E1, T1, BRI, ISDN.

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

Presentacin: 1, 2, 4, 8 puertos.

Pg. 18
Telefona IP con Asterisk Administracin Avanzada

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:

Marcas: Grandstream, Yealink, Digium, Astra, Polycom, etc.

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

Pg. 19
Telefona IP con Asterisk Administracin Avanzada

1.6 INSTALACIN DE ASTERISK

Consideraciones previas:

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

Practica 1.6.1: Instalacion de asterisk mediante repositorio

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

1. Descargar e instalar el repositorio asterisk para centos, mediante el siguiente comando 4:


rpm -Uvh http://packages.asterisk.org/centos/6/current/i386/RPMS/asterisknow-version-3.0.1-
2_centos6.noarch.rpm
yum update

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


yum search asterisk

3. Instalar los paquetes necesarios de asterisk y dahdi:


yum install asterisk asterisk-configs enablerepo=asterisk-11
yum install dahdi-linux dahdi-tools libpri

4. En Centos 6, cambiar la poltica del sistema de seguridad SELINUX en el fichero /etc/sysconfig/selinux,


a disabled o permissive. Adems, cambiar la ejecucin de selinux en tiempo de ejecucin.
sed -i s/SELINUX=enforcing/SELINUX=disabled/g /etc/sysconfig/selinux
setenforce 0

5. Configurar asterisk para iniciar cuando el sistema arranca e iniciar el servicio asterisk:
chkconfig asterisk on
service asterisk start

6. Contectarse a la consola asterisk:


asterisk -rvvv

4 https://wiki.asterisk.org/wiki/display/AST/Asterisk+Packages#AsteriskPackages-YUM(CentOS6/RedHatEnterpriseLinux6)

Pg. 20
Telefona IP con Asterisk Administracin Avanzada

Instalacion de asterisk mediante compilacin:

Al instalar asterisk mediante este mtodo, se tiene un control ms estricto sobre todas las herramientas o
mdulo que se instalan, eligiendo solamente lo que se adecue nuestras necesidades y pudiendo
personalizar la instalacin poniendo o quitando componentes de asterisk, pues, adems de funcionar como
una PBX tiene ms aplicaciones y por lo tanto al momento de su instalacin debemos tener en cuenta que
nuestro S.O disponga de software como: dahdi, drivers ODBC, bases de datos SQL, codecs, entre otros.

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

Prctica 1.6.2: Instalacin de dahdi

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

2. Instalar las dependencias necesarias para la compilacin de DAHDI:


yum -y install make wget ncurses-devel newt-devel kernel-devel gcc gcc-c++

3. Trabajar sobre el directorio /usr/src


cd /usr/src

4. 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/libpri-1.4-current.tar.gz
wget http://downloads.asterisk.org/pub/telephony/dahdi-linux-complete/dahdi-linux-complete-
current.tar.gz

5. Descomprimir los paquetes y proceder a su instalacin:

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


tar xvfz libpri-1.4.current.tar.gz
cd libpri-1.4.*
make all
make install
Dahdi-linux-complete: Drivers de hardware y herramientas de configuracin para Dahdi.
tar xvfz dahdi-linux-complete-current.tar.gz
cd dahdi-linux-complete-*
make all
make install
make config
6. Configurar el inicio automtico del servicio e iniciar el dahdi:
chkconfig dahdi on
service dahdi start

Pg. 21
Telefona IP con Asterisk Administracin Avanzada

Practica 1.6.3: Instalacion de asterisk mediante compilacin:

1. Instalar los siguientes paquetes:

Dependencias generales:
yum -y install make wget ncurses-devel newt-devel gcc gcc-c++ bison postgresql postgresql-devel
yum -y install postgresql-server ncurses-devel libtermcap-devel sox newt-devel libxml2-devel
yum -y install libtiff-devel audiofile-devel gtk2-devel sqlite-devel openssl-devel libuuid-devel
yum -y install libcurl-devel tzdata libvorbis-devel
Dependencias para soporte ODBC:
yum -y install libtool-ltdl-devel unixODBC unixODBC-devel postgresql-odbc

2. En Centos 6, cambiar la poltica del sistema de seguridad SELINUX en el fichero /etc/sysconfig/selinux,


a disabled o permissive. Adems, cambiar la ejecucin de selinux en tiempo de ejecucin.
sed -i s/SELINUX=enforcing/SELINUX=disabled/g /etc/sysconfig/selinux
setenforce 0

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


cd /usr/src/

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


wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-11-current.tar.gz

5. Proceder a descomprimir y compilar el programa


tar xvfz asterisk-11-current.tar.gz
cd asterisk-11*
./configure
make menuselect
make
make install
make config
make samples

6. Iniciar el servicio asterisk:


service asterisk start

7. Contectarse a la consola asterisk:


asterisk -r

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

Pg. 22
Telefona IP con Asterisk Administracin Avanzada

1.7 ASTERISK FIRST LOOK


Una vez realizada la instalacin de asterisk se aprendern algunos comandos bsicos adems de la
estructura de directorios que usa el programa. Se realizar la siguiente prctica:

Practica 1.7.1: Comandos bsicos en Asterisk:

1. Para esta prctica hay que conectarse primero al CLI (consola de asterisk) con el comando:
asterisk -rvvv
2. Observar la versin, licencia y garantia de asterisk. Adems ver la ayuda de los comandos disponibles
en el CLI:
asterisk*CLI> core show version
asterisk*CLI> core show licence
asterisk*CLI> core show warranty
asterisk*CLI> core show help
3. Comandos para reinicio, parada y recarga de asterisk:
asterisk*CLI> core restart now
asterisk*CLI> core restart when convenient
asterisk*CLI> core restart gracefully
asterisk*CLI> core stop now
asterisk*CLI> core stop when convenient
asterisk*CLI> core stop gracefully
asterisk*CLI> core reload
asterisk*CLI> module reload
asterisk*CLI> core abort shutdown
4. Observar los archivos de configuracin:
cd /etc/asterisk
5. Ingresar en el directorio en donde se almacenan los mdulos de Asterisk, los cuales sirven para aadir o
quitar funcionalidades al sistema:
cd /usr/lib/asterisk/modules
6. Ingresar en el directorio de trabajo de Asterisk y en cada uno de sus subdirectorios, aqui se encuentran
los sonidos, musica en espera, agis, claves de encriptacin, etc.:
cd /var/lib/asterisk
cd agi-bin
cd ../firmware
cd ../images
cd ../keys
cd ../moh
cd ../sounds
7. Ingresar en el directorio de spools y en sus subdirectorios, el cual almacena los mensajes grabados en
el buzn de voz, las conferencias grabadas, etc.
cd /var/spool/asterisk/outgoing
cd ../voicemail
cd ../tmp
8. Finalmente ingresamos en el directorio de logs de Asterisk.
cd /var/log/asterisk

Pg. 23
Telefona IP con Asterisk Administracin Avanzada

1.8 CDECS DE AUDIO5:


Un cdec de audio es un algoritmo escrito en software, el cual permite la digitalizacin, compresin y
adicin de caracteristicas como adaptacin a las condiciones de la red (para transmisin), nivel de ruido,
silencio y tolerancia a latencia y microcortes, entre otras; para su transmisin y recepcin entre terminales
que establezcan una comunicacin de voz o video. Las principales caractersticas de un cdec son su
sample rating (muestras por segundo) y su bitrate (velocidad de transmicin). Entre los principales cdecs
de audio que asterisk soporta estn los siguientes6:

Bit rate Sampling rate


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

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

Pg. 24
Telefona IP con Asterisk Administracin Avanzada

Practica 1.8.1: Instalacin del codec g.729 y g.723

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

http://asterisk.hosting.lv

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

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

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

3. Ejecutar los comandos:


asterisk*CLI> module load codec_g723-ast11-gcc4-glibc-x86_64-pentium4.so
asterisk*CLI> module load codec_g729-ast11-gcc4-glibc-x86_64-pentium4.so

4. Conectarse al CLI y verificar que los codecs estn cargados correctamente:


asterisk*CLI> core show translation

Pg. 25
Telefona IP con Asterisk Administracin Avanzada

1.9 PROTOCOLO SIP


El protocolo SIP es un protocolo de sealizacin (no transporta datos) orientado al establecimiento de
sesiones multimedia (como video, audio, mensajera instantanea, entre otras) que permite:

Localizar un usuario

Contactar un usuario para determinar su voluntad de establecer una sesin

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

Modificar una sesin establecida

Terminar una sesin establecida

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

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

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

Mtodos/solicitudes y respuestas SIP10:

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

Solicitudes SIP:

Hay seis tipos de mtodos / solicitudes:

INVITE Establece una sesin

ACK Confirma una solicitud INVITE

BYE Finaliza una sesin

CANCEL Cancela el establecimiento de una sesin

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


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

Pg. 26
Telefona IP con Asterisk Administracin Avanzada

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

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


OPTIONS
SIP

Respuestas SIP:

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

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

2xx respuestas de xito

3xx respuestas de redireccin

4xx errores de solicitud

5xx errores de servidor

6xx errores globales

Registro SIP:

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

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

Nombre de usuario

Direccin ip

Tiempo de validez del registro

Fichero de configuracin sip.conf11

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

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

El archivo sip.conf est estructurado en tres bloques:

Una parte general donde se define la configuracin global del protocolo SIP. Al momento de
configurar una extensin o una troncal, si no se definen algunos parmetros, estos sern tomados

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

Pg. 27
Telefona IP con Asterisk Administracin Avanzada

desde la parte general del archivo. Un ejemplo son los codecs audio.

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

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

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

Parmetro Descripcin
[general] Etiqueta que indica el comienzo de configuracin general.
Indica el contexto donde llegarn por defecto las llamadas no autenticadas si
context=default
allowguest=yes
Es la direccin IP y el puerto donde Asterisk se pondr a la escucha para las
sealizacin SIP utilizando el protocolo UDP. Como desde la versin 1.8, Asterisk
soporta el protocolo IPv6 es posible configurar cuatro escenarios distintos:
1. 192.168.1.0 Asterisk aceptar conexiones solamente si enviadas a la
direccin IPv4 indicada .
udpbindaddr=0.0.0.0:5060 2. 2600:3c00::f03c:91ff:fedf:a455 - Asterisk aceptar conexiones solamente si
enviadas a la direccin IPv6 indicada .
3. 0.0.0.0 Asterisk aceptar conexiones en todas las direcciones IPv4
presentes en el servidor Linux .
4. :: - Asterisk aceptar conexiones en todas las direcciones IPv4 e IPv6
presentes en el servidor Linux .
Es la direccin IP y el puerto donde Asterisk se pondr a la escucha para las
sealizacin SIP utilizando el protocolo TCP. Como para el protocolo UDP es posible
;tcpbindaddr=0.0.0.0:5060
utilizar cuatro escenarios distintos para indicar IP y puerto de escucha. En este caso
se configurar para que escuche en todas las direcciones Ipv4 puerto 5060.
Desde la versin 1.6 es posible configurar Asterisk para que permita la sealizacin
tcpenable=no
SIP sobre el protocolo TCP.
Desde la version 1.8 este parmetro indica que protocolo de transporte se usar en
transport=udp
las llamadas, valores: udp,tcp
Asterisk se presentar con este nombre al momento de comunicarse con otros
useragent=asterisk-#PC
servidores o proveedores SIP.
Si al servidor es asociado un dominio registrado, se puede definir este parmetro para
realm=#PC.asterisk.test que la autentificacin se haga utilizando ese nombre de dominio (digest authentication
RFC2617).
Permite hacer bsquedas de registros DNS SRV basadas en los nombres de dominio
srvlookup=yes para llamadas SIP salientes del tipo: SIP/usuario@dominio. Asterisk hace esta
bsqueda limitndose al primer valor encontrado.
disallow=all Se deshabilita los codecs indicados en las llamadas que se establezcan.
allow=ulaw,gsm,alaw,g729 Se habilitan los codecs indicados en las llamadas que se establezcan.
Se permite el flujo media directo (audio mediante el protocolo RTP) entre los
directmedia=no terminales. El flujo directo solo es posible cuando los terminales no se encuentran
detrs de un NAT . Valores: yes, no
Protocolo para el envo de los DTMF (Dual-Tone Multi- Frequency). Son los tonos que
se generan cuando se presionan las teclas del telfono. Valor: rfc2833 Otro valor
dtmfmode=rfc2833
bastante comn es inband. Con inband los tonos se envan en el flujo audio (protocolo
RTP). Inband no funciona con el codec audio G729 .
language=es El idioma predefinido para los archivos de audio.
Mediante este paramentro, Asterisk enviar un paquete SIP OPTIONS regularmente
qualify=yes
para chequear si el terminal est en linea.
Cada cuantos segundos enviar un paquete OPTIONS al terminal registrado en
Asterisk. Esto permite saber si al terminal es alcanzable. El mtodo OPTIONS del
qualifyfreq=60
protocolo SIP se utiliza tambin para conocer los mtodos disponible en un
determinado cliente.
allowtransfer=yes En casi todos los telfonos SIP, a lo largo de una llamada, es posible presionar un
botn para transferirla a otra extensin. Este parmetro define si Asterisk aceptar

Pg. 28
Telefona IP con Asterisk Administracin Avanzada

este tipo de solicitudes.


No = no se permiten llamadas entrantes (INVITE) de usuarios no autenticados
allowguest=no (aumenta la seguridad de Asterisk) .
Yes = se permiten llamadas entrantes (INVITE) de usuarios no autenticados .
yes=cuando un INVITE o un REGISTER es rechazado por Asterisk, en lugar de enviar
alwaysauthreject=yes el verdadero motivo del rechazo contestar siempre con un 401 Unauthorized no
permitiendo dar pistas a los que estn intentando acceder al sistema .
Si en una llamada establecida no hay flujo audio por 60 segundos la llamada ser
rtptimeout=60
terminada .
Si en una llamada en espera no hay flujo audio por 240 segundos, la llamada ser
rtpholdtimeout=240
terminada .
allowsubscribe=yes Permite suscribirse al estado de un canal.
Cuenta el numero de canales utilizados por una extensin. Este parmetro junto a las
callcounter=yes funciones GROUP y GROUP_COUNT permite limitar el numero de llamadas
simultaneas que un canal puede hacer.

Las opciones de la seccin central son:


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

Finalmente se tiene las opcione especficas para los canales (se colocan las que son consideradas de
mayor importancia):
Parmetro Descripcin
Nombre del canal SIP con el cual un terminal ser identificado. No es necesariamente el
[nombre]
nmero que se usar para contactar a dicho canal.
friend=es un user y peer al mismo tiempo
user: una extensin que se autentica al servidor Asterisk usando el campo from para
type=friend hacer llamadas.
peer una extensin que se autentica para las llamadas entrantes utilizando la direccin
IP y el puerto
Si el terminal se conecta remotamente con un IP dinmico se pone dynamic. En caso
host=dynamic
contrario se pone la direccin IP.
secret= La contrasea para la extensin. Personalizar.
;mailbox= Si este parmetro es configurado, cuando la extensin se conecte al servidor Asterisk,
ste

Pg. 29
Telefona IP con Asterisk Administracin Avanzada

controlar si hay mensajes de voz pendientes y en caso positivo se lo comunicar usando


MWI = Message Waiting Indicator. que es una seal audio o vdeo que puede ser recibida
por la mayora de los telfonos IP o Softphone. Ejemplo:
numerobuzon@contextovoicemail
context=telefonos El contexto a que tendr acceso el canal.
callerid=Fulano <201> El nombre y el numero que identifica la extensin cuando llama. Personalizar
Estos dos parmetros definen una de las funcionalidades avanzadas de Asterisk, es decir
;callgroup
la posibilidad de capturar la llamada de una telfono que est timbrando, desde otro
;pickgroup
telfono.
accountcoce=201 Cdigo que aparecer en el registro de llamadas para este canal.

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

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

Prctica 1.9.1. Configuracin del fichero sip.conf

1. Abrir el fichero /etc/asterisk/sip.conf y segn los parametros explicados en la tabla anterior, configurar el
archivo. Cuando se deben configurar muchas extensiones, se pueden crear templates (plantillas) donde
se definen todos los parmetros compartidos por todas las extensiones. Luego por cada una de ellas,
se configuran solamente los parmetros que la diferencian de las dems. Para crear un template la
primera linea debe tener esta sintaxis: [nombreplantilla](!) . Crear una plantilla para hardphones y otra
para softphones:
[general]
context=default
udpbindaddr=0.0.0.0:5060
realm=instructor.asterisk.test
tcpenable=no
transport=udp
srvlookup=yes
useragent=instructor
disallow=all
allow=ulaw,gsm,g729
directmedia=no
dtmfmode=rfc2833
language=es
qualify=yes
;insecure=invite,port
allowtransfer=yes
allowguest=no
qualifyfreq=60
alwaysauthreject=yes
rtptimeout=60
rtpholdtimeout=240
allowsubscribe=yes
callcounter=yes

;Esta es una plantilla


[hardphones](!)
type=friend
secret=4st3r1sk
context=telefonos
host=dynamic

Pg. 30
Telefona IP con Asterisk Administracin Avanzada

disallow=all
allow=ulaw,gsm
deny=0.0.0.0/0.0.0.0
permit=192.168.100.0/255.255.255.0

;Esta es una plantilla


[softphones](!)
type=friend
secret=4st3r1sk
context=telefonos
host=dynamic
disallow=all
allow=ulaw,gsm, g729
deny=0.0.0.0/0.0.0.0
permit=192.168.100.0/255.255.255.0

[telefono-201](hardphones)
callerid=Recepcion <201>
;mailbox=201@default

[telefono-202](hardphones)
callerid=Operaciones <202>
;mailbox=202@default

[telefono-203](hardphones)
callerid=Gerencia <203>
;mailbox=203@default

[telefono-251](softphones)
callerid=Alumno <251>
;mailbox=251@default

[telefono-252](softphones)
callerid=Ventas <252>
;mailbox=252@default

[telefono-253](softphones)
callerid=Marketing <253>
;mailbox=253@default

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


asterisk*CLI> sip reload

3. Ahora se debe configurar los telfonos IP con los datos de las cuentas SIP creadas. Esto depende del
terminal y marca del dispositivo disponible. Una vez los terminales se registran ya se puede observar su
estado con el siguiente comando:
asterisk*CLI> sip show peers

Pg. 31
Telefona IP con Asterisk Administracin Avanzada

1.10 PROTOCOLO IAX2


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

Ancho de banda

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

NAT

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

Estandarizacin y uso

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

Utilizacin de puertos

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

Flujo de audio al utilizar un servidor

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

Otras funcionalidades

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

Parmetros de configuracin:

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

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

Pg. 32
Telefona IP con Asterisk Administracin Avanzada

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

Para los canales, son vlidos la mayora de parmetros de configuracin vistos en sip.conf.

Pg. 33
Telefona IP con Asterisk Administracin Avanzada

Prctica 1.10.1 Configuracin del fichero iax.conf

1. Editar el fichero iax.conf, poner los parmetros indicados para la seccin general y crear un canal iax.
Recuerde que tambin se puede aplicar el concepto de plantillas usado en el sip.conf
[general]
bindport=4569
bindaddr=0.0.0.0
delayreject=yes
srvlookup=yes
language=es
bandwidth=medium
disallow=all
allow=g722,ulaw,gsm
minregexpire=60
maxregexpire=60
encryption=yes
forceencryption=no
;trunkmaxsize=128000
trunkmtu=1240
autokill=yes
calltokenoptional=0.0.0.0/0.0.0.0
requirecalltoken=auto

[telefono-301]
type=friend
host=dynamic
secret=*4st3r1sk-I
context=softphones
;mailbox=301@default
qualify=yes
callerid=Ventas <301>
requirecalltoken=auto
deny=0.0.0.0/0.0.0.0
permit=192.168.100.0/255.255.255.0
2. Recargar la configuracin de asterisk y observar los canales iax creados:
asterisk*CLI> iax2 reload
asterisk*CLI> iax2 show peers
3. Realizar la configuracin de canales iax2 mediante plantillas, similar a lo realizado en la prctica de
canales SIP.

Pg. 34
Telefona IP con Asterisk Administracin Avanzada

1.11 CONFIGURACIN DE CANALES DAHDI


1. Esta prctica es una continuacin de la prctica 1.6.2 en donde se instal dahdi. Lo que sigue es la
configuracin de los canales asociados a la tarjeta instalada en el servidor. Revisar que dahdi reconoci
e inicio nuestro hardware:
dahdi_hardware -v
2. Generar configuracin de dahdi:
dahdi_genconf -v
3. Revisar la configuracin:
dahdi_cfg -vvvv
4. Editar el fichero de configuracin chan_dahdi.conf. Para facilidad de configuracin se puede incluir el
archivo generado por configuracin automtica dahdi-channels.conf. Se deben configurar tanto canales
FXO como FXS si se posee, como ejemplo se presenta lo siguiente:
[channels]
usecallerid=yes
callwaiting=yes
usecallingpres=yes
callwaitingcallerid=yes
threewaycalling=yes
transfer=yes
canpark=yes
cancallforward=yes
callreturn=yes
echocancel=yes
echocancelwhenbridged=yes
echotraining=128
busydetect=yes
faxdetect=both
language=es
group=0
context=default

;;PUERTO FXO
signalling=fxs_ks
callerid=asreceived
group=0
context=entrada-pstn
channel => 1

;;PUERTO FXS
signalling=fxo_ks
callerid="Recepcion" <1001>
;mailbox=1001@default
group=1
context=telefonos
channel => 2

Pg. 35
Telefona IP con Asterisk Administracin Avanzada

CAPTULO 2
DIALPLAN

2.1 INTRODUCCIN AL DIALPLAN


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

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

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

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

Estructura del dialplan (extensions.conf)

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


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

La parte general donde se configuran algunos parmetros generales.

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

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

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

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

Contextos

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

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

Pg. 36
Telefona IP con Asterisk Administracin Avanzada

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.

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

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

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

exten => extension,prioridad,Comando(parametros)

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

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

El comando hace referencia a la accin a ejecutar.

Extensin

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

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

Pg. 37
Telefona IP con Asterisk Administracin Avanzada

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

Prctica 2.1.1 Trabajando con el dialplan

Crear un contexto llamado pruebas y en l escribir las siguientes aplicaciones del dialplan. Recargar la
configuracin con los siguientes comandos y probar:
asterisk*CLI> dialplan reload
1. Reproducir sonido de bienvenida:
exten => 500,1,Playback(demo-congrats)
exten => 500,2,Hangup()

2. Comprobacin de latencia y eco:


exten => 501,1,Playback(demo-echotest)
same => 2,Echo()
same => 3,Playback(demo-echodone)
same => 4,Hangup()

3. Reproducir la fecha actual:


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

4. Extension start:
exten => 503,1,Goto(pruebas2,s,1)

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


exten => s,1,Answer()
same => n,WaitExten(3)
same => n,BackGround(demo-congrats)
same => n,Hangup()

Pg. 38
Telefona IP con Asterisk Administracin Avanzada

6. Grabacin de audio y reproduccin del mismo:


exten => _504,1,Answer()
same => n,Playback(beep)
same => n,Record(/tmp/${UNIQUEID}:wav)
same => n,Wait(1)
same => n,Playback(/tmp/${UNIQUEID})
same => n,Playback(demo-congrats
same => n,Hangup()

Prctica 2.1.2 Llamadas entre terminales:

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

1. Llamadas a canales SIP:


exten => 201,1,Answer()
same => n,Dial(SIP/telefono-201,20,tT)
same => n,Hangup()

exten => 202,1,Answer()


same => n,Dial(SIP/telefono-202,20,tT)
same => n,Hangup()

2. Llamadas a canales IAX2:


exten => 301,1,Answer()
same => n,Dial(IAX2/telefono-301,20,tT)
same => n,Hangup()

3. Llamadas a canales DAHDI:


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

Pg. 39
Telefona IP con Asterisk Administracin Avanzada

2.2 PATRONES DE NUMERACION


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

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

X Acepta un nmero del 0 al 9


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

2.3 EXTENSIONES ESTANDARES


Las siguientes son extensiones predefinidas que se pueden usar dentro del dialplan para ejecutar tareas
especficas cuando se encuentren.

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.
T Absolute timeout
s start extension; usada cuando no hay ninguna coincidencia con otras extensiones dentro de un contexto
dado. Tambin se usa cuando para comenzar una llamada y dentro de macros.
a Ejecutada cuando el usuario presiona * durante un saludo de buzn de voz
h Extensin para colgar
o Extensin de operador, usada para salir del buzn de voz presionando 0
failed Usada si una llamada automtica falla.
fax Usada para deteccin de fax en canales dahdi
Talk Usada en conjunto con la aplicacin Backgrounddetect()

Pg. 40
Telefona IP con Asterisk Administracin Avanzada

2.4 VARIABLES
Asterisk puede usar variables globales, compartidas o variables de canal como argumentos para los
comandos dentro del dialplan. Estas son referenciadas dentro del dialplan usando la siguiente sintaxis:
${NOMBRE:offset:longitud}
Si se usan los indicadores offset y logitud la variable resultante es un substring de la variable original, que
comienza en la posicin indicada por el offset y contiene un nmero de caracteres indicado por longitud
contados hacia la derecha. El primer carcter se cuenta en la posicin 0.

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

Si longitud es omitido o es negativo, se toma todos los caracteres indicados despues de la posicin
offset. Ejemplos:

${123456789:1} Retorna la cadena 23456789


${123456789:-4} Retorna la cadena 6789
${123456789:0:3} Retorna la cadena 123
${123456789:2:3} Retorna la cadena 345
${123456789:-4:3} Retorna la cadena 678

Concatenacin:

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

Variables de canal definidas automticamente:

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


${CONTEXT} Contexto actual.
${EXTEN} Extensin actual.
${CHANNEL} Canal actual.
${DIALSTATUS} Estado de la llamada: unavailable,congestion,
busy, noanswer, answer, cancel, hangup.
${DATETIME} Hora actual.

Para una lista completa de las variables, dirijase a:

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

Un comando til para ver el contenido de una variable es NoOp: NoOp(${VARIABLE}) . Tambin se puede
usar la aplicacin verbose: Verbose(0,${VARIABLE})

Pg. 41
Telefona IP con Asterisk Administracin Avanzada

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

Su sintaxis es la siguiente:
NOMBRE_FUNCION(argumentos)
Tambin se puede obtener el valor de una funcin, somo si se tratase de una variable:
${NOMBRE_FUNCION(argumento)}
Adems, se puede encapsular una funcin en otra:
${NOMBRE_FUNCION_1(${NOMBRE_FUNCION_3(argumento)})}
Para conocer un listado de funciones de asterisk y lo que estas realizan, dirigirse hacia:

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

Prctica 2.5.1 Trabajando con funciones

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


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

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

Pg. 42
Telefona IP con Asterisk Administracin Avanzada

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

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

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

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

Prctica 2.6.1: Creacin de un men de bienvenida

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


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

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

3. Aadir al dialplan anterior un control de intentos para evitar que el usuario entre en un lazo repetitivo al
presionar una opcin invlida o no presionar ninguna opcin.

Pg. 43
Telefona IP con Asterisk Administracin Avanzada

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


partir de texto

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

2. Instalacin de las voces en espaol, verificar que el repositorio epel est activado:
yum --enablerepo=epel 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.

3. 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)))
Ejecutar el servidor festival:
festival_server &>/dev/null &

Pg. 44
Telefona IP con Asterisk Administracin Avanzada

2.7 EXPRESIONES Y OPERADORES


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

Se representan de la siguiente manera: $[expr1]

Operadores lgicos

expr1 | expr2 (OR)

expr1 & expr2 (AND)

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

Operadores de comparacin

expr1 = expr2

expr1 != expr2

expr1 < expr2

expr1 > expr2

expr1 <= expr2

expr1 >= expr2

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


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

Operadores aritmticos

expr1 + expr2

expr1 - expr2

expr1 * expr2

expr1 / expr2

expr1 % expr2

Operadores condicionales

expr1 ? expr2 :: expr3

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

Orden de ejecucin de los operadores

Parentesis: (, )

Operadores unarios !, -

Expresiones regulares: :, =~

Multiplicativos: *, /, %

Pg. 45
Telefona IP con Asterisk Administracin Avanzada

Aditivos: +, -

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

Lgicos: |, &

Condicionales: ? :

Prctica 2.7: Creacin de un buzn de voz


13
El buzn de voz es un sistema centralizado de manejo de mensajes telefnicos para un gran grupo de
personas. Permite a los usuarios recibir, almacenar y gestionar mensajes de voz de las personas que le
llaman cuando se encuentra ausente o con la lnea ocupada.

Los buzones de voz se han convertido en una funcionalidad siempre presente en los sistemas telefnicos
de casi todas las compaas. Estn disponibles en sistemas de telefona fija, mvil

Caractersticas

En su configuracin ms bsica, provee nicamente las funcionalidades de una contestadora automtica,


sin embargo es un sistema mucho ms sofisticado, que provee mltiples funcionalidades.

Es capaz de:

Contestar varios telfonos al mismo tiempo

Almacenar los mensajes de voz en casillas personalizadas asociadas al nmero del usuario

Reenviar los mensajes hacia otras casillas

Personalizar el mensaje de introduccin

Enviar mensajes a varios destinatarios a la vez

Guardar mensajes para enviarlos en otro momento

Notificar al destinatario mediante una llamada o correo electrnico que le ha llegado un mensaje a
su casilla de voz

Transferir llamados hacia otro nmero telefnico

Reproducir diferentes mensajes de introduccin a la casilla de acuerdo quien se comunique

Proveer seguridad y confidencialidad, ya que para acceder al mismo se debe introducir una clave,
de manera que slo el usuario pueda escuchar los mensajes

Dar a conocer la fecha y hora de los mensajes, y el nmero telefnico desde el que se recibe.

Los pasos para configurar el voicemail en asterisk son los siguientes. Si se desea tener la funcionalidad de
enviar un correo electrnico, hay que configurar a postfix, el MTA de Linux como un relay de una cuenta de
correo electrnico existente, compatible con el estandar SMTP 14:

1. Editar el fichero voicemail.conf, como lo indique el instructor. Tener en cuenta la siguiente tabla para la
configuracin de fechas de envo:

13 http://es.wikipedia.org/wiki/Buz%C3%B3n_de_voz
14 http://www.howtoforge.com/postfix_relaying_through_another_mailserver

Pg. 46
Telefona IP con Asterisk Administracin Avanzada

Opcin Descripcin
'filename' filename of a soundfile (single ticks around the filename required)
${VAR} variable substitution
A or a Day of week (Saturday, Sunday, ...)
B or b or h Month name (January, February, ...)
d or e numeric day of month (first, second, ..., thirty-first)
Y Year
I or i Hour, 12 hour clock
H Hour, 24 hour clock (single digit hours preceded by "oh")
k Hour, 24 hour clock (single digit hours NOT preceded by "oh")
M Minute
P or p AM or PM
Q "today","yesterday" or ABdY (*note: not standard strftime value)
q "(for today)", "yesterday", weekday, or ABdY (*note: not standard strftime value)
R 24 hour time, including minute

[general]
format=wav49
serveremail=usuario@servidor.com
attach=yes
delete=no
maxmsg=10
maxsecs=120
minsecs=5
maxgreet=30
skipms=3000
maxsilence=3
maxlogins=3
silencethreshold=128
directoryintro=dir-intro
charset=UTF-8
pbxskip=yes
fromstring=Asterisk PBX
usedirectory=yes
emailsubjetc=Nuevo mensaje de voz ${VM_MSGNUM}

emailbody=Se ha recibido un nuevo mensaje de voz de ${VM_DUR} segundos en el buzn de voz $


{VM_MAILBOX} del nmero ${VM_CALLERID}, el ${VM_DATE}.\n\n Llme a su buzn de voz
para escucharlo. Gracias!

emaildateformat=%A, %d %B %Y a las %H:%M:%S


pagerdateformat=%A, %d %B %Y a las %H:%M:%S
sendvoicemail=yes
nextaftercmd=yes
messagewrap=yes
tz=ecuador
[zonemessages]
ecuador=America/Guayaquil|'vm-received' Q 'digits/at' IMp

Pg. 47
Telefona IP con Asterisk Administracin Avanzada

2. Con esto tenemos ms que suficiente para componer mensajes para el buzn de voz y enviarlos por
email. Ahora vienen los contextos, si es [default] es el genrico, y luego los contextos especficos.
Ejemplo.
[prueba]
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 extensin 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 15

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

exten => _[23]XX,1,Set(BUZON=prueba)


same => n,Set(NUM=${EXTEN})
same => n,Dial(SIP/telefono-${EXTEN},20,tT)
same => n,Goto(s-${DIALSTATUS},1)
same => n,Hangup
exten => s-CANCEL,1,Hangup
exten => s-CONGESTION,1,Congestion
same => n,Hangup
exten => s-BUSY,1,Voicemail(${NUM}@${BUZON},b)
same => n,Hangup
exten => s-NOANSWER,1,Voicemail(${NUM}@${BUZON},u)
same => n,Hangup
exten => _s-.,1,Voicemail(${NUM}@${BUZON},u)
same => n,Hangup

4. Crear otra extensin dentro del contexto adecuado para la revisin de los mensajes de voz para el
usuario16
exten => *97,1,Set(BUZON=prueba)
same => n,Answer()
same => n,VoiceMailMain(${CALLERID(num)}@${BUZON})
same => n,Hangup

exten => *98,1,Set(BUZON=buzon01)


same => n,Answer()
same => n,VoiceMailMain(@${BUZON})
same => n,Hangup

15 http://10000horas.com/asterisk/2011/01/30/conquistando-el-dialplan-i-aplicaciones-asterisk-voicemail/
16 http://voztovoice.org/?q=node/53

Pg. 48
Telefona IP con Asterisk Administracin Avanzada

2.8 INTERCONEXIN DE CENTRALES

Pactica 2.8.1 Interconexin de servidores asterisk17

MEDIANTE PROTOCOLO SIP

1. QUITO (sip.conf):
[general]

insecure=no
register => quito:Ast3r1sK_truNk@dir_ip_guayaquil

[guayaquil]
type=peer
context=entrada_trunk
host=dir_ip_guayaquil
disallow=all
allow=ulaw,gsm
secret=4st3r1sk
qualifyfreq=180
qualify=yes
insecure=no
dtmfmode=rfc2833
srvlookup=yes
deny=0.0.0.0/0.0.0.0
permit=dir_ip_guayaquil/255.255.255.255
defaultuser=quito

2. GUAYAQUIL (sip.conf):
[general]

insecure=no
register => guayaquil:Ast3r1sK_truNk@dir_ip_quito

[quito]
type=peer
context=entrada_trunk
host=dir_ip_quito
disallow=all
allow=ulaw,gsm
17 http://www.voip-info.org/wiki/view/Asterisk+-+dual+servers

Pg. 49
Telefona IP con Asterisk Administracin Avanzada

secret= 4st3r1sk
qualifyfreq=180
qualify=yes
insecure=no
dtmfmode=rfc2833
srvlookup=yes
deny=0.0.0.0/0.0.0.0
permit=dir_ip_guayaquil/255.255.255.255
defaultuser=guayaquil

MEDIANTE PROTOCOLO IAX2:

3. QUITO: (iax.conf)
[general]

;register => quito:Ast3r1sK_truNk@dir_ip_quito

[guayaquil]
type=peer
secret=Ast3r1sK_truNk
auth=md5
context=entrada_trunk
host=dir_ip_guayaquil
trunk=yes
allow=g729,gsm
qualify=yes

4. GUAYAQUIL (iax.conf):
[general]

;register => guayaquil:Ast3r1sK_truNk@dir_ip_quito

[quito]
type=peer
secret=Ast3r1sK_truNk
auth=md5
context=entrada_trunk
host=dir_ip_quito
trunk=yes
allow=g729,gsm
qualify=yes

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

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

Pg. 50
Telefona IP con Asterisk Administracin Avanzada

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: Macro buzn de voz

[macro-buzon]
exten => s,1,Goto(s-${DIALSTATUS},1)
exten => s-CANCEL,1,Hangup
exten => s-CONGESTION,1,Congestion
same => n,Hangup
exten => s-BUSY,1,Voicemail(${CALLERID(num)}@${ARG1},b)
same => n,Hangup
exten => s-NOANSWER,1,Voicemail(${CALLERID(num)}@${ARG1},u)
same => n,Hangup
exten => _s-.,1,Voicemail(${CALLERID(num)}@${ARG1},u)
same => n,Hangup

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


[interno]
exten => _[23]XX,1,Macro(buzon,buzon01)
Los argumentos pasaran a guardarse en ${ARG1}, ${ARG2}, ${ARG3}, etc, respectivamente para ser
usados por la macro.

Pg. 51
Telefona IP con Asterisk Administracin Avanzada

2.10 FUNCIONES DE PBX


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

Las funciones que se configurarn sern las siguientes:

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

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


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

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


entonces el agente deja de actuar inmediatamente con el canal.

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

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

Parmetro Descripcin
[general] Inicia la parte general del archivo
parkext => 700= numero de extensin donde transferir una llamada para parquearla.
parkpos => 701-709= numero de extensiones reservadas para parquear las llamadas
parkinghints no =las prioridades Hint para monitorear el estado de las extensiones dedicadas al parqueo
hay que configurarlas manualmente en el dialplan. Con yes se crean de forma automtica.
parkingtime => Numero de segundos que quedar parqueada una llamadas. Pasado ese tiempo la llamada
se transfiere a la extensin definida en el prximo parmetro. Valor 45.
comebacktoorigin yes= la llamada parqueada se transfiere a la extensin que la parque. Con no se enva al
contexto parkedcallstimeout, extensin s, prioridad 1. En ese caso hay que crear el
contexto en el dialplan.
courtesytone Locucin que se enviar al canal parqueado cuando alguien lo llama o cuando se
activa/desactiva la grabacin de la llamada Valor beep.
parkedplay Define a quien hay que enviar el courtesytone. Puede ser:
parked (canal parqueado)
caller (quien llama un canal parqueado)
both(ambos)
parkedcalltransfers Activa o desactiva la secuencia de tonos para transferir la llamada cuando es una llamada
parqueada. Puede ser:
callee (llamado)
caller(llamante)
both (ambos)
no (no permitido)
parkedcallreparking Activa o desactiva la secuencia de tonos para parquear la llamada cuando es una llamada
parqueada. Puede ser:
callee (llamado)
caller(llamante)
both (ambos)
no (no permitido)
parkedcallhangup Activa o desactiva la secuencia de tonos para terminar una llamada cuando es una llamada
parqueada. Puede ser:
callee (llamado)
caller(llamante)
both (ambos)

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

Pg. 52
Telefona IP con Asterisk Administracin Avanzada

no (no permitido)
parkedcallrecording Activa o desactiva la secuencia de tonos para grabar una llamada cuando es una llamada
parqueada. Puede ser:
callee (llamado)
caller(llamante)
both (ambos)
no (no permitido)
parkedmusicclass La clase de msica en espera que escuchar el canal que ha sido parqueado. Valor default
transferdigittimeout => Numero de segundos de espera entre los dgitos cuando se est transfiriendo una llamada.
Valor 5
xfersound La locucin que avisar que la transferencia de llamada asistida ha tenido xito. Valor beep
xferfailsound La locucin que avisar que la transferencia de llamada no ha tenido xito. Valor beeperr
pickupexten Secuencia de tonos para capturar la llamada de una extensin que est timbrando.
Depende de la configuracin de los parmetros callgroup y pickupgroup de cada extensin.
Valor *8
pickupsound La locucin que avisar que la captura de llamada ha tenido xito. Valor beep
pickupfailsound La locucin que avisar que la captura de llamada no ha tenido xito. Valor beeperr
featuredigittimeout Tiempo mximo de espera entre los dgitos para activar las funcionalidades definidas
despus de la etiqueta [featuremap] (en mili segundos) Valor 2000
atxfernoanswertimeout Tiempo mximo disponible para contestar una transferencia asistida (en segundos). Valor
15
atxferdropcall Si quien transfiere una llamada con el mtodo asistido cuelga antes que la llamada sea
transferida completamente, Asterisk devuelve la llamada a quien la estaba transfiriendo. Si
est en yes la llamada no se devuelve y se considera terminada. Valor no
atxferloopdelay Numero de segundos de espera antes de intentar nuevamente devolver la llamada (si
atxferdropcall = no). Valor 10
atxfercallbackretries Numero de veces que se intentar devolver una llamada transferida a quien la transfiri sin
xito. Valor 2
;[parkinglot_empresa2] Se puede crear ms de un bloque de extensiones para parquear las llamadas. Un ejemplo
es si quiere diferenciar las llamadas parqueadas por el departamento de ventas, de las
llamadas parqueadas por el departamento de compras. La etiqueta define el nuevo bloque
y los tres parmetros que siguen el contexto, el numero de las extensiones reservadas y
como se van utilizando las extensiones. Para asignar una extensin a un determinado slot
de parqueo, en la configuracin de la extensin en el sip.conf, parmetro parkinglot, se
pone el nombre del contexto presente en la linea que sigue. Se dejan las cuatro lineas
comentadas.
;context => empresa2
;parkpos => 801-810
;findslot => next
[featuremap] A partir de esta etiqueta empieza la configuracin de las funcionalidades
blindxfer => #= tecla para activar la transferencia ciega
disconnect => *0 = secuencia de dgitos para terminar una llamada
automon => *1= secuencia de dgitos para iniciar la grabacin de la llamada (en dos archivos audio, uno
para cada canal)
atxfer => *2= secuencia de dgitos para activar la transferencia asistida
parkcall => *7= secuencia de dgitos para parquear una llamada (se puede usar esta secuencia o
#700)
automixmon => *3= secuencia de dgitos para iniciar la grabacin de una llamada (en un nico archivo
audio donde se mezclarn los dos canales audio)
[applicationmap] A partir de esta etiqueta se pueden configurar funcionalidades personalizadas. La sintaxis
es: <FeatureName> => <DTMF_sequence>,<ActivateOn>[/<ActivatedBy>],<Application>
[,<AppArguments>[,MOH_Class]]
FeatureName: El nombre de la funcionalidad;
DTMF_sequence: la secuencia de dgitos para activar la funcionalidad;
ActivateOn: aqu se define para quien activar la funcionalidad. Los valores son self y peer.
Con self la funcionalidad se activa para quien la activa, con peer para el otro canal;
ActivatedBy: Este parmetro define quien tiene acceso a la funcionalidad. Las opciones

Pg. 53
Telefona IP con Asterisk Administracin Avanzada

son: caller (llamante), callee (llamado), both (ambos);


Application: La aplicacin que se va a ejecutar;
AppArguments: Las opciones asociadas a la aplicacin;
MOH_Class: la clase de msica en espera que escuchar el canal libre mientras se
ejecuta la funcionalidad en el otrocanal.
test1 => *9,peer,Playback,tt-monkeys,default = Digitando la secuencia *9 desde un canal, el otro
escuchar la locucin tt-monkeys mientras el canal que activ la funcionalidad, escuchar
la msica en espera.

Ahora, se habilitar estas funciones en el dialplan: 19

Prctica 2.10: Configuracin de funciones adicionales de PBX

1. Editar el fichero features.conf. Ver los siguientes parmetros indicados en las tablas para una correcta
configuracin.
[general]
parkext => 700
parkpos => 701-710
context => parkedcalls
parkinghints = yes
parkingtime => 45
comebacktoorigin = yes
courtesytone = beep
parkedplay = caller
parkedcallreparking = caller
parkedmusicclass=default
xfersound = beep
xferfailsound = beeperr
featuredigittimeout = 2000
atxfernoanswertimeout = 15
atxferdropcall = no
atxferloopdelay = 10
atxfercallbackretries = 2
pickupexten=*8

[featuremap]
blindxfer => #
disconnect => *
automon => *1
atxfer => *2
parkcall => *7
automixmon => *3

Contexto para las llamadas parqueadas (extensions.conf):


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

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

Pg. 54
Telefona IP con Asterisk Administracin Avanzada

2. Y en el contexto interno:
[interno]
include => parkedcalls

3. Y finalmente al momento de marcar con la aplicacin dial, colocar opciones adicionales para hacer uso
de las funciones configuradas, las opciones son las siguientes (se presentan con algunos ejemplos)
exten => 2000,1,Dial(SIP/2000,30,hH)
h: permite al llamado colgar la llamada usando la tecla **

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


exten => 2000,1,Dial(SIP/2000,30,kK)
k: permite al llamado parquear la llamada digitando la secuencia de teclas definida en
features.conf

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


features.conf
exten => 2000,1,Dial(SIP/2000,30,tT)
t: permite al llamado transferir la llamada digitando la secuencia de teclas definida en
features.conf

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


features.conf
exten => 2000,1,Dial(SIP/2000,30,wW)
w: permite al llamado empezar la grabacin de la llamada digitando la secuencia de teclas
definida en features.conf. Asterisk, en este caso, crear dos archivos audio, uno por cada
interlocutor.

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


definida en features.conf. Asterisk, en este caso, crear dos archivos audio, uno por cada
interlocutor.
exten => 2000,1,Dial(SIP/2000,30,xX)
x: permite al llamado empezar la grabacin de la llamada digitando la secuencia de teclas
definida en features.conf. La diferencia con las opciones w y W es que en este caso los dos
canales (llamante y llamado) se grabaran en un nico archivo audio

X: lo mismo de arriba pero para el llamante.

Callgroup y Pickupgroup

4. En todas las extensiones SIP configuradas se definir los siguientes parmetros:


callgroup=1
pickupgroup=1
Con esto se logra que todas las extensiones pertenecen al grupo de llamadas 1 y pueden capturar las
llamadas del grupo de llamadas 1. La secuencia de dgitos para capturar una llamada se acaba de
configurar el archivo features.conf y es *8. Se pueden poner mas grupos de llamadas y habilitar a ciertas
extensiones par que sean capaces de capturar de uno o ms grupos de llamadas.

Pg. 55
Telefona IP con Asterisk Administracin Avanzada

2.11 Dialplan para llamadas de salida


Usando patrones de numeracin es posible crear los planes de marcado necesarios para alcanzar destinos
de la red de telefona tradicional (PSTN)

En el caso de nuestro pas Ecuador, se podran clasificar los siguientes destinos:

Emergencia: Los 100, 911, etc

Servicios 1800 y 1700

Locales: nmeros de 7 dgitos que comienzan entre el 2 hasta el 9

Nacionales: nmeros de 9 dgitos que comienzan con 0 y cuyo 2 dgito vara entre 2 a 8.

Celulares: nmeros de 10 dgitos que comienzan con 09.

Internacionales: nmeros de longitud variable que comienzan con 00 seguidos de uno de los prefijos
asignados por la ITU20, ej:

Estados Unidos: 1

Colombia: 57

Per: 51

Espaa: 34

China: 86

Es recomendable habilitar solo los destinos ms usados para evitar fraudes telefnicos por fallas en la
configuracin de asterisk.

Prctica 2.11.1 Creacin de dialplan para llamadas de salida

1. Crear una macro genrica para las llamadas de salida, a la cual se le pasara como argumento el
nmero de destino como se explic anteriormente:
[macro-salida]
;--
Forma de uso:
ARG1: Protocolo
ARG2: Canal
;
exten => s,1,Dial(${ARG1}/${ARG2}/${MACRO_EXTEN},50,tT)
same => n,Hangup()
same => n,MacroExit()

2. Crear los contextos para llamadas salientes:


[emergencia]
exten => 911,1,Macro(salida,SIP,cnt)
exten => _1XX,1,Macro(salida,SIP,cnt)

[servicios]
exten => _1[78]00X.,1,Macro(salida,SIP,cnt)

20 http://es.wikipedia.org/wiki/Anexo:Prefijos_telef%C3%B3nicos_internacionales

Pg. 56
Telefona IP con Asterisk Administracin Avanzada

[local]
exten => _[2-9]XXXXXX,1,Macro(salida,SIP,cnt)
[nacional]
exten => _0[2-8]XXXXXXX,1,Macro(salida,SIP,cnt)

[celular]
exten => _09XXXXXXXX,1,Macro(salida,SIP,cnt)

[internacional]
exten => _001X.Macro(salida,SIP,cnt)

3. Probar las llamadas salientes.

Prctica 2.11.2 Llamadas de salida con limitacin

1. En los canales sip o iax, agregar el parmetro setvar, el cual registrar una variable que posteriormente
se usar dentro del dialplan para limitar el nmero de llamadas salientes por cada canal:
setvar=MAXCALLS=2
2. Modificar la macro salida, para usar las funciones GROUP y GROUP_COUNT y limitar de esta manera
el nmero de llamadas salientes:
[macro-salida]
;--
MACRO para llamadas de salida
Forma de uso:
ARG1=destino
ARG2=Protocolo
ARG3=Canal
--;
exten => s,1,Set(GROUP(${ARG1})=${CHANNEL(peername)})
same => n,Set(CALLS=${GROUP_COUNT(${CHANNEL(peername)}@${ARG1})})
same => n,GotoIf($[${CALLS}<=${MAXCALLS}]?:fin)
same => n,Dial(${ARG2}/${ARG3}/${MACRO_EXTEN},50,tT)
same => n,Hangup()
same => n(fin),Playback(all-outgoing-lines-unavailable)
same => n,Hangup()
same => n,MacroExit()

Pg. 57
Telefona IP con Asterisk Administracin Avanzada

2.12 CONFERENCIA
21
Las salas de conferencia se implementan en asterisk a travs del mdulo confbridge, para su
funcionamiento hay que conocer los siguientes conceptos:

Nmero de sala de conferencia: es el nmero en el cual los llamantes ingresan para estar dentro de
la misma sala de conferencia.

Perfil bridge: Es la sala de conferencia con sus parmetros y caractersticas.

Perfil user: Es el tipo de usuario que tiene acceso a las salas de conferencias con diferentes
permisos.

Men de la sala de conferencia: Es un conjunto de opciones para cada usuario dentro de la sala de
conferencias accesibles cuando se presiona algn dgito DTMF previamente configurado.

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.1: Creacin de salas de conferencia en asterisk:22

Los perfiles y mens para conferencias son configurados en el fichero confbridge.conf. Este fichero contiene
3 contextos reservados que son:

[general] Sin uso actual, reservado para uso futuro.

[default_bridge] Esta seccin contiene todas las opciones invocadas cuando confbridge es iniciado
desde el dialplant sin un perfil bridge como argumento.

[default_user] Esta seccin cotiene todas las opciones que se invocan cuando confbridge es
iniciado desde el dialplan sin pasar como argumento un perfil de usuario.

Cada seccin contiene una definicin type, la cual determina la funcin de la seccin: bridge, user o menu.

1. Editar el fichero confbridge.conf con la siguiente configuracin:


[general]
[conf_test]
type=bridge
max_members=20
record_conference=no
internal_sample_rate=auto
mixing_interval=20
sound_join= beep
sound_leave= beeperr

[user_test]
type=user
admin=no ;este perfil es para usuarios normales
marked=no ;definimos si el usuario es marcado o no
startmuted=no
denoise=yes

[menu_test]
type= menu
21 https://wiki.asterisk.org/wiki/display/AST/ConfBridge+10
22 http://www.voztovoice.org/?q=node/454

Pg. 58
Telefona IP con Asterisk Administracin Avanzada

*=playback_and_continue(press&digits/1&press&digits/2&press&digits/3&press&digits/4&press
&digits/5&press&digits/6&press&digits/7&press&digits/8press&digits/9&press&digits/0)
1=toggle_mute
2=leave_conference
3=dialplan_exec(invitar,s,1)
4=decrease_listening_volume
5=reset_listening_volume
6=increase_listening_volume
7=decrease_talking_volume
8=reset_talking_volume
9=increase_talking_volume
0=no_op

2. Una vez dentro de la conferencia, si un usuario hunde la tecla * escuchar todos los comandos
disponibles. A cada tecla se le asigna un comando. Como se ver ms adelante, presionando la tecla 3
el usuario tendr la posibilidad de invitar otro usuario a la conferencia.

3. Ahora se editar el dialplan, agregando los siguientes contextos:

[invitar]
;Se define el contexto invitar para invitar un usuario a la conferencia:
exten => s,1,Playback(vm-extension)
same => n,Read(NUMERO,beep,3,,2,3)
same => n,Originate(SIP/telefono-${NUMERO},exten,conferencia,1100,1)

[conferencia]
exten => 1100,1,Confbridge(${EXTEN},conf_test,user_test,menu_test)
same => n,Hangup

4. Recargar asterisk, revisar los siguientes comandos para gestionar las salas de conferencia.

asterisk*CLI> confbridge list


asterisk*CLI> confbridge list 1100
asterisk*CLI> confbridge lock 1100
asterisk*CLI> confbridge unlock 1100
asterisk*CLI> confbridge mute 1100 SIP/telefono-201
asterisk*CLI> confbridge unmute 1100 SIP/telefono-201
asterisk*CLI> confbridge kick 1100 SIP/telefono-201

Pg. 59
Telefona IP con Asterisk Administracin Avanzada

2.13 Distribucin Automtica de Llamadas Colas de Espera


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

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

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

agents.conf
queues.conf

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

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

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

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

Pg. 60
Telefona IP con Asterisk Administracin Avanzada

parmetro. Se deja comentado .


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

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

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


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

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

Parmetro Descripcin
[general] Etiqueta que define la parte general del archivo .
yes = se guardan los datos de los miembros de la cola activos en la base de datos
persistentmembers interna de Asterisk. Si se reinicia la PBX los miembros sern reasignados a las colas
correspondientes.
Normalmente una cola funciona de la siguiente manera. Hay unos cuantos usuarios
esperando por ser atendidos por los agentes. Cuando el usuario que est de primero
en la cola viene atendido el segundo se vuelve primero e ser atendido por el primer
agente disponible. Este comportamiento no tiene en cuenta que pueden haber muchos
autofill agentes disponibles y que podran atender los clientes sin esperar que lleguen a ser
los primeros de la cola de espera. Con este parmetro se define otro tipo de
comportamiento. Los clientes sern atendidos de manera paralela hasta que haya
agentes disponibles. De esta forma se reducen considerablemente los tiempos de
espera. Valor yes
El tipo de aplicacin utilizada para grabar las conversaciones de una cola. Puede ser
monitor-type
Mixmonitor o monitor .
Actualiza o no el valor del campo dstchannel del CDR (el registro de las llamadas) con
updatecdr
el nombre del agente.
Si un agente hace parte de ms de una cola y se ha definido su tiempo de descanso
shared_lastcall entre una llamada y otra (el parmetro wraptime), con este parmetro se define si ese
tiempo va respetado por las distintas colas de que el agente es miembro. Valor yes
Con esta etiqueta se define la primera cola de espera , para el ejemplo, se llama
[ventas]
ventas.
musiclass La msica de espera para los clientes en la cola. Valor default
Este parmetro permite crear una anuncio para que los agentes que pertenecen a ms
;announce=queue-ventas 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

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

Pg. 61
Telefona IP con Asterisk Administracin Avanzada

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

Pg. 62
Telefona IP con Asterisk Administracin Avanzada

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

Pg. 63
Telefona IP con Asterisk Administracin Avanzada

Prctica 2.13.1: Distribucin automtica de llamadas

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

agents.conf
[general]
persistentagents=yes
multiplelogin=no
[agents]
maxlogintries=3
autologoff=15
autologoffunavail=yes
ackcall=no
acceptdtmf=#
endcall=yes
enddtmf=*
wrapuptime=5000
musiconhold=default
updatecdr=yes
recordagentcalls=no
recordformat=wav
;savecallsin=/home/calls
custom_beep=beep
agent => 2000,1234,Pepito Perez
agent => 2001,1235,Juanito Jimenez
agent => 2002,1236,Luchito Lopez

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

[ventas]
musicclass=default
;announce=queue-ventas
strategy=random
servicelevel=120
context=ventas-exit
timeout=15
retry=4
timeoutpriority=app
weight=0
wrapuptime=2
autofill=yes
autopause=yes
maxlen=50
setinterfacevar=yes
setqueueentryvar=yes
setqueuevar=yes
;membermacro=macro
announce-frequency=90
min-announce-frequency=15

Pg. 64
Telefona IP con Asterisk Administracin Avanzada

;periodic-announce-frequency=60
;random-periodic-announce=no
announce-holdtime=once
announce-position=more
announce-position-limit=5
announce-round-seconds=30
;periodic-announce=queue-periodic-announce
;periodic-announce=anuncio1,anuncio2
;monitor-format=gsm|wav|wav49
monitor-type=mixmonitor
joinempty=paused,unavailable,invalid,unknown
leavewhenempty=paused,unavailable,invalid,unknown
;eventwhencalled = yes
;eventmemberstatus = yes
reportholdtime=yes
ringinuse=no
memberdelay=5
timeoutrestart=yes
;defaultrule=myrule

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

Pg. 65
Telefona IP con Asterisk Administracin Avanzada

2.14 CCSS (Call Completion Supplementary System) Rellamada 25


El CCSS es una nueva funcionalidad a partir de Asterisk 1.8.X que permite solicitar el servicio de rellamada
cuando el llamado no ha contestado y/o su extensin se encuentra ocupada. El sistema se basa en el
Internet Draft draft-ietf-bliss-call-completion-04. Un Internet Draft es una propuesta de estandarizacin
presentada a la IETF (Internet Engineering Task Force) para que sea analizada y, si el caso, aprobada y
transformada en un RFC (Request for Comment), es decir, un estndar de hecho.

Actualmente la nica PBX que utiliza este Draft es Asterisk y no hay softphone ni telfonos SIP que lo
implementen. Es por este motivo que al momento de configurar esta funcionalidad, se podr utilizar su
configuracin nativa solamente entre servidores Asterisk (desde la versin 1.8.X). Para su utilizo entre
Asterisk y los telfonos SIP o softphone hay que optar por su configuracin genrica que realmente no se
basa en el Draft mencionado, sino en un sub-sistema que se apoya a la funcin DEVICE_STATE.

Cmo funciona el sistema?

El sistema aplica a llamadas no contestadas CCNR (Call Completion on No Response) o cuando la


extensin llamada se encuentra ocupada CCBR (Call Completion on Busy Subscriber) y solamente para
canales SIP. Si se utiliza el agente genrico para solicitar la rellamada, habr que utilizar la aplicacin
CallCompletion. Si se utiliza el agente nativo, el mismo productor del dispositivo que implementa el Draft,
indicar como activarla. Normalmente es a travs de una tecla del telfono o presionando un botn ya
programado para esta funcin.

Un ejemplo. La extensin 200 llama la extensin 201. Si la extensin 201 no contesta, la extensin 200
tendr un tiempo predefinido para solicitar una rellamada. La solicitud se hace utilizando la aplicacin Call
Completion en el dialplan. Una vez solicitada la rellamada, se activar un temporizador que definir por
cuanto tiempo la solicitud quedar activa. Si dentro de este tiempo la extensin 201 efecta una llamada,
Asterisk la considerar nuevamente activa y en cuanto termine la llamada, marcar primero la
extensin 200 y luego la extensin 201. Si la rellamada tiene xito, la solicitud sera eliminada. Si la
rellamada no tiene xito (la extensin 201 no contesta nuevamente o est hablando), habr que solicitar
una nueva rellamada. En cualquier momento se puede anular una solicitud de rellamada utilizando la
aplicacin CallCompletionCancel en el dialplan.

Prctica 2.14.1: Configuracin de CCSS

1. La rellamada nativa funciona solamente si el paquete libxml2-devel ha sido instalado en el servidor


Linux antes de compilar Asterisk. Comprobado esto hay que configurar el archivo ccss.conf. En este
archivo se define un nico parmetro que es el numero mximo de solicitudes que pueden estar activas
en la PBX. Los dems datos que se encuentran el el archivo son para la configuracin de las
extensiones. Se pone, despus de la etiqueta general, el parmetro cc_max_requests para limitar el
nmero de solicitudes de rellamada activas en el sistema:
[general]
cc_max_request=20
2. Para la parte de las extensiones, colocar los parmetros de acuerdo a los valores indicados en la tabla,
si no se indican se tomaran los valores predefinidos:

Parmetro Descripcin
cc_offer_timer Tiempo mximo, en segundos, para solicitar una rellamada cuando una llamada no ha tenido
xito. Valor 20
ccbs_available_timer Tiempo de vida, en segundos, de una solicitud de rellamada cuando le extensin llamada

25 Libro Asterisk 1.8.X v. 2.0 , Pag. 206, Andrea Sannuci

Pg. 66
Telefona IP con Asterisk Administracin Avanzada

estaba ocupada. Valor 4800


ccnr_available_timer Tiempo de vida, en segundos, de una solicitud de rellamada cuando la extensin llamada
no ha contestado. Valor 7200
cc_recall_timer Cuando la extensin que ha solicitado la rellamada, recibe la llamada del sistema tendr
el numero de segundos indicados en este parmetro para contestar. Si no lo hace la
rellamada ser anulada. Valor: 20
cc_agent_policy Este parmetro describe el tipo de comportamiento de Asterisk cuando se comunicar
con el llamante para una rellamada. Puede ser:
never: deshabilita la posibilidad de solicitar una rellamada para el llamante
generic: cuando no se utiliza el Draft sino el sub-sistema basado en el DEVICE_STATE
native: cuando se utiliza el Draft para el sistema de rellamada (el telfono del llamante lo
soporta)
cc_monitor_policy Este parmetro describe el tipo de comportamiento de Asterisk cuando se comunicar
con el llamado para una rellamada.
Puede ser:
never: deshabilita la posibilidad de recibir una rellamada
generic: activar el monitorep del llamado utilizando el sub-sistema basado en el
DEVICE_STATE
native: cuando se utiliza el Draft para el sistema de rellamada (el telfono del llamado lo
soporta)
always: cuando no se sabe si el telfono soporta el Draft. De esta forma Asterisk intentar
utilizar el sistema nativo y si no funciona, el genrico
cc_max_agents Limita el numero de rellamadas activas para el llamante. Si cc_agent_policy=generic, este
valor no ser tomado en consideracin. Valor: 5
cc_max_monitors = 5 Limita el numero de rellamadas que un dispositivo puede aceptar. Valor: 5

Escribir en los la seccin [general] de sip.conf o en las plantilas de los telfonos que se desea tengan el
servicio de rellamada los parmetros:
cc_offer_timer=10
cc_agent_policy=generic
cc_monitor_policy=generic

3. Crear el contexto rellamada, el cual debe ser accesible desde el contexto interno y colocar lo siguiente:
exten => *30,1,CallCompletionRequest
same => n,Playback(rellamada-activa)
same => n,Hangup
exten => *31,1,CallCompletionCancel
same => n,Playback(rellamada-anulada)
same => n,Hangup

4. Recargar asterisk, probar diferentes escenarios para la rellamada y verificar el estado de esta utilidad
con el comando:
asterisk*CLI> cc report status

Pg. 67
Telefona IP con Asterisk Administracin Avanzada

2.15 Generacin Automtica de Llamadas


Existen mltiples formas de generar llamadas automticas en Asterisk, entendiendo estas, como aquellas
que no requieren la marcacin de los dgitos por un usuario en su dispositivo 26.

Las tres formas ms reconocidas son:

Aplicacin y Recurso Originate

Scripts de Generacin de Llamadas

Marcadores

2.15.1 Originate

La idea de Originate es "forzar" a que un dispositivo llame una extensin o ejecute una aplicacin
especifica. Existen dos formas de conseguir este efecto, y es gracias a la aplicacin y al recurso Originate,
tanto para el Plan de Marcacin, como para la interfaz CLI.

El nombre del mdulo de la aplicacin es app_originate.so, y la posibilidad de lanzar llamadas desde CLI, se
considerara un mdulo de tipo recurso llamado res_clioriginate.so

La sintaxis de ambas opciones es muy parecida:

Para el caso de Lanzar una llamada automtica:

Para la aplicacin en el dialplan:


Originate(<canal>/<dispositivo>,exten,<contexto>,<extension>,<prioridad>)
Ejemplo 1: Originate(SIP/ext11,exten,extensiones,101), en este caso, el dispositivo ext11 por el protocolo
SIP, llamara (in) voluntariamente, a la extensin numero 101 del contexto extensiones.

Para la interfaz CLI:


asterisk*CLI> channel originate <canal>/<dispositivo> extension <extension>@<contexto>
Ejemplo 2: channel originate SIP/ext11 extension 101@extensiones, se consigue el mismo efecto que el
caso anterior.

Para el caso de Lanzar una aplicacin especfica:

Para la Aplicacin:
Originate(<canal>/<dispositivo>,app,<nombre_aplicacion>,<variables>)
Ejemplo 3: Originate(SIP/ext11,app,Queue,marketing), en este caso, el dispositivo ext11 por el protocolo
SIP, ejecutara la aplicacin de introducirse en una [Colas|Cola] llamada "marketing"

Para la interfaz CLI:


asterisk*CLI> channel originate <canal>/<dispositivo> application <aplicacion> <datos_app>
Ejemplo 4: channel originate SIP/ext11 application queue marketing, conseguiramos el mismo efecto que
el caso anterior

26 http://www.wikiasterisk.com/index.php/Generaci%C3%B3n_Autom%C3%A1tica_de_Llamadas

Pg. 68
Telefona IP con Asterisk Administracin Avanzada

2.16.1 Script de generacion .call

Se puede crear un pequeo script en el sistema, llamado fichero de llamada (Call File), y con este, ejecutar
una serie de comandos, para ejecutar Aplicaciones Especficas con respecto a una extensin en concreto.
Ese fichero de llamada debe tener la extensin .call .

Una vez hayamos creado el fichero de llamada que queramos ejecutar, tenemos que depositarlo en un
directorio por defecto del sistema Asterisk: /var/spool/asterisk/outgoing/ . Por ello, todos los ficheros han
de pasarse a este directorio con el comando de Mover del sistema Linux:
mv ./mi_fichero.call /var/spool/asterisk/outgoing/

Estructura del Script

El fichero de llamada, debe crearse siguiendo la siguiente estructura, y sintaxis:

En primer lugar, a que dispositivo conectar y sus opciones:

Channel: <canal>/<dispositivo> Es el dispositivo al que queremos llamar, ejemplo SIP/telefono-201

CallerID: <identificador> Es el identificador de llamada que queramos especificar, ejemplo


"Alertas Servidor" <1111>

MaxRetries: <numero> Nmero de intentos de llamada antes de abandonar.

RetryTime: <tiempo_segundos> Tiempo en segundos entre reintentos

WaitTime: <tiempo_segundos> Tiempo de "timeout" antes de abandonar al dispositivo que estamos


tratando.

Codecs: <codec1>[,<codecN>] Cdecs que queramos utilizar

Archive: <yes/no> Si queremos que el fichero de llamada se guarde en un subdirectorio


llamado "outgoing_done".

Si el dispositivo acepta la llamada, entonces se lanza la extensin o la aplicacin a voluntad, muy parecido
al Originate:

Si se elige llamar a una extensin:

Context: <nombre_contexto>

Extension: <numero_extension>

Priority: <prioridad_extension>

Set: <variable> Muy parecido a la aplicacin Set del Plan de Marcacin.

Si se elige llamar a una aplicacin:

Application: <nombre_aplicacion>

Data: <variables_aplicacion> Las variables que se pasarn a la aplicacin

Pg. 69
Telefona IP con Asterisk Administracin Avanzada

CAPTULO 3
DIALPLAN AVANZADO

3.1 ASTDB
La base de datos de asterisk es un mtodo de almacenamiento de datos persistentes en asterisk. Es un
sencillo motor de DB tipo berkeley v1. El fichero que contiene los datos de la DB asterisk est ubicado en:
/var/lib/asterisk/astdb.

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

Lectura:

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

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

Prctica 3.1.1: Uso de AstDB

1. Se configurar un contador en una extensin que diga los nmeros desde el 0 en adelante hasta que se
corte la llamada.
exten => 603,1,Answer()
same => n,Set(COUNT=0)
same => n(say),SayNumber(${COUNT})
same => n,Noop(${INC(COUNT)})
same => n,GoTo(say)

2. Al llamar a la extensin 603 se escucharan los nmeros desde el 0 en adelante hasta que se cuelgue.
Si se hace de nuevo la llamada, no empiece desde 0 sino desde donde se haya quedado. Para ello se
usara la base de datos de asterisk, donde se almacena la variable COUNT.
exten => 603,1,Answer()
same => n,Set(COUNT=${DB(test/count)})
same => n,GotoIf($[${ISNULL(${COUNT})}]?:say)
same => n,Set(DB(test/count)=0)
same => n,Goto(2)
same => n(say),SayNumber(${COUNT})
same => n,Noop(${INC(COUNT)})
same => n,Set(DB(test/count)=${COUNT})
same => n,GoTo(say)

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

BLACKLIST

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

asterisk*CLI> database put blacklist 100 1


5. Aqui lo se hace es guardar el numero 100 en la lista negra. Ahora con la funcin BLACKLIST() se

Pg. 70
Telefona IP con Asterisk Administracin Avanzada

comprueba si el callerid de la persona que llama es parte de la lista negra:

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


same => n,Dial(sip/${EXTEN})
exten => bloqueado,1,Answer()
same => n,Playback(vm-goodbye)
same => n,Hangup()

6. Como se sabe el CallerId tiene nombre y nmero del llamante, y cualquiera de los dos puede ser
bloqueado en la lista negra. Ahora probar agregando el valor de un nombre:
asterisk*CLI> database put blacklist Juan 1
Si el telefono que llama tiene un callerid con nombre Juan tambien ser bloqueado.

Prctica 3.1.2: Aplicacin de AstDB

Realizar una aplicacin para consulta y registro de notas de estudiantes usando la DB


asterisk. Se presentan los diagramas de flujo de la aplicacin solicitada:

Funcin DB:
DB(familia/registro)
Seteo y borrado en el cli de asterisk:
database put familia registro valor
database del familia registro
Funciones tiles para la prctica:

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

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

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

Acciones:

Profesores:

Autenticar.

Pedir cdigo del alumno y validar (ver si existe).

Pedir nota del alumno y setear.

Alumnos:

Pedir codigo del alumno.

Confirmar nombre del alumno.

Informar de la nota.

Pg. 71
Telefona IP con Asterisk Administracin Avanzada

Profesores registro de notas Alumnos consulta de notas

Datos de trabajo:

Profesores
Alumnos
cedula profesor
cedula alumno 1016151413 Gustavo Gonsalez
1716151413 Pedro Perez 1015141312 Boris Borja
1715141312 Juan Jimenez 1014131211 Samir Sanchez
1714131211 Lizeth Lopez
1713121110 Maria Mueces
Contraseas profesores
Notas cedula contrasea
cedula nota 1016151413 012345
1716151413 1015141312 123456
1715141312 1014131211 234567
1714131211
1713121110

Pg. 72
Telefona IP con Asterisk Administracin Avanzada

3.2 Asterisk CDR


El registro detallado de llamadas (CDR por sus siglas en ingls) es la manera en que Asterisk registra, valga
la redundancia, toda la informacin concerniente a las llamadas realizadas en el sistema. Est informacin
tiene distintos propsitos, siendo el mas comn el de la tarifacin 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.27

3.2.1 Configuracin de CDR en PostgreSQL

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

1. Instalar las dependencias necesarias de la BD postgreSQL:


yum -y install postgresql-devel postgresql-server postgresql
2. Instalar pgadmin3 para administrar la base de datos (opcional):
yum -y install pgadmin3
3. Inicializar la base de datos postgres (se hace solo una vez):
/etc/init.d/postgresql initdb
4. Configurar el acceso a la base de datos en el fichero /var/lib/pgsql/data/pg_hba.conf, de la siguiente
manera:
host all all 127.0.0.1/32 trust
host all all 192.168.11.0/24 md5
host asteriskDB asterisk 127.0.0.1/32 md5
Tambin, editar el fichero /var/lib/pgsql/data/postgres.conf, colocando las siguientes lneas:
listen_addresses = '*'
port = 5432
5. Para terminar la configuracin del servidor de BD, iniciar el servicio postgres:
service postgresql start
6. Conectarse al cli de postgres, crear el usuario y la base de datos necesarios:
su postgres
$ createuser -s -D -R -l -P -e asterisk
$ createdb -O asterisk -e asteriskDB
$ exit
7. 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:

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

Pg. 73
Telefona IP con Asterisk Administracin Avanzada

/*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
);
8. Cargar la estructura de la tabla a la BD:
# pgsql -U asterisk -d asteriskDB -h localhost -W < cdr_pgsql.sql
9. 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.

10. 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=4st3r1sk*
user=asterisk
table=cdr
11. Reiniciar asterisk y conectarse mediante una herramienta para visualizar los datos, como pgadmin,
colocando los datos de acceso configurados previamente:

12. Empezar a realizar llamadas y observar como se guarda la informacin de cada llamada realizada.
Verificar cada campo y analizar la informacin que se obtiene desde el CDR. Revisar la aplicacin
NoCDR y la funcin CDR del dialplan. En el cli de asterisk, revisar los comandos presentes para la
administracin de las conferencias.

Pg. 74
Telefona IP con Asterisk Administracin Avanzada

3.3 AGI: Asterisk Gateway Interface


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

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

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

Normalmente cuando se usa un AGI, el intercambio de informacin se realiza a travs de los descriptores
STDIN/STDOUT.

Tipos de AGI:

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

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

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


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

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

Fast AGI: Similar al AGI anterior, solamente que ahora, el AGI est ubicado en un servidor distinto a
asterisk, y su llamada se realiza mediante el URL completo. El flujo de datos usa el protocolo TCP, puerto
4573. 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.

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.

Pg. 75
Telefona IP con Asterisk Administracin Avanzada

Editorial O'reilly.

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

1. Se descargarn e instalarn un par de AGIs programadas, 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/

2. Se debe cumplir los requisitos previos: tener instalado perl, flac y mpg123:
yum install flac perl-CGI perl-libwww-perl perl-IO-Socket-SSL
yum install http://pkgs.repoforge.org/mpg123/mpg123-1.13.4-1.el6.rf.x86_64.rpm

3. 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 sintetizar,[lenguage,tecla_interrupcin])
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.

4. Usar el siguiente dialplan de ejemplo:


[agi-google]
;;Simple ASR & TTS
exten => 1234,1,Answer()
same => n(inicio),Agi(googletts.agi,Despus del tono diga una frase,es)
same => n,Agi(speech-recog.agi,es-EC,10,*)
same => n,Verbose(0,El estado es: ${status})
same => n,Agi(googletts.agi,Usted dijo: ${utterance},es)
same => n,Agi(googletts.agi,La confiabilidad del reconocimiento es: ${confidence},es)
same => n,Agi(googletts.agi,Para repetir presione cualquier tecla,es)
same => n,Read(REPETIR,beep,1,,1,3)
same => n,GotoIf($[${ISNULL(${REPETIR})}]?:inicio)
same => n,Hangup()

Pg. 76
Telefona IP con Asterisk Administracin Avanzada

3.5 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.5.1: Trabajando con AMI

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

[general]
enabled=yes
webenabled=yes
bindaddr=127.0.0.1
[curso_asterisk]
secret=4st3r1sk
read=system,call,agent,user,config,dtmf,reporting,cdr,dialplan
write=system,call,agent,user,config,command,reporting,originate

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

Con la gua del instructur, instalar el software Asterisk Channels Live:

http://www.astchannelslive.com/

Pg. 77
Telefona IP con Asterisk Administracin Avanzada

CAPTULO 4
SEGURIDAD EN ASTERISK

4.1 Logging

Las acciones relacionadas con el funcionamiento de asterisk se guardan en el directorio /var/log/asterisk.


Existen diversos niveles de login, relacionados con el nivel de informacin que se presentar para cada
nivel. Tanto los ficheros de log como los niveles de logging pueden ser configurados en el fichero
/etc/asterisk/logger.conf. Si se cambia la configuracin, se debe recargar el modulo logger de asterisk.

4.2 Seguridad: Reglas de oro28

Hay una reglas de oro que se necesita seguir en la configuracin de Asterisk. Estas reglas permiten

mejorar la seguridad de la PBX y evitar ataques exitosos:

1. Utilizar siempre contraseas bastantes largas y difciles de memorizar.

2. No utilizar la misma contrasea para todas las extensiones

3. No aceptar llamadas entrantes de invitados. Esto se configura con el parmetro allowguest=no en la


parte general del sip.conf. Si se decide aceptar llamadas entrantes de invitados (sin autentificacin),
el contexto definido en la parte general del sip.conf no debe permitir el acceso a troncales SIP y/o
lineas telefnicas tradicionales.

4. Configurar en la parte general del sip.conf el parmetro alwaysauthreject=yes. De esta forma


cualquier intento de registro a extensiones existentes en la centralita, recibir como respuesta que
la extensin no existe, evitando dar trazas al atacante

5. No permitir el acceso al AMI de Asterisk desde remoto (teniendo cerrado el puerto 5038 TCP del
servidor Linux. En el caso que se necesite utilizar el AMI desde remoto, configurar Iptables de modo
que acepte el trafico solo desde determinadas direcciones IP. Un ejemplo es esta linea:
-A INPUT -p tcp -m state --state NEW -m tcp --dport 5038 -s 192.168.100.200 -j ACCEPT
Con esta linea se podr conectar desde remoto al AMI de Asterisk solamente la maquina con IP
192.168.100.200. Otra forma es utilizar el protocolo TLS.

6. Utilizar nmeros o nombres de extensiones largos y no fcilmente memorizables.

7. Utilizar las funciones GROUP y GRUP_COUNT para limitar las llamadas salientes de las
extensiones.

4.3 FAIL2BAN

Fail2Ban es un programa que lee los registros de Asterisk del archivo /var/log/asterisk/security y si hay un
numero determinado de intentos de conexin sin xito, bloquea la IP de donde se han originado,
interactuando con el firewall iptables.

28 Libro Asterisk 1.8.X v. 2.0 , Pag. 428, Andrea Sannuci

Pg. 78
Telefona IP con Asterisk Administracin Avanzada

Prctica 4.3.1 Instalacin y configuracin de fail2ban

1. Para instalar fail2ban se debe tener configurado el repositorio epel. Una vez instalado el mismo, se
procede a la instalacin de fail2ban mediante el comando:
yum -y install fail2ban
2. Ingresar al directorio /etc/fail2ban, donde se encuentran los archivos de configuracin, filtros y acciones
de fail2ban.

3. Editar el archivo jail.conf , comentar todos los contextos relacionados con asterisk y colocar al final del
archivo las siguientes lneas:
[asterisk-iptables]
enabled = true
filter = asterisk
action = iptables-allports[name=ASTERISK, protocol=all]
sendmail-whois[name=ASTERISK, dest=example@example.com, sender=root]
logpath = /var/log/asterisk/security
maxretry = 3
bantime = 259200
4. Ingresar al directorio de configuracin de asterisk y editar el archivo logger.conf . Las siguientes lneas
deben ser descomentadas:
;dateformat=%F %T ;ISO 8601 date format
;security => security
5. En la consola de asterisk, recargar el modulo logger
asterisk*CLI> module reload logger
6. Configurar e iniciar el servicio fail2ban:
chkconfig fail2ban on
service fail2ban start
7. Probar a registrar una extensin con datos erroneos, comprobar que su direccin IP fue baneada con el
comando:
iptables -L | less

Pg. 79
Telefona IP con Asterisk Administracin Avanzada

CAPTULO 5
ASTERISK GRFICO

5.1 FreePBX
FreePBX ofrece un interfaz GUI Html (interfaz grfica de usuario) para administracin de una PBX basada
en Asterisk. Tambin est basado en la licencia GPL.

Permite configurar fcilmente un sistema Asterisk, cubriendo los requisitos tanto de pequeas como de
grandes empresas. Puede mantener las bases de datos de usuarios y extensiones, as como otras las
funciones de valor aadido.

Prctica 5.1.1: Instalacin de AsteriskNOW con FreePBX

1. Descargar la imagen ISO file desde

http://asterisk.org/downloads/asterisknow

2. Grabe la imagen ISO en un CD o DVD. Siga los pasos indicados en la prctica 1.1.1

3. Una vez terminada la instalacin, se reiniciar el equipo y arrancara hasta la pantalla de login. Con las
credenciales adecuadas iniciar sesin en el equipo, el cual presentar la direccin IP que ha adquirido a
travs de DHCP. Caso contrario se debe configurar una direccin IP.

4. Ingrese desde un navegador web a la direccin configurada. La primera vez se mostrar la pantalla de
configuracin de usuario, rellene los campos con la informacin requerida:

5. Una vez realizada la configuracin de cuenta, se ha terminado de instalar correctamente AsteriskNOW /


FreePBX.

Pg. 80
Telefona IP con Asterisk Administracin Avanzada

BIBLIOGRAFA
Telefona IP con Asterisk. Sidevox.

http://ofps.oreilly.com/titles/9780596517342/AGI.html

http://10000horas.com/asterisk/tag/google-asr/

http://www.ardumania.es/2011/11/reconocimiento-de-voz-de-google/

http://www.asteriskguide.com/mediawiki/index.php/Extending_Asterisk_with_AMI/AG

Libro Asterisk 1.8.X v1.0 . VozToVoice

www.voztovoice.org

www.sinologic.net

Asterisk The Definitive Guide 4th edition. O'reilly.

Pg. 81

Вам также может понравиться