telefonia ip con asterisk -- administrador avanzado

77
Telefonía IP con Asterisk Administrador Avanzado Eliécer Tatés Andrés Fuentes Asterisk: Administración avanzada 1

Upload: argenis-nolasco

Post on 18-Feb-2016

94 views

Category:

Documents


5 download

DESCRIPTION

Administrador en Asterisk

TRANSCRIPT

Page 1: Telefonia IP Con Asterisk -- Administrador Avanzado

Telefonía IPcon Asterisk

AdministradorAvanzado

Eliécer TatésAndrés Fuentes

Asterisk: Administración avanzada 1

Page 2: Telefonia IP Con Asterisk -- Administrador Avanzado

Versión 1.1

Asterisk: Administración avanzada 2

Page 3: Telefonia IP Con Asterisk -- Administrador Avanzado

CAPÍTULO 1

ASTERISK: PRIMEROS PASOS

1.1 INSTALACIÓN DE LINUX Y COMANDOS BÁSICOS

Práctica 1.1.1: Instalación del sistema operativo GNU/Linux.

El objetivo de la práctica es adquirir los conocimientos suficientes para reparar un servidor para el

funcionamiento de Asterisk como servidor de comunicaciones.

Instrucciónes:

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

2. Insertar el (primer) CD o DVD de instalación 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 instalación gráfica presionamos la tecla Enter.

6. Aparece una opción para revisar los medios (CD /DVD) de instalación. Si Ud. Está seguro de que estos

medios funcionan adecuadamente, puede prescindir (Skip) de la verificación.

7. En la pantalla inicial de instalación gráfica de Centos 6, se da clic en Next.

8. Escoja el lenguaje para el proceso de instalación (Recomendado: Inglés) y presione Next.

9. Escoja el idioma en el que trabaja su teclado (Español) y clic en Next.

10. En la sección de particionamiento, escoja la opción para implementar un esquema personalizado

(customized) y clic en Next.

11. En la nueva pantalla y de ser posible cree tres particiones una para /boot de 100 MB, una para swap,

una para el sistema de archivos / , una para /home. Los tamaños serán escogidos enbase a las

indicaciones del instructor. Click en next.

12. Escoja la instalación de GRUB para el arranque. Clic en Next.

13. En la sección de dispositivos de red, configúrelos, su instructor le dirá si usar DHCP o no. Si no, él le

proveerá de una Dirección IP, Máscara de Red, Red y dirección de Broadcast, así como el Hostname,

Gateway y direcciones de DNS. Ingrese estos valores, revíselos y de Clic en Next.

14. No seleccione ningún lenguaje adicional aparte del Inglés predeterminado (English (USA)). Clic en

Next.

15. Escoja la opción correspondiente de Huso Horario de acuerdo a su situación geográfica en el mapa

que se le presenta. Clic en Next.

16. Designe una contraseña para el usuario root, confírmela y clic en Next.

17. Ahora escoja categoría por categoría cada uno de los siguientes paquetes (los que no se mencionan,

deshabilitarlos)

Asterisk: Administración avanzada 3

Page 4: Telefonia IP Con Asterisk -- Administrador Avanzado

Desktops

• X Window System

• GNOME Desktop Environment

Applications

• Editors

Servers

• Server Configuration Tools

• Network Servers

Development

• Development Tools (seleccionar todos)

• X Software Development

System

• Administration Tools

• System Tools

18. Clic en Next para que de inicio la instalación del sistema operativo. Este proceso tomará alrededor de

30 minutos, dependiendo de las características técnicas de los equipos.

19. En el momento en que aparece la pantalla de instalación completa retire el CD/DVD del CD ROM y de

clic en Reboot, para reiniciar el sistema.

20. Ahora es necesario completar algunos pasos post-instalación, de Clic en Next.

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

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

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

24. Agregue un usuario y contraseña en referencia a su nombre

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

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

Si desea más información, puede consultar el siguiente link:

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

Práctica 1.1.2: Trabajo con la consola de linux, comandos básicos.

Con esta práctica el alumno sera capaz de manejar adecuadamente la consola o terminal de linux, poder

moverse entre directorios, crear ficheros y carpetas, copiar, mover o borrar estos últimos. De esta

manera se proveerá al alumno la habilidad suficiente para desenvolverse en la terminal.

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

Asterisk: Administración avanzada 4

Page 5: Telefonia IP Con Asterisk -- Administrador Avanzado

de los siguientes comandos1:

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

"ls" - Lista el contenido de un directorio.

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

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

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

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

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

directorio lpic: cd lpic

"mkdir" - Se utiliza para crear un directorio.

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

"cp" - Se utiliza para copiar archivos.

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

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

"mv" - Se utiliza para mover archivos.

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

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

"rm" - Se utiliza para eliminar archivos.

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

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

crear un archivo.

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

cambiara la hora del ultimo acceso al archivo

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

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

pantalla a la vez

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

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

pantalla a la vez.

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

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

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

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

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

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

Asterisk: Administración avanzada 5

Page 6: Telefonia IP Con Asterisk -- Administrador Avanzado

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

Práctica 1.1.3: Manejo del editor vim

Para la configuración 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 más usados son los siguientes:

Modo ejecución:

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

avanzados en vim.

Modo edición:

Es el modo de edición. 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 sólo 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. Asegúrese 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 fácil de llenar un par de pantallas de información necesaria para un uso

posterior. Esta es una sesión de entrenamiento para el uso de vim.

1 uno

2 dos

3 tres

A alfa

B bravo

C charlie

D delta

E eco

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

Asterisk: Administración avanzada 6

Page 7: Telefonia IP Con Asterisk -- Administrador Avanzado

F fox

G golf

H hotel

I indian

J july

K kilo

2. Regrese al modo comando. Guarde y salga del archivo. Note que tan pronto presione los dos puntos

(:), estos aparecen bajo la última línea de su área de entrada. Una vez que el búfer esté vacío y el

archivo cerrado, Ud ve un mensaje con el número de líneas y caracteres en el archivo.

Teclas de movimiento del cursor

3. Abra de nuevo el archivo vitest. Note que la última línea en la pantalla muestra el nombre del archivo

y el número de caracteres.

4. Utilizando las teclas <h>, <j>, <k> y <l>, practique moviéndose a través del archivo.

5. Usando los comandos vim apropiados para moverse a través del texto:

Muévase una página adelante <Ctrl-f>

Muévase una página atrás <Ctrl-b>

Mueva al cursor a la primera línea en la pantalla H

Mueva al cursor a la última línea en el archivo G

Mueva el cursor a la primera línea en el archivo :1 <enter>

Mueva el cursor a la línea 5 del archivo :5 <enter>

Mueva el cursor al final de la línea $

Mueva el cursor al final de la línea 0

6. Cambie el archivo vitest de manera que después de cada letra del alfabeto, un primer nombre común

sea agregado y que inicie con esa letra. Asegúrese de usar distintos métodos para conmutar del

modo de comandos al modo de edición (insert). El archivo debería verse más o menos así:

A alfa Ani

B bravo Ben

C charlie Carlos

Búsqueda global y reemplazo

7. En el modo ejecución 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 número que indica la cantidad de lineas con

las que el comando respectivo trabajará.

Asterisk: Administración avanzada 7

Page 8: Telefonia IP Con Asterisk -- Administrador Avanzado

1.2 GENERALIDADES DE LA TELEFONÍA TRADICIONAL Y TELEFONÍA IP

Telefonía Tradicional:

• La primera transmisión de voz se hizo en 1876 por Graham Bell.

• Se usaban líneas dedicadas entre terminales.

• Los primeros conmutadores eran operadores telefónicos que enlazaban físicamente la línea

origen y la línea destino.

Conceptos básicos:

• Red Telefónica Pública Conmutada (Public Switched Telephone Network).

• Conmutación de circuitos.

• Todo lo que escuchamos son señales analógicas, muy susceptibles al ruido.

• Cuando se amplifica una señal analógica se amplifica también el ruido que lleve incorporado.

• Las señales digitales pueden ser reconstruidas en cada amplificador

Telefonía Digital:

• El loop local es lo único que existe hasta ahora de la telefonía analógica.

• La señales analógicas son susceptibles a interferencia, estática y demás efectos no deseados.

• La intención es enviar información de la señal para que en el destino sea reconstruida.

• Mediante algoritmos de detección y corrección de errores se garantiza que en el destino se tenga

información igual a la que se envió.

Señalización:

Señalización Usuario a Red:

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

• El método más usado es DTMF (Dual Tone Multi Frequency).

• Es una señalización “inband” (en banda).

Señalización red a red

• Comunicación entre switches telefónicos.

• T1/E1 sobre par trenzado

• T1: transmisión digital a 1.544 Mbps, usado en Norte América y Japón.

• E1: trasnmisión digital a 2.048-Mbps, usado en Europa.

• T3/E3, T4 sobre cable coaxial

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

Asterisk: Administración avanzada 8

Page 9: Telefonia IP Con Asterisk -- Administrador Avanzado

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

Métodos de Acceso:

BRI (Basic Rate Interface)

• Acceso básico diseñado 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 América

PRI (Primary Rate Interface)

• Para conexiones distantes, con mayor ancho de banda.

• T1: 23 canales B y un D para señalización (64 Kbps ) 1.544 Mbps.

• E1: 30 canales B y un D para señalización (64 Kbps ) 2.048 Mbps. Existe un último canal que sirve

para sincronización.

• En nuestro país, cuando se necesitan hasta 30 líneas telefónicas es muy común solicitar un E1 a

las operadoras telefónicas.

Asterisk: Administración avanzada 9

Page 10: Telefonia IP Con Asterisk -- Administrador Avanzado

1.3 VoIP y TELEFONÍA IP

El término Voz sobre IP concuerda con la manera de trasmitir conversaciones a través de una red basada

en protocolo IP.

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

comunicaciones telefónicas que usan Voz sobre IP. La Telefonía IP incorpora algunas consideraciones:

Latencia y retraso, Jitter, codificación y compresión de voz, eco, conversión análogo digital, protocolos de

transporte, diseño de plan de numeración, entre otros.

Telefonía IP

Ventajas

• Aprovecha la infraestructura de red existente.

• La voz se convierte en bits de información que pueden ser encriptados para garantizar seguridad.

• Posibilidad de hacer llamadas a través del Internet.

• Permite extender la PSTN hasta lugares muy alejados.

• Estándares mundialmente aceptados.

• Más 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 conexión.

• En ocasiones se necesita equipos que den prioridad al tráfico de voz por ser en tiempo real,

sobretodo en conexiones inalámbricas.

• Sistema que no ha sido completamente regulado en nuestro país.

Asterisk: Administración avanzada 10

Page 11: Telefonia IP Con Asterisk -- Administrador Avanzado

1.4 ASTERISK

Asterisk es un software PBX que usa el concepto de software libre (GPL). Digium, empresa que promueve

Asterisk, invierte en ambos aspectos: el desarrollo de código fuente y en hardware de telefonía de bajo

costo que funciona con Asterisk. Asterisk corre en plataformas Linux y otras plataformas Unix con o sin

hardware conectando a la red pública de telefonía (PSTN Public Switched Telephone Network). Asterisk

permite conectividad en tiempo real entre las redes PSTN y redes VoIP.

Asterisk incluye muchos recursos que solo eran encontrados en sistemas de mensajeria unificada

propietarios y costosos, se mencionan los más comunes:

• Registro (Log) de llamadas

• Buzón de voz

• Grabación de llamadas

• Desvío de llamadas

• Trasferencia de llamadas

• Salas de Conferencias

• Música en espera

• Gestión de colas (call center)

• Integración con interfaces de telefonía tradicional a través de tarjetas o gateways FXO, FXS, o

digitales (E1, T1, BRI entre otros)

• IVR

• Integración con sistemas de tarifación.

• Integración con sistemas de síntesis de voz y reconocimiento del habla.

Lo más interesante de asterisk es su compatibilidad con múltiples protocolos VoIP como: SIP (Session

Initiation Protocol), H.323, IAX2 (Inter Asterisk eXchange), MGCP (Media Gateway Control Protocol), SCCP

(Skinny Client Control Protocol), entre otros. con la PSTN (HARDWARE)

