Está en la página 1de 58

Tutorial de

ndice de captulos

Seccin 1
1. Qu es la VoIP
VoIP Qu es y por qu es tan importante?
Breve historia de la VoIP
Pero qu supuso el verdadero 'boom' de la VoIP?
2. Los protocolos que hay detrs de la VoIP
Protocolos ms importantes
Paquetes de Voz
Sealizacin - Protocolo H.323
Sealizacin - Protocolo SIP
Sealizacin - Protocolo IAX
3. Qu son y cmo funcionan los cdecs?
4. La infraestructura de la VoIP y Proveedores de VoIP
Infraestructura de una red de VoIP
Proveedores de VoIP
Seccin 2
1. Qu es Asterisk? Digium y la comunidad de Asterisk
Todava no sabes qu es Asterisk?
Digium y la comunidad de Asterisk
2.Interfaces Web para Asterisk
3. Asterisk 11 LTS - Qu cosas nuevas trae?
Seccin 3
1. Instalacin y configuracin Asterisk
Instalacin de Asterisk
Configurando Asterisk - sip.conf
Configurando Asterisk - extensions.conf
2. IVR y funciones Dialplan
Creando un IVR
Buzones de Voz
Fichero sip.conf
Fichero extensions.conf
Fichero voicemail.conf
Aplicaciones imprescindibles en tu Dialplan
3. Trabajando con Bases de datos
La base de datos interna de Asterisk
Conexin con bases de datos externas
Conectando con la BBDD
Aplicando la nueva configuracin
Llamadas a la base de datos desde el Dialplan
Seccin 3
1. El CLI de Asterisk
2. La eterna pelea con la NAT y el Trunking
NAT en Asterisk
Trunking

2
Seccin 1
1. Qu es la VoIP

VoIP Qu es y por qu es tan importante?


A estas alturas todava no sabes lo que es la VoIP? Pu1es siendo lo ms precisos
posible podramos decir que la VoIP es una tecnologa de comunicacin que hace
posible que la voz digitalizada viaje a travs de Internet empleando el protocolo IP
(Internet Protocol) en lugar de hacerlo de forma analgica a travs de circuitos
dedicados.
Como la aplicacin ms comn de la VoIP es la telefona (Telephony over IP, ToIP),
casi nunca se habla de ToIP sino que hablamos de VoIP refirindonos a la
posibilidad de realizar llamadas telefnicas a travs de Internet ahorrando en costes
de establecimientos de llamada, tarificaciones por uso de la red telefnica, costes
por roaming, etc.
La idea de cmo funciona todo esto es muy sencilla: El origen solicita una conexin
con el destino mediante envo de informacin a travs de la red y, cuando la
comunicacin se acepta, se comienza a enviar la voz digitalizada desde cada
extremo al opuesto, hasta que se finalice la llamada.

Breve historia de la VoIP


Aunque todava quedan muchas compaas de telefona que se resisten al cambio,
lo cierto es que el mundo actual tiende a la VoIP tanto por el incremento de
conexiones de banda ancha como por la gestin y servicios de valor aadido que
ofrece la VoIP. Pero... Cmo hemos llegado hasta aqu
Por no hacer este apartado demasiado extenso, vamos a contar la historia de la
telefona de manera muy resumida...
Todo empieza en 1871 cuando Antonio Meucci (y no Graham Bell como mucha
gente piensa) inventa el telfono, un dispositivo capaz de transmitir voz entre dos
extremos separados por un material conductor (un cable). Pronto el invento ira

3
ganando la atencin de empresarios y gran pblico apareciendo los primeros
enlaces de telefona por hilos. Las conexiones al principio eran punto a punto as
que por cada destino al que quisiramos llamar tendramos que tener un cable
directamente conectado con dicho destino. Como esta solucin era inviable, se
trabaj en desarrollar una solucin que permitiera dirigir las llamadas punto a
multipunto con lo que aparece la centralita telefnica manual.

Con el tiempo, fuimos consiguiendo que las cosas funcionaran de manera


automtica y aparecieron las primeras centralitas telefnicas de conmutacin
automtica que aprovechaban la marcacin de los usuarios para dirigir las llamadas
al destino deseado. Qu tiene de particular esta solucin? Pues que reservan
recursos de la red ya que cada llamada requiere un enlace directo entre el origen y el

4
destino. Las compaas telefnicas eran las propietarias de la los cables por los que
se enviaban las llamadas enrutadas.
Con el desarrollo de las redes de ordenadores, empezamos a enviar informacin
entre equipos situados a mucha distancia y no se tard en plantear la posibilidad de
enviar paquetes de datos de voz para "simular" el comportamiento de las redes
telefnicas tradicionales. La diferencia principal entre esta solucin y la telefona
tradicional es que ya no se reservaran recursos en la red por lo que sta quedara
ms descongestionada y se podran reducir los costes de las llamadas. Cada
paquete con voz digitalizada sabe cul es su destino, y la red simplemente se
encarga de que se reciban los paquetes de voz. Cuando uno de los extremos no
habla, simplemente no se enva nada, y la red no se satura con canales que no se
utilizan. Aunque al principio, slo podamos contar con soluciones propietarias que a
su vez eran bastante caras e incompatibles entre s, con la aparicin de los sistemas
multimedia, y en concreto las tarjetas de sonido y su bajada de precios, se lleg a
una situacin en la que cualquier ordenador tena la capacidad de trabajar con VoIP.

Pero qu supuso el verdadero 'boom' de la VoIP?


Pues dos factores fundamentales: Por un lado, La aparicin en 1999 de una
plataforma de telefona de cdigo abierto creada por Mark Spencer, conocida como
Asterisk y que no tard en convertirse en la solucin de telefona por IP de referencia
a nivel mundial. Y por otro lado, la aparicin de proveedores de VoIP y servicios de
telefona IP que han simplificado el esquema de funcionamiento de cara a los
usuarios finales y que han conseguido en pases como Francia cuotas de mercado
que superan el 40% de la telefona total del pas.

2. Los protocolos que hay detrs de la VoIP


Para entender cmo funciona la VoIP tenemos que entender qu es un protocolo de
comunicaciones porque a fn de cuentas la VoIP es un intercambio de informacin
entre dos equipos.
Para no dar demasiados rodeos, podemos decir que un protocolo de
comunicaciones se define como un conjunto de reglas y/o de normas que permiten

5
que dos o ms equipos se comuniquen entre ellos. El smil ms sencillo es una
conversacin entre dos personas. Para que la comunicacin sea efectiva, ambas
personas tienen que hablar el mismo lenguaje y hacerlo de manera pausada,
respetando los espacios entre palabras, los silencios al final de cada frase y las
entonaciones adecuadas. En un protocolo de comunicaciones ocurre exactamente
lo mismo. No vale de nada que un equipo le diga a otro: "te estoy enviando datos" sin
que el otro equipo se haya enterado de que hay alguien que quiere comunicarse con
l. Y en el caso de la VoIP esta comunicacin es crucial puesto que la voz debe
transmitirse en tiempo real y con la mayor calidad posible.
Ahora s podemos entender por qu cuando usamos un protocolo de
comunicaciones hablamos de dos tipos de datos: Por un lado tenemos los datos
que marcan las reglas sobre cmo tiene que hacerse el intercambio de informacin
('sealizacin') y por otro lado tenemos la informacin til con los datos voz que es
lo que realmente queremos comunicar.

Protocolos ms importantes

Paquetes de Voz
Los paquetes de voz van a viajar siempre sobre el protocolo de transporte UDP (User
Datagram Protocol) que es un protocolo que no est orientado a conexin y no es
fiable aunque s que es mucho ms rpido que TCP. Adems, al no importar que
algunos paquetes se pierdan, no se retransmite informacin lo cual tambin supone
una ventaja a la hora de transmitir datos de voz.
Dentro de UDP, lo normal es que los paquetes de voz se encapsulen en tramas RTP
(Real-Time-Protocol) pero no vamos a profundizar este punto. Simplemente
tenemos que tener claro que va a existir un flujo de paquetes de voz que llegan al
destino. Si algn paquete se pierde por el camino no hacemos nada por recuperarlo
porque con la informacin que nos llega del resto de paquetes podemos
"recomponer" la seal de voz. En el apartado de Cdecs desarrollaremos mejor este
punto.

