Tutorial Asterisk

58
Tutorial de

description

tutorial

Transcript of Tutorial Asterisk

  • 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 VoIPPara 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 Examen 101

    Linux LPIC-1 Examen 102

    NodeJS, ExpressJS y

    MongoDB

    AngularJS y TypeScript

    Apps mviles con PhoneGap

    Servidores VoIP con Asterisk

    Desarrollo Frontend

    Profesional

    Virtualizacin de Servidores con

    Promox

    Apps Mviles con Titanium Alloy

    Desarrollo 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 tenemosRelease 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 sip.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"

    dtmfmode=rfc2833

    qualify=yes

    mailbox=1002@default

    ...

    [103]

    type=friend

    secret=e7uKz

    host=dynamic

    context=ext_internas

    callerid="Beatriz"

    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"

    mailbox=1002@default

    [103](extensiones-internas)

    secret=e7uKz

    29

  • callerid="Beatriz"

    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" dtmfmode=rfc2833 qualify=yes mailbox=1003@default ...

    [104] type=friend secret=ieLp3 host=dynamic context=trabajadores callerid="ngeles" 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,[email protected],,attach=yes|saycid=yes|envelope=yes|delete=yes|t

    z=european 1004 => pass_ngela,A.

    Santos,[email protected],,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

    y email de la forma adecuada.

    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.

    AGIPermite 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[,...]])

    AnswerResponder a una llamada entrante (para ser ms exactos, responde a un

    canal en estado 'ringing').

    Sintaxis: Answer([delay,[nocdr]])

    BackgroundReproduce 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]]])

    BusyIndica al lado llamante (calling part) que el lado llamado (called part) est

    ocupado.

    Sintaxis: Busy([timeout])

    ConfBridgePermite 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]]])

    CongestionIndica al lado llamante (calling part) que el lado llamado (called part) est

    congestionado.

    Sintaxis: Congestion([timeout])

    DialEs 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]]])

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

    HangupPermite 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])

    QueueMete 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]]]]]]]]])

    ReadLee 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

    ]]])

    SetPermite asignarle un valor a una variable.

    Sintaxis: Set(name=value)

    VerboseEnva 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])

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

    WaitExtenEspera 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 AsteriskUna 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:[email protected]/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