Versiones de Asterisk:

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

Las versiones estandar son mantenidas por un corto periodo de tiempo: 1 año de soporte completo y 1

año adicional en el cual se proveen actualizaciones de seguridad

Las versiones LTS tienen un soporte completo por un período de 4 años más 1 año adicional para

actualizaciones de seguridad.

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

Versión TipoFecha de

liberación

Actualizaciones

de seguridad

End Of

Life EOL

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

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

Asterisk: Administración avanzada 11

Page 12: Telefonia IP Con Asterisk -- Administrador Avanzado

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

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

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

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

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

Escenarios de uso:

PBX IP PURA:

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

INTEGRADO CON PBX HEREDADA:

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

costoso que actualizar toda la PBX a IP.

Asterisk: Administración avanzada 12

Page 13: Telefonia IP Con Asterisk -- Administrador Avanzado

INTERCONEXIÓN DE OFICINAS REMOTAS:

Asterisk posee funcionalidad de un “media gateway”, es decir, puede convertir las señales analógicas o

digitales de una PBX tradicional o de los teléfonos de los usuarios en voz sobre IP y transmitir por la red

corporativa de datos o internet. La convergencia propicia la reducción del número 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:

Además de las funciones embebidas que asterisk incorpora, se puede hacer uso de herramientas

adicionales como AGI o AMI para proveer soluciones a medida (aplicaciones informáticas) mediante

lenguajes de programación y bases de datos, satisfaciendo ciertas necesidades específicas del cliente.

Esto convierte a Asterisk en un completo servidor de comunicaciones.

Asterisk: Administración avanzada 13

Page 14: Telefonia IP Con Asterisk -- Administrador Avanzado

MEDIA GATEWAY:

Un media gateway permite convertir entre protocolos de telefonía tradicional y telefonía IP. Aprovechando

de esta manera toda la infraestructura de telefonía que se pueda tener y permitiendo la convergencia e

integración entre diferentes tecnologias de comunicaciones.

CONTACT CENTER:

Este escenario es bastante común en escenarios de negocio de ventas por teléfono o atención 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 marcación de campañas, marcación

automática, medición de calidad de servicio entre otros.

Asterisk: Administración avanzada 14

Page 15: Telefonia IP Con Asterisk -- Administrador Avanzado

1.5 Hardware para Asterisk

Tarjetas para telefonía analógica:

Foreign eXchange Station (FXS): Emite señalización (voltaje), permite conectar teléfonos,

generalmente de color verde.

Foreign eXchange Office (FXO): Recibe señalización (voltaje), permite conectar líneas telefónicas,

generalmente de color rojo.

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

Presentación: 4, 8, 16, 24 puertos FXO – FXS (pueden ser mixtos)

Tarjetas para Telefonía Digital:

Soportan estándares como E1, T1, BRI, ISDN.

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

Presentación: 1, 2, 4, 8 puertos.

Gateways Analógicos o Digitales:

Similares a las tarjetas, puertos FXO, FXS o E1, T1. La interconexión con asterisk se hace através de IP

mediante protocolo SIP.

Asterisk: Administración avanzada 15

Page 16: Telefonia IP Con Asterisk -- Administrador Avanzado

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

ATA's: Adaptadores para telefonía analógica. 1 o 2 puertos FXS

Teléfonos IP:

Marcas: Grandstream, Astra, Polycom, etc.

Presentación: Destinados a distintos tipos de usuario, admiten protocolo SIP, IAX2, H.323.

Asterisk: Administración avanzada 16

Page 17: Telefonia IP Con Asterisk -- Administrador Avanzado

1.6 INSTALACIÓN 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 método, nos aseguramos de tener una versión de asterisk estable para el sistema

operativo elegido, además de facilitar el proceso de actualización del programa. Sin embargo, es posible

que al momento de configurar una aplicación específica se requiera un módulo adicional para que

funcione por lo cual hay que instalar dicha función si no está presente.

1. Descargar e instalar el repositorio epel para centos, la versión adecuada del repositorio puede

encuntrarse en http://fedoraproject.org/wiki/EPEL

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

2. Verificar que los paquetes asterisk están presentes en el repositorio:

# yum search asterisk

3. Instalar los paquetes necesarios:

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

4. Iniciar el servicio asterisk:

# service asterisk start

5. Contectarse a la consola asterisk:

# asterisk ­r

Instalacion de asterisk mediante compilación:

Al instalar asterisk mediante este método, se tiene un control más estricto sobre todas las herramientas o

módulo que se instalan, eligiendo solamente lo que se adecue nuestras necesidades y pudiendo

personalizar la instalación poniendo o quitando componentes de asterisk.

Como se observó en la parte 1.4 donde se describieron las características de Asterisk así como los

escenarios posibles de su aplicación, Asterisk además de funcionar como una PBX tiene más aplicaciones

y por lo tanto al momento de su intalación debemos tener en cuenta que nuestro S.O disponga de

software como: dahdi, drivers ODBC, bases de datos SQL, codecs, entre otros.

Un requisito básico para realizar una correcta instalación de Asterisk es instalar primero DAHDI: acrónimo

de “Digium Asterisk Hardware Device Interface” (conocido antes como Zaptel) que es el software que

asterisk usa para gestionar hardware de telefonía. Es recomendable instalar este software aun si no se

tiene ningún hardware de este tipo instalado, ya que DAHDI es una dependencia requerida para construir

el módulo de timing (relój del sistema asterisk) llamado res_timing_dahdi, módulo que es usado para

aplicaciones como MeetMe() o troncales IAX las cuales requieren un preciso control y sincronización de

tiempo.

Asterisk: Administración avanzada 17

Page 18: Telefonia IP Con Asterisk -- Administrador Avanzado

Práctica 1.6.2: Instalación de dahdi

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

computador.

2. Trabajar sobre el directorio /usr/src

# cd /usr/src

3. Descargar las fuentes de dahdi desde www.asterisk.org, además de herramientas adicionales como