6
Sealizacin - Protocolo H.323
El protocolo H.323 es una recomendacin de la ITU (International
Telecommunication Union) y define el conjunto de reglas que tienen que seguirse
para proveer sesiones de comunicacin audiovisual en red. Se suele utilizar para
ToIP y videoconferencias y es una parte de la serie de protocolos H.32X, los cuales
tambin dirigen las comunicaciones RDSI, RTC SS7. No garantiza una calidad de
servicio y el transporte de datos puede, o no, ser fiable. Fue el primer protocolo que
se utiliz para la VoIP y aunque sigue en uso, cada vez se utiliza menos.

Sealizacin - Protocolo SIP


Tambin conocido como Protocolo de Inicio de Sesiones (Session Initiation
Protocol), es un protocolo desarrollado por el IETF con la intencin de ser el
estndar de referencia para la iniciacin, modificacin y finalizacin de sesiones
interactivas de usuario donde intervienen elementos como el vdeo, la voz, la
mensajera instantnea, etc. Es un protocolo parecido a HTTP y SMTP ya que exista
un fuerte inters por que la telefona se convirtiera en un servicio ms en Internet.
Entre sus desventajas, la ms importante es que SIP da muchos quebraderos de
cabeza cuando una comunicacin pasa a travs de un dispositivo NAT (Network
Address Translation) ya que est pensado para transportar la sealizacin de una
llamada pero no el transporte del audio. As, mientras que la sealizacin utiliza
unos puertos fijos y estandarizados (el 5060 normalmente), el encargado de enviar
el audio (RTP) usa puertos elegidos al azar entre el 10.000 y el 20.000 lo que lleva a
que muchos firewalls/NAT no sean capaces de asociar el enlace establecido en la
sealizacin con el flujo de audio dentro de una llamada.

Sealizacin - Protocolo IAX


El protocolo IAX (Inter-Asterisk eXchange protocol), recogido en la RFC-5456, fue
diseado comoprotocolo de conexiones VoIP entre servidores de Asterisk aunque

7
hoy en da tambin se utiliza para conexiones entre clientes. Es un protocolo mucho
ms ligero, simple y compacto que H.323 y que SIP ya que la sealizacin no se
hace fuera de banda sino que sealizacin y datos viajan en los mismos paquetes.
Esta caracterstica permite reducir el nmero de conexiones simultneas y es la ms
adecuada para entornos en los que firewalls y NATs nos pueden dar problemas.
Entre sus inconvenientes, el ms importante es que IAX2 no es un estndar con lo
que no est implementado en muchos dispositivos que estn en el mercado. Otro
inconveniente es que si utilizamos un servidor SIP, la sealizacin de control pasa
siempre por el servidor pero la informacin de audio puede viajar extremo a extremo
sin tener que pasar necesariamente ste. En IAX, al viajar la sealizacin y los datos
de forma conjunta, todo el trfico de audio debe pasar obligatoriamente por el
servidor IAX, por lo que se produce un aumento en el uso del ancho de banda que
deben soportar los servidores IAX sobretodo cuando hay muchas llamadas
simultneas.
Como la primera versin de IAX se qued corta casi al principio, apareci una
segunda versin (IAX2) que es la que se utiliza hoy en da.

3. Qu son y cmo funcionan los cdecs?


Para entender de forma sencilla qu es y cmo funciona un cdec, lo primero que
tenemos que tener en cuenta es que la voz humana es una forma de onda contnua
(analgica), mientras que la informacin que circula por una red de datos es discreta

8
(digital). Esto quiere decir que si queremos enviar paquetes con datos que
contengan la informacin necesaria para reproducir un fragmento de voz, tendremos
que digitalizar la voz previamente.

El proceso de convertir una seal analgica a una seal digital se realiza a travs de
un elemento llamado codificador. Si el codificador adems es capaz de realizar el
proceso contrario, esto es, pasar de una seal digital a una analgica aunque sea
slo de forma aproximada, entonces tendremos un codificador-decodificador. A un
codificador-decodificador tambin se le denomina 'cdec'.

9
Aunque pueda parecer que slo nos interesara seleccionar uno o dos cdecs
teniendo en cuenta los parmetros de calidad de voz (MOS, Mean Opinion Score) y
de bit-rate que necesita cada cdec, lo cierto es que de cara a nuestra red tambin
tenemos que fijarnos mucho en el tamao de los paquetes que vamos a enviar ya
que cada paquete de voz est formado tambin por bits que son utilizados para
temas de enrutamiento y correccin de errores. Como aaden carga, saturan la red y
hacen que el sistema completo vaya ms lento. Reducimos el nmero de paquetes
que tenemos que enviar hacindolos ms grandes? No siempre es una buena idea
porque la prdida de un paquete de gran tamao va a provocar un impacto mayor a
la salida, incluso un corte de la comunicacin!. Lo que se recomienda en estos
casos es tener cierto compromiso entre la cantidad de paquetes que se envan a la
red y la proteccin que queremos tener. El tamao de referencia deberan ser unos
20ms de voz por paquete.

10
4. La infraestructura de la VoIP y Proveedores de VoIP
Infraestructura de una red de VoIP

A la hora de hablar de infraestructura hacemos referencia a los distintos tipos de


equipos que podemos encontrarnos en una red de VoIP:

End-Points
Con este trmino englobamos a todos los equipos del lado cliente. Telfonos, s,
pero de diferentes tipos: Telfonos IP, Telfonos analgicos + adaptador ATA,
Softphones o Telfonos mviles smartphones.
Para el caso de los Telfonos IP resulta evidente que estamos hablando de un
telfono que ya est preparado para conectarse a una red IP. Este tipo de
dispositivos integra una serie de cdecs para hacer la conversin de manera
automtica y suele incorporar botones con funciones como llamada en espera,
respuesta automtica o agenda de contactos.

11
En el caso de los telfonos analgicos (los de toda la vida), como stos no pueden
conectarse directamente a una red de datos, lo que se hace es intercalar una etapa
que realice la conversin analgica/digital. A esta etapa se le denomina ATA
(Adaptador de telfono analgico). Aunque no presentan las funcionalidades y
ventajas de un telfono IP, muchas empresas siguen esta opcin al no querer
cambiar la infraestructura que tenan anteriormente.
Los softphones permiten utilizar un ordenador como terminal VoIP. Como su
nombre indica, es una aplicacin software que simula un telfono. Entre los modelos
ms conocidos destacan el X-Lite de CounterPath Corporation o el Zoiper
Softphone.

Tambin existen soluciones para terminales Android, IOs, Symbian,... pensadas para
telefona mvil. Con el auge de las comunicaciones 3G y 4G en telefona mvil,
todava 'no se entiende' que las compaas estn tan interesadas en vetar la VoIP en

12
la telefona mvil. No ser que estas compaas quieren que paguemos ms por un
servicio mucho peor? :)

Tarjetas de Comunicaciones
En Espaa los dos tipos de conexin telefnica ms importantes han sido
tradicionalmente la conexin telefnica bsica (analgica) y la conexin telefnica
mediante lnea RDSI que es digital pero no IP. Si queremos conectarnos a este tipo
de redes nos har falta un elemento capaz de realizar la conversin analgico-IP o
RDSI-IP. El elemento encargado de esta conversin recibe el nombre de tarjeta de
comunicaciones y su seleccin depender de la tecnologa (o conjunto de
tecnologas si hablamos de una tarjeta hbrida) a la que queramos conectarla: Lnea
telefnica bsica, Lnea telefnica por RDSI, Enlace GSM, Bluetooth, etc.

Gateways
Es la otra posibilidad de conectar nuestra red de VoIP a la red telefnica
convencional. Difiere de las tarjetas de comunicaciones en que aqu tenemos un
dispositivo externo que es el que hace de interfaz entre la red telefnica y la red IP.
Es como si sacramos la tarjeta de comunicaciones la colocsemos en un
dispositivo aparte. Existen gateways para lneas analgicas, para lneas digitales,
para lneas de GSM,... y el funcionamiento es idntico a su equivalente en tarjeta de
comunicaciones.

13
HA (High Availability) o Failovers
Se utilizan en entornos en los que existe una alta densidad de llamadas. Imaginemos
el caso de que tenemos un clster de alta disponibilidad formado por 2 servidores
fsicos. Si la centralita de VoIP se conectase por VoIP a la red telefnica bsica no
habra problemas ya que estaramos trabajando con tarjetas de red con
direccionamiento IP. Pero si salimos a la RTB con canales analgicos la cosa
cambia porque tenemos que disponer de algn mecanismo que nos permita
conmutar las lneas entre ambos servidores. Es por todo esto que entran en escena
los failovers. Este tipo de equipos redirigen la seal a una mquina determinada
dependiendo del estado de la misma.

Proveedores de VoIP

Hasta ahora hemos comentado que la VoIP nos permite ahorrar costes de todo tipo:
roaming, establecimiento de llamada, costes por tiempo de llamada,... pero slo si
no tenemos que pasar por una red telefnica tradicional. En ese caso, la seal digital
tendra que convertirse a seal telefnica y nos tarificara la empresa responsable de
la red telefnica tradicional.
Una alternativa a esta situacin es contar con un proveedor de VoIP. La labor de este
tipo de empresas es la de sustituir a la lnea telefnica convencional. De esta forma,

14
y a travs de un servicio disponible online (por lo que slo necesitaramos tener
conexin a Internet), podemos ahorrarnos los costes que acarrea tener contratada
una lnea de conexin con el responsable de la red telefnica tradicional y no slo
eso sino que tambin un equipo que realice la conversin digital/analgica y un
ahorro del coste de las llamadas porque los proveedores de VoIP, al tener
contratadas muchsimas lneas telefnicas, suele tener unos costes por lnea muy
inferiores. Si a eso le sumamos que las llamadas entre los clientes de un mismo
proveedor suelen ser gratuitas,... la recomendacin resulta obvia: Si tenemos una
gran cantidad de llamadas a telfonos que slo cuentan con tecnologa telefnica
tradicional (todo lo que no sea VoIP), la mejor alternativa es contratar un proveedor
de VoIP.
En Espaa tenemos unos cuantos: Voz.com, Netelip, Vozelia,... con calidades de
servicio ms o menos parecidas y con un servicio tcnico relativamente bueno. A
nivel cliente, todo es cuestin de comparar lo que ofrece cada una de ellas e
informarse bien de cmo funciona su servicio tcnico o la valoracin de sus
clientes. Por hablar de un tipo de solucin ms especializada, en mi equipo de
trabajo, Ubunet Telecom, somos especialistas en soluciones Full-VoIP
(Infraestructura + Gestin + Proveedor de VoIP + Soporte Tcnico + Plan de Mejora
Contnua), un tipo de solucin cada vez ms demandada por las empresas en la que
nos hacemos cargo de la implementacin, gestin y facturacin de todo el servicio
necesario para nuestros clientes.

15
En OpenWebinars.net tenemos todos estos
cursos a tu entera disposicin

Linux LPIC-1 Linux LPIC-1 NodeJS, AngularJS y


Examen 101 Examen 102 ExpressJS y TypeScript
MongoDB

Apps mviles con Servidores VoIP Desarrollo Virtualizacin de


PhoneGap con Asterisk Frontend Servidores con
Profesional Promox

Apps Mviles con Desarrollo


Titanium Alloy Backend con
Django

16
Seccin 2
1. Qu es Asterisk? Digium y la comunidad de Asterisk

Todava no sabes qu es Asterisk?


Asterisk es un servicio software, libre bajo licencia GPL, que proporciona
funcionalidades de centralita telefnica (PBX). Al igual que ocurre con cualquier otra
PBX, Asterisk puede conectarse a un grupo de telfonos para hacer llamadas entre
s enrutando dichas llamadas a los destinos adecuados e incluso a destinos en el
exterior de su red incluyendo a proveedores, lneas telefnicas tradicionales, lneas
GSM, lneas de datos, etc. Podramos decir que ms que una PBX es un servidor de
comunicaciones ya que tambin permite trabajar con videoconferencias,
interactividad con bases de datos, funcionalidades de IVR y un largo etctera.

Por hacer mencin a la explicacin que hacen de Asterisk desde su website oficial,
(www.asterisk.org), "Asterisk es un framework para la construccin de soluciones de
comunicaciones y aplicaciones multiplataforma y en tiempo real".
Hoy en da Asterisk cuenta con ms de un milln de sistemas de comunicaciones en
ms de 170 pases. Durante 2009 se convirti en el software Open Source ms
descargado y utilizado con ms del 85% del mercado de cdigo abierto y en l estn
basados sistemas tan famosos como Skype con los que se superan con creces a
los fabricantes de PBX tradicionales como Nortel, Cisco o Avaya.

17
Digium y la comunidad de Asterisk

La revolucin de la telefona digital tuvo su origen en 1999 cuando Mark Spencer


cre Asterisk, la primera plataforma de telefona digital Open Source. El servicio, con
soporte por parte de una comunidad de desarrolladores en cdigo abierto, pronto
hizo frente a las soluciones competidoras que eran propietarias y muy caras. Cuanto
ms creca la plataforma ms contribuidores ayudaban a mejorarla corrigiendo
errores, aadiendo novedades y en definitiva evolucionando el producto hasta lo que
conocemos hoy.
Digium, empresa fundada por Mark Spencer y para la cual trabaja en la actualidad
como CTO, es la empresa ms importante a nivel mundial de VoIP. No slo
proporciona soluciones de Comunicaciones Unificadas (Unified Communications)
sino que tambin comercializa sus propias tarjetas y gateways de comunicaciones.
De hecho, Asterisk est especialmente pensado para trabajar con la electrnica de
Digium aunque existen tambin otras alternativas de otras empresas. Sin Digium
Asterisk seguramente no hubiera sido capaz de evolucionar hasta lo que hoy
conocemos.
Resulta rentable tener un producto Open Source totalmente gratuito? Parece ser
que s porque Digium cuenta con varias entidades inversoras y no deja de desarrollar
nuevos productos relacionados con el mundo de la VoIP. Aqu lo importante no es
tanto desarrollar el producto sino su implementacin a medida y la adquisicin de
los equipos que pueda necesitar una empresa interesada en una infraestructura de
VoIP.

18
2.Interfaces Web para Asterisk
Una interfaz web para Asterisk es una aplicacin web con la que podemos trabajar
con Asterisk sin necesidad de tener ningn conocimiento de Linux y/o acceso a la
terminal del equipo donde tengamos el Asterisk instalado. Siempre ser mejor
contar con algn profesional con experiencia para adaptar los servicios a las
medidas de las necesidades de una empresa pero pueden servirnos como una
buena base a la hora de comprender muchos de los conceptos relacionados con la
VoIP.
Aunque se puede hacer referencia directamente al fantstico artculo publicado en
OpenWebinars.net por parte de Esau Abril (@EsauAbrilN) sobre las 7 distribuciones
Linux para VoIP con Asterisk ms utilizadas, vamos a hacer un pequeo comentario
sobre algunas de ellas.

FreePBX
Disponible en www.freepbx.org. Es una de las interfaces web ms conocidas porque
funciona bien y porque incluye muchas funcionalidades.

Lo mejor de esta distro es que es completamente modular, nos permite


ahorrar recursos en nuestro servidor y se facilita mucho el manejo. Adems,
como es de las distribuciones ms conocidas, hay mucha informacin en la
red.

Por comentar algo en su contra, todos los manuales de FreePBX utilizan


muchos tecnicismos por lo que si no somos expertos en telefona puede
costarnos bastante aprender a manejarla. Adems, algunos mdulos no
estn bien depurados y pueden llevarnos a fallos.

19
TrixBox (Fonality)
Disponible en www.fonality.com. Contaba con dos versiones, una libre bajo licencia
GPL2, y otra con soporte completo pero previo pago. Ahora slo est disponible la
de pago. Pensada ms paraaplicaciones empresariales, utiliza un lenguaje sencillo,
fcil de manejar, optimizada para sistemas Cloud,... La contra, es de pago y no
cuenta ya con comunidades de desarrolladores tan extensas como las de las otras
plataformas.

Elastix
Disponible en www.elastix.org. Es de las pocas que podemos encontrar totalmente
en espaol. Ha mejorado mucho en los ltimos aos gracias a los cursos de
formacin para la plataforma. Tiene herramientas bsicas de Asterisk y algunas
suyas propias.

Lo mejor - Adems de ser libre, estar disponible en espaol y que


seguramente sea de las ms completas junto a FreePBX, destaca la cantidad
de informacin que podemos encontrar sobre ella.

Lo peor - Nos obliga a tener CentOS, utiliza demasiados tecnicismos y si


luego queremos configurar algo directamente sobre los ficheros de

20
configuracin de Asterisk vamos a tener que sufrir un poco. Aunque se est
trabajando mucho en el tema de la seguridad todava falla.