libpri (en el caso de que se esté configurando E1's)

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

4. Descomprimir los paquetes y proceder a su instalación:

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

# tar xvfz libpri­1.4.12.tar.gz# cd libpri­1.4.12# make all# make install

Dahdi-linux-complete: Drivers de hardware y herramientas de configuración para Dahdi.

# tar xvfz dahdi­linux­complete­2.6.1+2.6.1.tar.gz# cd dahdi­linux­complete­2.6.1+2.6.1# make all# make install# make config

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

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

6. Iniciar el servicio dahdi:

# service dahdi start

En una práctica posterior se realizará la configuración de canales dahdi así como una revisión de las

opciones de configuración de esta herramienta.

Practica 1.6.3: Instalacion de asterisk mediante compilación:

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

# cd /usr/src/

2. Descargar una versión estable de asterisk desde www.asterisk.org

# wget http://downloads.asterisk.org/pub/telephony/asterisk/releases/asterisk­1.8.14.0.tar.gz

3. Proceder a descomprimir y compilar el programa

# tar xvfz asterisk­1.8.14.0.tar.gz# cd  asterisk­1.8.14.0# ./configure# make menuselect# make

Asterisk: Administración avanzada 18

Page 19: Telefonia IP Con Asterisk -- Administrador Avanzado

# make install# make config# make samples

4. Iniciar el servicio asterisk:

# service asterisk start

5. Contectarse a la consola asterisk:

# asterisk ­r

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

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

7. Para tener mayor información sobre los eventos que cursan por Asterisk, se puede iniciar la conexión

al CLI con el argumento “v”. El número de “v”'s inidicará el nivel de invormación que se quiere

mostrar, ejemplo:

# asterisk ­rvvvv

Asterisk: Administración avanzada 19

Page 20: Telefonia IP Con Asterisk -- Administrador Avanzado

1.7 ASTERISK FIRST LOOK

Una vez realizada la instalación de asterisk se aprenderán algunos comandos básicos además de la

estructura de directorios que usa el programa. Para esta práctica hay que conectarse primero al CLI

(consola de asterisk) con el comando:

# asterisk ­r

1. Observar la versión, licencia y garantia de asterisk. Además ver la ayuda de los comandos disponibles

en el CLI:

asterisk*CLI> core show versionasterisk*CLI> core show licenceasterisk*CLI> core show warrantyasterisk*CLI> core show help

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

asterisk*CLI> core restart nowasterisk*CLI> core restart when convenientasterisk*CLI> core restart gracefully

asterisk*CLI> core stop nowasterisk*CLI> core stop when convenientasterisk*CLI> core stop gracefully

asterisk*CLI> core reloadasterisk*CLI> module reload

asterisk*CLI> core abort shutdown

3. Observar los archivos de configuración:

# cd /etc/asterisk 

4. Ingresar en el directorio en donde se almacenan los módulos de Asterisk, los cuales sirven para

añadir o quitar funcionalidades al sistema:

# cd /usr/lib/asterisk/modules 

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

encuentran los sonidos, musica en espera, agis, claves de encriptación, etc.:

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

6. Ingresar en el directorio de spools y en sus subdirectorios, el cual almacena los mensajes grabados en

el buzón de voz, las conferencias grabadas, etc.

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

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

# cd /var/log/asterisk 

Asterisk: Administración avanzada 20

Page 21: Telefonia IP Con Asterisk -- Administrador Avanzado

1.8 CÓDECS DE AUDIO3:

Un códec de audio es un algoritmo escrito en software, el cual permite la digitalización, compresión y

adición de caracteristicas como adaptación a las condiciones de la red (para transmisión), nivel de ruido,

silencio y tolerancia a latencia y microcortes, entre otras; para su transmisión y recepción entre

terminales que establezcan una comunicación de voz o video. Las principales características de un códec

son su sample rating (muestras por segundo) y su bitrate (velocidad de transmición). Entre los principales

códecs de audio que ásterisk soporta están los siguientes4:

Nombre Descripción Bit rate (kb/s)

Sampling rate (kHz)

Notas

G.711 Pulse code modulation (PCM) 64 8Tiene dos versiones u-law (US, Japan) y a-law (Europa) para muestrear la señal

G.722 7 kHz audio-coding within 64 kbit/s

64 16 Divide los 16 Khz en dos bandas cada una usando ADPCM

G.722.1Codificación a 24 y 32 kbit/s para sistemas con baja perdida de paquetes

24/32 16 Códec para audio HD.

G.723.1

Dual rate speech coder for multimedia communications transmitting at 5.3 and 6.3 kbit/s

5.6/6.3 8

Parte de H.324 video conferencing. Codifica la señal usando linear predictive analysis-by-synthesis coding. PROPIETARIO

G.72640, 32, 24, 16 kbit/s adaptive differential pulse code modulation (ADPCM)

16/24/32/40 8 ADPCM; reemplaza a G.721 y G.723.

G.729

Coding of speech at 8 kbit/s using conjugate-structure algebraic-code-excited linear-prediction (CS-ACELP)

8 8Bajo retardo (15 ms). Existen algunas revisiones del códec (g729a, g729b, etc). PROPIETARIO

GSM 06.10 RegularPulse Excitation Long-Term Predictor (RPE-LTP)

13 8 Usado por la tecnología celular GSM

Speex5 Usa el motor de compresión vorbis. 8, 16, 32

2.15-24.6 (NB)4-44.2 (WB)

Códec configurable para aceptar determinados bitrates y calidad de audio. LIBRE.

SILK Uncompressed audio data samples

De 6 a 40 kbit/s

Variable Usado por skype

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 están 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 página se descarga el

binario adecuado de acuerdo al tipo de procesador del servidor y versión de Asterisk instalada. Por

ejemplo, para un procesador de 64 bits y versión de Asterisk 1.8 los binarios a descargar serían:

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

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

2. Copiar los nuevos módulos al directorio: /usr/lib/asterisk/modules y reiniciar asterisk.

3. Conectarse al CLI y correr el comando:

asterisk*CLI> core show translation

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

Asterisk: Administración avanzada 21

Page 22: Telefonia IP Con Asterisk -- Administrador Avanzado

1.9 PROTOCOLO SIP

El protocolo SIP es un protocolo de señalización (no transporta datos) orientado al establecimiento de

sesiones multimedia (como video, audio, mensajería instantanea, entre otras) que permite:

• Localizar un usuario

• Contactar un usuario para determinar su voluntad de establecer una sesión

• Negociación de los media (audio/video) que se utilizarán a lo largo de la sesión

• Modificar una sesión establecida

• Terminar una sesión 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 envían son una mezcla entre el protocolo HTTP (Hypertext Transfer Protocol) y el

protocolo SMTP (Simple Mail Transfer Protocol)6.

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

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

Métodos/solicitudes y respuestas SIP7:

Dentro del protocolo SIP existen los métodos, que representan las distintas solicitudes que un dispositivo

puede enviar a otro. Así mismo existen las correspondientes respuestas a dichas solicitudes. Se detallan a

continuación:

Solicitudes SIP:

Hay seis tipos de métodos / solicitudes:

INVITE Establece una sesión

ACK Confirma una solicitud INVITE

BYE Finaliza una sesión

CANCEL Cancela el establecimiento de una sesión

REGISTER Comunica la localización de usuario (nombre de equipo, IP)

OPTIONS Comunica la información acerca de las capacidades de envío y recepción de teléfonos SIP

6 Libro Asterisk 1.8.X v1.0 , Pag. 66, Andrea Sannuci7 http://www.3cx.es/voip-sip/sip-methods.php

Asterisk: Administración avanzada 22

Page 23: Telefonia IP Con Asterisk -- Administrador Avanzado

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 teléfono sonando

2xx respuestas de éxito

3xx respuestas de redirección

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 telefónicos.

La información que se brinda al momento del registro entre otras es:

• nombre de usuario

• dirección ip

• tiempo de validez del registro

Fichero de configuración sip.conf8

En el fichero sip.conf se colocan las opciones que serán usadas cuando se establezcan llamadas a través

del protocolo SIP, además se crean los canales SIP.

Canal: Es el medio lógico por el cual se emite una llamada entrante o saliente. Por defecto Asterisk

soporta una serie de canales, los más importantes son: SIP, IAX y DAHDI. Un canal estará siempre

asociado a un terminal telefónico, a una conexión de un proveedor de telefonía o a un servidor de

telefonía.

El archivo sip.conf está estructurado en tres bloques:

• Una parte general donde se define la configuración global del protocolo SIP. Al momento de

configurar una extensión o una troncal, si no se definen algunos parámetros, estos serán tomados

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

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

Asterisk .

• Una parte final donde se configuran las extensiones internas, las troncales y las conexiones a

otros servidores Asterisk.

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

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

Asterisk: Administración avanzada 23

Page 24: Telefonia IP Con Asterisk -- Administrador Avanzado

Parámetro Descripción

[general] Etiqueta que indica el comienzo de configuración general.

context=default Indica el contexto donde llegarán por defecto las llamadas no autenticadas si allowguest=yes

udpbindaddr=0.0.0.0:5060

Es la dirección IP y el puerto donde Asterisk se pondrá a la escucha para las señalización SIP utilizando el protocolo UDP. Como desde la versión 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 dirección

IPv4 indicada .2. 2600:3c00::f03c:91ff:fedf:a455 - Asterisk aceptará conexiones solamente si

enviadas a la dirección 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 .

;tcpbindaddr=0.0.0.0:5060

Es la dirección IP y el puerto donde Asterisk se pondrá a la escucha para las señalización SIP utilizando el protocolo TCP. Como para el protocolo UDP es posible 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.

tcpenable=noDesde la versión 1.6 es posible configurar Asterisk para que permita la señalización SIP sobre el protocolo TCP.

transport=udp Desde la version 1.8 este parámetro indica que protocolo de transporte se usará en las llamadas, valores: udp,tcp

useragent=asterisk-#PCAsterisk se presentará con este nombre al momento de comunicarse con otros servidores o proveedores SIP.

realm=#PC.asterisk.testSi al servidor es asociado un dominio registrado, se puede definir este parámetro para que la autentificación se haga utilizando ese nombre de dominio (digest authentication RFC2617).

srvlookup=yesPermite hacer búsquedas de registros DNS SRV basadas en los nombres de dominio para llamadas SIP salientes del tipo: SIP/usuario@dominio. Asterisk hace esta búsqueda limitándose 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.

directmedia=noSe permite el flujo media directo (audio mediante el protocolo RTP) entre los terminales. El flujo directo solo es posible cuando los terminales no se encuentran detrás de un NAT . Valores: yes, no

dtmfmode=rfc2833

Protocolo para el envío de los DTMF (Dual-Tone Multi- Frequency). Son los tonos que se generan cuando se presionan las teclas del teléfono. Valor: rfc2833 Otro valor bastante común es inband. Con inband los tonos se envían en el flujo audio (protocolo RTP). Inband no funciona con el codec audio G729 .

language=es El idioma predefinido para los archivos de audio.

qualify=yesMediante este paramentro, Asterisk enviará un paquete SIP OPTIONS regularmente para chequear si el terminal está en linea.

qualifyfreq=60

Cada cuantos segundos enviar un paquete OPTIONS al terminal registrado en Asterisk. Esto permite saber si al terminal es alcanzable. El método OPTIONS del protocolo SIP se utiliza también para conocer los métodos disponible en un determinado cliente.

allowtransfer=yesEn casi todos los teléfonos SIP, a lo largo de una llamada, es posible presionar un botón para transferirla a otra extensión. Este parámetro define si Asterisk aceptará este tipo de solicitudes.

allowguest=noNo = no se permiten llamadas entrantes (INVITE) de usuarios no autenticados (aumenta la seguridad de Asterisk) .Yes = se permiten llamadas entrantes (INVITE) de usuarios no autenticados .

alwaysauthreject=yesyes=cuando un INVITE o un REGISTER es rechazado por Asterisk, en lugar de enviar el verdadero motivo del rechazo contestará siempre con un 401 Unauthorized no permitiendo dar pistas a los que están intentando acceder al sistema .

rtptimeout=60 Si en una llamada establecida no hay flujo audio por 60 segundos la llamada será terminada .

rtpholdtimeout=240Si en una llamada en espera no hay flujo audio por 240 segundos, la llamada será terminada .

allowsubscribe=yes Permite suscribirse al estado de un canal.

callcounter=yesCuenta el numero de canales utilizados por una extensión. Este parámetro junto a las funciones GROUP y GROUP_COUNT permite limitar el numero de llamadas

Asterisk: Administración avanzada 24

Page 25: Telefonia IP Con Asterisk -- Administrador Avanzado

simultaneas que un canal puede hacer.

Las opciones de la sección central son:

Parámetro Descripción

register =>

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 parámetro se deja comentado y a seguir se presentan algunos ejemplos:- register => fulano:[email protected] Para el registro con el proveedor el username será fulano, la contraseña sesamo y el dominio sip.provider1.com. Si el proveedor usa un puerto que no es el 5060 hay que especificarlo al final de la línea de esta forma:- register => fulano:[email protected]:5061 En los dos casos las llamadas entrantes llegaran a la extensión s y al contexto que se define en la configuración de la extensión. Si queremos que las llamadas entre a una extensión definida, tenemos que añadir al final de la linea el numero. Este numero puede ser arbitrario siempre y cuando los proveedores SIP no especifiquen diversamente:- register => fulano:contraseñ[email protected]/1234

registertimeout=20 Asterisk pierde el registro, este parámetro representa el numero de segundos que Asterisk esperará antes de volver a intentar registrarse.

registerattempseste parámetro representa el numero de intentos que Asterisk hará para registrarse. Si ponemos 0, los intentos serán infinitos. Valor 10

mwi =>

Desde la versión 1.6.2.X se puede subscribir el estado de un buzón de voz de un servidor remoto. En este ejemplo el buzón 1234 y contexto SIP_remote. Para subscribirse en la configuración de la extensión se indicará: mailbox=1234@SIP_Remote. Valor: 1234:[email protected]/1234

Finalmente se tiene las opcione específicas para los canales (se colocan las que son consideradas de

mayor importancia):

Parámetro Descripción

[nombre] Nombre del canal SIP con el cual un terminal será identificado. No es necesariamente el número que se usará para contactar a dicho canal.

type=friend

• friend=es un user y peer al mismo tiempo• user: una extensión que se autentica al servidor Asterisk usando el campo From para

hacer llamadas.• peer una extensión que se autentica para las llamadas entrantes utilizando la

dirección IP y el puerto

host=dynamic Si el terminal se conecta remotamente con un IP dinámico se pone dynamic. En caso contrario se pone la dirección IP.

secret= La contraseña para la extensión. Personalizar.

;mailbox=

Si este parámetro es configurado, cuando la extensión se conecte al servidor Asterisk, éstecontrolará si hay mensajes de voz pendientes y en caso positivo se lo comunicará usando MWI = Message Waiting Indicator. que es una señal audio o vídeo que puede ser recibida por la mayoría de los teléfonos 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 extensión cuando llama. Personalizar

;callgroup;pickgroup

Estos dos parámetros definen una de las funcionalidades avanzadas de Asterisk, es decir la posibilidad de capturar la llamada de una teléfono que está timbrando, desde otro teléfono.

accountcoce=201 Código que aparecerá en el registro de llamadas para este canal.

Para mayor profundidad y referencia en cuanto a la configuración del fichero sip.conf, referirse al

siguiente link:

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

Asterisk: Administración avanzada 25

Page 26: Telefonia IP Con Asterisk -- Administrador Avanzado

Práctica 1.9.1. Configuración del fichero sip.conf

1. Abrir el fichero /etc/asterisk/sip.conf y según los parametros explicados en la tabla anterior, colocar lo

siguiente:

[general]context=defaultudpbindaddr=0.0.0.0:5060realm=instructor.asterisk.testtcpenable=notransport=udpsrvlookup=yesuseragent=instructordisallow=allallow=ulaw,gsm,g729directmedia=nodtmfmode=rfc2833language=esqualify=yes;insecure=invite,portallowtransfer=yesallowguest=noqualifyfreq=60alwaysauthreject=yesrtptimeout=60rtpholdtimeout=240allowsubscribe=yescallcounter=yes

[telefono­201]type=friendsecret=*4st3r1sk­Tcallerid=Recepcion #PC <201>context=telefonoshost=dynamicdisallow=allallow=ulaw,gsm;mailbox=201@default

[telefono­251]type=friendsecret=*4st3r1sk­Scallerid=Alumno #PC <251>context=softphoneshost=dynamicdisallow=allallow=ulaw,gsm;mailbox=251@default

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

asterisk*CLI> sip reload

3. Ahora se debe configurar los teléfonos IP con los datos de las cuentas SIP creadas. Esto depende de

terminal. Entonces los terminales se registran y se puede observar su estado con el siguiente

comando:

Asterisk: Administración avanzada 26

Page 27: Telefonia IP Con Asterisk -- Administrador Avanzado

asterisk*CLI> sip show peers

4. Cuando se deben configurar muchas extensiones, se pueden crear templates (plantillas) donde se

definen todos los parámetros compartidos por todas las extensiones. Luego por cada una de ellas, se

configuran solamente los parámetros que la diferencian de las demás. Para crear un template la

primera linea debe tener esta sintaxis: [nombreplantilla](!) . Crear una plantilla para hardphones,

otra para softphones:

[hardphones­oficina](!)type=friendsecret=*4st3r1sk­Tcontext=telefonoshost=dynamicdisallow=allallow=ulaw,gsm

[softphones­oficina](!)type=friendsecret=*4st3r1sk­Scontext=softphoneshost=dynamicdisallow=allallow=ulaw,gsm

5. Usando las plantillas creadas configurar cuatro canales más:

[telefono­201](hardphones­oficina)callerid=Recepcion #PC <201>;mailbox=201@default

[telefono­202](hardphones­oficina)callerid=Secretaria #PC <202>;mailbox=202@default

[telefono­203](hardphones­oficina)callerid=Gerencia #PC <203>;mailbox=203@default

[telefono­251](softphones­oficina)callerid=Alumno #PC <251>;mailbox=251@default

[telefono­252](softphones­oficina)callerid=Ventas #PC <252>;mailbox=252@default

[telefono­253](softphones­oficina)callerid=ATC #PC <253>;mailbox=253@default

6. Ingresar nuevamente a la consola de asterisk, recargar y revisar la nueva configuración:

asterisk*CLI> sip reloadasterisk*CLI> sip show peers

Asterisk: Administración avanzada 27

Page 28: Telefonia IP Con Asterisk -- Administrador Avanzado

1.10 PROTOCOLO IAX2

IAX fue creado por Mark Spencer (también creador de AsterisK) para paliar una serie de problemas o

incovenientes que se encontró al utilizar SIP en VoIP y que pensó que debía 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 máximo la información de

las cabeceras de los mensajes reduciendo también el ancho de banda.

NAT

En IAX la señalización y los datos viajan conjuntamente con lo cual se evitan los problemas de NAT que

frecuentemente aparecen en SIP. En SIP la señalización 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.

Estandarización 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.

Utilización de puertos

IAX utiliza un solo puerto (4569) para mandar la información de señalización y los datos de todas sus

llamadas. Para ello utiliza un mecanismo de multiplexión o "trunking". SIP, sin embargo utiliza un puerto

(5060) para señalización y 2 puertos RTP por cada conexión de audio (como mínimo 3 puertos). Por

ejemplo para 100 llamadas simultaneas con SIP se usarían 200 puertos (RTP) más el puerto 5060 de

señalización. IAX utilizaría sólo un puerto para todo (4569)

Flujo de audio al utilizar un servidor

En SIP si utilizamos un servidor la señalización de control pasa siempre por el servidor pero la información

de audio (flujo RTP) puede viajar extremo a extremo sin tener que pasar necesariamente por el servidor

SIP. En IAX al viajar la señalización y los datos de forma conjunta todo el tráfico 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 simultáneas.

Otras funcionalidades

IAX es un protocolo pensado para VoIP y transmisión 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 podría transmitir

sin dificultad cualquier información y no sólo audio o video.9

Parámetros de configuración:

Son útiles los parámetros generales del sip.conf, adicionalmente se colocan los siguientes de mayor

importancia:

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

Asterisk: Administración avanzada 28

Page 29: Telefonia IP Con Asterisk -- Administrador Avanzado

Parámetro Descripción

[general] Esta etiqueta define el inicio de la parte general de la configuración del protocolo IAX2

bindport=4569 El puerto UDP usado por este protocolo. Este parámetro va configurado antes del bindaddr.

bindaddr=0.0.0.0Es la dirección IP y el puerto donde Asterisk se pondrá a la escucha para las señalización IAX2 utilizando el protocolo UDP. Si se indica 0.0.0.0 Asterisk escuchará en todas la direcciones IP presentes en el servidor Linux.

delayreject=yes Mejora la seguridad contra “brute force password attacks” retrasando el envío de los rechazos de autentificación.

bandwith=highCon este parámetro se define el ancho de banda disponible para las llamadas y en base a este se escogerán los codecs audio a utilizar entre los configurados. Este parámetro acepta como valores: low, medium, high

minregexpire=60 Tiempo mínimo de espiración del registro de las troncales IAX2

maxregexpire=60 Tiempo máximo de espiración del registro de las troncales IAX2

encryption=yes Se habilita el cifrado de la señalización y del flujo media

forceencryption=no No se fuerza el uso del cifrado

;trunkmaxsize=128000Define el tamaño máximo de los datos (bytes) que pueden pasar por una troncal IAX2 cuando se configura el parámetro trunk=yes. Con 128000 bytes pasarán por la troncal 800 llamadas con codec alaw y paquetes audio de 20ms

trunkmtu=1240

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 del audio. Configurando este parámetro con el valor 1240, significa que será el mismo Asterisk el que se encargará de fragmentar los paquetes audio más grandes de 1240 byte, mejorando la calidad del audio en las conversaciones

autokill=ues Si no se recibe un ACK después de una NEW enviado dentro de 2000ms, para evitar que el servidor Asterisk se estanque, se anula la solicitud

calltokenoptional=0.0.0.0/0.0.0.0

En septiembre del 2009 hubo una actualización del protocolo IAX2 para mejorar la seguridad. Este parámetro con el que sigue hace referencia a esa nueva implementación. Como la mayoría de los teléfonos 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 teléfono lo soporta

Para los canales, son válidos los parametros de configuración vistos en sip.conf.

Práctica 1.10.1 Configuración del fichero iax.conf

Editar el fichero iax.conf, poner los parámetros indicados para la sección general y crear un canal iax.

Recuerde que también se puede aplicar el concepto de plantillas usado en el sip.conf

[general]bindport=4569bindaddr=0.0.0.0delayreject=yessrvlookup=yeslanguage=esbandwidth=highdisallow=allallow=ulaw,gsm,g729minregexpire=60maxregexpire=60encryption=yesforceencryption=no;trunkmaxsize=128000trunkmtu=1240autokill=yescalltokenoptional=0.0.0.0/0.0.0.0requirecalltoken=auto

Asterisk: Administración avanzada 29

Page 30: Telefonia IP Con Asterisk -- Administrador Avanzado

[telefono­301]type=friendhost=dynamicsecret=*4st3r1sk­Icontext=softphones;mailbox=301@defaultqualify=yescallerid=Ventas Externo <301>requirecalltoken=auto

Recargar la configuración de asterisk y observar los canales iax creados:

asterisk*CLI> iax2 reloadasterisk*CLI> iax2 show peers

Asterisk: Administración avanzada 30

Page 31: Telefonia IP Con Asterisk -- Administrador Avanzado

1.11 CONFIGURACIÓN DE CANALES DAHDI

1. Esta práctica es una continuación de la práctica 1.6.2 en donde se instaló dahdi. Lo que sigue es la

configuración de los canales asociados a la tarjeta instalada en el servidor. Revisar que dahdi

reconoció e inicio nuestro hardware:

# dahdi_hardware ­v

2. Generar configuración de dahdi:

# dahdi_gencof

3. Editar el fichero de configuración chan_dahdi.conf. Se deben configurar tanto canales FXO como FXS

si se posee, como ejemplo se presenta lo siguiente:

[channels]usecallerid=yescallwaiting=yesusecallingpres=yescallwaitingcallerid=yesthreewaycalling=yestransfer=yescanpark=yescancallforward=yescallreturn=yesechocancel=yesechocancelwhenbridged=yesbusydetect=yesfaxdetect=bothlanguage=esgroup=0context=default

;;PUERTO FXOsignalling=fxs_ksgroup=0context=entrada­pstnchannel => 1

;;PUERTO FXSsignalling=fxo_kscallerid="Recepcion" <1001>mailbox=1001@defaultgroup=1context=telefonoschannel => 2

Asterisk: Administración avanzada 31

Page 32: Telefonia IP Con Asterisk -- Administrador Avanzado

CAPÍTULO 2

DIALPLAN

2.1 INTRODUCCIÓN AL DIALPLAN

El Dialplan es el núcleo de Asterisk ya que en este se configura toda la lógica, y se determina como se

van a atender las llamadas salientes y entrantes. En lenguaje natural, un ejemplo muy sencillo de un

Dialplan podría ser el siguiente, cuando un usuario marca un número:

• Si el número empieza por 0, llamar al destino con un proveedor externo.

• Si el número 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 configuración estensions.conf es el más 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 extensión será procesado dentro de este archivo. Como el sip.conf está dividido en tres

bloques:

• La parte general donde se configuran algunos parámetros 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 configuración de las llamadas.

En la tabla se muestran los parámetros de la sección general y globals:

Parámetro Descripción

[general] Inicio de la configuración general del dialplan.

static=yes Si static es yes y writeprotect es no, para guardar los cambios hechos desde la consola de asterisk tendremos que escribir el comando dialplan reload.

writeprotect=no;En caso contrario se actualizará automáticamente pero perderemos todos los comentarios presentes en el archivo.

autofallthrough=yes Si es yes cuando alguna llamada, por algún motivo se sale del plan se terminará.

priorityjumping=yes

Algunas aplicaciones y/o funciones tienen la capacidad, bajo algunas circunstancias de "saltar" desde la prioridad donde se encuentran a una prioridad que normalmente es n=+101 donde n es el numero de la línea que se está ejecutando. Si está en yes hará ese salto sino, no.

[globals]

En esta sección se definen las variables globales que se van a poder utilizar en el resto de los contextos. Por ejemplo:CONSOLE=Console/dsp ;indica que cuando hagamos referencia a la variable CONSOLE estamos llamando a /Console/dspLas variables suelen ponerse siempre en mayusculas para diferenciarlas posteriormente.

Contextos

Los contextos son colecciones de extensiones agrupadas bajo un criterio común. Se pueden usar para

implementar algunas características como:

• Seguridad y autenticación: Permitir llamadas a ciertos destinos solo de teléfonos específicos (por

ejemplo llamadas internacionales solo desde gerencia). Inclusive se puede solicitar contraseña

para realizar llamadas a algunos números.

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

Asterisk: Administración avanzada 32

Page 33: Telefonia IP Con Asterisk -- Administrador Avanzado

• Contestador automático: Recibir a los llamantes y pedirles que ingresen cierta extensión.

• Menus multinivel: Menus para categorías dentro de una empresa como contabilidad, ventas,

gerencia, etc.

• Privacidad: Crear listas negras de números que no pueden contactar una extensión/extensiones.

• Daytime/Nightime: Varial el comportamiento de las extensiones dependiendo de la hora del día.

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 extensión hace referencia al numero marcado desde una terminal telefónica.

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 líneas secuencialmente, comenzando del número más

bajo al más alto. Se puede colocar la prioridad n (next), con lo cual asterisk incrementará la prioridad en 1

en cada linea de ejecución.

El comando hace referencia a la acción a ejecutar.

Extension

En asterisk se define como un conjunto de comandos que se ejecutan para realizar una determinada

tarea que provee un servicio. Desde el punto de vista de la programación, una extensión sería el nombre

de un script que se ejecuta para proveer una función específica. La extensión puede ser alfanumérica.

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 extensión que como se dijo es un

conjunto de comandos que serán ejecutadas en orden.

Cuando se hace una llamada desde un teléfono, 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 extensión

asociada a ese contexto que fue marcada desde el teléfono. Como ejemplo observar el gráfico inferior:

Asterisk: Administración avanzada 33

Page 34: Telefonia IP Con Asterisk -- Administrador Avanzado

Práctica 2.1.1 Trabajando con el dialplan.

Crear un contexto llamado pruebas y en él escribir las siguientes aplicaciones del dialplan. Recargar la

configuración con los siguientes comandos y probar:

asterisk*CLI> dialplan reload

Reproducir sonido de bienvenida:

exten => 500,1,Playback(demo­congrats)exten => 500,2,Hangup()

Comprobación de latencia y eco:

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

Reproducir la fecha actual:

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

Extension start:

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

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

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

Grabación de audio y reproducción del mismo:

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

Práctica 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 configuración:

1. Llamadas a canales SIP:

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

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

Asterisk: Administración avanzada 34

Page 35: Telefonia IP Con Asterisk -- Administrador Avanzado

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

2. Llamadas a canales IAX2:

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

3. Llamadas a canales DAHDI:

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

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

Asterisk: Administración avanzada 35

Page 36: Telefonia IP Con Asterisk -- Administrador Avanzado

2.2 PATRONES DE NUMERACION

El dialplan no esta limitado solo a números fijos, se pude utilizar también patrones de números para

controlar el flujo de las llamadas.

Para esto el identificador de extensión debe iniciar con el símbolo “_”. Los caracteres que pueden usarse

son los siguientes:

XZN[137-9][a-z][A-Z].!

Acepta un número del 0 al 9Acepta un número del 1 al 9Acepta un número del 2 al 9Acepta cualquier número dentro de los corchetes, el símbolo “-” denota un rangoAcepta cualquier letra minúsculaAcepta cualquier letra mayúsculaComodín, acepta uno o más caracteresComodín, acepta cero o más caracteres

Práctica 2.2.1 Cambiar el contexto de las llamadas entre canales sip, especificando las

extensiones con patrones de numeración para la práctica 2.1.2

2.3 EXTENSIONES ESTANDARES

i: extensión inválida; usada cuando al pedir el ingreso de una extensión, ésta no existe dentro del

contexto actual.

t: timeout extensión; usada cuando al pedir el ingreso de una extensión, se supera el tiempo de

espera al no haber ingresado nada.

s: start extensíon; usada para entrar en un contexto con cualquier extensión.

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 posición indicada por el offset y contiene un número de caracteres indicado por longitud

contados hacia la derecha. El primer carácter se cuenta en la posición 0.

• Si offset es negativo, la posición se toma desde la izquierda.

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

posición offset. Ejemplos:

${123456789:1} Retorna la cadena 23456789

${123456789:-4} Retorna la cadena 6789

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

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

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

Asterisk: Administración avanzada 36

Page 37: Telefonia IP Con Asterisk -- Administrador Avanzado

Concatenación:

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

Variables de canal definidas automáticamente:

${CALLERID}: Caller ID actual, nombre y número.

${CONTEXT}: Contexto actual.

${EXTEN}: Extensión actual.

${CHANNEL}: Canal actual.

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

${DATETIME}: Hora actual.

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

2.5 FUNCIONES

Las funciones son usadas dentro del dialplan para dinamizarlo. No pueden ser usadas directamente como

las aplicaciones, en vez de esto, las funciones retornan valores como si se tratasen de variables

“inteligentes”. De hecho al trabajar con funciones se asumen las mismas consideraciones que con las

variables.

Su sintaxis es la siguiente:

NOMBRE_FUNCION(argumentos)

También se puede obtener el valor de una función, somo si se tratase de una variable:

${NOMBRE_FUNCION(argumento)}

Además, se puede encapsular una función 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

Práctica 2.5.1 Trabajando con funciones:

1. Creación de un contador utilizando la función INC()

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

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

Asterisk: Administración avanzada 37

Page 38: Telefonia IP Con Asterisk -- Administrador Avanzado

2.6 APLICACIONES

Las aplicaciones son los “obreros” del dialplan. Cada aplicación se encarga de realizar una acción

específica sobre el canal activo, como por ejemplo reproducir un sonido, recibir un número marcado

desde el terminal telefónico, marcar a un canal, colgar la llamada, entre muchas otras tareas.

Dicho de otra manera, una aplicación ejecuta una tarea que es percibible por el usuario.

Su síntaxis 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

Práctica 2.6.1: Creación de un menú de bienvenida

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

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

2. Modificar el sip.conf para crear los canales necesarios para la práctica y asignarlos al contexto

adecuado. Además, crear un contexto (de bienvenida) en el cual se debe colocar una extensión para

saltar al contexto ivr_menu.

Asterisk: Administración avanzada 38

Page 39: Telefonia IP Con Asterisk -- Administrador Avanzado

2.7 EXPRESIONES Y OPERADORES

Una expresión es una combinación de variables, operadores y valores que se concatenan de forma

ordenada para producir un resultado. Una expresión puede por ejemplo comparar valores, modificar una

cadena de caracteres o realizar operaciones matemáticas.

Se representan de la siguiente manera: $[expr1]

Operadores lógicos

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 comparación

•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 aritméticos

•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 ejecución de los operadores

Parentesis: (, )

Asterisk: Administración avanzada 39

Page 40: Telefonia IP Con Asterisk -- Administrador Avanzado

Operadores unarios !, -

Expresiones regulares: :, =~

Multiplicativos: *, /, %

Aditivos: +, -

Comparación: =, !=, <, >, <=, >=

Lógicos: |, &

Condicionales: ? :

Práctica 2.7: Creación de un buzón de voz

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

[general][email protected]=yes delete=nomaxmsg=100maxsecs=180minsecs=2skipms=3000maxsilence=10silencethreshold=128maxlogins=3emailsubject=Nuevo Mensaje de ${VM_CALLERID}emailbody=Buenos días ${VM_NAME},\n\nHemos recibido un mensaje en su buzon de voz…emaildateformat=%A, %B %d, %Y at %r

2. Con esto tenemos más que suficiente para componer mensajes para el buzon de voz y enviarlos por

email. Ahora vienen los contextos. Como siempre, si es [default] es el genérico, y luego los contextos

específicos. Ejemplo.

[default]1234 => 5678,Buzon de Ejemplo,[email protected]

• En primer lugar, el número del buzón, luego lo utilizaremos en el Dialplan para la aplicación

Voicemail así referirnos a este buzón.

• En segundo lugar, la contraseña para acceder al buzón. Tendremos que crear una extesión en el

Dialplan para que el usuario pueda acceder a su buzón de forma interna. Esto solo es útil si no

marcamos la opción de borrado de mensajes del buzón al ser enviados por email

• En tercer lugar, nombre del buzón que luego utilizaremos en variables como VM_NAME

• En cuarto lugar, Email del destinatario de los mensajes de este buzón10

3. Crear dentro del contexto adecuado las extensiones y síntaxis 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.

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

Asterisk: Administración avanzada 40

Page 41: Telefonia IP Con Asterisk -- Administrador Avanzado

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

4. Crear otra extensión dentro del contexto adecuado para la revisión de los mensajes de voz para el

usuario11

exten => *99,1,Answer() same => n,VoiceMailMain(${CALLERID(num)}@default) same => n,HangUp()

exten => *98,1,Answer()same => n,VoiceMailMain() same => n,HangUp()

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

Asterisk: Administración avanzada 41

Page 42: Telefonia IP Con Asterisk -- Administrador Avanzado

2.8 INTERCONEXIÓN DE CENTRALES

Pŕactica 2.8.1 Interconexión de servidores asterisk12

MEDIANTE PROTOCOLO SIP

1. QUITO (sip.conf):

[general]…insecure=invite,port

;register => quito:asterisk2012@dir_ip_guayaquil

[guayaquil]type=peercontext=entrada_trunkhost=dir_ip_guayaquildisallow=allallow=g723.1,g729,gsm

2. GUAYAQUIL (sip.conf):

[general]…insecure=invite,port

;register => guayaquil:asterisk2012@dir_ip_quito

[quito]type=peercontext=entrada_trunkhost=dir_ip_quitodisallow=allallow=g723.1,g729,gsm

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

Asterisk: Administración avanzada 42

Page 43: Telefonia IP Con Asterisk -- Administrador Avanzado

MEDIANTE PROTOCOLO IAX2:

3. QUITO: (iax.conf)

[guayaquil]type=friendsecret=asterisk2012auth=md5context=entrada_trunkhost=dir_ip_guayaquiltrunk=yesallow=g723.1,g729,gsmqualify=yes

4. GUAYAQUIL (iax.conf):

[quito]type=friendsecret=asterisk2012auth=md5context=entrada_trunkhost=dir_ip_quitotrunk=yesallow=g723.1,g729,gsmqualify=yes

5. Los terminales en los dos servidores deben tener distinta numeración, caso contrario, el número de

origen (CALLERID deben ser modificado al momento de realizar la llamada.

6. Crear el contexto adecuado para realizar las llamadas de salida, colocando extensiones con prefijos

para diferenciar el destino. De igual manera crear un contexto de entrada para recibir las llamadas

provenientes desde el servidor remoto.

Asterisk: Administración avanzada 43

Page 44: Telefonia IP Con Asterisk -- Administrador Avanzado

2.9 MACROS

Un macro es similar a una función en cualquier lenguaje de programación, 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 más, 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 numéricos 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 según el número de argumentos enviados a la macro. Ademas también 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.

Práctica 2.9: Para entender mejor el funcionamiento de las macros, se creará una para el

buzón de voz. Modificar el fichero extensions.conf con lo siguiente:

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

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

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

Los argumentos SIP, ${EXTEN} y acierte, pasaran a guardarse en ${ARG1}, ${ARG2} y ${ARG3}

respectivamente para ser usados por la macro.

Asterisk: Administración avanzada 44

Page 45: Telefonia IP Con Asterisk -- Administrador Avanzado

2.10 ASTDB

1. Se configurará un contador en una extensiónque diga los numeros desde el 0 en adelante hasta que

se corte la llamada.

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

2. Al llamar a la extensión 603 se escucharan los números desde el 0 en adelante hasta que se cuelgue.

Si se hace de nuevo la llamada, no empieze desde 0 sino desde donde se haya quedado. Para ello se

usara la base de datos de asterisk, donde se almacena la variable COUNT.

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

3. Ahora se comprueaba que si se vuelve a llamar a la extensión 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 función BLACKLIST() se

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 número 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.

Asterisk: Administración avanzada 45

Page 46: Telefonia IP Con Asterisk -- Administrador Avanzado

2.11 FUNCIONES DE PBX

El archivo features.conf es donde se configura el parqueo de las llamadas y asignar una función a una

determinada combinación de teclas. Es aquí, por ejemplo, donde se definine cuales son las teclas que se

debe presionar para transferir una llamada, grabarla, iniciar una aplicación, y muchas más.

Las funciones que se configurarán serán las siguientes:

• Call parking: Desde un canal mediante una combinación 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 conversación.13

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

pudiendo hablar antes con el destino para indicarle la situación. 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 específica en el dialplan para realizar.

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

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

Asterisk: Administración avanzada 46

Page 47: Telefonia IP Con Asterisk -- Administrador Avanzado

Asterisk: Administración avanzada 47

Page 48: Telefonia IP Con Asterisk -- Administrador Avanzado

Ahora, se habilitará estas funciones en el dialplan:14

Práctica 2.11: Configuración de funciones adicionales de PBX

1. Editar el fichero features.conf. Ver los siguientes parámetros indicados en las tablas para una correcta

configuración.

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

Contexto para las llamadas parqueadas:

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

exten => 710,hint,park:710@parkedcalls

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

Asterisk: Administración avanzada 48

Page 49: Telefonia IP Con Asterisk -- Administrador Avanzado

2. Y en el contexto interno:

[interno]include => parkedcalls

3. Y finalmente al momento de marcar con la aplicación 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 grabación 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 grabación 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 grabación de la llamada digitando la secuencia de teclas

definida en features.conf. La diferencia con las opciones w y W es que en este caso los dos

canales (llamante y llamado) se grabaran en un único archivo audio

X: lo mismo de arriba pero para el llamante.

Asterisk: Administración avanzada 49

Page 50: Telefonia IP Con Asterisk -- Administrador Avanzado

2.12 CONFERENCIA

Una importante característica 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.

Pŕactica 2.12: Creación de salas de conferencia en asterisk:15

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

[general]audiobuffers=32

;Numero de paquetes audio de 20ms que serán guardados en un buffer de memoria cuando pertenecen a

canales que no son DADHI. Esto permite sincronizar el audio de los distintos participantes y evitar

retrasos. Puede ser un valor entre 2 y 32

[rooms];; la sintaxis es: conf => confno[,pin][,adminpin];conf => 3500conf => 3501,1234conf => 3502,1234,5678

En el primer ejemplo se define un cuarto de conferencias cuya extensión es 3500 y a todos los usuarios

es permitido entrar. En el segundo la extensión es la 3501 y para entrar los usuarios tendrán que digitar

el PIN 1234. En la tercero la extensión es la 3502. Los usuarios tendrán que usar el PIN 1234 y los

administradores el PIN 5678

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

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

3. Llamando la extensión 3500,3501 o 3502 se entrará en el cuarto de conferencia (configurado en

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

• s: Con esta opción se activa el menú del cuarto de conferencias para usuarios y administradores.

Marcando la tecla asterisco se escuchará el menú .

• c: Al entrar en un cuarto de conferencia se le anunciará al usuario el número de personas

presentes .

• M(default): Cuando en el cuarto de conferencia está solamente una persona, ésta escuchara la

música de espera de la clase default.

4. Ahora, se probará las salas de conferencia limitando el número de usuarios, para lo cual se hará uso

de una macro:

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

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

Asterisk: Administración avanzada 50

Page 51: Telefonia IP Con Asterisk -- Administrador Avanzado

same => n,Hangupsame => n(llena),Playback(conf­invalid) same => n,Hangup 

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

exten => _350[012],1,Set(confmax=5)same => n,Macro(meetme) same => n,Hangup 

Asterisk: Administración avanzada 51

Page 52: Telefonia IP Con Asterisk -- Administrador Avanzado

CAPÍTULO 3

DIALPLAN AVANZADO

3.1 Asterisk CDR

El registro detallado de llamadas (CDR por sus siglas en inglés) es la manera en que Asterisk

registra, valga la redundancia, toda la información concerniente a las llamadas realizadas en el

sistema. Está información tiene distintos propósitos, siendo el mas común el de la tarificación

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 información del registro en formato CSV (Valores Separados por Comas), el cual es fácilmente exportable a MS Excel. El archivo /etc/asterisk/cdr.conf es el archivo que establece el comportamiento y la información que aparecerá en el registro; sin embargo, es posible personalizar o seleccionar la información que queremos que aparezca en el mismo por medio del archivo /etc/asterisk/cdr_custom.conf.

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

3.2 Configuración 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, además de poseer los permisos adecuados y estructura dentro de la base para guardar la información del CDR, esto se logra mediante los siguientes pasos:

Instalar las dependencias necesarias de la BD postgreSQL:

# yum install postgresql91­devel postgresql91­server postgres91 pgadmin3_91

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

# /etc/init.d/postgresql­9.1 initdb

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

siguiente manera:

host all all      127.0.0.1/32      trust 

host all       all       192.168.1.0/24      md5 

host asteriskDB asterisk 127.0.0.1/32 md5

También, editar el fichero /var/lib/pgsql/data/postgres.conf, colocando las siguientes líneas:

listen_addresses = '*'

port = 5432

16 http://www.voip.unam.mx/mediawiki/index.php/El_registro_detallado_de_llamadas_de_Asterisk_CDR_-_Integración_con_PostgresSQL

Asterisk: Administración avanzada 52

Page 53: Telefonia IP Con Asterisk -- Administrador Avanzado

Para terminar la configuración del servidor de BD, iniciar el servicio postgres:

# service postgresql start

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

# su ­ postgres 

$ createuser ­s ­D ­R ­l ­P ­e asterisk 

$ createdb ­O asterisk ­e asteriskDB

$ exit

Crear una tabla con los campos necesarios para el CDR, se hará uso de un fichero de texto en

el cual está presente la configuración de la tabla para la BD, que es la siguiente:

/*FICHERO cdr_pgsql.sql */

CREATE TABLE cdr ( 

        calldate timestamp NOT NULL , 

        clid varchar (80) NOT NULL , 

        src varchar (80) NOT NULL , 

        dst varchar (80) NOT NULL , 

        dcontext varchar (80) NOT NULL , 

        channel varchar (80) NOT NULL , 

        dstchannel varchar (80) NOT NULL , 

        lastapp varchar (80) NOT NULL , 

        lastdata varchar (80) NOT NULL , 

        duration int NOT NULL , 

        billsec int NOT NULL , 

        disposition varchar (45) NOT NULL , 

        amaflags int NOT NULL , 

        accountcode varchar (20) NOT NULL , 

        uniqueid varchar (150) NOT NULL , 

        userfield varchar (255) NOT NULL 

);

Cargar la estructura de la tabla a la BD:

# pgsql ­U asterisk ­d asteriskDB ­W < cdr_pgsql.sql 

Compilar asterisk con el soporte para CDR en postgreSQL, tener precaución de verificar si el módulo se selecciona al momento de realizar el comando “make menuselect”, caso contrario, iniciar la compilación de asterisk mediante el siguiente comando:

Asterisk: Administración avanzada 53

Page 54: Telefonia IP Con Asterisk -- Administrador Avanzado

# ./configure ­­with­postgres=/usr/pgsql­9.1

Finalmente configurar el fichero /etc/asterisk/cdr_pgsql.conf, habilitando el acceso a la base de datos creada en postgres para asterisk:

[global]

hostname=localhost

port=5432

dbname=asteriskDB

password=password

user=asterisk

table=cdr

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

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

Revisar la aplicación NoCDR y la función CDR del dialplan.

En el cli de asterisk, revisar los comandos presentes para la administración de las conferencias.

Asterisk: Administración avanzada 54

Page 55: Telefonia IP Con Asterisk -- Administrador Avanzado

3.3 Distribución Automática de Llamadas – Colas de Espera

Cuando se llama un centro de atención al cliente, sin saberlo, se está dentro de un sistema de distribución automática de llamadas. ¿Cómo 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, según la configuración, el llamante escuchará distintos anuncios (que posición tiene en la cola, el tiempo estimado de espera y un largo etcétera).

Quizás este es el servicio más importante y estratégico para una empresa. En base a la calidad del servicio que ofrece y el tiempo promedio de espera, los clientes la estarán evaluando.

¿Cómo se configura en Asterisk la gestión de las colas? A través de dos archivos: – agents.conf – queues.conf

En el primero se configuran, definiendo algunas variables y parámetros, los agentes que atenderán las colas. En el queues.conf se configuran las colas (pueden ser una o más), los agentes miembros de la cola y que tipo de estrategia se utilizará para enrutar las llamadas a los distintos operadores.

Configuración de Agentes: El fichero a editar es /etc/asterisk/agents.conf, se presenta una tabla17 con las principales opciones de configuración y su función.

Parámetro Descripción

[general] Etiqueta que da inicio a la parte general del archivo .

persistentagentsSi se define en yes el estado del agente se almacena en la base de datos interna de Asterisk. De esta forma cuando se reinicia Asterisk estos datos serán recargados. Valor yes

multiplelogin Define si está permitido a una extensión conectarse como agente múltiple. Valor no

[agents] A partir de esta etiqueta inicia la configuración de los agentes .

maxlogintries Número de intentos permitidos a un agente para autenticarse.

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

autologoffunavail yes = si la extensión desde la cual el agente se conecta se vuelve no disponible, automáticamente el agente será desconectado de la cola

ackcallPara atender una llamada un agente tiene que presionar la tecla indicada en el próximo parámetro. Valor no (no tiene que presionarla) .

acceptdtmf #

endcallpermite al agente terminar una llamada presionando la tecla configurada en el próximo parámetro .

enddtmf *

wrapuptimeNumero de milisegundos que Asterisk esperará antes de volver a llamar un agente que acaba de terminar una llamada. Valor 5000

musiconhold Música de espera predefinida para el agente. Valor default

;goodbye=vm-goodbye locución que el agente escuchará al terminar una llamada. Si se deja comentado será la predefinida (vm-goodbye)

updatecdr Actualiza o no el CDR con el nombre del agente. Yes

recordagentcalls Grabar o no las llamadas de los agentes.

recordformat Formato audio de las llamadas grabadas. Valor wav

;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 parámetro. Se deja comentado .

custom_beep Avisa al agente que está conectado permanentemente a la cola, de la llegada de una llamada. Valor beep

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

Asterisk: Administración avanzada 55

Page 56: Telefonia IP Con Asterisk -- Administrador Avanzado

agentAhora se configuran los agentes. Las sintaxis es: agent => agentid,agentpassword,name Ej: agent => 2000,1234,Fulano

Existen dos maneras de configurar los agentes, la forma “atendida” (también llamada estática) y la forma “desatendida” (también llamada dinámica). 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 (teléfono, 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.

Configuración de Colas: El fichero a editar es /etc/asterisk/queues.conf, se presenta una tabla18 con las principales opciones de configuración y su función.

Parámetro Descripción

[general] Etiqueta que define la parte general del archivo .

persistentmembersyes = se guardan los datos de los miembros de la cola activos en la base de datos interna de Asterisk. Si se reinicia la PBX los miembros serán reasignados a las colas correspondientes.

autofill

Normalmente una cola funciona de la siguiente manera. Hay unos cuantos usuarios esperando por ser atendidos por los agentes. Cuando el usuario que está de primero en la cola viene atendido el segundo se vuelve primero e será atendido por el primer agente disponible. Este comportamiento no tiene en cuenta que pueden haber muchos agentes disponibles y que podrían atender los clientes sin esperar que lleguen a ser los primeros de la cola de espera. Con este parámetro se define otro tipo de comportamiento. Los clientes serán atendidos de manera paralela hasta que haya agentes disponibles. De esta forma se reducen considerablemente los tiempos de espera. Valor yes

monitor-typeEl tipo de aplicación utilizada para grabar las conversaciones de una cola. Puede ser Mixmonitor o monitor .

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

shared_lastcallSi un agente hace parte de más de una cola y se ha definido su tiempo de descanso entre una llamada y otra (el parámetro wraptime), con este parámetro se define si ese tiempo va respetado por las distintas colas de que el agente es miembro. Valor yes

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

musiclass La música de espera para los clientes en la cola. Valor default

;announce=queue-ventas Este parámetro permite crear una anuncio para que los agentes que pertenecen a más de una cola para que sepan, antes de atender una llamada, de que cola proviene el cliente. Se deja comentado

strategy

En este parámetro se define la lógica con que se enrutarán las llamadas de una cola a los agentes: • leastrecent: Asigna la siguiente llamada al agente que más 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

configuración. Si son agentes dinámicos según el orden con que se han registrado a la cola .

• wrandom: asigna la llamada aleatoriamente usando una métrica basada en penalidades.

servicelevelParámetro utilizado para la estadísticas de la cola. En base al numero de segundos configurados, en los reportes aparecerá el numero de llamadas contestadas dentro del tiempo definido. Valor 120

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

Asterisk: Administración avanzada 56

Page 57: Telefonia IP Con Asterisk -- Administrador Avanzado

contextSi el cliente en la cola antes de ser atendido presiona una tecla del teléfono será enviado al contexto definido en este parámetro y a la prioridad correspondiente al dígito que ha marcado. Valor ventas-exit

timeout

En la cola se pueden configurar dos distintos tipos de tiempos de espera. Uno a nivel de aplicación (dialplan) define el tiempo máximo 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 máximo que timbrará la extensión de un agente antes de considerarlo no disponible y pasar al siguiente. Este parámetro y los siguientes dos se utilizan para definir que tipo de tiempo de espera tendrá la prioridad. Este primer parámetro define por cuantos segundos timbrará la extensión del agente. Valor 15

retry numero de segundos de espera antes de llamar otro agente si el primero no ha contestado dentro de los 15 segundos definidos en el parámetro anterior. Valor: 4

timeoutpriorityEn este parámetro se define si se toma en consideración el tiempo de espera definido a nivel de aplicación o a nivel de archivo de configuración. Valor app (aplicación)

weightEl peso de la cola. Más alto el valor, más prioridad tendrá la cola. Si hay agentes que atienden más de una cola, las colas con peso más alto serán atendidas con prioridad respecto a las colas con peso más 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 atenderán una llamada serán puestos en pausa

maxlenNumero máximo de personas que pueden estar esperando en la cola. Valor 50 Si se pone 0 no se fijará ningún limite

setinterfacevar yes = una serie de variables serán creadas justo antes de conectar un miembro de la cola con un cliente (véase archivo predefinido queues.conf)

setqueueentryvaryes = otra serie de variables serán creadas justo antes de conectar un miembro de la cola con un cliente (véase archivo predefinido queues.conf)

setqueuevaryes = otra serie de variables relacionadas con la cola serán creadas justo antes de conectar un miembro de la cola con un cliente (véase archivo predefinido queues.conf)

;membermacro=macro Antes de conectar el agente con el cliente se puede ejecutar la macro indicada en este parámetro. Se deja comentado

announce-frequency Cada cuanto segundos anunciar al cliente en la coda su posición y tiempo estimado de espera. Valor 90

min-announce-frequency

Para evitar que cada vez que la posición y/o el tiempo estimado de espera de un cliente cambie se le presente un anuncio, este parámetro define un tiempo (en segundos) que se esperará antes de comunicarle su nueva posición/tiempo estimado. Valor 15

;periodic-announce-frequency=60

Cada cuantos segundos presentar un anuncio personalizado al cliente en la cola de espera. Se deja comentado

;random-periodic-announce=no Los anuncio pueden ser presentado según un orden aleatorio. Se deja comentado

announce-holdtime Anunciar junto a la posición en la cola el tiempo estimado de espera. Puede ser yes, no, u once (una sola vez)

announce-position

Anuncia al cliente su posición en la lista de espera. Valores: • yes: si • no: no se le anuncia • more: si la posición del cliente en la cola de espera es más alta del numero

especificado en el próximo parámetro, se le anunciará que hay más de “valor del próximo parámetro” clientes esperando en la cola .

• limit: solo los clientes con una posición en la cola de espera menor o igual al valor del parámetro que sigue, escucharán el anuncio de su posición en la cola de espera .

announce-position-limit 5

announce-round-seconds Con este parámetro se redondea los minutos y los segundos de espera anunciados al cliente. Valor 20

;queue-youarenext=queue-youarenext

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

;periodic-announce=anuncio1,anuncio2

En este parámetro de definen los anuncios periódicos personalizados separados por una coma. Se deja comentado

;monitor-format=gsm|wav|wav49

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

Asterisk: Administración avanzada 57

Page 58: Telefonia IP Con Asterisk -- Administrador Avanzado

monitor-type Se define la aplicación para grabar la conversaciones. Puede ser monitor y mixmonitor

joinempty

Este parámetro con el que sigue, son los más importantes en la configuración 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 (aplicación

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 extensión es INUSE • ringing: un agente es considerado no disponible si su extensión está timbrando • unavailable: un agente es considerado no disponible si el estado de su extensión

es UNAVAILABLE • invalid: un agente es considerado no disponible si el estado de su extensión es

INVALID • unknown: un agente es considerado no disponible si el estado de su extensión es

UNKNOW • wrapup: un agente es considerado no disponible si está en su tiempo de descanso

(wraptime) después de haber atendido una llamada

leavewhenemptyEste parámetro aplica a los clientes que ya están en la cola de espera y en base a los valores indicados, si todos los agentes se vuelven no disponibles, el cliente será sacado de la cola.

;eventwhencalled = yes;eventmemberstatus = yes

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

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

ringinuse no = no se envían las llamadas a agentes cuyo estado de la extensión es INUSE

memberdelay

Tiempo en segundos que el sistema esperará antes de conectar el agente con el cliente. De esta forma aunque hayan agentes disponibles, el cliente esperará ese tiempo antes de ser conectado con un agente. Útil si se quiere que el cliente escuche algún anuncio o comunicación. Valor 5

timeoutrestartyes = el tiempo de espera para que una agente conteste una llamada se resetea si el estado de la extensión es BUSY o CONGESTION

;defaultrule=myrule En el archivo queuerules.conf se configuran distintos escenarios para manejar las colas con el sistema de penalidades. En el caso que se haya configurado un escenario para esta cola, en este parámetro se define el nombre. Se deja comentado

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

A partir de esta linea se definen los miembros de la cola. La sintaxis es: member => tecnología/extensión,penalidad,nombre,extensiónSe ponen los tres agentes configurados en el archivo agent.conf

Práctica 3.3: Distribución automática de llamadas

Conocidos los parámetros adecuados para la configuración 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=# 

Asterisk: Administración avanzada 58

Page 59: Telefonia IP Con Asterisk -- Administrador Avanzado

endcall=yes 

enddtmf=* 

wrapuptime=5000 

musiconhold=default 

;goodbye=vm­goodbye 

updatecdr=yes 

;group 

recordagentcalls=no 

recordformat=wav 

;savecallsin=/home/calls 

custom_beep=beep 

agent => 2000,1234,Pepito Perez

agent => 2001,1235,Juanito Jimenez

agent => 2002,1236,Luchito Lopez

queues.conf

[general] 

persistentmembers=yes 

autofill=yes 

monitor­type=mixmonitor 

updatecdr=no 

240 

shared_lastcall=yes 

[ventas] 

musicclass=default 

;announce=queue­ventas 

strategy=random

servicelevel=120 

context=ventas­exit 

timeout=15 

retry=4 

timeoutpriority=app 

weight=0 

wrapuptime=2

autofill=yes 

autopause=yes 

maxlen=50 

Asterisk: Administración avanzada 59

Page 60: Telefonia IP Con Asterisk -- Administrador Avanzado

setinterfacevar=yes 

setqueueentryvar=yes 

setqueuevar=yes 

;membermacro=macro 

announce­frequency=90 

min­announce­frequency=15 

;periodic­announce­frequency=60 

;random­periodic­announce=no 

announce­holdtime=once 

announce­position=more 

announce­position­limit=5 

announce­round­seconds=30 

;periodic­announce=queue­periodic­announce 

;periodic­announce=anuncio1,anuncio2 

;monitor­format=gsm|wav|wav49 

monitor­type=mixmonitos 

joinempty=paused,unavailable,invalid,unknown 

leavewhenempty=paused,unavailable,invalid,unknown 

;eventwhencalled = yes 

;eventmemberstatus = yes 

reportholdtime=yes 

ringinuse=no 

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 irán a la cola:

Asterisk: Administración avanzada 60

Page 61: Telefonia IP Con Asterisk -- Administrador Avanzado

[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 método, se usarán las aplicaciones AddQueueMember y RemoveQueueMember que permiten agregar un agente en la cola y quitarlo respectivamente. Los agentes no necesariamente deben estar presentes en el fichero agents.conf

[login]

exten => 777,1,Answer()

same => n, AgentLogin()

same => n,HangUp()

;Ingreso en la cola

exten => 778,1,Answer()

same => n,Addqueuemember(ventas,SIP/${CALLERID(num)}) 

same => n,Playback(agent­loginok) 

same => n,HangUp()

;Salida de la cola

exten => 779,1,Answer()

same => n,Removequeuemember(ventas,SIP/${CALLERID(num)}) 

same => n,Playback(agent­loginok) 

same => n,HangUp()

Asterisk: Administración avanzada 61

Page 62: Telefonia IP Con Asterisk -- Administrador Avanzado

3.4 Integracioń con bases de datos relacionales: ODBC

La integración de asterisk con bases de datos relacionales se realiza a través del uso del

módulo odbc. Una vez asegurada la interconexión entre la BD y asteris, es posible realizar

lecturas o escrituras a la base de datos. Así, se saca ventaja de toda la potencia que ofrece el

guardar la información dentro de una base de datos relacional.

El conector ODBC es una capa de software que permite a Asterisk comunicarse con bases de

datos relacionales sin requerir el uso de una aplicación única para cada base de datos que se

quiera soportar.

Práctica 3.4.1: Instalación de un motor de text-to-speech (tts), para reproducir contenido dinámico leido desde una base de datos.

Se utilizará el programa festival, que es un motor tts libre. Asterisk posee un módulo y aplicación para usar festival, si no es así, asegurarse de instalar festival y recompilar asterisk.

# yum install festival

Instalación de las voces en español:

# yum install hispavoces*

Toda la programación y contenido para sintenizar las voces en español se lo tiene gracias a un proyecto español de la Junta de Andalucia. Una vez instaladas las voces, se pueden ubicar en: /usr/share/festival/lib/voices/es/ Aquí están presentes los directorios: JuntaDeAndalucia_es_sf_diphone y JuntaDeAndalucia_es_pa_diphone.

Modificar el fichero de configuración 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) 

Asterisk: Administración avanzada 62

Page 63: Telefonia IP Con Asterisk -- Administrador Avanzado

Apply tts to STRING. This function is specifically designed for use in server mode so a single function call may synthesize the string. This function name may be added to the server safe functions." 

(let ((wholeutt (utt.synth (eval (list 'Utterance 'Text string))))) 

(utt.wave.resample wholeutt 8000) 

(utt.wave.rescale wholeutt 5) 

(utt.send.wave.client wholeutt))) 

Correr el servidor festival:

# festival_server

Práctica 3.4.2: Se configurará el escenario que se observa en la imagen, el objetivo

es tener una tabla en la cual se posee 4 campos: Matricula, Nombre, Nota,

Evaluación. Dicha tabla guarda información referente a un curso en el cual los

estudiantes pueden consultar su nota y evaluar el desempeño de su profesor,

además el profesor podrá calificar a sus estudiantes. Todo esto realizado a través de

un teléfono.

Primero, se debe instalar odbc en linux:

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

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

# Driver from the postgresql-odbc package

# Setup from the unixODBC package

[PostgreSQL]

Description= ODBC for PostgreSQL

#Driver = /usr/lib/psqlodbc.so

Setup = /usr/lib64/libodbcpsqlS.so

Driver = /usr/pgsql-9.1/lib/psqlodbc.so

FileUsage = 1

Probar el correcto funcionamiento del driver:

# odbcinst -q -d

Luego de esto, se debe crear el conector que será usado por asterisk para integrarse con PostgreSQL a través de ODBC, esto se configura en el fichero /etc/odbc.ini, los datos son los siguientes19:

19http://ofps.oreilly.com/titles/9780596517342/asterisk-DB.htmlhttp://astbook.asteriskdocs.org/en/2nd_Edition/asterisk-book-html-chunk/getting_funky.html

Asterisk: Administración avanzada 63

Page 64: Telefonia IP Con Asterisk -- Administrador Avanzado

[asterisk-connector]

Description = PostgreSQL connection to 'asterisk' database

Driver = PostgreSQL

Database = asteriskDB

Servername = 192.168.0.209

UserName = asterisk

Password = 4st3r1sk

Port = 5432

Protocol = 8.1

ReadOnly = No

RowVersioning = No

ShowSystemTables = No

ShowOidColumn = No

FakeOidIndex = No

ConnSettings =

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

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

El cual devuelve:

+---------------------------------------+

| Connected! |

| |

| sql-statement |

| help [tablename] |

| quit |

| |

+---------------------------------------+

SQL> +------------+

| ?column? |

+------------+

| 1 |

+------------+

SQLRowCount returns 1

1 rows fetched

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

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

Asterisk: Administración avanzada 64

Page 65: Telefonia IP Con Asterisk -- Administrador Avanzado

[ENV]

[asterisk-connector]

enabled => yes

dsn => asterisk-connector

username => asterisk

password => 4st3r1sk

pooling => no

limit => 1

pre-connect => yes

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

Finalmente se debe editar el fichero /etc/asterisk/func_odbc.conf, en este fichero se configurar 'Funciones ODBC' en lenguaje SQL para leer o escribir datos en la BD. Se hace uso de la función del dialplan SQL_ESC, la cual permite pasar datos desde el diaplan a la BD y además de las variables: ARGn y VALn, que se usan para leer o escribir a la BD respectivamente.

Configurar func_odbc.conf

[profesor] ;NOMBRE DE LA FUNCION ODBC

dsn=asterisk-connector

writesql=update clase set nota='${SQL_ESC(${VAL1})}' where matricula='${SQL_ESC(${ARG1})}'

;Esta consulta setea la nota al alumno

[nota] ;NOMBRE DE LA FUNCION ODBC

dsn=asterisk-connector

readsql=SELECT nota,nombre FROM clase WHERE matricula='${SQL_ESC(${ARG1})}'

;Esta consulta lee la nota y el nombre del alumno

[evaluacion] ;NOMBRE DE LA FUNCION ODBC

dsn=asterisk-connector

writesql=update clase set evaluacion='${SQL_ESC(${VAL1})}' where matricula='${SQL_ESC(${ARG1})}'

;Esta consulta setea la evaluación al profesor por parte del alumno

Asterisk: Administración avanzada 65

Page 66: Telefonia IP Con Asterisk -- Administrador Avanzado

Terminado esto, se posee el siguiente esquema de configuración en cuanto a ODBC:

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

psql -U asterisk -d asteriskDB -W < clase.sql

psql -U asterisk -d asteriskDB -W < valores.sql

El contenido de los ficheros a cargarse es el siguiente:

/*clase.sql*/

CREATE TABLE clase (

id serial,

matricula int NOT NULL,

nombre varchar(20) NOT NULL,

nota int NOT NULL,

evaluacion int NOT NULL,

fecha timestamp without time zone NOT NULL,

UNIQUE (matricula)

);

/*valores.sql*/

INSERT INTO clase (matricula,nombre,nota,evaluacion) VALUES ('123450','Fulano Fufu','0','0'),

('123456','Zutano Zapata','0','0'),('234567','Mengano Mata','0','0'),('345678','Pepito Perez','0','0');

Finalmente editar el dialplan para poder realizar lo pedido. Se hará uso de la función ODBC_() para leer/escribir a la BD. Su síntaxis es la siguiente:

Lectura:

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

En este caso, la función ODBC_, busca en el fichero func_odbc.conf el nombre de la función dado por 'funcionODBC'. Se pasan las variables ARG1-ARGn, pueden ser 0 o más variables, de acuerdo a lo requerido por la sentencia SQL en func_odbc.conf. Finalmente se ejecuta la

Asterisk: Administración avanzada 66

Page 67: Telefonia IP Con Asterisk -- Administrador Avanzado

consulta y el valor obtenido se setea a VARIABLE.

Escritura:

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

En este caso, la función ODBC_, busca en el fichero func_odbc.conf el nombre de la función dado por 'funcionODBC'. Se pasan las variables ARG1-ARGn, pueden ser 0 o más variables pero también se pasan los valores VAL1-VALn los cuales indican a la sentencia SQL en func_odbc.conf que serán usados para una acción de escritura. Finalmente se ejecuta la consulta y se actualiza la base de datos con los nuevos parámetros.

Ejemplo de dialplan para uso de ODBC:

exten => 9999,1,Answer()

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

same => n,Waitexten(5)

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

same => n,Read(codigo,,6)

same => n,Set(ARRAY(nota,nombre)=${ODBC_nota(${codigo})})

same => n,Festival(${nombre}? su nota? es? ${nota}?)

same => n,HangUp()

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

same => n,Read(codigo,,6)

same => n,Set(ARRAY(nota,nombre)=${ODBC_nota(${codigo})})

same => n,GotoIf($[ISNULL(${nombre})]?incorrecto:)

same => n(ingrese),Festival(Ingrese? la nota? del profesor? entre? cero? y diez?)

same => n,Read(calf,,2)

same => n,GotoIf($[${calf} > 10]?mal:continuar)

same => n(continuar),Set(ODBC_evaluacion(${codigo})=${calf})

same => n,Festival(Calificaion? ingresada correctamente?)

same => n,Festival(La? calificacion ingresada fue? ${calf}?)

same => n(incorrecto),HangUp()

same => n(mal),Festival(Vuelva? a ingresar? la calificacion?)

same => n,Goto(ingrese)

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

same => n,Read(matricula,,6)

same => n,Set(ARRAY(nota,nombre)=${ODBC_nota(${matricula})})

same => n,GotoIf($[ISNULL(${nombre})]?nocorrect:)

same => n(ingresar),Festival(Ingrese? la nota? del estudiante? ${nombre}? entre? cero? y? diez?)

same => n,Read(notas,,2)

Asterisk: Administración avanzada 67

Page 68: Telefonia IP Con Asterisk -- Administrador Avanzado

same => n,GotoIf($[${notas} > 10]?incorrecto:continue)

same => n(continue),Set(ODBC_profesor(${matricula})=${notas})

same => n,Festival(Calificaion? actualizada correctamente? para el? estudiante? ${nombre}?)

same => n,Festival(La? calificacion ingresada fue? ${notas}?)

same => n(nocorrect),HangUp()

same => n(incorrecto),Festival(Vuelva? a ingresar? la calificacion?)

Asterisk: Administración avanzada 68

Page 69: Telefonia IP Con Asterisk -- Administrador Avanzado

3.5 AGI: Asterisk Gateway Interface

El Asterisk Gateway Interface (AGI) permite desarrollar aplicaciones externas que pueden interactuar con Asterisk. Estas aplicaciones pueden escribirse en distintos lenguajes de programación y de hecho existen librerías 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 programación que se esté usando, para hacer teóricamente cualquier tarea, acción o proceso a través de asterisk. Como un ejemplo sería 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 límite fijado o el envío de datos del llamante a un CRM, etc. Como se menciona, todo depende de la potencia del lenguaje de programación y de la imaginación y uso que se quiera hacer de la central.

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

Normalmente cuando se usa un AGI, el intercambio de información se realiza a través de los descriptores STDIN/STDOUT.

Tipos de AGI:

AGI estandar: Es aquel AGI que se puede usar localmente. Generalmente es un programa escrito en algún lenguaje de programación, 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 ejecución para continuar con la ejecución normal del dialplan.

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

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

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

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

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

Asterisk: Administración avanzada 69

Page 70: Telefonia IP Con Asterisk -- Administrador Avanzado

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

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

Práctica 3.5.1: Implementación de AGI con perl:20

Perl es un pontente lenguaje de scripting, no necesita compilarse y su síntaxis es parecida a otros lenguajes como php o python. Además posee la facilidad de instalar bibliotecas adicionales para usar características especiales como conexion a bases de datos o tratamiento de objetos web. En este caso, se instalará la librería Asterisk::AGI.

La librería, así como también su documentación se encuentran en:

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

Descargar, descomprimir e instalar:

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

# perl Makefile

# make install

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

#!/usr/bin/perl

use Asterisk::AGI;

$AGI = new Asterisk::AGI;

%input = $AGI->ReadParse();

$op1 = $AGI->get_variable('var1');

$op2 = $AGI->get_variable('var2');

$ope = $AGI->get_variable('menu');

for ($ope) {

/1/ and do {$total=$op1+$op2;};

/2/ and do {$total=$op1-$op2;};

/3/ and do {$total=$op1*$op2;};

/4/ and do {$total=$op1**$op2;};

}

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

Asterisk: Administración avanzada 70

Page 71: Telefonia IP Con Asterisk -- Administrador Avanzado

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

Escribir en el dialplan el contexto y las líneas necesarias para llamar y hacer funcionar el AGI:

exten => 111,1,Answer()

same => n,Festival(Ingrese tres numeros)

same => n,Festival(Ingrese el primer valor)

same => n,Read(var1,,3,,,3)

same => n,Festival(Ingrese el segundo valor)

same => n,Read(var2,,3,,,3)

same => n,Festival(Uno Suma Dos Resta Tres Multiplicacion Cuatro Potencia)

same => n(op),Read(menu,,1,,,3)

same => n,GotoIf($[$["${menu}"="0"]|$["${menu}">"4"]]?ingresar:continuar)

same => n(ingresar),Festival(Valor incorrecto ingrese un valor entre uno y cuatro)

same => n,Goto(op)

same => n(continuar),Agi(operacion.pl,var1,var2,menu1)

same => n,Festival(El resultado es: ${RESULTADO})

same => n,HangUp()

Práctica 3.5.2: Instalación de AGIs para el uso de tts y motor asr de google:

Se descargarán e instalarán un par de AGIs listas, para poder usar los servicios de google en lo referente a síntesis de voz y reconocimiento del habla. Toda la documentación, así como los scripts se encuentran en las siguientes páginas:

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

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

# yum install flac perl-libwww-perl

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

Descargar, descomprimir y localizar los ficheros googletts.agi y speech-recog.agi. Copiarlos al directorio de AGI's de asterisk.

Su uso es como sigue:

TTS:

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

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

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

Asterisk: Administración avanzada 71

Page 72: Telefonia IP Con Asterisk -- Administrador Avanzado

Lenguaje: es_EC, en_US, etc.

Esta agi retorna 4 variables a asterisk, que son:${utterance}: El texto reconocido.${confidence}: La probabilidad de haber reconocido lo dicho, dada entre 0 y 1${status}: Devuelve 0 si la tarea se completó con éxito, otro valor si hubo errores.${id}: Identificador proporcionado por google.

Asterisk: Administración avanzada 72

Page 73: Telefonia IP Con Asterisk -- Administrador Avanzado

3.6 AMI: Asterisk Manager Interface

AMI (Asterisk Manager Interface) es una interfaz de monitoreo y gestión 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 configuración manager.conf.

La única limitación es que Asterisk no está preparado para recibir muchas peticiones a través del AMI, lo que puede causar su inestabilidad.

También es posible usar AMI a través de HTTP gracias a que asterisk implementa un sencillo servidor HTTP. Esto permite a una aplicación externa la administración de Asterisk a través de este protocolo. AMI a través de HTTP se configura en /etc/asterisk/http.conf

Práctica 3.6.1: Trabajando con AMI

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

[general]

enabled=yes

webenabled=yes

bindaddr=127.0.0.1

[curso_asterisk]

secret=4st3r1sk

read=system,call,agent,user,config,dtmf,reporting,cdr,dialplan

write=system,call,agent,user,config,command,reporting,originate

Guardar y recargar asterisk, observar los clientes del manager con el comando manager show users. Finalmente, usar telnet para probar la conexión 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

Asterisk: Administración avanzada 73

Page 74: Telefonia IP Con Asterisk -- Administrador Avanzado

Action: Logoff

Response: Goodbye

Message: Thanks for all the fish.

Connection closed by foreign host.

Práctica 3.6.2: Instalación de una interfaz de administración para asterisk.21

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

Primero, realizar un backup de todos los ficheros de configuración de asterisk:

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

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

[general]enabled=yeswebenabled=yesport=5038httptimeout=60bindaddr=dir_ip_servidor

[admin]secret=contraseñaread=system,call,log,verbose,agent,user,config,dtmf,reporting,cdr,dialplanwrite=system,call,agent,user,config,command,reporting,originate

Editar también el fichero http.conf:

[general]enabled=yesenablestatic=yesbindaddr=dir_ip_servidorbindport=8088

Recargar Asterisk, y proceder a la instalación del GUI, se usará asterisk-GUI ya que esta bien integrado a Asterisk además es desarrollado por digium. Primero se debe tener subversion en el sistema:

# yum install subversion

# cd /usr/src

Copiar con subversion la última versión de asterisk-GUI:

# svn co http://svn.asterisk.org/svn/asterisk­gui/branches/2.0

# cd 2.0

# ./configure

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

Asterisk: Administración avanzada 74

Page 75: Telefonia IP Con Asterisk -- Administrador Avanzado

# make

# make install

# make checkconfig

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

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

Si no funciona, probar con el siguiente link:

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

Asterisk: Administración avanzada 75

Page 76: Telefonia IP Con Asterisk -- Administrador Avanzado

BIBLIOGRAFÍA

• Telefonía IP con Asterisk. Sidevox.

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

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

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

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

• Libro Asterisk 1.8.X v1.0 . VozToVoice

• www.voztovoice.org

• www.sinologic.net

• Asterisk The Definitive Guide. O'reilly.

Asterisk: Administración avanzada 76

Page 77: Telefonia IP Con Asterisk -- Administrador Avanzado

Índice del usuarioCAPÍTULO 1ASTERISK: PRIMEROS PASOS........................................................................................................3

1.1 INSTALACIÓN DE LINUX Y COMANDOS BÁSICOS........................................................31.2 GENERALIDADES DE LA TELEFONÍA TRADICIONAL Y TELEFONÍA IP....................81.3 VoIP y TELEFONÍA IP...........................................................................................................101.4 ASTERISK...............................................................................................................................111.5 Hardware para Asterisk............................................................................................................151.6 INSTALACIÓN DE ASTERISK............................................................................................171.7 ASTERISK FIRST LOOK......................................................................................................201.8 CÓDECS DE AUDIO:............................................................................................................211.9 PROTOCOLO SIP...................................................................................................................221.10 PROTOCOLO IAX2.............................................................................................................281.11 CONFIGURACIÓN DE CANALES DAHDI.......................................................................31

CAPÍTULO 2DIALPLAN........................................................................................................................................32

2.1 INTRODUCCIÓN AL DIALPLAN........................................................................................322.2 PATRONES DE NUMERACION...........................................................................................362.3 EXTENSIONES ESTANDARES...........................................................................................362.4 VARIABLES...........................................................................................................................362.5 FUNCIONES...........................................................................................................................372.6 APLICACIONES.....................................................................................................................382.7 EXPRESIONES Y OPERADORES........................................................................................392.8 INTERCONEXIÓN DE CENTRALES..................................................................................422.9 MACROS................................................................................................................................442.10 ASTDB..................................................................................................................................452.11 FUNCIONES DE PBX..........................................................................................................462.12 CONFERENCIA...................................................................................................................50

CAPÍTULO 3DIALPLAN AVANZADO..................................................................................................................52

3.1 Asterisk CDR...........................................................................................................................523.2 Configuración de CDR en PostgreSQL...................................................................................523.3 Distribución Automática de Llamadas – Colas de Espera.......................................................553.4 Integracioń con bases de datos relacionales: ODBC...............................................................623.5 AGI: Asterisk Gateway Interface.............................................................................................693.6 AMI: Asterisk Manager Interface............................................................................................73

BIBLIOGRAFÍA................................................................................................................................76

Asterisk: Administración avanzada 77