AsteriskNOW
Basado en el panel libre que ofrece Digium a travs de la pgina de Asterisk
(www.asterisk.org), slo disponible en imagen ISO con Linux incluido, tiene como
pblico objetivo a desarrolladores, integradores de sistemas, estudiantes, hackers,...
y todo aquel que pueda contribuir de alguna forma a mejorar Asterisk. Existen varias
opciones de soporte previo pago pero la plataforma es totalmente gratuita y Open
Source.

Lo mejor - Como suele ser lo primero que prueban los iniciados en VoIP,
existe mucha documentacin. Adems viene perfecto si estamos trabajando
con equipos de Digium. Los ficheros de configuracin estn bien
estructurados y no es excesivamente complicado trabajar con ellos.

Lo peor - Pese a que debera ser la mejor plataforma por tener el respaldo de
Digium actualmente no ocupa la primera posicin de las interfaces web
libres. Al margen de esto, tambin destaca que hay que tener muchos
conocimientos de Asterisk para poder explotarla bien.

21
3. Asterisk 11 LTS - Qu cosas nuevas trae?
Asterisk mantiene siempre dos tipos de versiones en su pgina oficial de descargas
(http://www.asterisk.org/downloads). Por un lado, tenemos las versiones LTS (Long
Term Support) que son aquellas que van a tener soporte por parte de la comunidad
de Asterisk durante un tiempo prolongado (es por sto que son las recomendadas
para entornos en produccin); y versiones Standard con tiempo de soporte mucho
ms corto y que sirven como paso previo a futuras versiones LTS. De hecho, para las
versiones LTS se fija normalmente un soporte de unos cuatro aos ms un ao
adicional en cuanto a parches de seguridad, mientras que para las Standard se fija
un perodo no superior a un ao con uno adicional para parches de seguridad.

En la actualidad tenemos
Release Series Support Type Release Frequency Soporte Slo act. seguridad
Asterisk 12 Standard Cada 6-8 Semanas Hasta 2014-12-20 Hasta 2015-12-20
Cert. Asterisk 11 LTS 2-4 veces al ao Hasta 2016-10-25 Hasta 2017-10-25
Asterisk 11 LTS Cada 6-8 Semanas Hasta 2016-10-25 Hasta 2017-10-25
Cert. Asterisk 1.8 LTS 2-4 veces al ao Hasta 2014-10-21 Hasta 2015-10-21
Asterisk 1.8 LTS Cada 6-8 Semanas Hasta 2014-10-21 Hasta 2015-10-21

22
Asterisk 11 introduce algunos cambios y nuevas funcionalidades entre las que cabe
destacar respecto de Asterisk 10:

Un servicio de log de identificadores de llamada (Call Identifier Logging).


CallGroups y PickupGroups ahora pueden definirse como strings y se supera
el umbral de hasta 64 grupos que tenamos definido en versiones anteriores.

Manejadores para las llamadas a la aplicacin Hangup(). Ya no hace falta


incluir lneas de cdigo adicionales para analizar la causa de una llamada a la
aplicacin Hangup().

Soporte para ICE, DTLS-SRTP y SIP sobre WebSockets. Compatibilidad con


XMPP y mejora en la comunicacin con los protocolos de Google Jingle.

Podemos definir ACLs con el nombre que queramos y referenciarlas por su


nombre desde cualquier mdulo de Asterisk.

23
Seccin 3
1. Instalacin y configuracin Asterisk

Instalacin de Asterisk
Antes de instalar cualquier servicio, siempre se recomienda por motivos de
seguridad actualizar la mquina en la que vayamos a realizar dicha instalacin. En
este caso, se ha decidido instalar Asterisk en un SO Debian 7 y para ello vamos a
seguir los siguientes pasos:

1. Actualizar la mquina y reiniciarla:


sudo apt-get update

sudo apt-get upgrade

reboot

2. Instalar las libreras que sean necesarias:


sudo apt-get install build-essential

sudo apt-get install libncurses5-dev libnewt-dev


libmysqlclient-dev libmyodbc libssl-dev libxml2-dev
unixodbc-dev libsqlite3-dev uuid-dev libbison-dev

NOTA - Para no tener que estar escribiendo continuamente 'sudo', se

puede cambiar el usuario a 'root' y trabajar durante todo el proceso de

instalacin como 'root'.

3. Se descargan y descomprimen los ficheros de Asterisk:


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

24
tar zxvf certified-asterisk-11.6-current.tar.gz

cd certified-asterisk-11.6-current

4. Instalacin del servicio de Asterisk:


./configure

make menuselect

make

make install

make samples

make config

NOTA - Para cambiar algo en los ficheros de configuracin tendremos que


utilizar un editor como nano, vim o cualquier otro que se ajuste ms a las
preferencias del administrador del sistema.

5. Para lanzar Asterisk, o si se realiza algn cambio en la configuracin y es


necesario reiniciar el servicio, existen varias alternativas desde la terminal. La
ms recomendada es parar y volver a arrancar el servicio:
/etc/init.d/asterisk stop

/etc/init.d/asterisk start

6. O bien...
service asterisk stop

service asterisk start

25
Configurando Asterisk - sip.conf
Los dos ficheros de configuracin ms importantes de Asterisk posiblemente son el
sip.conf que es el fichero que permite definir los canales SIP, tanto para
llamadas entrantes como salientes, y el fichero extensions.conf que es el que
define el comportamiento que va a tener una llamada en nuestra centralita (qu
reglas rigen su enrutamiento o qu aplicaciones van a ejecutar). Si en vez de utilizar
el protocolo SIP se prefiere trabajar con IAX2, ser necesario configurar el fichero
iax2.conf de forma muy parecida a como se hace con el s
ip.conf.
Lo primero es que, al igual que ocurre con otros ficheros de configuracin de
Asterisk, el fichero sip.conf se encuentra dividido en secciones cuyos nombres, a

su vez, se encuentran definidos entre corchetes. La primera de ellas, [general],


permite definir las opciones generales de cada canal y, en consecuencia, los
parmetros generales de cada cliente.
[general]

language=es

disallow=all

allow=alaw

allow=ulaw

videosupport=no

...

Ya que los clientes SIP deben ser declarados previamente para poder lanzar o recibir
llamadas, lo siguiente que se puede hacer es definir uno o varios contextos para los
posibles clientes del servicio que proporciona Asterisk. Algunos de los parmetros
de configuracin ms importantes en este caso sern:

26
type - Tipo de cliente SIP. Existen 3 tipos: peer, user y friend en funcin
de cmo se manejan las llamadas entrantes/salientes y cmo se identifica el
usuario.

secret - Contrasea que utiliza el cliente para autenticarse en el sistema.


host - Direccin IP o nombre del host que utiliza el cliente. Si est asignada de
manera dinmica por DHCP, 'dynamic'.

context - Contexto al que pertenece el cliente.


qualify - Si est puesto a 'yes', se monitoriza el estado de la extensin.
mailbox - Indica el buzn de voz correspondiente a esa extensin.

Para definir dos extensiones, la 102 y la 103 utilizando estos y algunos


parmetros ms...
[general]

language=es

disallow=all

allow=alaw

allow=ulaw

videosupport=no

...

[102]

type=friend

secret=1ezkR

host=dynamic

27
context=ext_internas

callerid="Jose Luis" <102>

dtmfmode=rfc2833

qualify=yes

mailbox=1002@default

...

[103]

type=friend

secret=e7uKz

host=dynamic

context=ext_internas

callerid="Beatriz" <103>

dtmfmode=rfc2833

qualify=yes

mailbox=1003@default

...

Si fuera necesario configurar cientos de extensiones, quizs sea ms cmodo de


cara a la programacin definir una mscara y aplicarla a cada una de las
extensiones que se quiera crear. En este caso, a la mscara se le ha llamado
extensiones-internas y se han definido las extensiones 102 y 103
cambiando nicamente los parmetros necesarios.

28
[general]

language=es

disallow=all

allow=alaw

allow=ulaw

videosupport=no

...

[extensiones-internas](!)

type=friend

host=dynamic

context=ext_internas

dtmfmode=rfc2833

qualify=yes

...

[102](extensiones-internas)

secret=1ezkR

callerid="Jose Luis" <102>

mailbox=1002@default

[103](extensiones-internas)

secret=e7uKz

29
callerid="Beatriz" <103>

mailbox=1003@default

Para profundizar en este tema lo mejor es coger el fichero de configuracin por


defecto, o de ejemplo, que trae Asterisk y leerse uno a uno cada uno de los
parmetros que incluye. Con algo de experiencia, y muchas ganas de aprender, se
depurar cualquier fallo en las comunicaciones que se produzca por una mala
configuracin de los clientes SIP.

Configurando Asterisk - extensions.conf


El fichero de configuracin extensions.conf es el que controla el plan de
marcado (dialplan) de la centralita. Se puede decir que es el corazn de Asterisk ya
que define cmo se comportarn las llamadas entrantes y salientes en el sistema.
Este fichero est compuesto por contextos, extensiones y prioridades. Se comenta
brevemente en qu consiste cada una de ellas:
Contextos - Los contextos son cada una de las secciones en las que est dividido el
dialplan y es lo que permite separar o incluir fragmentos de cdigo en ste. Existen 3
contextos reservados: general, global y default. Si una extensin, de las

que hay definidas en el fichero sip.conf, tiene como parmetro context un


contexto de los que hay definidos en el dialplan, cuando dicha extensin efecte una
llamada, empezarn a ejecutarse las lneas de cdigo asociadas a dicha extensin
en ese contexto.

Extensiones - Una extensin es cada una de las llamadas que permiten


ejecutar un fragmento de cdigo de un contexto. Cuando una extensin llama
a un nmero u otra extensin, lo normal es tener lneas de cdigo dentro del
dialplan que le indiquen al sistema cmo tiene que tratar esa llamada. Por
ejemplo: Primero que se descuelgue la llamada, luego que salte una locucin
y que se llame a dos destinos de manera simultnea. Una extensin se define
como un conjunto de valores: (nmero de

30
extensin,prioridad,aplicacin a ejecutar). El primero de
ellos, el "nmero de extensin", es el patrn que hay que marcar dentro

de dicho contexto para llamar al destino objetivo. La "prioridad" indica el


orden en el que se van a ejecutar las sucesivas instrucciones asociadas a un
mismo "nmero de extensin" y la "aplicacin a ejecutar" es

la orden que se va a ejecutar en la lnea dada por el "nmero de

extensin" y la prioridad "prioridad".


Con una presentacin de un caso prctico, todos estos conceptos quedarn ms
claros.
[llamadas-entrantes]

exten => 958993803,1,NoOp(Tenemos una llamada


entrante...)

exten => 958993803,2,Answer()

exten => 958993803,3,Playback(bienvenida)

exten => 958993803,4,Dial(SIP/958)

exten => 958993803,5,Hangup()

[llamadas-salientes]

exten => 20001,1,Dial(SIP/102&SIP/103)

exten => 20001,2,Hangup()

exten => 20002,1,Dial(SIP/104&SIP/105)

exten => 20002,2,Dial(SIP/106)

31
exten => 20002,3,Hangup()

Se puede ignorar el nmero de la prioridad si sta se edita como same => n, ('n'

de 'next). Con esta opcin no slo se gana en rapidez a la hora de programar la


centralita sino que tambin se evita tener que cambiar todas las lneas posteriores
para esa misma extensin en caso de aadir nuevas lneas en el futuro.
[casa] ; Nombre del contexto

exten => 30001,1,NoOp(IVR de casa) ; NoOp es una


aplicacin que no hace nada ms que mostrar por el CLI de
Asterisk el mensaje que se le indique como parmetro.

same => n,Answer() ; Para responder la


llamada

same => n,Wait(1) ; Esperar un segundo


antes de seguir ejecutando el dialplan

same => n,Playback(mensaje-de-bienvenida) ; Reproducir un


mensaje de nombre 'mensaje-de-bienvenida'

same => n,Dial(IAX2/2014) ; Llamar a travs del


protocolo IAX2 a la extensin 2014 definida en el fichero
iax.conf

same => n,Hangup() ; Terminar la llamada

Tambin se pueden definir patrones de marcado para ejecutar el mismo fragmento


de cdigo para mltiples y distintas extensiones. Por poner un ejemplo de una
oficina con 5 extensiones, podemos escribir un fragmento de cdigo que se ocupe
extensin a extensin de que los usuarios puedan llamarse entres s o podemos
generar un nico fragmento de cdigo con un patrn de marcado (pattern) que
permita llamar a distintos destinos en tan slo 3 lneas de cdigo:

32
[empresa]

exten => _400X,1,NoOp(Llamando a la extensin ${EXTEN})

same => n,Dial(SIP/${EXTEN})

same => n,Hangup()

Con estas 3 lneas la centralita interpreta que si se llama a cualquiera de las


extensiones definidas por el patrn de marcado 400X (en el rango: 4000, 4001,

4002... 4009), estaremos llamando al cliente SIP con nmero de cliente igual al
valor almacenado en la variable reservada EXTEN y que coincide con el nmero que
se acaba de marcar. Como se puede observar, el juego que da un patrn de marcado
es muy amplio.

2. IVR y funciones Dialplan

Creando un IVR
Un IVR (de Interactive Voice Response) es, como su propio nombre indica, un men
de voz interactivo que permite interactuar de forma automtica con el otro extremo
de la comunicacin con un fin determinado.
Hoy en da lo normal es encontrarse con un IVR de bienvenida cuando se llama a
cualquier gran empresa. El caso ms obvio es el de las grandes operadoras de
telefona que cuentan con IVRs cuyo nico objetivo es redirigir al usuario al
departamento que pueda resolver su consulta de la forma ms precisa posible pero
que lo hacen con tanto nivel de detalle (submens) que puede resultar muy molesto
de cara al usuario final.
En este apartado vamos a disear un IVR que haga que todas las llamadas entrantes
escuchen una locucin de bienvenida seguida de una locucin que le pida al usuario
hacia dnde quiere redirigir su llamada (departamento comercial o departamento de
soporte tcnico). El cliente puede llamar 24 horas al da al departamento comercial
(que ser la opcin 1) pero si lo hace al de soporte (opcin 2) fuera de su horario de

33
oficina (que vamos a suponer de 08:00 a 15:00), entonces saltar el buzn de voz de
soporte. Si el cliente no selecciona ninguna de las dos opciones o la opcin
seleccionada no es vlida, saltar un mensaje de despedida. Toda esta
configuracin se incluye en el fichero extensions.conf.

[globals]
COMERCIAL=SIP/200&SIP/201&SIP/202 ; Variable con las extensiones del dpto
comercial
SOPORTE=SIP/300&SIP/301 ; Variable con las extensiones del dpto de
soporte

[llamadas-entrantes]
exten => s,1,NoOp(Llamada entrante de ${CALLERID(num))
same => n,Answer()
same => n,Playback(bienvenida)
same => n,Background(menu-ivr)
same => n,WaitExten(4)

exten => 1,1,NoOp(El usuario ha elegido la opcin ${EXTEN} - Departamento


Comercial)
same => n,Dial(${COMERCIAL})
same => n,Hangup()

exten => 2,1,NoOp(El usuario ha elegido la opcin ${EXTEN} - Departamento


Soporte)
same => n,GotoIfTime(08:00-15:00,mon-fri,*,*?continuar,contestador)

same => n(continuar),NoOp(Llamando al Departamento de Soporte)


same => n,Dial(${SOPORTE})
same => n,Hangup()

same => n(contestador),NoOp(Llamada fuera de horario)


same => n,Playback(fuera-de-horario)
same => n,VoiceMail(1000@default)
same => n,Hangup()

exten => _ [ti],1,NoOp(Ha saltado temporizador 't' u opcin no vlida 'i')


same => n,Playback(despedida)
same => n,Hangup()

Comentar un par de detalles sobre este ejemplo:

La extensin s es la extensin por defecto de Asterisk. Coincide con todas las


entradas por lo que suele ser una buena opcin a la hora de definir llamadas
entrantes que queremos que pasen por un nico camino.

34
La aplicacin GotoIfTime permite realizar un salto en la ejecucin del
dialplan en funcin del tiempo del sistema. En este caso, si el momento en
que se ejecuta esta regla es entre las 08:00 y las 14:00 de lunes a viernes,
entonces saltar a la prioridad con etiqueta 'continuar'. Si la condicin no

se cumple, saltar a la prioridad con la etiqueta 'contestador'.

Buzones de Voz
Quizs uno de los servicios que ms ha costado conseguir para la telefona
tradicional, es uno de los servicios ms sencillos de Asterisk. Para crear un buen
sistema de buzn de voz tan solo hace falta responder a tres cuestiones: Cuntos
mensajes esperamos recibir en nuestro buzn de voz? Cuntos buzones de voz
hacen falta en una empresa? y Queremos integrar el servicio de buzn de voz con
otros servicios como es el caso del correo electrnico?
Con Asterisk se pueden responder a estas tres preguntas y sin ms dificultad que
aadir pocas lneas ms en el dialplan y configurar tambin el fichero
voicemail.conf que es el que permite definir cada buzn de voz y su
comportamiento.
Sea una empresa de 2 empleados en la que queremos configurar un buzn de voz
para cada uno de stos empleados y uno en comn que ser el general de la
empresa. Cada empleado tiene su cuenta de correo de empresa y un usuario SIP
definido en el fichero sip.conf. Se aaden las siguientes lneas en los siguientes
ficheros:

Fichero sip.conf

[general]
language=es
disallow=all
allow=alaw
allow=ulaw

35
videosupport=no
...

[103]
type=friend
secret=e7uKz
host=dynamic
context=trabajadores
callerid="Beatriz" <103>
dtmfmode=rfc2833
qualify=yes
mailbox=1003@default
...

[104]
type=friend
secret=ieLp3
host=dynamic
context=trabajadores
callerid="ngeles" <104>
dtmfmode=rfc2833
qualify=yes
mailbox=1004@default
...

Fichero extensions.conf

[trabajadores]
include => internas
include => funciones ; Incluimos varios contextos como si fueran parte del
contexto 'trabajadores'

[internas]
...
exten => _000XXXX,1,NoOp(Dejar mensaje en buzn de ${EXTEN:3}) ; Con ${EXTEN:3}
se recortan los 3 primeros dgitos de la variable EXTEN
same => n,Answer()
same => n,VoiceMail(${EXTEN:2}@default) ; Para dejar un mensaje en el buzn XXXX
del grupo 'default' del voicemail.conf
same => n,Hangup()
...

[funciones]
...
exten => _000*,1,NoOp(Accediendo al buzn de ${CALLERID(num)})
same => n,Answer()
same => n,VoiceMailMain(${CALLERID(num)}@default) ; Para acceder al buzn de voz
de la propia extensin que est llamando
same => n,Hangup()
...

36
Fichero voicemail.conf
[general] format=wav49|gsm|wav ; Formato del mensaje de audio ... [zonemessages]
european=Europe/Copenhagen|'vm-received' a d b 'digits/at' HM [default] 1003 =>
pass_bea,B.
Sanchez,beatriz@miempresa.com,,attach=yes|saycid=yes|envelope=yes|delete=yes|t
z=european 1004 => pass_ngela,A.
Santos,angeles@miempresa.com,,attach=yes|saycid=yes|envelope=yes|delete=yes|t
z=european
Como se puede comprobar, el fichero voicemail.conf contiene todos los
parmetros necesarios para configurar cada buzn de voz. Los mensajes
convertidos a ficheros de audio se almacenan por defecto en el directorio
/var/spool/asterisk/voicemail/ aunque hoy en da es difcil encontrar a
una empresa que prefiera almacenar estos mensajes de voz y no enviarlos
directamente por correo electrnico configurando los parmetros delete, attach

mail de la forma adecuada.


ye

Aplicaciones imprescindibles en tu Dialplan


Aunque Asterisk ofrece cientos de aplicaciones para personalizar hasta el ltimo
detalle cualquier dialplan, casi siempre se utiliza una lista mucho ms corta pues
son las que ofrecen los servicios ms demandados o ms comnmente
demandados por las empresas. En esta seccin hemos querido recoger una
pequea seleccin con algunas de estas aplicaciones:
Para los interesados, la lista completa puede encontrarse en este enlace de la Wiki
oficial de Asterisk.

AGI
Permite ejecutar aplicaciones externas (principalmente scripts). Tiene una
variable asociada, AGISTATUS que permite comprobar si la ejecucin del

37
programa externo ha sido un xito, ha fallado o incluso si ha sido la
responsable de colgar una llamada.
Sintaxis: AGI(command,arg1,[arg2[,...]])

Answer
Responder a una llamada entrante (para ser ms exactos, responde a un
canal en estado 'ringing').
Sintaxis: Answer([delay,[nocdr]])

Background
Reproduce una locucin pasada como parmetro a la vez que espera a que el
lado al que se le est reproduciendo la locucin marque una extensin a la
que saltar dentro del Dialplan. En funcin del nmero de DTMFs que se quiera
especificar para el men, puede ser tambin necesario el uso de la aplicacin
WaitExten().
Sintaxis:
BackGround(filename1&[filename2[&...]],[options,[lang
override,[context]]])
Busy
Indica al lado llamante (calling part) que el lado llamado (called part) est
ocupado.
Sintaxis: Busy([timeout])

ConfBridge
Permite que un usuario entre en una sala de conferencias especfica. Si lo
desea, el usuario puede salirse de la sala colgando la llamada o pulsando un
DTMF si est configurado as. Esta aplicacin es la evolucin de la aplicacin
MeetMe. El uso de esta aplicacin es algo avanzado y est asociado al
fichero confbridge.conf.

38
Sintaxis:
ConfBridge(conference,[bridge_profile,[user_profile,[
menu]]])
Congestion
Indica al lado llamante (calling part) que el lado llamado (called part) est
congestionado.
Sintaxis: Congestion([timeout])

Dial
Es la aplicacin as importante de Asterisk. Permite lanzar una llamada a uno
o ms destinos especificados como argumentos de la aplicacin. Tiene
varias variables asociadas, DIALEDTIME, ANSWEREDTIME y DIALSTATUS
adems de ms de 20 opciones disponibles para utilizar como argumento
options.
Sintaxis:
Dial(Technology/Resource&[Technology2/Resource2[&...]
],[timeout,[options,[URL]]])

GoSub
Salta al punto del dialplan objetivo y contina la ejecucin del dialplan. Una
vez encuentra una orden de Return, vuelve al punto del programa desde el
cual se inici el salto. Existen alternativas a esta aplicacin con saltos
condicionales.
Sintaxis:
Gosub([context,[exten,]]priority[(arg1,[...][argN]]))
Goto

39
Es prcticamente idntica a la aplicacin GoSub nada ms que en este caso
no existe una ruta directa al mismo punto del programa desde el cual se inici
el salto. Existen alternativas a esta aplicacin con saltos condicionales.
Sintaxis: Goto([context,[extensions,]]priority)

Hangup
Permite colgar un canal que est siendo utilizado.
Sintaxis: Hangup([causecode])

NoOp
"Do Nothing". No realiza ninguna operacin pero si se le pasa como
argumento un string de texto, ste aparecer en el CLI de Asterisk cada vez
que se ejecute esta lnea. Principalmente se utiliza para depurar el dialplan.
Sintaxis: NoOp([text])

Queue
Mete la llamada entrante en una queue de llamadas a la espera de ser
atendidas por un agente libre. Tiene una variable asociada, QUEUESTATUS
que controla el estado de la queue a la que se quiere enviar la llamada.
Sintaxis:
Queue(queuename,[options,[URL,[announceoverride,[time
out,[AGI,[macro,[gosub,[rule,[position]]]]]]]]])
Read
Lee un valor por la entrada estndar y lo almacena en una variable.
Sintaxis:
Read(variable,filename&[filename2[&...]],[maxdigits,[
options,[attempts,[timeout]]]]])
Record

40
Graba en un fichero todo lo que diga quien ha lanzado la llamada a la
aplicacin. Es la funcin que se suele utilizar para grabar en el sistema
mensajes de voz personalizados.
Sintaxis:
Record(filename.format,[silence,[maxduration,[options
]]])
Set
Permite asignarle un valor a una variable.
Sintaxis: Set(name=value)

Verbose
Enva el mensaje pasado como parmetro a la salida de Verbose (si est
configurado el fichero logger.conf, los mensajes aparecern en los logs
del sistema).
Sintaxis: Verbose([level,]message)

VoiceMail
Permite dejar un mensaje en el buzn de voz (mailbox) indicado como

parmetro. Tiene una variable asociada, VMSTATUS que permite comprobar

si la llamada a la aplicacin VoiceMail ha sido un xito, ha fallado o

incluso si se ha abandonado antes de que la ejecucin de la aplicacin haya


almacenado algn dato.
Sintaxis: VoiceMail(mailbox1&[mailbox2[&...]],[options])

VoiceMailMain
Permite comprobar el estado del buzn de voz indicado como argumento. Da
acceso al men del buzn de voz para escuchar, cambiar de directorio o
borrar los mensajes de voz almacenados.
Sintaxis: VoiceMailMain([mailbox@[context]],[options])

Wait

41
Define la ejecucin del dialplan durante el tiempo (en segundos) que se le
indique a la aplicacin como argumento.
Sintaxis: Wait(seconds)

WaitExten
Espera durante un tiempo a que el usuario introduzca un nmero de extensin
al que saltar.
Sintaxis: WaitExten([seconds,[options]])

3. Trabajando con Bases de datos


La base de datos interna de Asterisk
Asterisk cuenta con una base de datos interna que utiliza para diferentes propsitos
pero que tambin podemos utilizar, por ejemplo, complementar el plan de marcado
con contenido dinmico o incluso crear condiciones de bloqueo como la del ejemplo
de este artculo.
La base de datos de Asterisk est basada en Berkeley v1 (a partir de Asterisk 10) y
su uso es bastante sencillo. La informacin se agrupa en familias, entradas y
valores. Por hacer un smil, una familia representara una columna de una tabla, cada
entrada sera una fila de esa columna y el valor es el valor propio que almacena esa
fila.
Si queremos usar la base de datos interna de Asterisk en nuestro dialplan tenemos
varias opciones:

1. Aadirunaentradaomodificarunaexistente:

exten => *543,1,Set(DB(contestador/activo)=1)

42
2. Borrarunaentrada:

exten =>
*544,1,NoOp(${DB_DELETE(contestador/activo)})

3. Copiarelvalordeunaentradaaunavariable:

exten =>
*545,1,Set(mivariable=${DB(contestador/activo)})

4. Saltoenfuncindelvalordeunaentrada:

exten =>
*546,1,GotoIf($["${DB(contestador/activo)}"="1"]?cont
estador_activo,contestador_inactivo

Vamos a ver cmo se puede hacer un desvo bsico de llamadas con Asterisk:

[extensiones]

43
exten => _1XX,1,NoOp(Llamada a la extensin ${EXTEN})

same => n,Set(destino=${DB(desvios/${EXTEN})})

same => n,Dial(SIP/${destino},,tTr)

same => n,Hangup()

include => desvios

[desvios]

exten => _*XXX,1,NoOp(Se realiza un desvo de


${CALLERID(num)} a ${EXTEN:1})

same =>
n,Set(DB(desvios/${CALLERID(num)})=${EXTEN:1})

same => n,Answer()

same => n,Playback(beep)

same => n,Hangup()

44
exten => _*000,1,NoOp(Se elimina el desvo de
${CALLERID(num)})

same =>
n,Set(DB(desvios/${CALLERID(num)})=${CALLERID(num)})

same => n,Answer()

same => n,Playback(beep)

same => n,Hangup()

Conexin con bases de datos externas

Este punto es quizs una de las mejores caractersticas que ofrece Asterisk a sus
usuarios avanzados. Gracias a la posibilidad de ejecutar unas funciones u otras en el
dialplan en funcin de consultas a una BBDD como puede ser MySQL, podemos
encontrar cientos de aplicaciones como agendas telefnicas, ivr personalizados en
funcin del CALLERID (sin lmites de entradas de usuario) o smplemente una

consulta a una entrada de una tabla va telefnica. En este punto centramos la


mirada en cmo se configura una conexin a una base de datos MySQL y cmo se
puede realizar una consulta a la misma desde nuestro dialplan. Podis ampliar ms
informacin sobre este tema en el artculo de David Muoz (@dperilla), Configurar
Asterisk para trabajar con MySQL usando ODBC disponible a travs de la plataforma
de OpenWebinars.net.

Para trabajar con una base de datos ODBC necesitamos instalar los paquetes
unixodbc-dev y libmyodbc (el primero es un conector genrico para ODBC y
el segundo es una librera con la que podemos trabajar con MySQL). Hacia qu

45
base de datos vamos a apuntar? Vamos a suponer que tenemos instalado MySQL
Server (si no lo tenemos, tan slo tendremos que hacer apt-get install

mysql-server), y que el programa est ejecutndose. La configuracin inicial


tendr la siguiente forma:

Conectando con la BBDD

Lo primero es editar el fichero /etc/odbcinst.ini para especificar el tipo de


base de datos a la que se quiere acceder:

[MySQL]

Description = MySQL ODBC Driver

Driver = /usr/lib/odbc/libmyodbc.so

FileUsage = 1

Lo segundo, editar el fichero /etc/odbc.ini con el que especificamos a qu


base de datos queremos apuntar:

[MySQL-Asterisk]

Description = Conector ODBC para MySQL

Driver = MySQL

46
Socket = /var/run/mysqld/mysqld.sock

Server = direccion_bbdd

User = usuario_bbdd

Password = password_bbdd

Database = nombre_bbdd

Option = 3

En el escenario ms comn, la base de datos estar en la misma mquina en la que


est ejecutndose el Asterisk. Si este es el caso, el campo Server apuntar a

localhost.
Para hacer que Asterisk pueda acceder a la base de datos objetivo, se edita el
fichero/etc/asterisk/res_odbc.conf con la siguiente configuracin:

[asterisk]

enabled => yes

dsn => MySQL-Asterisk

username => usuario_bbdd

47
password = password_bbdd

pooling => no

limit => 1

pre-connect => yes

Aplicando la nueva configuracin

Si toda la configuracin es correcta, tan slo tendremos que hacer que Asterisk
cargue la nueva configuracin para trabajar con la base de datos en MySQL. Para
ello, tan slo hay que ejecutar la siguiente lnea en el CLI de Asterisk (para los que no
lo conozcan, en el siguiente captulo le hemos dedicado un apartado entero).

CLI > module reload res_odbc.so

Llamadas a la base de datos desde el Dialplan

Aunque ya estamos preparados para leer y escribir datos en la base de datos que
hemos configurado anteriormente, primero vamos a crear una funcin personalizada
en el fichero/etc/asterisk/func_odbc.conf con el siguiente contenido:

[CALLERID]

dsn=asterisk

48
readsql=SELECT nombre FROM agenda_telefonica WHERE
numero='${SQL_ESC(${ARG1})}'

En realidad lo que estamos haciendo es editar una funcin que consulte en la tabla
agenda_telefonica el nombre asociado al nmero que le pasemos como argumento
a la funcin.
Para que Asterisk registre esta funcin, o cualquier otra que hayamos editado,
tendremos que volver al CLI de Asterisk y cargar el mdulo func_odbc.so:

CLI > module reload res_odbc.so

Ahora s, editamos el fichero extensions.conf y configuramos para cada


llamada entrante que se haga una consulta a la base de datos:

[llamadas-entrantes]

exten => _X.,1,NoOp(Llamada entrante de ${CALLERID(num)})

same =>
n,Set(CALLERID(name)=${ODBC_CALLERID(${CALLERID(num)})})

Seccin 3
1. El CLI de Asterisk
Una de las tareas ms importantes de un administrador de Asterisk es la supervisin
y correccin de fallos que pueden surgir en el sistema, tanto a nivel de servicio como
a nivel de entender por qu se ha producido un fallo en una llamada o si un cliente se
est registrando en el servicio o no. Para facilitar esta gestin contamos con el CLI

49
(Asterisk Command Line Interface), o traducido al espaol como "Interfaz por Lnea
de Comandos de Asterisk". Gracias a esta interfaz podemos realizar una amplia
variedad de acciones de administracin en el servicio de Asterisk entre las que
podemos destacar:

La obtencin de datos del estado del sistema y de sus componentes.


Aplicar cambios en la configuracin del sistema.
Visualizacin del log en tiempo real (errores, warnings, etc.).
Generar llamadas de prueba.
Ver informacin sobre APIs, aplicaciones y funciones y mdulos.
Para conectar con el CLI, tan slo tendremos que ejecutar desde nuestra terminal el
comando "asterisk" seguido de las opciones con las que queramos abrir la consola:

Opcin -c: (Console) - Nos permite abrir la consola. La particularidad de este


comando es que si el servicio de Asterisk no se estaba ejecutando, intentar
lanzarlo.

Opcin -d: (Debug) - Permite indicar el nivel de debug que queremos para los
mensajes que nos aporta el CLI. Si queremos un alto nivel de debug
tendremos que pasarle al comando asterisk tantas veces "d" como nivel
queramos. Por ejemplo: "dddddd".

Opcin -h: (Help) - Muestra todas las opciones posibles.


Opcin -r: (Running) - Conectamos con un servicio de Asterisk que se est
ejecutando en segundo plano.

Opcin -T: (Time) - Para que se muestren marcas de tiempo en cada mensaje
de la consola.

Opcin -v: (Verbose) - Permite indicar el nivel de verbose que queremos para
los mensajes que nos aporta el CLI. Si queremos un alto nivel de verbose,
tendremos que pasarle al comando asterisk tantas veces "v" como nivel
queramos. Por ejemplo: "vvvvvv".

50
Opcin -V: (Version) - Para ver la versin de Asterisk.
Opcin -x: (Execute) - Para ejecutar un comando en concreto. Se utiliza para
no tener que entrar en la interfaz, ejecutar el comando y salir. Directamente
pasamos inline el comando que queremos que se ejecute. Por ejemplo:
asterisk -rx "core restart when convenient".
Un ejemplo que haga llamar al CLI de Asterisk que se est ejecutando en segundo
plano con un nivel de verbosidad de 3 tiene la siguiente forma:
$ asterisk -rvvv

Si queremos hacer una llamada remota al sistema que haga que ste se reinicie
cuando no est procesando ninguna llamada, ejecutamos lo siguiente:
$ asterisk -rx "core restart when convenient"

Para ver la lista completa de opciones, ejecutamos el siguiente comando:


$ asterisk -h

-V Display version number and exit

-C Use an alternate configuration file

-G Run as a group other than the caller

-U Run as a user other than the caller

-c Provide console CLI

-d Enable extra debugging

-f Do not fork

-F Always fork

-g Dump core in case of a crash

-h This help screen

51
-i Initialize crypto keys at startup

-I Enable internal timing if DAHDI timer is available

-L Limit the maximum load average before rejecting new


calls

-M Limit the maximum number of calls to the specified


value

-m Mute debugging and console output on the console

-n Disable console colorization

-p Run as pseudo-realtime thread

-q Quiet mode (suppress output)

-r Connect to Asterisk on this machine

-R Same as -r, except attempt to reconnect if


disconnected

-s Connect to Asterisk via socket (only valid with -r)

-t Record soundfiles in /var/tmp and move them where they

belong after they are done

-T Display the time in [Mmm dd hh:mm:ss] format for each


line

of output to the CLI

-v Increase verbosity (multiple v's = more verbose)

-x Execute command (implies -r)

52
-X Execute includes by default (allows #exec in
asterisk.conf)

-W Adjust terminal colors to compensate for a light


background

Volvamos al punto en el que abrimos una nueva consola, lo primero que observamos
es que nos aparece un nuevo prompt indicndonos que estamos dentro del CLI:
hostname*CLI>

Si queremos salir de la consola, tan slo tendremos que escribir y ejecutar los
comandos "quit" o "exit".
hostname*CLI> exit

Dentro de la consola existen muchos comandos que podemos ejecutar, tan slo
tendremos que ejecutar "help" para obtener la lista completa:
hostname*CLI> help

Algunos de los comandos que ms se utilizan:

console dial - Nos permite hacer una llamada desde consola a una extensin
que se encuentra en un contexto determinado. Muy til en tareas de
depuracin de fallos y control del plan de marcado.

core restart now - Reinicia el servicio de Asterisk.


core show channels - Nos permite ver informacin sobre los canales que
estn abiertos en el momento en el que ejecutamos el comando.

dialplan reload - Nos permite hacer una recarga de configuracin del fichero
dialplan.conf, indispensable cuando realizamos algn cambio sobre dicho
fichero y queremos que el cambio se haga efectivo sin reiniciar el servicio
completo.

module load - Nos permite cargar un mdulo en Asterisk sin necesidad de


reiniciar el servicio.

53
sip reload - Nos permite hacer una recarga de configuracin del fichero
sip.conf. Cuando perdemos la comunicacin con un troncal al que estamos
registrados, obliga a lanzar un nuevo registro contra dicho troncal.

sip show peers - Nos permite ver la lista de clientes registrados as como
informacin adicional como puede ser el ping que tenemos con esos clientes
o la IP desde la cual nos conectamos a ellos.

2. La eterna pelea con la NAT y el Trunking

NAT en Asterisk
El NAT (del ingls "Network Address Traslation") es un mecanismo utilizado por
routers IP para intercambiar paquetes entre dos redes con rangos de direcciones
incompatibles. Sin NAT no existira Internet tal y como lo conocemos hoy en da.
Pero... Cmo le afecta a la VoIP?
Superar la barrera NAT intermedia es uno de los grandes quebraderos de cabeza
que tiene Asterisk ya que protocolos como SIP presentan muchos problemas
cuando tienen que atravesarla. Con el tiempo, han ido surgiendo soluciones que
intentan puentear este sistema aunque antes de analizarlas vamos a tener en cuenta
un detalle fundamental y es que "slo ser necesario especificar el parmetro NAT
cuando trabajamos con clientes SIP que no estn en la misma red que nuestra
centralita".
Posibles valores dentro del sip.conf (se configura para aquellos peers para los que
sea necesario):

nat = yes - Se trabaja segn la RFC3581. Se permite trabajar con soporte


simtrico RTP (Cuando un cliente SIP usa el mismo socket/puerto para enviar
y recibir el flujo de datos RTP). A partir de asterisk 11 se sustituye por 'nat =
force_rport,comedia'. Es la configuracin ms comn.

nat = no - Se permite trabajar segn la RFC3581 si el extremo remoto de la


comunicacin lo solicita pero se deshabilita en cualquier caso el soporte
simtrico RTP.

54
nat = force_rport - Se fuerza a trabajar segn la RFC3581 y se deshabilita el
soporte simtrico RTP.

nat = comedia - Se permite trabajar segn la RFC3581 si el extermo remoto de


la comunicacin lo solicita y se obliga a trabajar con soporte simtrico RTP.
Si nuestro servidor de Asterisk espera recibir mensajes SIP en el puerto 5060,
tendremos que asegurarnos de que tambin se utiliza el 5060 en el NAT de nuestra
red para reenviar estos mensajes y lo mismo ocurre con el rango de puertos RTP.

Trunking
En pocas palabras podramos decir que el trunking es un mecanismo que nos
permite comunicar nuestros clientes (pertenecientes a una red 'A') con otros clientes
dentro de una red diferente, a la que llamaremos 'B', como si estuvieran dentro de
nuestra misma red.
Cuando trabajamos con varias sedes (por ejemplo, una en Madrid y otra en Berln),
nos puede interesar tener dos servicios Asterisk (uno en cada sede) y comunicarlos
entre s mediante trunking. Si slo tuviramos un servidor de Asterisk en Madrid, y
alguien de Berln quisiera llamar a un compaero de su mismo edificio, la llamada
tendra que ir a Madrid, ser procesada en el servidor de Madrid y volver a Berln (lo
que supone un tiempo de ida y vuelta relativamente alto y un esquema poco
eficiente). En cambio, si configuramos servidores en ambos puntos, las llamadas de
Berln con destino Berln SE OLVIDAN de lo que ocurra en Madrid con lo que
ganamos velocidad, eficiencia o una mala calidad del servicio.
Tal y como se comentaba recientemente en el grupo de usuarios de Asterisk en
espaol, el esquema del que podemos aprender ms es el que tiene como extremos
un servidor con Asterisk y con una direccin IP pblica fija, y otro configurado con IP
dinmica:
Equipo en Madrid - Tiene una IP Fija
[trunk-berlin]

55
type=friend
context=entrantes-berlin
host=dynamic
secret=password-berlin
fromuser=trunk-berlin
defaultuser=trunk-berlin
; ... resto de parmetros como dtmfmode, qualify,
canreinvite, etc.

Equipo en Berlin - Tiene una IP Dinmica


[general]
...
register =>
asterisk-berlin:password-berlin@madrid.es/asterisk-berlin

[trunk-madrid]
type=friend
context=entrantes-madrid
host=madrid.es
fromdomain=madrid.es
insecure=port,invite
; ... resto de parmetros como dtmfmode, qualify,
canreinvite, etc.

La idea del esquema es muy sencilla:

56
Si ambos servidores tienen IPs fijas - Entonces hacemos una definicin del
sip-trunk por IP sin necesidad de user/pass. El servidor de Asterisk de cada
sede estar haciendo el registro por hostname/IP.

Si alguno de los servidores tiene una IP dinmica - Entonces ser necesario o


bien instalar un cliente como dyndns y configurar el trunking tal y como se
hace cuando tenemos IPs fijas en ambos extremos; o bien hacer que el
extremo con IP dinmica haga un register al extremo que la tiene fija
(registers cruzados en caso de que ambos sean dinmicos aunque este
esquema no es recomendable para ningn entorno en produccin).

57

También podría gustarte