Está en la página 1de 31

________________________________________________Cuaderno de Practicas Diplomado GNU-ASTERISK

Diciembre 2010

Cuaderno de Prcticas

GCAP Certificacin Asterisk


Fundacin Cdigo Libre Dominicano Versin 3.1

Fundacin Cdigo Libre Dominicano - http://www.codigolibre.org

________________________________________________Cuaderno de Practicas Diplomado GNU-ASTERISK

Copyright
Esta documentacin es regida por los reglamentos de la GNU Free Documentation License y la GNU General Public License v3, sintase libre de copiar, modificar, aprender, distribuir y redistribuir esta documentacin; haga uso de su derecho como si fuere su deber.

Prefacio
Este cuaderno de practica esta diseado para hacer que estudiante obtenga el conocimiento necesario, que va desde un domino bsico, fundamental y administrativo de la Plataforma VoIP del Software Libre ASTERISK . Nuestra Certificacin Reconocida en todo el pas y en Latinoamrica en genera los llevara desde los inicios hasta un nivel avanzado, si ste es completado en su totalidad. Este cuaderno es una iniciativa para poder ensear a los candidatos a poder dominar completamente esta plataforma de softPBX Fedora. Autores: Cristhian Nez (cristhian@codigolibre.org) Carlos Castro (ccastro@codigolibre.org) Jorge Ortega (jortega@codigolibre.org)

Cualquier sugerencia, correccin, duda, aclaracin y/o comentario sobre este cuaderno de trabajo, sintase libre se enviar un correo a: info@codigolibre.org
Changelog con relacin a la versin 2.0: Cambiado a la versin Asterisk 1.6 configuracin Dahdi

Fundacin Cdigo Libre Dominicano - http://www.codigolibre.org

________________________________________________Cuaderno de Practicas Diplomado GNU-ASTERISK

Conceptos de Telefona y VoIP


1) VoIP
VoIP (Voice-over-Internet-Protocol), llamado en espaol Voz sobre IP es un grupo de normas y reglas que hacen posible que la seal de voz viaje a travs del protocolo IP. Esto significa que se enva la seal de voz en forma digital dentro del paquete ip, en lugar de enviarla (en forma digital o analgica) a travs de circuitos utilizables slo para telefona como una TELCO o PSTN (acrnimo de Public Switched Telephone Network, Red Telefnica Pblica Conmutada). Los Protocolos que son usados para llevar las seales de voz sobre la red IP son comnmente referidos como protocolos de Voz sobre IP o protocolos IP. Pueden ser vistos como implementaciones comerciales de la "Red experimental de Protocolo de Voz" (1973), inventada por ARPANET. El trfico de Voz sobre IP puede circular por cualquier red IP, incluyendo aquellas conectadas a Internet, como por ejemplo redes de rea local (LAN). Es muy importante diferenciar entre Voz sobre IP (VoIP) y Telefona sobre IP (No confundir con ToIP, Text-over-IP).
VoIP es el conjunto de normas, dispositivos, protocolos, en definitiva la tecnologa que permite la transmisin de la voz sobre el protocolo IP. Telefona sobre IP es lo que convierte la telefona tradicional debido los servicios que finalmente se pueden llegar a ofrecer gracias a poder portar la voz sobre el protocolo IP en redes de datos.

1a) Ventajas La principal ventaja de este tipo de servicios es que evita los cargos altos de telefona (principalmente de larga distancia) que son usuales de las compaas de la Red Pblica Telefnica Conmutada (PSTN). Algunos ahorros en el costo son debidos a utilizar una misma red para llevar voz y datos, especialmente cuando los usuarios tienen sin utilizar toda la capacidad de una red ya existente en la cual pueden usar para VoIP sin un costo adicional. Las llamadas de VoIP a VoIP entre cualquier proveedor son generalmente gratis, en contraste con las llamadas de VoIP a PSTN que generalmente cuestan al usuario de VoIP. Hay dos tipos de servicio de PSTN a VoIP: "Llamadas Locales Directas" (Direct Inward Dialling: DID) y "Nmeros de acceso". DID conecta a quien hace la llamada directamente al usuario VoIP mientras que los Nmeros de Acceso requieren que este introduzca el nmero de extensin del usuario de VoIP. Los Nmeros de acceso son usualmente cobrados como una llamada local para quien hizo la llamada desde la PSTN y gratis para el usuario de VoIP. 2a) Funcionalidad VoIP puede facilitar tareas que seran ms difciles de realizar usando las redes telefnicas comunes:
Las llamadas telefnicas locales pueden ser automticamente enrutadas a un telfono VoIP, sin importar dnde se est conectado a la red. Uno podra llevar consigo un telfono VoIP en un viaje, y en cualquier sitio conectado a Internet, se podra recibir llamadas. Nmeros telefnicos gratuitos para usar con VoIP estn disponibles en Estados Unidos de Amrica, Reino Unido y otros pases de organizaciones como Usuario VoIP. Los agentes de Call Center usando telfonos VoIP pueden trabajar en cualquier lugar con conexin a Internet lo suficientemente rpida. Algunos paquetes de VoIP incluyen los servicios extra por los que PSTN (Red Telefnica Conmutada) normalmente cobra un cargo extra, o que no se encuentran disponibles en algunos pases, como son las llamadas de 3 a la vez, retorno de llamada, remarcado automtica, o identificacin de llamadas.

3a) Movilidad Los usuarios de VoIP pueden viajar a cualquier lugar en el mundo y seguir haciendo y recibiendo llamadas de la siguiente forma:
Los subscriptores de los servicios de las lneas telefnicas pueden hacer y recibir llamadas locales fuera de su localidad. Por ejemplo, si un usuario tiene un nmero telefnico en la ciudad de Nueva York y est viajando por Europa y alguien llama a su nmero telefnico, esta se recibir en Europa. Adems si una llamada es hecha de Europa a Nueva York, esta ser cobrada como llamada local, por supuesto el usuario de viaje por Europa debe tener una conexin a Internet disponible. Los usuarios de Mensajera Instantnea basada en servicios de VoIP pueden tambin viajar a cualquier lugar del mundo y hacer y recibir llamadas telefnicas. Los telfonos VoIP pueden integrarse con otros servicios disponibles en Internet, incluyendo videoconferencias, intercambio de datos y mensajes con otros servicios en paralelo con la conversacin, audio conferencias, administracin de libros de direcciones e intercambio de informacin con otros (amigos, compaeros, etc).

Los protocolos mas utilizados en Voip SIP y H.323


1) SIP Session Initiation Protocol (Protocolo de Inicio de Sesiones) desarrollado por el IETF MMUSIC Working Group con la intencin de ser el estndar para la iniciacin, modificacin y finalizacin de sesiones interactivas de usuario donde intervienen elementos multimedia como el video, voz, mensajera instantnea, juegos en lnea y realidad virtual, posiblemente el remplazo del otros protocolos h.323 2) H.323 Definido en 1996 por la UIT (Unin Internacional de Telecomunicaciones) proporciona a los diversos fabricantes una serie de normas con el fin de que puedan evolucionar en conjunto. 3) Caractersticas principales Por su estructura el estndar proporciona las siguientes ventajas:

Fundacin Cdigo Libre Dominicano - http://www.codigolibre.org

________________________________________________Cuaderno de Practicas Diplomado GNU-ASTERISK


Permite controlar el trfico de la red, por lo que se disminuyen las posibilidades de que se produzcan cadas importantes en el rendimiento. Las redes soportadas en IP presentan las siguientes ventajas adicionales:
Es independiente del tipo de red fsica que lo soporta. Permite la integracin con las grandes redes de IP actuales. Es independiente del hardware utilizado. Permite ser implementado tanto en software como en hardware, con la particularidad de que el hardware supondra eliminar el impacto inicial para el usuario comn.. Permite la integracin de Video y TPV

4) VoIP no es un servicio, es una tecnologa En muchos pases del mundo, IP ha generado mltiples discordias, entre lo territorial y lo legal sobre esta tecnologa, est claro y debe quedar claro que la tecnologa de VoIP no es un servicio como tal, sino una tecnologa que usa el Protocolo de Internet (IP) a travs de la cual se comprimen y descomprimen de manera altamente eficiente paquetes de datos o datagramas, para permitir la comunicacin de dos o ms clientes a travs de una red como la red de Internet. Con esta tecnologa pueden prestarse servicios de Telefona o Videoconferencia, entre otros. 5) Arquitectura de red El propio Estndar define tres elementos fundamentales en su estructura:
Terminales: Son los sustitutos de los actuales telfonos. Se pueden implementar tanto en software como en hardware. Gatekeepers: Son el centro de toda la organizacin VoIP, y seran el sustituto para las actuales centrales. Normalmente implementadas en software, en caso de existir, todas las comunicaciones pasaran por l. Gateways: Se trata del enlace con la red telefnica tradicional, actuando de forma transparente para el usuario.

Con estos tres elementos, la estructura de la red VoIP podra ser la conexin de dos delegaciones de una misma empresa. La ventaja es inmediata: todas las comunicaciones entre las delegaciones son completamente gratuitas. Este mismo esquema se podra aplicar para proveedores, con el consiguiente ahorro que esto conlleva.
Protocolos de VoIP: Es el lenguaje que utilizarn los distintos dispositivos VoIP para su conexin. Esta parte es importante ya que de ella depender la eficacia y la complejidad de la comunicacin. Por orden de antigedad (de ms antiguo a ms nuevo): H.323 - Protocolo definido por la ITU-T SIP - Protocolo definido por la IETF Megaco (Tambin conocido como H.248) y MGCP - Protocolos de control Skinny Client Control Protocol - Protocolo propiedad de Cisco MiNet - Protocolo propiedad de Mitel CorNet-IP - Protocolo propiedad de Siemens IAX - Protocolo original para la comunicacin entre PBXs Asterisk (obsoleto) Skype - Protocolo propietario peer-to-peer utilizado en la aplicacin Skype IAX2 - Protocolo para la comunicacin entre PBXs Asterisk en reemplazo de IAX Jingle - Protocolo abierto utilizado en tecnologa Jabber MGCP- Protocolo propietario de Cisco

Como hemos visto VoIP presenta una gran cantidad de ventajas, tanto para las empresas como para los usuarios comunes. La pregunta sera por qu no se ha implantado an esta tecnologa?. A continuacin analizaremos los aparentes motivos, por los que VoIP an no se ha impuesto a las telefonas convencionales. 6) Parmetros de la VoIP Este es el principal problema que presenta hoy en da la penetracin tanto de VoIP como de todas las aplicaciones de IP. Garantizar la calidad de servicio sobre una red IP, por medio de retardos y ancho de banda, actualmente no es posible; por eso, se presentan diversos problemas en cuanto a garantizar la calidad del servicio. 7) Cdecs La voz ha de codificarse para poder ser transmitida por la red IP. Para ello se hace uso de Cdecs que garanticen la codificacin y compresin del audio o del vdeo para su posterior decodificacin y descompresin antes de poder generar un sonido o imagen utilizable. Segn el Cdec utilizado en la transmisin, se utilizar ms o menos ancho de banda. La cantidad de ancho de banda suele ser directamente proporcional a la calidad de los datos transmitidos. Entre los codecs utilizados en VoIP encontramos los G.711, G.723.1 y el G.729 (especificados por la ITU-T) 8) Retardo o latencia Una vez establecidos los retardos de trnsito y el de procesado la conversacin se considera aceptable por debajo de los 150 ms. 9) Calidad del servicio
La calidad de este servicio se est logrando bajo los siguientes criterios: La supresin de silencios, otorga ms eficiencia a la hora de realizar una transmisin de voz, ya que se aprovecha mejor el ancho de banda al transmitir menos informacin. Compresin de cabeceras aplicando los estndares RTP/RTCP. Priorizacin de los paquetes que requieran menor latencia. Las tendencias actuales son: CQ (Custom Queuing): Asigna un porcentaje del ancho de banda disponible.

Fundacin Cdigo Libre Dominicano - http://www.codigolibre.org

________________________________________________Cuaderno de Practicas Diplomado GNU-ASTERISK


PQ (Priority Queuing): Establece prioridad en las colas. WFQ (Weight Fair Queuing): Se asigna la prioridad al trfico de menos carga. DiffServ: Evita tablas de encaminados intermedios y establece decisiones de rutas por paquete. La implantacin de IPv6 que proporciona mayor espacio de direccionamiento y la posibilidad de tunneling.

Principales protocolos de VoIP


1) H.323
El protocolo H.323 se cre originalmente para proveer de un mecanismo para el transporte de aplicaciones multimedia en LANs (Redes de rea local) pero ha evolucionado rpidamente para dirigir las crecientes necesidades de las redes de VoIP. Un punto fuerte de H.323 era la relativa y temprana disponibilidad de un grupo de estndares, no solo definiendo el modelo bsico de llamada, sino que adems defina servicios suplementarios, necesarios para dirigir las expectativas de comunicaciones comerciales. H.323 fue el primer estndar de VoIP en adoptar el estndar de IETF de RTP (Protocolo de Transporte en tiempo Real) para transportar audio y vdeo sobre redes IP. H.323 est basado en el protocolo RDSI Q.931 y est adaptado para situaciones en las que se combina el trabajo entre IP y RDSI, y respectivamente entre IP y QSIG. Un modelo de llamada, similar al modelo de RDSI, facilita la introduccin de la Telefona IP en las redes existentes de RDSI basadas en sistemas PBX. Por esto es posible el proyecto de una migracin sin problemas hacia el IP basado en sistemas PBX. Dentro del contexto de H.323, un IP basado en PBX es, en palabras sencillas, un Gatekeeper ms algunos servicios suplementarios. H.323 es una recomendacin del ITU-T (International Telecommunication Union), que define los protocolos para proveer sesiones de comunicacin audiovisual sobre paquetes de red. A partir del ao 2000 se encuentra implementada por varias aplicaciones de internet que funcionan en tiempo real como Microsoft Netmeeting y GnomeMeeting (Este ltimo utiliza la implementacin OpenH323). Es una parte de la serie de protocolos H.32x, los cuales tambin dirigen las comunicaciones sobre RDSI, RTC o SS7. H.323 es utilizado comnmente para Voz sobre IP (VoIP, Telefona de Internet o Telefona IP) y para videoconferencia basada en IP. Es un conjunto de normas (recomendacin paraguas) ITU para comunicaciones multimedia que hacen referencia a los terminales, equipos y servicios estableciendo una sealizacin en redes IP. No garantiza una calidad de servicio, y en el transporte de datos puede, o no, ser fiable; en el caso de voz o vdeo, nunca es fiable. Adems, es independiente de la topologa de la red y admite pasarelas, permitiendo usar ms de un canal de cada tipo (voz, vdeo, datos) al mismo tiempo. Diferentes elementos que conforman la topologa clsica de una red basada en H-323.
Portero: realiza el control de llamada en una zona. Es opcional pero su uso est recomendado, de modo que si existe, su uso ser obligatorio. Traduce direcciones, ofrece servicio de directorio, control de admisin de terminales, control de consumo de recursos y procesa la autorizacin de llamadas, as como tambin puede encaminar la sealizacin. Pasarela: es el acceso a otras redes, de modo que realiza funciones de transcodificacin y traduccin de sealizacin. MCU: soporte multiconferencia. Se encarga de la negociacin de capacidades.

Protocolos de la Familia H.323 H.323 tiene referencias hacia algunos otros protocolos de ITU-T como:
H.225.0 - Protocolo utilizado para describir la seal de llamada, el medio (audio y video), el empaquetamiento de las tramas, la sincronizacin de tramas de medio y los formatos de los mensajes de control. H.245 - Protocolo de control para comunicaciones multimedia. Describe los mensajes y procedimientos utilizados para abrir y cerrar canales lgicos para audio, video y datos, capacidad de intercambio, control e indicaciones. H.450 - Describe los Servicios Suplementarios. H.235 - Describe la seguridad de H.323. H.239 - Describe el uso de la doble trama en videoconferencia, normalmente uno para video en tiempo real y la otro para presentacin. H.281 - Describe el control de cmara lejana para movimientos PTZ (Pan-Tilt-Zoom)

2) SIP
Session Initiation Protocol (SIP o Protocolo de Inicio de Sesiones) es un protocolo desarrollado por el IETF MMUSIC Working Group con la intencin de ser el estndar para la iniciacin, modificacin y finalizacin de sesiones interactivas de usuario donde intervienen elementos multimedia como el video, voz, mensajera instantnea, juegos online y realidad virtual. El sintaxis de sus operaciones se asemeja al HTTP y SMTP, los protocolos utilizados en pginas Web y de distribucin de E-mail respectivamente. Esta similitud es natural ya que SIP fue diseado para que la telefona se vuelva un servicio ms en Internet. En Noviembre del ao 2000, SIP fue aceptado como el protocolo de sealizacin de 3GPP y elemento permanente de la arquitectura IMS (IP Multimedia Subsystem). SIP es uno de los protocolos de sealizacin para voz sobre IP, otro es H.323. 2a) Diseo El protocolo SIP fue diseado por el IETF con el concepto de "caja de herramientas", es decir, el protocolo SIP se vale de las funciones aportadas por otros protocolos, las que da por hechas y no vuelve a desarrollarlas . Debido a este concepto SIP funciona en colaboracin con otros muchos protocolos. El protocolo SIP se concentra en el establecimiento, modificacin y terminacin de las sesiones, se complementa, entre otros, con el SDP, que describe el contenido multimedia de la sesin, por ejemplo qu direcciones IP,puertos y cdecs se usarn durante la comunicacin. Tambin se complementa con el RTP (Real-time Transport Protocol). RTP es el

Fundacin Cdigo Libre Dominicano - http://www.codigolibre.org

________________________________________________Cuaderno de Practicas Diplomado GNU-ASTERISK


verdadero portador para el contenido de voz y video que intercambian los participantes en una sesin establecida por SIP. Otro concepto importante en su diseo es el de extensibilidad. Esto significa que las funciones bsicas del protocolo, definidas en la RFC 3261, pueden ser extendidas mediante otras RFC (Requests for Comments) dotando al protocolo de funciones ms potentes. Las funciones bsicas del protocolo incluyen: Determinar la ubicacin de los usuarios, proveyendo normalidad. Establecer, modificar y terminar sesiones multipartitas entre usuarios. El protocolo SIP adopta el modelo cliente-servidor y es transaccional. El cliente realiza peticiones que el servidor atiende y genera una o ms respuestas (dependiendo de la naturaleza, Mtodo, de la peticin). Por ejemplo para iniciar una sesin el cliente realiza una peticin con el mtodo INVITE en donde indica con qu el usuario (o recurso) quiere establecer la sesin. El servidor responde rechazando o aceptando la peticin en una serie de respuestas. Las respuestas llevan un cdigo de estado que brindan informacin acerca de si las peticiones fueron resueltas con xito o error. La peticin inicial y todas sus respuestas constituyen una transaccin. Los servidores, por defecto, utilizan el puerto 5060 en TCP (Transmission Control Protocol) y UDP (User Datagram Protocol) para recibir las peticiones de los clientes SIP. Como una de las principales aplicaciones del protocolo SIP es la telefona, un objetivo de SIP fue aportar un conjunto de las funciones de procesamiento de llamadas y capacidades presentes en la red pblica conmutada de telefona. As, implement funciones tpicas de dicha red, como son: llamar a un nmero, provocar que un telfono suene al ser llamado, escuchar la seal de tono o de ocupado. La implementacin y terminologa en SIP son diferentes. SIP tambin implementa muchas de las ms avanzadas caractersticas del procesamiento de llamadas de SS7, aunque los dos protocolos son muy diferentes. SS7 es altamente centralizado, caracterizado por una compleja arquitectura central de red y unos terminales tontos (los tradicionales telfonos de auricular). SIP es un protocolo peer to peer (tambin llamado p2p). Como tal requiere un ncleo de red sencillo (y altamente escalable) con inteligencia distribuida en los extremos de la red, incluida en los terminales (ya sea mediante hardware o software). Muchas caractersticas de SIP son implementadas en los terminales en oposicin a las tradicionales caractersticas de SS7, que son implementadas en la red. Aunque existen muchos otros protocolos de sealizacin para VoIP, SIP se caracteriza porque sus promotores tienen sus races en la comunidad IP y no en la industria de las telecomunicaciones. SIP ha sido estandarizado y dirigido principalmente por el IETF mientras que el protocolo de VoIP H.323 ha sido tradicionalmente ms asociado con la Unin Internacional de Telecomunicaciones. Sin embargo, las dos organizaciones han promocionado ambos protocolos del mismo modo. SIP es similar a HTTP y comparte con l algunos de sus principios de diseo: es legible por humanos y sigue una estructura de peticin-respuesta. Los promotores de SIP afirman que es ms simple que H.323. Sin embargo, aunque originalmente SIP tena como objetivo la simplicidad, en su estado actual se ha vuelto tan complejo como H.323. SIP comparte muchos cdigos de estado de HTTP, como el familiar '404 no encontrado' (404 not found). SIP y H.323 no se limitan a comunicaciones de voz y pueden mediar en cualquier tipo de sesin comunicativa desde voz hasta vdeo o futuras aplicaciones todava sin realizar. 2b) Funcionamiento El protocolo SIP permite el establecimiento de sesiones multimedia entre dos o ms usuarios. Para hacerlo se vale del intercambio de mensajes entre las partes que quieren comunicarse. 2c) Agentes de Usuario Los usuarios, que pueden ser seres humanos o aplicaciones de software, utilizan para establecer sesiones lo que el protocolo SIP denomina "Agentes de usuario". Estos no son ms que los puntos extremos del protocolo, es decir son los que emiten y consumen los mensajes del protocolo SIP. Un video telfono, un telfono, un cliente de software (softphone) y cualquier otro dispositivo similar es para el protocolo SIP un agente de usuario. El protocolo SIP no se ocupa de la interfaz de estos dispositivos con el usuario final, slo se interesa en los mensajes que estos generan y cmo se comportan al recibir determinados mensajes. Los agentes de usuario se comportan como clientes (UAC: User Agent Clients) y como servidores (UAS: User Agent Servers). Son UAC cuando realizan una peticin y son UAS cuando la reciben. Por esto los agentes de usuario deben implementar un UAC y un UAS. Adems de los agentes de usuario existen otras entidades que intervienen en el protocolo, estos son los Servidores de Registro o Registrar, los Proxy y los Redirectores. A continuacin se describe su finalidad. 3c) Servidores de Registro o Registrar El protocolo SIP permite establecer la ubicacin fsica de un usuario determinado, esto es en qu punto de la red est conectado. Para ello se vale del mecanismo de registro. Este mecanismo funciona como sigue: Cada usuario tiene una direccin lgica que es invariable respecto de la ubicacin fsica del usuario. Una direccin lgica del protocolo SIP es de la forma usuario@dominio es decir tiene la misma forma que una direccin de correo electrnico. La direccin fsica (denominada "direccin de contacto") es dependiente del lugar en donde el usuario est conectado (de su direccin IP). Cuando un usuario inicializa su terminal (por ejemplo conectando su telfono o abriendo su software de telefona SIP) el agente de usuario SIP que reside en dicho terminal enva una peticin con el mtodo REGISTER a un Servidor de Registro (Registrar en ingls), informando a qu

Fundacin Cdigo Libre Dominicano - http://www.codigolibre.org

________________________________________________Cuaderno de Practicas Diplomado GNU-ASTERISK


direccin fsica debe asociarse la direccin lgica del usuario. El servidor de registro realiza entonces dicha asociacin (denominada binding). Esta asociacin tiene un perodo de vigencia y si no es renovada, caduca. Tambin puede terminarse mediante un des-registro. La forma en que dicha asociacin es almacenada en la red no es determinada por el protocolo SIP, pero es vital que los elementos de la red SIP accedan a dicha informacin. 4c) Servidores Proxy y de Redireccin Para encaminar un mensaje entre un agente de usuario cliente y un agente de usuario servidor normalmente se recurre a los servidores. Estos servidores pueden actuar de dos maneras: 1. Como Proxy, encaminando el mensaje hacia destino, 2. Como Redirector (Redirect)generando una respuesta que indica al originante la direccin del destino o de otro servidor que lo acerque al destino. La principal diferencia es que el servidor proxy queda formando parte del camino entre el UAC y el (o los) UAS, mientras que el servidor de redireccin una vez que indica al UAC cmo encaminar el mensaje ya no interviene ms. Un mismo servidor puede actuar como Redirector o como Proxy dependiendo de la situacin. 5c) Casos tpicos de servidores Un conjunto de usuarios que pertenecen a una compaa o proveedor de servicios de comunicaciones, conforman un dominio. Este dominio, que se indica en una direccin SIP despus del carcter "@" es normalmente atendido por un servidor (o ms de uno). Este servidor recibe las peticiones hacia sus usuarios. Este servidor ser el encargado de determinar la direccin fsica del usuario llamado. Un servidor que recibe las peticiones destinadas a un dominio especfico es denominado servidor entrante (Inbound Server). Es habitual tambin, que exista un servidor que reciba las peticiones originadas por los usuarios de un dominio hacia otros dominios. Este recibe el nombre de Servidor Saliente (Outbound Server). Un agente de usuario normalmente encamina todos sus pedidos hacia un servidor de su propio dominio. Es este quien determina (por sus propios medios o valindose de otros servidores) las ubicaciones de los usuarios que son llamados por el agente de usuario en cuestin. 6c) Formato de los mensajes Los mensajes que se intercambian en el protocolo SIP pueden ser peticiones o respuestas. Las peticiones tienen una lnea de peticin, una serie de encabezados y un cuerpo. Las respuestas tienen una lnea de respuesta, una serie de encabezados y un cuerpo. En la lnea de peticin se indica el propsito de la peticin y el destinatario de la peticin. Las peticiones tienen distintas funciones. El propsito de una peticin est determinado por lo que se denomina el Mtodo (Method) de dicha peticin, que no es ms que un identificador del propsito de la peticin. En la [RFC 3261] se definen los mtodos bsicos del protocolo. Existen otros mtodos definidos en extensiones al protocolo SIP. En la lnea de respuesta se indica el cdigo de estado de la respuesta que es un nmero indica el resultado del procesamiento de la peticin. Los encabezados de peticiones y respuestas se utilizan para diversas funciones del protocolo relacionadas con el encaminamiento de los mensajes, autenticacin de los usuarios, entre otras. La extensibilidad del protocolo permite crear nuevos encabezados para los mensajes agregando de esta manera funcionalidad. El cuerpo de los mensajes es opcional y se utiliza entre otras cosas para transportar las descripciones de las sesiones que se quieren establecer, utilizando la sintaxis del protocolo SDP. 7c) Flujo de establecimiento de una sesin El flujo habitual del establecimiento de una sesin mediante el protocolo SIP es el siguiente, en este ejemplo todos los servidores actan como proxy: Un usuario ingresa la direccin lgica de la persona con la que quiere comunicarse, puede indicar al terminal tambin las caractersticas de las sesin que quiere establecer (voz y video, etc.), o estas pueden estar implcitas por el tipo de terminal del que se trate. El agente de usuario SIP que reside en el terminal, actuando como UAC enva la peticin (en este caso con el mtodo INVITE) al servidor que tiene configurado. Este servidor se vale del sistema DNS para determinar la direccin del servidor SIP del dominio del destinatario. El dominio lo conoce pues es parte de la direccin lgica del destinatario. Una vez obtenida la direccin del servidor del dominio destino, encamina hacia all la peticin. El servidor del dominio destino establece que la peticin es para un usuario de su dominio y entonces se vale de la informacin de registracin de dicho usuario para establecer su ubicacin fsica. Si la encuentra, entonces encamina la peticin hacia dicha direccin. El agente de usuario destino si se encuentra desocupado comenzar a alertar al usuario destino y enva una respuesta hacia el usuario originante con un cdigo de estado que indica esta situacin (180 en este caso). La respuesta sigue el camino inverso hacia el originante. Cuando el usuario destino finalmente acepta la invitacin, se genera una respuesta con un cdigo de estado (el 200) que indica que la peticin fue aceptada. La recepcin de la respuesta final es confirmada por el UAC originante mediante una peticin con el mtodo ACK (de Acknowledgement), esta peticin no genera respuestas y completa la transaccin de establecimiento de la sesin. Normalmente la peticin con el mtodo INVITE lleva un cuerpo donde viaja una descripcin de la sesin que quiere establecer, esta descripcin es realizada con el protocolo SDP. En ella se indica el tipo de contenido a intercambiar (voz, video, etc.) y sus caractersticas (cdecs, direcciones, puertos donde se espera recibirlos, velocidades de transmisin, etc.). Esto se conoce como "oferta de sesin SDP".

Fundacin Cdigo Libre Dominicano - http://www.codigolibre.org

________________________________________________Cuaderno de Practicas Diplomado GNU-ASTERISK


La respuesta a esta oferta viaja, en este caso, en el cuerpo de la respuesta definitiva a la peticin con el mtodo INVITE. La misma contiene la descripcin de la sesin desde el punto de vista del destinatario. Si las descripciones fueran incompatibles, la sesin debe terminarse (mediante una peticin con el mtodo BYE). Al terminar la sesin, lo que puede hacer cualquiera de las partes, el agente de usuario de la parte que termin la sesin, actuando como UAC, enva hacia la otra una peticin con el mtodo BYE. Cuando lo recibe el UAS genera la respuesta con el cdigo de estado correspondiente. Si bien se describi el caso de una sesin bipartita, el protocolo permite el establecimiento de sesiones multipartitas. Tambin permite que un usuario est registrado en diferentes ubicaciones pudiendo realizar la bsqueda en paralelo o secuencial entre todas ellas. 3) IAX2 IAX (Inter-Asterisk eXchange Protocol) es uno de los protocolos utilizado por Asterisk, un servidor PBX (central telefnica) de cdigo abierto patrocinado por Digium. Es utilizado para manejar conexiones VoIP entre servidores Asterisk, y entre servidores y clientes que tambin utilizan protocolo IAX. El protocolo IAX ahora se refiere generalmente al IAX2, la segunda versin del protocolo IAX. El protocolo original ha quedado obsoleto en favor de IAX2. El principal objetivo de IAX ha sido minimizar el ancho de banda utilizado en la transmisin de voz y vdeo a travs de la red IP, con particular atencin al control y a las llamadas de voz y proveyendo un soporte nativo para ser transparente a NAT. La estructura bsica de IAX se fundamenta en la multiplexacin de la sealizacin y del flujo de datos sobre un simple puerto UDP entre dos sistemas. IAX es un protocolo binario y est diseado y organizado de manera que reduce la carga en flujos de datos de voz. El ancho de banda para algunas aplicaciones se sacrifica en favor del ancho de banda para VoIP. 3a) Caractersticas:
IAX2 es robusto, lleno de novedades y muy simple en comparacin con otros protocolos. Permite manejar una gran cantidad de cdecs y un gran nmero de streams, lo que significa que puede ser utilizado para transportar virtualmente cualquier tipo de dato. Esta capacidad lo hace muy til para realizar videoconferencias o realizar presentaciones remotas. IAX2 utiliza un nico puerto UDP, generalmente el 4569, para comunicaciones entre puntos finales (terminales VoIP) para sealizacin y datos. El trfico de voz es transmitido in-band, lo que hace a IAX2 un protocolo casi transparente a los cortafuegos y realmente eficaz para trabajar dentro de redes internas. En esto se diferencia de SIP, que utiliza una cadena RTP out-of-band para entregar la informacin. IAX2 soporta Trunking (red), donde un simple enlace permite enviar datos y sealizacin por mltiples canales. Cuando se realiza Trunking, los datos de mltiples llamadas son manejados en un nico conjunto de paquetes, lo que significa que un datagrama IP puede entregar informacin para ms llamadas sin crear latencia adicional. Esto es una gran ventaja para los usuarios de VoIP, donde las cabeceras IP son un gran porcentaje del ancho de banda utilizado.

4) Asterisk Asterisk es una aplicacin de software libre (bajo licencia GPL) que provee funcionalidades de una central telefnica (PBX). Como cualquier PBX, se puede conectar un nmero determinado de telfonos para hacer llamadas entre s e incluso conectar a un proveedor de VoIP o bien a una RDSI tanto bsicos como primarios. Mark Spencer, de Digium, inicialmente cre Asterisk y actualmente es su principal desarrollador, junto con otros programadores que han contribuido a corregir errores y aadir novedades y funcionalidades. Originalmente desarrollado para el sistema operativo GNU/Linux, Asterisk actualmente tambin se distribuye en versiones para los sistemas operativos BSD, MacOSX, Solaris y Microsoft Windows, aunque la plataforma nativa (GNU/Linux) es la mejor soportada de todas. Asterisk incluye muchas caractersticas anteriormente slo disponibles en costosos sistemas propietarios PBX como buzn de voz, conferencias, IVR, distribucin automtica de llamadas, y otras muchas ms. Los usuarios pueden crear nuevas funcionalidades escribiendo un dialplan en el lenguaje de script de Asterisk o aadiendo mdulos escritos en lenguaje C o en cualquier otro lenguaje de programacin soportado por Linux. Para conectar telfonos estndar analgicos son necesarias tarjetas electrnicas telefnicas FXS o FXO fabricadas por Digium u otros proveedores, ya que para conectar el servidor a una lnea externa no basta con un simple mdem. Quiz lo ms interesante de Asterisk es que soporta muchos protocolos VoIP como pueden ser SIP, H.323, IAX y MGCP. Asterisk puede interoperar con terminales IP actuando como un registrador y como gateway entre ambos. 4a) Cambios con relacin a la 1.4 Los cambios mas relevantes con relacin a la versin 1.4:
SIP ahora puede ser transportado tanto por TCP como UDP. La finalidad es que permite el uso de Encriptacin TLS. Aunque esto no representa un gran beneficio, es provechoso para aquellas empresas que tienen altas polticas de seguridad. Se elimino completamente el soporte zaptel. Ahora solo el soporte es para dahdi Mas caractersticas en: http://www.syednetworks.com/asterisk-1-6-features#more-145

4b) Conceptos Bsicos Canal: Es una conexin que conduce una llamada entrante o saliente en el sistema asterisk. La conexin puede venir o salir hacia telefona tradicional analgica o digital, o VoIP. Dialplan: Se trata de la configuracin de la central de asterisk que indica el itinerario que sigue una llamada desde que entra o sale del

Fundacin Cdigo Libre Dominicano - http://www.codigolibre.org

________________________________________________Cuaderno de Practicas Diplomado GNU-ASTERISK


sistema hasta que llega a su punto final. Se trata en lineas generales del comportamiento lgico de la central. Extensin: En telefona tradicional, las extensiones se asocian con telfonos, interfaces o menes. En asterisk, una extensin es una lista de comandos a ejecutar. Las extensiones se acceden cuando:
Se recibe una llamada entrante por un canal dado. El usuario que ha llamado marca la extensin Se ejecuta un salto de extensiones desde el dialplan de asterisk.

Contexto: El dialplan o lgica de comportamiento de asterisk se divide en uno o varios contextos. Un contexto es una coleccin de extensiones. Los contextos existen para poder diferenciar el lugar donde se encuentra una llamada. Aplicacin: Asterisk ejecuta secuencialmente los comandos asociados a cada extensin. Esos comandos son realmente aplicaciones que controlan el comportamiento de la llamada y del sistema en si. Ejemplos:
Hangup: Colgar la llamada Dial: Realiza una llamada saliente Playback: Reproduce un archivo de sonido

Nota: Mas adelante hablaremos mas a fondo de aplicaciones.

Estructura de Directorios
/etc/asterisk: /usr/lib/asterisk/modules: /var/lib/asterisk: /var/lib/asteriskfirmware/ /var/lib/asterisk/images/ /var/lib/asterisk/agi-bin: /var/spool/asterisk: /var/log/asterisk: /var/log/asterisk/cdr-cvs /var/lib/asterisk/keys/ /var/lib/asterisk/mohmp3/ /var/lib/asterisk/sounds/ Contiene los archivos de configuracin. Si al compilar ejecutamos make samples, tendremos ejemplos en este directorio. Contiene los mdulos de Asterisk que hemos compilado. Contiene diferentes libreras de Asterisk. Contiene imgenes binarias de firmware de varios dispositivos compatibles con asterisk Las aplicaciones que se comunican con canales que soportar imagenes, buscan en este directorio Directorio para contener los AGI. Directorio para archivos que genera Asterisk (voicemail, etc.) Aqu se guardan los log de Asterisk. Este directorio es usado para guardar los CDRs en un formato CVS o comma-separated value Aqu se guardan las llaves RSA que se utilizaran en las comunicaciones peer to peer (IAX2) Las aplicaciones que usan music on hold buscaran por defecto los archivos de audio en este directorio Aqu se buscan por defecto los sonidos bsicos de asterisk reproducios por playback( ) y background()

Archivos de configuracin
extensions.conf: features.conf: meetme.conf: musiconhold.conf: queues.conf: voicemail.conf: asterisk.conf: modules.conf: el propio Dialplan. dialplan para mtodos complementarios (transferencias, call parking, grabacin, etc.). para conferencias. configuracin de la msica en espera. configuracin de colas de llamadas. configuracin de los buzones de voz. Archivo de configuracin maestro Archivo de configuracin de mdulos.

Canales:
iax.conf: sip.conf: /etc/dahdi/system.conf: Canales IAX (Inter Asterisk eXchange) Canales SIP Telefona Analgica y digital.

Instalacin de Asterisk 1.6.1.1 en Fedora 13


Requerimientos Los requerimientos para instalar asterisk son de acuerdo a la necesidad del usuario podramos poner unos requerimiento aunque podra ser irrelevante dado que los requerimientos varan constantemente de acuerdo a la necesidad del usuario. Asterisk utiliza el procesador para procesar las llamadas esto quiere decir que de acuerdo a nuestra necesidad necesitaremos un procesador de gran capacidad para procesar un gran capacidad de llamadas simultaneas. Requerimiento de paquetes para compilar dahdi asterisk
yum install -y gcc ncurses-devel libtermcap-devel kernel-devel kernel-smp-devel gcc-c++ openssl-devel newt-devel zlib-devel unixODBC-devel libtool make
Nota: nosotros vamos a necesitar hacer uso del directorio /usr/src/ para extraer y compilar dahdi libpri asterisk, usaremos wget para descargar los fuentes de digium.

[root@blackangel ~]# cd /usr/src/ [src]# wget http://downloads.asterisk.org/pub/telephony/asterisk/releases/asterisk-1.6.1.1.tar.gz [src]# wget http://downloads.asterisk.org/pub/telephony/dahdi-linux/releases/dahdi-linux-2.2.0.2.tar.gz [src]# wget http://downloads.asterisk.org/pub/telephony/dahdi-tools/releases/dahdi-tools-2.2.0.tar.gz

Extrayendo los cdigos fuentes


[root@blackangel src]#tar xzvf asterisk-1.6.1.1.tar.gz [root@blackangel src]#tar xzvf dahdi-linux-2.2.0.2.tar.gz [root@blackangel src]#tar xzvf dahdi-tools-2.2.0.tar.gz

Compilando Dahdi y Dahdi Tools


[root@blackangel src]#cd dahdi-linux-2.2.0.2/ [root@blackangel src]#cd dahdi-tools-2.2.0/

Fundacin Cdigo Libre Dominicano - http://www.codigolibre.org

________________________________________________Cuaderno de Practicas Diplomado GNU-ASTERISK


[root@blackangel src]#make clean [root@blackangel src]#make [root@blackangel src]#make install [root@blackangel src]#./configure [root@blackangel src]#make [root@blackangel src]#make install [root@blackangel src]#make config

Compilando Asterisk
[root@blackangel src]#cd asterisk-1.6.1.1 [root@blackangel src]#./configure [root@blackangel src]#make menuconfig [root@blackangel src]#make [root@blackangel src]#make install [root@blackangel src]#make config [root@blackangel src]#make samples

Como configurar la tarjeta FXO (Foreign Exchange Office) Generalmente utilizaremos esta tarjeta con el fin de que asterisk se conecta al PSTN por una linea analgica (linea telefnica convencional). Asumiendo que tenemos una tarjeta tdm400p y queremos configurar el modulo FXO que esta en el primer puerto. Este objetivo lo alcanzamos configurando los archivos. /etc/dahdi/system.conf /etc/asterisk/chan_dahdi.conf extensions.conf
loadzone=us defaultzone=us fxsks=1 ; Nota si es una tarjeta tdm400 con un modulo FXO le pasamos el parmetro fxsks=1 en el archivo dahdil.conf signalling=fxs_ks context=entrada group=1 channel=>1 [entrada] ;Creamos el contexto indicado en el zapata.conf exten => _X.,1,Dial(dahdi/g1/{EXTEN}) ;Para las salidas de la llamadas indicamos creamos esta ext. Exten => _x.,2,Hangup

Configurando Asterisk PBX El archivo extensions.conf es la parte central de toda la configuracin, dado que es donde se define el dialplan de Asterisk. Se compone de 4 partes principales: contextos, extensiones, prioridades y aplicaciones. El dialplan se divide en secciones denominadas contextos, que estn rotuladas y contienen un grupo de extensiones. Los contextos se definen colocando su nombre entre corchetes ([]). Este nombre puede contener caracteres alfanumricos adems del guin y el guin bajo. Ejemplo:
[interno]

Todas las instrucciones son parte del contexto hasta que el prximo contexto es definido. Existen dos contextos especiales:
[general] (variables predefinidas) [globals] (variables no predefinidas).

Una extensin es una instruccin que ser seguida por Asterisk, luego de ser disparada por una llamada entrante o bien por dgitos discados en un canal, definida en el marco de un contexto. La sintaxis de una extensin es la siguiente:
exten => nombre,prioridad,aplicacin()

Ejemplo: exten => 101,1,answer() Extensions (start): es una extensin especial que es utilizada si una llamada entra a un contexto sin una extensin destino especfica (por ejemplo una llamada en un puerto FXO); la llamada trata de entrar automticamente a la extensiones.
[interno] exten => s,1,answer()

Una extensin puede tener varios pasos, denominados prioridades. Las prioridades comienzan con 1 y se ejecutan en orden numrico. Si no existe la prioridad N + 1, Asterisk no salta a la siguiente prioridad (N+2). Cada prioridad ejecuta una nica aplicacin. Por Ejemplo:
exten => 101,1,Answer() exten => 101,2,Hangup()

Prioridades sin numerar: Asterisk introduce el uso de la prioridad n (next). Cada vez que Asterisk encuentra una prioridad n, toma el nmero de la prioridad anterior y le suma 1. Simplifica el proceso de escritura del dialplan, evitando tener que volver a numerar las prioridades al insertar una prioridad para la misma exten. Por Ejemplo:
exten => 103,1,Answer() exten => 103,n,hago algo exten => 103,n,Hangup()
** Note como el orden numrico (1,2,3,etc) es reemplazado por la letra n.

Aplicaciones Las aplicaciones realizan una accin determinada en el canal actual, controlando el comportamiento de la llamada y del sistema en s. Algunos ejemplos:
answer(): contesta una llamada. hangup(): cuelga una llamada. dial(): realiza una llamada saliente. playback(): reproduce un archivo de sonido.

Ciertas aplicaciones requieren del pasaje de parmetros, estos se incluyen dentro de los parntesis, separados por ,.

Fundacin Cdigo Libre Dominicano - http://www.codigolibre.org

10

________________________________________________Cuaderno de Practicas Diplomado GNU-ASTERISK ARRANCAMOS CON ASTERISK


Mi primer Dialplan. Luego de tanto hablar finalmente comenzamos a echarle manos a esto. Crearemos un dialplan simple basndonos en toda la teora anterior (ESPEREMOS LA HAYAN LEIDO) e iremos creando extensiones para ir realizando los escenarios. Lo primero es que crearemos las extensiones SIP 101 y 102 para registrarnos en asterisk de la siguiente manera y agregamos estas lineas: vim /etc/asterisk/sip.conf
[101] type=friend callerid=cris context=extensiones username=101 secret=101 host=dynamic ; Indica que puede enviar y recibir llamadas ; Caller Id ; Contexto por defecto al que pertenecer ; Usuario ; Clave que sera utilizada para el softphone o el hardphone ; El dispositivo tiene una ip dinmica [102] type=friend callerid=carlos context=extensiones username=102 secret=102 host=dynamic ; Indica que puede enviar y recibir llamadas ; Caller Id ; Contexto por defecto. Relacionado con extensions.conf ; Usuario ; Clave que sera utilizada para el softphone o el hardphone ; El dispositivo tiene una ip dinmica

Ya con estos mnimos datos ya podemos ir al archivo extensions.conf y crear nuestro dialplan. [root@family asterisk]# vim /etc/asterisk/extensions.conf [extensiones]
exten => 100,1,Answer( ) exten => 100,2,Playback(hello-world) exten => 100,3,Hangup( ) ; Contesta la llamada ; Suena el archivo hello-world ; Cuelga la llamada

*** Indica que cuando cualquier usuario registrados (101 o 102) marque la extensin 100 se iniciara una secuencia de aplicaciones donde la primera es Answer, luego escuchara una grabacin (hello-world) y finalmente colgar.

Mas aplicaciones
Background: La aplicacin Background reproduce una meloda o mensaje mientras se espera el marcado de cualquier tecla. A diferencia de playback esta permite el marcado de teclas mientras que playback no.
[extensiones] exten => 100,1,Answer( ) exten => 100,n,Background(enter-ext-of-person) exten => 100,n,Hangup() ; contesta la llamada ; espera dgitos y pasa a la extensin en el mismo contexto

*** Aqu lo nico que hace es que cuando marcamos la extensin 100. A simple vista resulta con igual funcionamiento que Playback pero ya vern que no es as. Aplicacin Dial: Realiza una llamada a la extensin o numero determinado en el campo. Utiliza diferentes tipos de tecnologia (SIP, IAX, ZAP, etc). La sintaxis de Dial es un poquito mas compleja que las anteriores pero no menos importantes. Por ejemplo, Para habilitar que las extensiones 101 y 102 puedan marcarse entre si colocamos lo siguiente:
[extensiones] exten => 101,1,Dial(SIP/101,10) exten => 101,n,Playback(vm-nobodyavail) exten => 101,n,Hangup() exten => 102,1,Dial(SIP/101,10) exten => 102,n,Playback(vm-nobodyavail) exten => 102,n,Hangup() ; Marca a la extensin 101 y espera 10 segundos para pasar a la siguiente prioridad.

; Marca a la extensin 101 y espera 10 segundos para pasas a la siguiente prioridad.

Cuando la extensin 101 digite la 102, sonar en la extensin 102 por un periodo de 10 segundos, si en esos 10 segundos nadie contesta ira a la prxima prioridad que toca un mensaje de no disponible y finalmente cuelga. Tambin dial puede llamar a otro tipo de tecnologia (IAX,ZAP,etc). Por Ejemplo;
exten => 102,1,Dial(IAX/1,10,m) exten => 102,n,Playback(vm-nobodyavail) exten => 102,n,Hangup()

*** En este caso la opcin llamar la extensin 102 usando IAX y mientras suena la opcin m tocara un msica de fondo. Otras opciones de Dial():
T: Permite quien llama pueda transferir la llamada con # t: Permite que quien contesta pueda transferir la llamada con # r: Genera un ring tone al que llama y espera a generar el canal de audio cuando conteste w: Permite al que llama grabar la comunicacin con *1

Aplicacin Goto: Enva flujo de la llamada a un determinada posicin del dialplan, establecida por los parmetros de contexto + extensin + prioridad. Por Ejemplo:
exten => 100,1,Answer( ) ; contesta la llamada exten => 100,n,Background(enter-ext-of-person) exten => 100,n,WaitExten(10) exten => 100,n,Goto(101,1) exten => 100,n,Hangup() ; espera dgitos y pasa a la extensin en el mismo contexto ; Si no digta ninguna extensin, va a la extensin 101 prioridad 1.

Fundacin Cdigo Libre Dominicano - http://www.codigolibre.org

11

________________________________________________Cuaderno de Practicas Diplomado GNU-ASTERISK


exten => 101,1,Dial(SIP/101,10) exten => 101,n,Playback(vm-nobodyavail) exten => 101,n,Hangup() exten => 102,1,Dial(SIP/101,10) exten => 102,n,Playback(vm-nobodyavail) exten => 102,n,Hangup()

Otro Ejemplo:
exten => 100,1,Answer( ) ; contesta la llamada exten => 100,n,Background(enter-ext-of-person) exten => 100,n,WaitExten(10) exten => 100,n,Goto(hastaluego,200,1) exten => 100,n,Hangup() ; espera dgitos y pasa a la extensin en el mismo contexto ; Si no digta ninguna extensin, va al contexto hasta luego extensin 200 prioridad 1.

Entradas invalidas y timeouts Cuando el usuario teclea una entrada invlida, la llamada es enviada a la extensin i. Cuando el usuario no teclea ninguna opcin, es necesario tener una extensin que nos permita manejar esta situacin. Por defecto, si no se teclea nada despus de 10 segundos de haberse terminado de reproducir el archivo la llamada es enviada a la extensin t. Si se teclea un dgito, espera 5 segundos hasta el siguiente, o numeral (#) para terminar de escribir nmeros. Un Ejemplo:
exten => 100,1,Answer( ) ; contesta la llamada exten => 100,n,Background(enter-ext-of-person) ; espera dgitos y pasa a la extensin en el mismo contexto exten => 100,n,WaitExten(10) exten => 100,n,Hangup() exten => 101,1,Dial(SIP/101,10) exten => 101,n,Playback(vm-nobodyavail) exten => 101,n,Hangup() exten => 102,1,Dial(SIP/101,10) exten => 102,n,Playback(vm-nobodyavail) exten => 102,n,Hangup() exten => i,1,Playback(pbx-invalid) exten => i,n,Playback(vm-goodbye) exten => i,n,Hangup() exten => t,1,Playback(vm-goodbye) exten => t,n,Hangup() ; Suena un mensaje que indica extensin invalida ; Otro mensaje de adis ; Cuelga la llamada ; mensaje de adis ; Cuelga la llamada

En el ejemplo anterior, el usuario marca la extensin 100 y el contexto entrada le indica que digite le numero de extensin deseado, si el usuario digta un nmero de extensin diferente a 101 o 102 entonces ira directamente a la extensin invalida. Si espera un tiempo sin hacer nada entonces lo envi a la extensin t y termina la llamada. Variables En el dialplan de Asterisk existen variables, que pueden ser modificadas por el propio Asterisk en su ejecucin lgica o por comandos expresos (aplicaciones) del dialplan. Las variables reducen la escritura, agregan claridad al dialplan y le aportan lgica. Los tipos de variables son:
Globales: declaradas en extensions.conf (o por comando). Canal: asociadas con un canal particular. Entorno: variables de entorno (UNIX Like).

Variables globales Permite que se pueda hacer referencia a ellas en todos los contextos, en todas las extensiones, a diferencia de las variables convencionales que slo tienen validez en el canal actual. Es til para tener claridad manejable en el dialplan. Se pueden definir en el contexto [globals] al inicio de extensions.conf:
[globals] CRIS=Sip/101 CARLOS=Iax/102

La sintaxis de una variable es: ${variable} Asignacin de variables:


set(Variable=valor) set(GLOBAL(Variable)=Valor) ; Cambiamos el valor de una variable global

Fundacin Cdigo Libre Dominicano - http://www.codigolibre.org

12

________________________________________________Cuaderno de Practicas Diplomado GNU-ASTERISK


Agregar Variables al Dialplan Asumiendo que las variables globales fueron declaradas en el ejemplo anterior podemos simular lo siguiente:
exten => 100,1,Answer( ) ; contesta la llamada exten => 100,n,Background(enter-ext-of-person) ; espera dgitos y pasa a la extensin en el mismo contexto exten => 100,n,Hangup() exten => 101,1,Dial(${CRIS},10); Referencia a la variable CRIS cuyo valor es SIP/101 exten => 101,n,Playback(vm-nobodyavail) exten => 101,n,Hangup() exten => 102,1,Dial(${CARLOS},10) ; Referencia a la variable CARLOS cuyo valor es SIP/102 exten => 102,n,Playback(vm-nobodyavail) exten => 102,n,Hangup()

Algunas variables definidas automticamente por asterisk Listado de variables ms importantes:


${CALLERID}: caller ID actual, nombre y nmero. ${CONTEXT}: contexto actual. ${EXTEN}: extensin actual. ${CHANNEL}: canal actual. ${DIALSTATUS}: estado de la llamada: unavailable, congestion, busy, noanswer, answer, cancel, hangup. ${DATETIME}: hora actual.

Un comando til para ver el contenido es NoOp:


NoOp ( ${VARIABLE} ) ; Mostrar en el CLI el valor.

Variable ${EXTEN}
Permite saber cul es la extensin que fue marcada. Se utiliza comnmente para eliminar dgitos marcados:
${EXTEN:x}

Si x es positivo, quita los primeros x dgitos marcados:


exten => _XXX,1,SayDigits(${EXTEN:1})

Si x es negativo, devuelve los ltimos x dgitos marcados:


exten => _XXX,1,SayDigits(${EXTEN:-1})

Patrones Se utilizan principalmente para llamadas salientes. Comienzan con el signo _ . Le dicen a Asterisk que iguale con un patrn y no con un nmero de extensin.
X Z N [15-7] . (punto) Iguala cualquier dgito de 0 a 9. Iguala cualquier dgito de 1 a 9. Iguala cualquier dgito del 2 al 9. Iguala el rango de dgitos especificados, en este ejemplo iguala los nmeros 1,5,6,7. Iguala uno o mas caracteres.

exten => _NXX,1,Playback(auth-thankyou) Si Asterisk encuentra ms de 1 patrn para una extensin marcada, se usa la ms especfica: exten => _555XXXX,1,Playback(digits/1) exten => _55512XX,1,Playback(digits/1) Includes Asterisk posee una caracterstica para usar las extensiones de un contexto sin pertenecer a este. Esto es utilizado para controlar el acceso a diferentes secciones del dialplan. Por ejemplo, podramos habilitar otro contexto llamado extensiones2 con los usuarios 103 y 104, naturalmente los usuarios pertenecientes al contexto extensiones no podrn acceder ni llamar a los usuarios del contexto extensiones2, Aqu es donde entra include. Por Ejemplo:
[extensiones] include => extensiones2 exten => 101,1,Dial(SIP/101,10) exten => 101,n,Playback(vm-nobodyavail) exten => 101,n,Hangup() exten => 102,1,Dial(SIP/101,10) exten => 102,n,Playback(vm-nobodyavail) exten => 102,n,Hangup() [extensiones2] include => extensiones2

Fundacin Cdigo Libre Dominicano - http://www.codigolibre.org

13

________________________________________________Cuaderno de Practicas Diplomado GNU-ASTERISK


exten => 103,1,Dial(SIP/103,10) exten => 103,n,Playback(vm-nobodyavail) exten => 103,n,Hangup() exten => 104,1,Dial(SIP/104,10) exten => 104,n,Playback(vm-nobodyavail) exten => 104,n,Hangup()

Nota: Con estos includes ya ambos contextos podrn comunicarse sin problemas. Manipulacin de expresiones y variables Las expresiones son una combinacin de variables, operadores y valores que arrojan un resultado. El Sintaxis es: $[expr1 operador expr2] Operadores lgicos: |(or) , &(AND) Operadores de comparacin: =, !=, <, >, <=, >= Operadores aritmticos: +, -, *, /, % [...] , Ejemplo:
exten => 4003,1,Set(COUNT=3) exten => 4003,2,Set(NEWCOUNT=$[${COUNT} + 1]) exten => 4003,3,SayNumber(${NEWCOUNT})

Bifurcacin condicional Permite tomar decisiones dentro del dialplan. Aplicacin GotoIf() GotoIf(expresion1?destino1:destino2) Si la expresin evaluada es verdadera, la llamada es enviada a destino1, de lo contrario es enviada a destino2. Una cadena vaca y el nmero 0 son evaluados como falso, cualquier otro valor es verdadero. Cualquiera de los destinos puede ser omitido, pero debe estar alguno de los 2. Si el destino omitido es el camino que debe seguir la llamada, el flujo que se sigue es la siguiente prioridad dentro de la extensin actual. Ejemplo GotoIf
[extensiones] exten => 105,1,Set(TEST=1) exten => 105,2,GotoIf($[${TEST} = 1]?10,3) exten => 105,3,Playback(weasels-eaten-phonesys) exten => 105,4,Playback(office-iguanas) exten => 105,5,Set(COUNT=10) exten => 105,6,GotoIf($[${COUNT} > 0 ]?:10) exten => 105,7,SayNumber(${COUNT}) exten => 105,8,Set(COUNT=${COUNT} - 1) exten => 105,9,Goto(2) exten => 105,10,Hangup() exten => 105,11,GotoIf($[${CALLERIDNUM} = 8094767758]?12:10) exten => 105,12,Dial(SIP/102) exten => 105,13,Playback(abandon-all-hope) exten => 105,14,Hangup()

Bifurcacin condicional basada en tiempo Verifica la hora actual del servidor, permitiendo tomar decisiones basadas en tiempo. Se utiliza cuando se quiere dar una bienvenida diferente en horarios de trabajo y fuera de trabajo. GotoIfTime(hora,dias_de_semana,dias_del_mes,meses?etiqueta) Enva la llamada a etiqueta si la fecha y hora actual concuerdan con el criterio especificado por los parmetros.
Hora Dias_de_semana Dias_del_mes Meses * Lista de uno o ms rangos de horario en formato de 24 horas. 09:00-17:00 Lista de uno o ms das de la semana lunes, martes, etc (mon, tues) Da numrico del mes 7-12,15 Lista de uno o ms meses del ao un, apr, jul Iguala cualquier valor

Etiqueta puede ser una prioridad dentro de una misma extensin, una prioridad y extensin dentro del mismo contexto o un contexto, extensin y prioridad. Ejemplo:
[inicio] exten => 222,1,GotoIfTime(06:00-17:59),mon-fri,*,*?entrada,s,1) exten => 222,n,Goto(afterhours,s,1)

El ejemplo anterior indica que cuando se marque la extensin 222, si el usuario marca entre las 6am y 5:59pm de lunes a viernes ira al contexto entrada, prioridad 1. De lo contrario ira al contexto afterhours, prioridad 1.

Configurando Hardware Telefnico


Fundacin Cdigo Libre Dominicano - http://www.codigolibre.org 14

________________________________________________Cuaderno de Practicas Diplomado GNU-ASTERISK


En este tema configuraremos una tarjeta FXO Digium TDM04B para conectar asterisk a una linea anloga, es decir, habilitaremos la linea para cuando alguien llame al 8094767758 asterisk responda de acuerdo al dialplan que hayamos definido. Para esto, hemos instalado previamente los paquetes de dahdi. Ahora procederemos a su configuracin. El archivo /etc/dahdi/system.conf es donde configuras los parmetros de la tarjeta, en nuestro caso la TDM04B. Es ledo por el programa dahdi_cfg. Estos archivos son instalados por el paquete dahdi-linux.
[root@blackangel ~]# vim /etc/dahdi/dahdi.conf fxsks=1-4 ; Se especifica la cantidad de puertos que tendr su tarjeta. En nuestro caso posee 4. loadzone = us ; significa que sus tarjetas de interfaz sern cargadas con tonos de la indicacin de USA defaultzone = us ; los medios utilizan los tonos para esta zona por defecto (cuando no se especifica ninguna otra zona.

Configurando chan_dahdi.conf En este archivo se configuran los parmetros a utilizar por los canales para asterisk. Cuando alguien llame al numero 8094767758 asterisk leer este archivo de configuracin y aplicara todos los parmetros establecidos en el. Aqui un ejemplo: [root@blackangel ~]# vim /etc/asterisk/chan_dahdi.conf
[channels] language=en usecallerid=yes ; Identificara el numero de quien llama hidecallerid=no ; callwaiting=yes ; Habilitado, asterisk generara tonos cuando tengas una conversacin y alguien mas este tratando de llamar callwaitingcallerid=yes ; Asterisk enviara el callerid de quien espera. threewaycalling=yes ; Si esta habilitada, puedes colocar llamadas en hold. echocancel=yes ; Habilita echo cancellation o cancelacin de eco echocancelwhenbridged=yes rxgain=0.0 txgain=0.0 group=1 callgroup=1 pickupgroup=1 immediate=no ; Este parmetro acelera el marcado y por defecto manda las llamadas entrantes a la extensin s busydetect=no callprogress=no musiconhold=default context=entrada ; Todas las llamadas que lleguen por las lineas ZAP irn al contexto entrada. signalling= fxs_ks ; Tipo de sealizacin channel => 1-4 ; Canales a utilizar

Para visualizar si el mdulo de la tarjeta FXO esta insertado en el Kernel:


[root@blackangel ~]# lsmod |grep -i wctdm

Use los siguientes comandos para ver si el canal a sido configurando:


[root@blackangel ~]# dahdi_cfg -vv [root@blackangel ~]# dahdi_scan [root@blackangel ~]# dahdi_tool

Para administrar el servicio de dahdi ejecute uno de los siguientes comandos:


[root@blackangel ~]# service dahdi start [root@blackangel ~]# para detenerlo [root@blackangel ~]# service dahdi stop

Podemos agregar un contexto de prueba en el extensions.conf para confirmar que nuestra linea anloga esta configurada , solo deber agregar las siguientes lineas en extensions.conf:
[entrada] exten => s,1,Answer() exten => s,n,Playback(demo-congrats) exten => s,n,Hangup()

Estas 3 lineas Indican que cuando alguien llame al 8094767758 asterisk entrara al contexto entrada y se escuchara una grabacin democongrats y luego colgar. Si puede escuchar esto entonces se ha configurado la tarjeta exitosamente. Habilitando llamadas salientes a travs del canal DAHDI Si queremos habilitar llamadas por la linea anloga, lo hacemos fcilmente, solo agregamos un contexto con patrones de salida y lo habilitaremos en nuestro contexto [extensiones], es como sigue: Declaramos en la definicin de variables, el canal DAHDI: TRUNKDESALIDA=Dahdi/1
[extensiones] include => llamadas-locales exten => 101,1,Dial(SIP/101,10)

Fundacin Cdigo Libre Dominicano - http://www.codigolibre.org

15

________________________________________________Cuaderno de Practicas Diplomado GNU-ASTERISK


exten => 101,n,Playback(vm-nobodyavail) exten => 101,n,Hangup() exten => 102,1,Dial(SIP/101,10) exten => 102,n,Playback(vm-nobodyavail) exten => 102,n,Hangup() [llamadas-locales] exten => _9NXXXXXX,1,Dial(${TRUNKDESALIDA}/${EXTEN}:1) exten => _9NXXXXXX,2,Congestion() exten => _9NXXXXXX,102,Congestion()

As cuando la extensin 101 o 102 marquen el 9 + un telfono, se habilitara el tono en la linea anloga y podr realizar llamadas.

Interactive Voice Response


IVR son las siglas de Interactive Voice Response, que se traduce del ingls como Respuesta de Voz Interactiva. Tambin se utiliza el trmino VRU (Voice Response Unit). Consiste en un sistema telefnico que es capaz de recibir una llamada e interactuar con el humano a travs de grabaciones de voz. Es un sistema de respuesta interactiva, orientado a entregar y/o capturar informacin automatizada a travs del telfono permitiendo el acceso a los servicios de informacin y operaciones autorizadas, las 24 horas del da. El IVR es la tpica mquina que nos responde con una voz grabada cuando llamamos a una central o que nos recibe en la banca telefnica. Segn las opciones que el usuario le ingresa lo deriva a un centro de atencin telefnica o a otra central telefnica. Las empresas suelen usar la tecnologa de IVR para enrutar una llamada entrante haca un departamento u otro, sin la necesidad de intervencin humana, as reduciendo el tiempo de espera de sus clientes. En los centros de atencin telefnico al cliente, se usan los IVR's para guiar el llamante hacia los agentes con mayor conocimiento de una materia especifica, reduciendo as el tiempo de la llamada y evitando la necesidad de hacer transferencias entre agentes. El usuario realiza una llamada a un nmero de telfono, el sistema de audio respuesta contesta la llamada y le presenta al usuario una serie de acciones a realizar, esto se hace mediante mensajes (mens de opciones) previamente grabados en ficheros de audio (Por ejemplo "Pulse uno para ventas, dos para administracin"). El usuario elige la opcin a realizar introduciendo un nmero en el teclado del telfono y navega por los diferentes mens hasta encontrar la informacin solicitada o que el sistema enruta la llamada al destinatario elegido. Para la configuracin de su IVR usted necesitara primero grabar algunos mensajes. Para ello deber utilizar cualquier grabador de sonidos de acuerdo a la complejidad de su IVR. Inicialmente iremos fabricando un IVR sencillo y a travs de toda la clase se ira colocando mas complejo con la idea de tener al final de los temas un completo sistema de IVR. Utilizaremos muchos de los conceptos aprendidos previamente as como las variables de asterisk y estaremos juntando TODOS. Aqu un Ejemplo 1:
[entrada] include => extensiones exten => 222,1,Answer() exten => 222,n,Background(demo-echodone) exten => 222,n,WaitExten(5) exten => 222,n,Playback(vm-goodbye) exten => 222,n,Hangup() [extensiones] include => entrada exten => 101,1,Dial(SIP/101,20) exten => 101,n,Hangup() exten => 102,1,Dial(SIP/102,20) exten => 102,n,Hangup()

Cuando la llamada entra a la extensin 222 responde nuestro IVR con un mensaje de Bienvenida e indicando que marque la extensin deseada, espera 5 segundos para que el cliente marque la extensin deseada para transferirlo. Si el cliente no digite nada la llamada es terminada.

Agregando las extensiones i y t


Agregaremos las extensiones i a nuestro dialplan y un Goto para que el cliente regrese al inicio en caso digitar una extensin invalida.
[entrada] include => extensiones exten => 222,1,Answer() exten => 222,n,Background(demo-echodone) exten => 222,n,WaitExten(5) exten => 222,n,Playback(vm-goodbye) exten => 222,n,Hangup() exten => i,1,Playback(pbx-invalid) exten => i,n,Goto(entrada,222,1)

Fundacin Cdigo Libre Dominicano - http://www.codigolibre.org

16

________________________________________________Cuaderno de Practicas Diplomado GNU-ASTERISK


[extensiones] include => entrada exten => 101,1,Dial(SIP/101,20) exten => 101,n,Hangup() exten => 102,1,Dial(SIP/102,20) exten => 102,n,Hangup()

Cuando el cliente digite una extensin invalida escuchara un mensaje de invalido y volver al men principal. Agregando un Contador y GotoIf a nuestro IVR. En el contexto i, crearemos un contador que calculara un numero mximo de 3 extensiones invalidas para luego terminar la llamada. Aqu tambin empleamos la aplicacin GotoIf condicionara el contexto para decidir a donde ir. Es como sigue:
[entrada] include => extensiones exten => 222,1,Set(COUNT=1) exten => 222,1,GotoIf($[${COUNT} > 3]?fin:inicio) exten => 222,n(inicio),Answer() exten => 222,n,Background(demo-echodone) exten => 222,n,WaitExten(5) exten => 222,n,Goto(i,1) exten => 222,n(fin),Playback(vm-goodbye) exten => 222,n,Hangup() exten => i,1,Playback(pbx-invalid) exten => i,n,Set(COUNT=$[${COUNT}] + 1]) exten => i,n,Goto(entrada,222,2) [extensiones] include => entrada exten => 101,1,Dial(SIP/101,20) exten => 101,n,Hangup() exten => 102,1,Dial(SIP/102,20) exten => 102,n,Hangup()

En el ejemplo anterior, agregamos tambin etiquetas al contexto para indicar donde ira el Gotoif cuando se cumpla una condicin determinada. Fjense como hacemos un Goto hacia el contexto entrada,222,2, esto es porque si la enviamos al 1 la variable $COUNT se mantendr reiniciada y nunca el contador sumar. Agregando GotoIfTime Si queremos establecer un horario en el que el cliente podr comunicarse con nuestros representantes utilizamos la aplicacin GotoIfTime. Con esta lo que haremos es un contexto dentro de un horario especifico o de lo contrario que ejecute otro contexto que dir que no estan laborando. Es como sigue:
[inicio] exten => 222,1,GotoIfTime(09:00-17:59),mon-fri,*,*?entrada,s,1) exten => 222,n,Goto(afterhours,s,1) [entrada] include => extensiones exten => s,1,Set(COUNT=1) exten => s,n,GotoIf($[${COUNT} > 3]?fin:inicio) exten => s,n(inicio),Answer() exten => s,n,Background(demo-echodone) exten => s,n,WaitExten(5) exten => s,n,Goto(i,1) exten => s,n(fin),Playback(vm-goodbye) exten => s,n,Hangup() exten => i,1,Playback(pbx-invalid) exten => i,n,Set(COUNT=$[${COUNT}] + 1]) exten => i,n,SayNumber(${COUNT}) exten => i,n,Goto(entrada,s,2) [extensiones] include => inicio include => entrada exten => 101,1,Dial(SIP/101,20)

Fundacin Cdigo Libre Dominicano - http://www.codigolibre.org

17

________________________________________________Cuaderno de Practicas Diplomado GNU-ASTERISK


exten => 101,n,Hangup() exten => 102,1,Dial(SIP/102,20) exten => 102,n,Hangup() [afterhours] exten => s,1,Playback(hours) exten => s,n,Hangup()

En este ejemplo cambia totalmente nuestro IVR. Agregamos un contexto inicio donde las llamadas marcadas al 222 entraran en este contexto y encontraran la condicin GotoIfTime(09:00-17:59),mon-fri,*,*?entrada,s,1) . Indica que de lunes a viernes en horario 09:00-17:59 de cualquier da y cualquier mes se enviara al contexto entrada prioridad 1. Si la condicin no esta cumplida se ejecutara la siguiente prioridad que en este caso es Goto(afterhours,s,1) donde se ejecutara un mensaje diciendo que la empresa labora en horario de lunes a viernes de 9am a 6pm. **** Con esto tenemos un IVR bastante flexible para tratar los clientes *****

Voicemail
Una de las caractersticas mas populares en la telefona moderna es la capacidad de dejar mensajes de voz para ser recogidos mas tarde en caso de que el usuario a quien se llama no este disponible. Naturalmente, asterisk posee un voicemail bastante flexible con las siguientes caractersticas: Ilimitada proteccin de passwords. Diferentes saludos para los distintos tipos de estado(Busy,Noanswer,Unavailable,etc) Saludos por defecto y tambin personalizados Notificacin por correo y con la opcin de adjuntar el mensaje de voz en el mismo. Indicador de que tiene un mensaje de voz. Aplicado para distintos tipos de telfonos IP. Directorio de la compaa basado en los buzones de voz La configuracin del voicemail es muy facial, a continuacin paso a paso de una manera muy descriptiva como crear el buzn de voz y sus distintas opciones: Para la configuracin bsica del voicemail se vern afectados los archivos de configuracin voicemail.conf, sip.conf y extensions.conf Primero declaramos el contexto al final del archivo voicemail.conf que contendr los buzones de voz correspondientes a las extensiones 101 y 102. La sintaxis es:
[buzon] 101 => 1234,Cristhian,cristhian@codigolibre.org 102 => 5678,Carlos,ccastro@codigolibre.org

Donde 101 = 1234 = Cristhian = cristhian@codigolibre.org = Es el numero o extensin al cual se le asignara el buzn Es la clave que sera usada para acceder al buzn de voz Nombre asociado al buzn Correo donde recibir las notificaciones

Editamos el archivo sip.conf donde le diremos a las extensiones 101 y 102 cuales seran sus buzones. Quedara de la siguiente manera:
[101] type=friend ; Friends puede colocar y recibir llamadas callerid=cris context=extensiones username=101 secret=101 host=dynamic ; Esta registrada con nosotros mailbox=101@buzon [102] type=friend ; Friends puede colocar y recibir llamadas callerid=carlos context=extensiones username=102 secret=102 host=dynamic ; Esta registrada con nosotros mailbox=102@buzon Notese como se le asigna a cada usuario un numero de buzon en el contexto buzn.

Configuramos la aplicacin Voicemail en el dialplan correspondiente a los usuarios. De igual modo, tambin habilitamos la extensin para llamar el buzn de voz el cual sera en nuestro caso la extensin 888. El contexto extensiones quedara as en extensions.conf:

Fundacin Cdigo Libre Dominicano - http://www.codigolibre.org

18

________________________________________________Cuaderno de Practicas Diplomado GNU-ASTERISK


[extensiones] include => inicio include => entrada exten => 101,1,Dial(SIP/101,20) exten => 101,n,VoiceMail(101@buzon) exten => 101,n,Playback(vm-goodbye) exten => 101,n,Hangup() exten => 102,1,Dial(SIP/102,20) exten => 101,n,VoiceMail(102@buzon) exten => 101,n,Playback(vm-goodbye) exten => 102,n,Hangup() ;Voicemail exten => 888,1,VoiceMailMain(@buzon)

Las Lineas en negritas habilitan el buzn de voz para los usuarios 101 y 102 y la extensin 888 habilita la aplicacin VoiceMailMain la cual es la administracin del buzn de voz. La opcin (@buzon) muestra la interfaz de administracin para el contexto buzn creado en el archivo voicemail.conf. Esto indica que cuando el usuario llame la extensin 888 se le solicitara un numero de buzn y una clave para poder acceder. Ya dentro del buzn tendr varias opciones para administrar sus mensajes. Los mensajes se graban en el directorio /var/spool/asterisk/voicemail/. Este es el men mostrado al usuario para la administracin de sus mensajes a travs de la aplicacin VoiceMailAdmin:
1 Mensajes Ledos 3 Opciones Avanzadas 1 Responder 2 Devolver la llamada 3 Sobre 4 Llamada Saliente 5 Dejar un mensaje * Regresar al men principal 4 Escuchar mensajes anteriores 5 Repetir mensaje actual 6 Tocar el prximo mensaje 7 Borrar el actual mensaje 8 Reenviar el mensaje a otro buzn de voz 9 Guardar el mensaje en un folder * Ayuda # Salir 2 Cambiar folder 3 Opciones avanzadas 0 Opciones del buzn 1 Grabar mensaje de no disponible 2 Grabar mensaje cuando el status sea ocupado 3 Grabar su nombre 4 Cambiar su password * Regresar al men principal * Ayuda # Salir

Ahora estamos listos para recibir mensajes de voz y poder escucharlos a travs del voicemailadmin. Editando las opciones del archivo voicemail.conf Podemos editar algunas opciones en el archivo voicemail.conf, algunas son: enviar notificacin por correo, adjuntar el archivo de grabacin en el correo, establecer un numero mximo de mensajes por buzn, establecer un tiempo mximo o mnimo de grabacin de mensajes, establecer un cuerpo del mensaje a enviar, etc. serveremail=asterisk@fcld.local :Indica el usuario que envi el mensaje. attach=yes : Establecido a yes el usuario recibir va el mensaje grabado maxmsg=100 : Mximo numero de mensajes que se le permitir al dueo del buzn. maxmessage=180 : Tiempo mximo permitida para la grabacin del mensaje. maxsilence=10 : El servidor espera 10 segundos de silencio antes de terminar la llamada. maxlogins=3 : Numero mximo de intentos fallidos. emailsubject=[PBX]: Mensaje Nuevo ${VM_MSGNUM} en el buzn de voz ${VM_MAILBOX} : Corresponde al asunto que sera mostrado cuando le llegue un correo al usuario. Note como se utilizan variables de mailbox, mas adelante hablaremos de ellas. emailbody = : Indica el cuerpo del mensaje que recibir el usuario al ser notificado. emaildateformat=%A, %B %d, %Y at %r : Formato de Fecha donde: %A = Da de la semana %B = Mes %d = Da %Y = Ao %r = hora

Fundacin Cdigo Libre Dominicano - http://www.codigolibre.org

19

________________________________________________Cuaderno de Practicas Diplomado GNU-ASTERISK


*** Ya con estos pasos tenemos buzn de voz habilitado en nuestro asterisk *** Queues (colas) Las colas son utilizadas por los sistemas PSTN para mantener las solicitudes de sus clientes hasta que algn recurso este disponible. Significa que todo el trafico entrante que exceda la capacidad disponible se colocaran en linea hasta que puedan ser atendidos. Las colas bsicamente consisten en: Llamadas entrantes son colocadas en la cola Miembros que responden la cola (Extensiones o usuarios que se ingresan al sistema como agentes) Una estrategia de como manejar las colas y dividir las llamadas entre los miembros Msica mientras esperan en cola Anuncios para miembros y clientes Existen dos maneras de crear colas en asterisk: Esttica: donde no necesitas utilizar el archivo agents.conf Esta configuracin, se especificara cuales sern los usuarios que respondern las llamadas correspondiente a una cola especifica. Por Ejemplo, los usuarios SIP/101, SIP/102 y SIP/103 seran los responsables de responder a la cola [micola]. Ventajas: No necesitas utilizar las aplicaciones AgentLogin y AgentBacklogin para que los usuarios se efectun login. El usuario se registrara automticamente en esta cola cuando ingrese. Dinmica: Utilizacin de agents.conf A diferencia de la esttica, aqu debemos escribir no el numero del usuario pero si el numero del agente que esta registrado en el archivo agents.conf. Por ejemplo, member => Agent/1001, member => Agent/1002, member => Agent/1003, indica que los agentes 1001,1002 y 1003 pertenecern a esa cola. Si se decide utilizar este mtodo entonces las aplicaciones Agentlogin y AgentCallbacklogin. Ventajas: La ventaja principal es que el usuario podra hacer login desde cualquier terminal o extensin con solo digitar su usuario y clave en la aplicacin Asterisklogin. Opciones de Queues.conf: strategy: Determina como en cual orden las llamadas entraran a los agentes. Las opciones son: ringall: La llamada entra en todos los agentes y cualquiera podr responder roundrobin: La llamada entra en cada agente disponible leastrecent: La llamada entra al agente con mas tiempo sin contestar fewestcalls: La llamada entra al agente con menos tiempo sin contestar random: Selecciona al agente de manera aleatoria sin ningn parmetro rrmemory: round robin con memoria. Inicia la serie en aquel ultimo que contesto periodic-announce: Realiza mensajes peridicos (Ejemplo: su llamada es importante para nosotros ...) periodic-announce-frequency: Establece con que frecuencia anuncia los mensajes joinempty: Esta opcin controla si las llamadas entrantes pueden entrar a una cola sin miembros. Las opciones disponibles son: yes: Llamadas entrantes pueden ingresar a una cola sin miembros o estos no disponibles. No: Llamadas entrantes no pueden ingresar a una cola sin miembros strict: Llamadas entrantes no pueden ingresar a una cola sin miembros o estos no disponibles. Music: timeout: retry: maxlen: Establece la msica para la espera Cuanto tiempo se le permite al telfono de un agente sonar antes de considerarse timeout El tiempo a esperar antes de intentar con los agentes nuevamente Nmero mximo de llamadas entrantes permitidas en una cola. 0 es ilimitado

Ahora llevaremos esto a la practica


Creando Colas Estticas Para la creacin de colas estticas se editan los archivos queues.conf y extensions.conf. Queues.conf Se agregar un contexto con el nombre [micola] con los siguientes parmetros
[micola] context=extensiones periodic-announce = fcld-agents-busy periodic-announce-frequency = 60 joinempty = strict music=default

Fundacin Cdigo Libre Dominicano - http://www.codigolibre.org

20

________________________________________________Cuaderno de Practicas Diplomado GNU-ASTERISK


strategy=rrmemory timeout=15 retry=2 maxlen = 0 member => SIP/101 member => SIP/102 member => SIP/103

; Especificamos estticamente cuales sern las extensiones registradas en esta cola.

Luego nos dirigimos a extensions.conf para habilitar la cola:


exten => 999,1,Answer() exten => 999,n,Ringing exten => 999,n,Wait(2) exten => 999,n,Queue(micola) exten => 999,n,HangUp

As cuando un usuario llame a la 999 suena y lo coloca en la cola [micola]. Mientras esta a la espera de ser atendido estar por uno de los agentes registrados en esa cola y escuchando la msica por defecto establecida as como los anuncios peridicos. Creando Colas Dinmicas La nica diferencia en este tema es la inclusin del archivo agents.conf. En este se crean los agentes que mas adelante sern definidos en queues.conf. As que en agents.conf agregamos los siguientes agentes:
agent => 1001,1234,Cristhian Nunez agent => 1002,1234,Carlos Castro agent => 1003,1234,Jophiel Espaillat

y agregamos en extensions.conf una extensin con la aplicacin Agentlogin para que puedan registrarse los agentes:
;Agent Login exten => 888,1,AgentCallbacklogin(||${CALLERIDNUM}@extensiones) ;Agent Logout exten => 889,1,AgentCallbacklogin(||l)

Cuando el agente digite 888, la aplicacin le preguntara por un usuario (1001) y una clave (1234) y la extensin donde recibir las llamadas. Luego de esto todas las llamadas sern enrutadas hacia la extensin especificada por el agente. Cuando el agente digite 889 se le preguntara nuevamente por un usuario, clave y extensin. El agente puede entrar una nueva extensin para que las llamadas sean enrutadas hacia esta ultima.

Asterisk Command-Line Interface


Para acceder a asterisk command-line interface(CLI) desde al shell ejecute el comando asterisk pasndole las siguiente opciones -r que provee una conexin a la consola de asterisk si el proceso de asterisk ya esta corriendo te provee una interfaz para controlar la consola de asterisk.
[root@blackangel ~]# asterisk -rvv CLI> *** la opcin -v proporciona mas informacin de asterisk entre mas v agregamos mas informacin nos mostrara. ! Es para poder ejecutar comandos de el shell sobre el CLI de asterisk. CLI> !ifconfig eth0 dialplan add extension contiene subcomandos que le permite agregar algunas funcionalidades a tu PBX sin editar directamente los archivos de configuracin. CLI> dialplan add extension 112,1,Dial,SIP/112/|20|Tt into phone dialplan show muestra el dialplan para un contexto en especifico. CLI> dialplan show phone dialplan add include incluye un contexto en otro contexto. CLI> dialplan add include salida into entrada dialplan reload recarga solo el archivo extensions.conf. CLI> dialplan reload dialplan remove extension remueve una extensin. CLI> dialplan remove extension 101@phone core abort shutdown Cancela un shutdown corriendo CLI> core abort shutdown agent logoff configura una agente offline CLI> agent logoff sip/112 agent show muestra los agentes configurados. CLI> agent show agent show online muestra los agentes online CLI> agent show online cdr mysql status muestra el status de la conexin de cdr_mysql CLI> cdr mysql status cdr status muestra el status de los CDR.

Fundacin Cdigo Libre Dominicano - http://www.codigolibre.org

21

________________________________________________Cuaderno de Practicas Diplomado GNU-ASTERISK


CLI> cdr status console active configura el display en la console activa CLI> console show active console answer responde a una entrada de una llama en la console. CLI> console answer core show applications muestra las aplicaciones registradas para el dialplan. CLI> core show applications core show application muestra una descripcin de la aplicacin. CLI> core show application dial core show channels muestra la informacin en los canales. CLI> core show channels core show channeltypes muestra la informacin de tipo de canal. core show codecs muestra las lista de todos los codecs. CLI> core show codecs core show codec muestra un codec en especifico. CLI> core show codec 2 features show muestra los features configurados. CLI> features show http show status muestra el status del server HTTP CLI> http show status iax2 reload recarga la configuracin del iax2 file. CLI> iax2 reload iax2 set debug habilita el debug para iax2. CLI> iax2 set debug iax2 set debug off deshabilita el debug para iax2. CLI> iax2 set debug off iax set debug jb habilita el debug para el jitterbuffer CLI> iax2 set debug jb iax2 set debug jb off deshabilita el debug para el jitterbuffer. CLI> iax2 set debug jb off iax2 set debug trunk habilita el debug para el troncal. CLI> iax2 set debug trunk iax2 set debug trunk off deshabilita el debug para el troncal. CLI> iax2 set debug trunk off iax2 show cache muestra el cache del dialplan. CLI> iax2 show cache iax2 show channels muestra todos los canales activos. CLI> iax2 show channels iax2 show firmware muestra el firmware disponible. CLI> iax2 show firmware iax2 show netstats muestra los canales activos de iax2 netstats. CLI> iax2 show netstats iax2 show peers muestra todos los peers definidos en iax2.conf. CLI> iax2 show peers iax2 show peer muestra un peer en especifico. CLI> iax2 show peer blackangel iax2 show provisioning muestra iax provisioning CLI> iax2 show provisioning iax2 show registry muestra el status de los registros. CLI> iax2 show registry iax2 show stats muestra las estadisticas. CLI> iax2 show stats iax2 show users muestra informacion sobre los usuarios. CLI> iax2 show users module load carga un modulo para asterisk. CLI> module load cdr_addon_mysql.so module unload descarga un modulo para asterisk. CLI> module unload cdr_addon_mysql.so module reload recarga un modulo para asterisk. CLI> module reload cdr_csv.so module show muestra todos lo mdulos que contiene asterisk. CLI> show modules sip reload recarga la configuracin del archivo sip.conf CLI> sip reload sip set debug ajusta el debug para el canal sip. CLI> sip set debug sip set debug off deshabilita el debug para el canal sip. CLI> sip set debug off sip set debug peer configura el debug para un peer. CLI> sip set debug peer 101 sip show channels muestra todo los canales activos. CLI> sip show channels sip show peers muestra todo los peers agregados en el sip.conf.

Fundacin Cdigo Libre Dominicano - http://www.codigolibre.org

22

________________________________________________Cuaderno de Practicas Diplomado GNU-ASTERISK


CLI> sip show peers sip show registry muestra el status de los registros. CLI> sip show registry sip show settings muestra la configuracin global de sip. CLI> sip show settings sip show subscriptions muestra la cantidad de subscriptions. CLI> sip show subscriptions sip show users muestra todo los usuarios de sip CLI> sip show users voicemail show users muestra la cantidad de usuarios con voicemail CLI> voicemail show users voicemail show zone muestra la zona para el formato del mensaje. CLI> voicemail show zones dahdi destroy channel destruye un canal. CLI> dahdi destroy channel 1 dahdi restart completamente reinicia el todos los canales. CLI> dahdi restart dahdi show cadences muestra los cadences. CLI> dahdi show cadences dahdi show channels muestra todos los canales activos. CLI> dahdi show channels dahdi show status muestra el status de la tarjeta. CLI> dahdi show status restart gracefully reinicia asterisk con cortesia. CLI> restart gracefully restart now reinicia inmediatamente a asterisk. CLI> restart now restart when convenient reinicia asterisk cuando se limpien el volumen de llamadas. CLI> restart when convenient parkedcalls show muestra todas las llamdas parqueadas. CLI> parkedcalls show moh reload reinicia music hold. CLI> moh reload moh show classes muestra el listado de MOH Classes. CLI> moh show classes moh show files muestra el listado de los archivos de music hold. CLI> moh show files

Parqueo de Llamadas (Call Parking) El parqueo de llamadas permite al usuario que recibe una llamada, enviar su llamada a un "cuarto" de parqueo, para volver a atenderla desde otra extensin. Este tipo de accin es til en el siguiente ejemplo. Supongamos que el administrador de la red recibe una llamada a su extensin ubicada en su escritorio, y esta requiere que l se ubique de frente en un servidor que se encuentra tres pisos mas arriba, y no sabe si alguien podr atender la llamada en el telfono ubicado en el cuarto de equipos para que pueda hacer la transferencia normal de la llamada. En este caso, la opcin es enviar la llamada a un cuarto temporal, donde mientras tanto el que llama, escuchar la msica en espera configurada, hasta que el administrador llegue al cuarto de equipos y vuelva a tomar la llamada. En su central telefnica, para enviar la llamada actual para un cuarto de parqueo, transfiera la llamada a una extensin predefinida, utilizando el carcter predeterminado para transferir. Un vez digitada la extensin, usted escuchar el nmero de extensin que deber marcar desde el otro telfono para volver a recuperar la llamada. La llamada quedar en espera por un lapso mximo de 2 minutos. Mientras la llamada esta parqueada, el que est llamando escuchar la msica configurada como "Music On Hold". Para esta configuracin tenemos que trabajar con dos archivos de configuracin el primero es features.conf y extensions.conf
[general] parkext => 700 parkpos => 701-720 context => parkedcalls parkingtime = 90 ; La extensin a marcar para parquear una llamada ; Rango de extensiones que se usaran como parqueo para las llamadas ; contexto del parqueo de llamadas ; Tiempo en el parqueo en segundos

Luego vamos al archivo extensions.conf y agregamos el siguiente contexto: include => parkedcalls Tenemos que incluir esto en el contexto del que deseemos que use esta caracterstica... Aclarando un poco mas.... Cuando parqueemos una llamada usando la extensin 700, una grabadora nos dir donde tenemos que recogerla, puede que sea desde la 701 al 720. Music on Hold Cualquier popular sistema PBX ofrece la capacidad de suministrar una fuente de msica que ha de desempear para mientras que hay

Fundacin Cdigo Libre Dominicano - http://www.codigolibre.org

23

________________________________________________Cuaderno de Practicas Diplomado GNU-ASTERISK


una llamada en espera. Asterisk permite mucha creatividad en este sentido. Hoy en da, todo el mundo est familiarizado con el formato de msica MP3, y hay un gran inters en el uso de MP3 como msica en espera. El concepto que parece una buena idea, pero hay algunas cosas que creemos que deben pensar y tener en consideracin: Los Archivos MP3 son muy complejos, y requieren una cantidad sustancial de CPU para decodificar. Si usted tiene varias llamadas reproduciendo msica en espera en el sistema (por ejemplo, a veces las personas quiere escuchar msica a travs de su telfono, o un centro de atencin telefnica pueden tener varias llaman en espera),la carga en el CPU causado por la totalidad de la transcodificacin de los archivos MP3 almacenados podra poner demasiada demanda en una mquina que esta corriendo asterisk podemos usar formato mp3 de acuerdo a las necesidades de rendimiento del sistema. Configurando msica en espera. [root@asterisk ~]# vim /etc/asterisk/musiconhold.conf
[default] mode=files directory=/var/lib/asterisk/moh random=yes

Donde: mode-files: directory: random: Lee los archivos desde el directorio especificado en cualquier formato. Especifica el directorio donde estarn ubicados los archivos de sonido. Toca los archivos de manera aleatoria.

Los sonidos de la msica en espera estn en la ruta siguiente:


[root@asterisk]# cd /var/lib/asterisk/moh/ [root@asterisk moh]# ls fpm-calm-river.gsm fpm-sunshine.wav LICENSE-asterisk-moh-freeplay-gsm fpm-calm-river.wav fpm-world-mix.gsm LICENSE-asterisk-moh-freeplay-wav fpm-sunshine.gsm fpm-world-mix.wav

Optimizando la msica en espera La aplicacin MusicOnHold de Asterisk utiliza ficheros codificados en MP3 o WAV. Si bien esta codificacin de audio ofrece una buena calidad esta pensada para ficheros de sonido y no para las comunicaciones. Si tenemos una gran cantidad de llamadas en espera la carga del sistema es cada vez mayor, esto es debido a la transcodificacin probablemente en la mayora de llamadas usemos GSM o A-law. Cuando Asterisk reproduce MOH, siempre busca el formato que menos coste le supone respecto al cdec que se est usando. Normalmente transcodificar desde SLIN va a ser la opcin ms barata, pero si sabemos que nuestro sistema usa principalmente GSM o A-law (en la mayora de los casos), lo mejor sera hacer la transcodificacin del fichero nosotros mismos y evitar esta tarea a Asterisk. Para ello iremos al directorio donde tenemos la msica en espera y convertiremos los ficheros WAV. Para ello necesitaremos sox, as que si no lo tenemos instalado:
[root@asterisk ~]# yum -y install sox

# Accedemos al directorio de los ficheros MOH


cd /var/lib/asterisk/moh

Formato GSM:
sox fpm-sunshine.wav -t gsm -r 8000 -b -c 1 fpm-sunshine.gsm sox fpm-calm-river.wav -t gsm -r 8000 -b -c 1 fpm-calm-river.gsm sox fpm-world-mix.wav -t gsm -r 8000 -b -c 1 fpm-world-mix.gsm

Formato A-law:
sox fpm-sunshine.wav -t al -r 8000 -b -c 1 fpm-sunshine.alaw sox fpm-calm-river.wav -t al -r 8000 -b -c 1 fpm-calm-river.alaw sox fpm-world-mix.wav -t al -r 8000 -b -c 1 fpm-world-mix.alaw

Aqui donde: fpm-sunshine.wav -> Indica el archivo de entrada a convertir. -t -> Especifica el tipo de archivo a convertir -r -> Especifica el rate en Hertz del archivo -c -> Especifica el numero de canales en el archivo. Estos pueden ser 1,2 y 4 para mono, estreo o quad-sound respectivamente. Asterisk Macros

Fundacin Cdigo Libre Dominicano - http://www.codigolibre.org

24

________________________________________________Cuaderno de Practicas Diplomado GNU-ASTERISK


Los macros son muy utilizados para construir y evitar repeticiones en el dialplan. Una vez definido el macro, estos pueden ser llamados desde una linea as como pasarle argumentos. Ilustremos el siguiente ejemplo: Tenemos 3 extensiones en el dialplan que se ven de la siguiente manera:
[extensions] exten => 1001,1,Dial(SIP/1001,30) exten => 1001,n,Playback(vm-nobodyavail) exten => 1001,n,Voicemail(1001@buzon) exten => 1001,n,Hangup() exten => 1002,1,Dial(SIP/1002,30) exten => 1002,n,Playback(vm-nobodyavail) exten => 1002,n,Voicemail(1002@buzon) exten => 1002,n,Hangup() exten => 1003,1,Dial(SIP/1003,30) exten => 1003,n,Playback(vm-nobodyavail) exten => 1003,n,Voicemail(1003@buzon) exten => 1003,n,Hangup()

Imaginen que sean 100 extensiones en vez de 3. Para esto aplicamos los macros de la siguiente manera:
[macro-phones] exten => s,1,Dial(SIP/${ARG1},25) exten => s,n,Goto(${DIALSTATUS},1) exten => ANSWER,1,Hangup exten => CANCEL,1,Hangup exten => NOANSWER,1,Voicemail(${ARG1}@buzon,u) exten => BUSY,1,Voicemail(${ARG1}@buzon,b) exten => CONGESTION,1,Voicemail(${ARG1}@buzon,b) exten => CHANUNAVAIL,1,Voicemail(${ARG1}@buzon,u) exten => 1001,1,Macro(phones,1001) exten => 1002,1,Macro(phones,1002) exten => 1002,1,Macro(phones,1002)

Expliquemos la estructura del macro:


[macro-phones] exten => s,1,Dial(SIP/${ARG1},25) exten => s,n,Goto(${DIALSTATUS},1) ; Este es el nombre con el que se crea el macro.

La primera linea ya conocida, ejecuta la aplicacin Dial hablando SIP. La variable ${ARG1} indica el argumento pasado al macro. Mas adelante veremos como llamamos el macro. El Goto envi la llamada dependiendo del status de la misma a las siguientes extensiones:
exten => ANSWER,1,Hangup exten => CANCEL,1,Hangup exten => NOANSWER,1,Voicemail(${ARG1}@buzon,u) exten => BUSY,1,Voicemail(${ARG1}@buzon,b) exten => CONGESTION,1,Voicemail(${ARG1}@buzon,b) exten => CHANUNAVAIL,1,Voicemail(${ARG1}@buzon,u)

Para llamar el macro, simplemente se ejecuta la siguiente linea:


exten => 1001,1,Macro(phones,1001) exten => 1002,1,Macro(phones,1002) exten => 1003,1,Macro(phones,1003)

Por ejemplo, para habilitar la extensin 1001 simplemente se agrega la extensin mas la aplicacin Macro. Los datos entre parntesis (phones,1001) indican el nombre del macro mas la extensin a llamar, en este caso la 1001. Tmese en cuenta que la extensin 1001 es la que el macro coloca en la variable ${ARG1}. Algunas variables que utiliza el macro son:
${ARG1}: El primer argumento pasado al macro. ${ARG2}: El segundo argumento pasado al macro. ${MACRO_CONTEXT}: El contexto de esta extensin que acciona este macro. ${MACRO_EXTEN}: La extensin que dispara este macro.

Plantillas SIP (SIP Templates) El archivos sip.conf, al igual que los macros permite en este caso habilitar plantillas para evitar repeticiones en el mismo. Se hace un

Fundacin Cdigo Libre Dominicano - http://www.codigolibre.org

25

________________________________________________Cuaderno de Practicas Diplomado GNU-ASTERISK


patrn principal de la siguiente manera: En el archivo sip.conf creamos la plantilla general con las opciones en comn que tendrn cada una de las extensiones:
[basico](!) # Con esta opcin declaramos la plantilla type=friend context=extensiones host=dynamic language=es disallow=all allow=ulaw allow=gsm

Ya de esta manera simplemente, creamos las extensiones y llamando la plantilla principal:


[2003](basico) username=2003 secret=2003 [2004](basico) username=2004 secret=2004

MixMonitor Esta aplicacin hace grabaciones de audio del canal actual:


[general] autofallthrough=yes [globals] CALLTIME=${STRFTIME(${EPOCH},America/Santo_Domingo,%Y-%m-%d-%H:%M:%S)} [extensions] exten => _1XXX,1,MixMonitor(${CALLERID(num)}-${CALLTIME}-${EXTEN}.wav) exten => _1XXX,n,Dial(SIP/${EXTEN},10) exten => _1XXX,n,Playback(vm-nobodyavail) exten => _1XXX,n,Hangup()

Asterisk no tiene una variable de fecha propiamente definida para ser legible inmediatamente por el ojo humano, en cambio usa la variable de fecha EPOCH que si imprime la fecha pero en formato Unix ( http://es.wikipedia.org/wiki/Tiempo_Unix ), en [globals] la ponemos mas legible con una funcin de fecha y declaramos la variable CALLTIME, dando un resultado en la primera prioridad de nuestra extensin de: emisor-fecha(incluyendo hora)-receptor.wav Los conversaciones ya grabadas irn siendo guardadas en /var/spool/asterisk/monitor. Conferencia de llamadas (meetme.conf) Meetme es utilizado para hacer llamadas en conferencia. Se crea un saln (room) en el cual todo aquel que vaya a escuchar la conferencia acceda a el mediante una clave. Editamos el archivo meetme.conf con los siguientes parmetros:
conf => 9001 ; Estableciendo la extensin para la conferencia

Tambin se puede colocar claves y claves de administrador para la misma. El administrador como bien dice su nombre, establece la sesin de conferencia. Otros parmetros:
conf => 9001,12345 ; Inicia la sesin con clave ; Inicia la sesin con clave 12345 y el administrador tendr clave 33333.

Tambin se puede:
conf => 9001,12345,33333

En extensions.conf llamamos la aplicacin Meetme:


exten => 9001,1,Answer exten => 9001,n,Wait(1) exten => 9001,n,MeetMe(9001|p) exten => 9001,n,Playback(vm-goodbye) exten => 9001,n,Hangup

Algunos parmetros que le podemos pasar a la aplicacin Meetme son los siguientes: p -> permite al usuario salir de la conferencia presionando # m -> establece que el caller solo escucha, no habla

Fundacin Cdigo Libre Dominicano - http://www.codigolibre.org

26

________________________________________________Cuaderno de Practicas Diplomado GNU-ASTERISK Interconexin entre Asterisks


Para establecer la interconexin entre asterisk, tenemos el siguiente escenario: Servidor 1: 192.168.1.55 Servidor 2: 192.168.1.110 Mediante el protocolo SIP, el servidor 1 establecer comunicacin con el servidor 2 En el Servidor 1, en el sip.conf:
[general] register => asterisk1:pass1@192.168.1.110/asterisk2 [asterisk2] type=friend secret=pass2 context=asterisk2_entrada host=dynamic insecure=invite [1000] type=friend host=dynamic context=phones secret=1000

En el contexto [general] la opcin register indica que el servidor 1 se registrar en el servidor 2 utilizando el usuario asterisk1 y la clave pass1, la direccin ip 192.168.1.110 es la direccin del servidor 2 mientas que asterisk2 es la extensin local en el servidor 1 a travs del cual se enrutarn las llamadas hacia el asterisk2. Mas abajo en la extensin [asterisk2] es la extensin que manejara el trunking entre estos 2 equipos. En extensions.conf:
[general] autofallthrough=yes [globals] [phones] include => internal include => sucursal [internal] exten => 555,1,Answer() exten => 555,n,Playback(hello-world) exten => 555,n,Hangup() exten => _1XXX,1,Dial(SIP/${EXTEN},20) exten => _1XXX,n,Playback(vm-nobodyavail) exten => _1XXX,n,Hangup() [sucursal] exten => _2XXX,1,Dial(SIP/asterisk2/${EXTEN},20) exten => _2XXX,n,Playback(vm-nobodyavail) exten => _2XXX,n,Hangup() [asterisk2_entrada] include => internal

El patrn exten => _1XXX muestra las extensiones locales para el servidor 1 bajo el contexto internal. El contexto [sucursal] muestra la conexin enrutada hacia el servidor 2 de la siguiente manera:
[sucursal] exten => _2XXX,1,Dial(SIP/asterisk2/${EXTEN},20) exten => _2XXX,n,Playback(vm-nobodyavail) exten => _2XXX,n,Hangup()

Cualquier extensin que comience el patrn 2 (por ejemplo 2003) sera enrutado a travs del usuario SIP/asterisk2 que a su vez es el usuario que esta haciendo el trunking con servidor 2. Servidor 2 La explicacin es exactamente la misma del servidor 1. En sip.conf:
[general] register => asterisk2:pass2@192.168.1.55/asterisk1 [asterisk1]

Fundacin Cdigo Libre Dominicano - http://www.codigolibre.org

27

________________________________________________Cuaderno de Practicas Diplomado GNU-ASTERISK


type=friend secret=pass1 context=asterisk1_entrada host=dynamic insecure=invite [2000] type=friend host=dynamic context=phones secret=2000

En extensions.conf:
[general] autofallthrough=yes [globals] [phones] include => internal include => sucursal [internal] exten => 555,1,Answer() exten => 555,n,Playback(es/hello-world) exten => 555,n,Hangup() exten => _2XXX,1,Dial(SIP/${EXTEN},20) exten => _2XXX,n,Playback(vm-nobodyavail) exten => _2XXX,n,Hangup() [sucursal] exten => _1XXX,1,Dial(SIP/asterisk1/${EXTEN},20) exten => _1XXX,n,Playback(vm-nobodyavail) exten => _1XXX,n,Hangup() [asterisk1_entrada] include => internal

Para verificar el registro satisfactorio, escribir en asterisk cli el siguiente comando:


CLI> sip show registry

Asterisk-Stats
Precioso analizador de CDR, analiza de forma sencilla tus registros de CDR. Asterisk-Stat proporciona diferentes reportes y grficos para permitir al administrador de Asterisk analizar rpidamente y de forma sencilla el trfico de su servidor Asterisk. Todos los grficos & reportes (que son impresionantes) estn basados on la base de datos CDR.
[root@blackangel ~]# yum install -y php-gd php-common php-5 php-mysql php-jpgraph httpd

Y para instalar php-jpgraph hay que descargar el paquete el siguiete link http://dag.wieers.com/rpm/packages/php-jpgraph/phpjpgraph-1.19-1.2.el5.rf.noarch.rpm ya que no esta disponible en los repositorios de Fedora o CentOS.

Instalando asterisk-addons
yum install -y mysql mysql-server mysql-connector-odbc mysql-libs mysql-devel libdbi-dbd-mysql MySQL-python mod_auth_mysql

Una vez instalado mysql iniciamos el servicio de mysql y agregamos una contrasea a root.
[root@blackangel ~]# service mysqld start [root@blackangel ~]# mysqladmin --user=root password 'codigolibre' [root@blackangel ~]# chkconfig mysqld on

Vamos al directorio /usr/src y descargamos el paquete y lo descomprimimos.


[root@blackangel ~]# cd /usr/src/ [root@blackangel src]#wget http://downloads.asterisk.org/pub/telephony/asterisk/releases/asterisk-addons-1.6.0.3.tar.gz [root@blackangel src]# tar -xzvf asterisk-addons-1.6.0.3.tar.gz [root@blackangel src]# cd asterisk-addons-1.6.0.3/ [root@blackangel asterisk-addons-1.6.0.3]# ./configure [root@blackangel asterisk-addons-1.6.0.3]# make menuselect ;para seleccin de los paquetes deseado. [root@blackangel asterisk-addons-1.6.0.3]# make [root@blackangel asterisk-addons-1.6.0.3]# make install [root@blackangel asterisk-addons-1.6.0.3]# make samples

Fundacin Cdigo Libre Dominicano - http://www.codigolibre.org

28

________________________________________________Cuaderno de Practicas Diplomado GNU-ASTERISK


Ahora vamos al archivo /etc/asterisk/cdr_mysql.conf para configurar el nombre de la base de datos el username y passwd para el acceso de la base de datos y lo editamos de la siguiente manera:
[global] hostname=localhost dbname=asteriskcdrdb table=cdr password=fcld user=asterisk port=3306 sock=/var/lib/mysql/mysql.sock

Editamos el archivo /etc/asterisk/modules.conf agregamos la seccin global con los siguiente:


[global] cdr_addon_mysql.so

Vamos ha logear a mysql como root para crear la base de datos y el usuario que va a acceder a la base de dato,y como crear las tablas:
[root@blackangel ~]# mysql -u root -p mysql> create database asteriskcdrdb; mysql> GRANT SELECT,INSERT ON asteriskcdrdb.* TO asterisk@localhost IDENTIFIED BY 'fcld';

Ahora creamos la tabla cdr en la base de datos asteriskcdrdb:


mysql> use asteriskcdrdb; mysql> CREATE TABLE cdr ( calldate datetime NOT NULL default '0000-00-00 00:00:00', clid varchar(80) NOT NULL default '', src varchar(80) NOT NULL default '', dst varchar(80) NOT NULL default '', dcontext varchar(80) NOT NULL default '', channel varchar(80) NOT NULL default '', dstchannel varchar(80) NOT NULL default '', lastapp varchar(80) NOT NULL default '', lastdata varchar(80) NOT NULL default '', duration int(11) NOT NULL default '0', billsec int(11) NOT NULL default '0', disposition varchar(45) NOT NULL default '', amaflags int(11) NOT NULL default '0', accountcode varchar(20) NOT NULL default '', uniqueid varchar(32) NOT NULL default '', userfield varchar(255) NOT NULL default '' ); ALTER TABLE `cdr` ADD INDEX ( `calldate` ); ALTER TABLE `cdr` ADD INDEX ( `dst` ); ALTER TABLE `cdr` ADD INDEX ( `accountcode` );

Reiniciamos asterisk y hacemos una llamada para ver el cdr se esta escribiendo en la base de datos. Tambin lo podemos ver por el cli de asterisk de la manera siguiente.
[root@blackangel ~]# asterisk -vvr blackangel*CLI> cdr mysql status

Debera de mostrar un mensaje exactamente igual a este: Connected to asteriskcdrdb@localhost using table cdr for 0 hours, 15 minutes, 15 seconds. Wrote 1 records since last restart.
mysql> select uniqueid, src, calldate from cdr;

Instalando asterisk-stat
Vamos al directorio /var/www/html y descargamos el paquete de asterisk-stat desde el siguiente link:
[root@blackangel html]# wget http://areski.net/asterisk-stat-v2/asterisk-stat-v2_0_1.tar.gz

luego lo descomprimimos y renombramos el directorio:


[root@blackangel html]# tar -xzvf asterisk-stat-v2_0_1.tar.gz [root@blackangel html]# mv asterisk-stat-v2_0_1 asterisk

Editamos el archivo defines.php del directorio de /var/www/html/asterisk/lib/ y los modificamos de la manera siguiente: [root@blackangel html]#vim asterisk/lib/defines.php
define ("WEBROOT", "http://blackangel.fcld.local/asterisk/"); define ("FSROOT", "/var/www/html/asterisk/"); define ("LIBDIR", FSROOT."lib/"); define ("HOST", "localhost"); define ("PORT", "3306");

Fundacin Cdigo Libre Dominicano - http://www.codigolibre.org

29

________________________________________________Cuaderno de Practicas Diplomado GNU-ASTERISK


define ("USER", "asterisk"); define ("PASS", "192582"); define ("DBNAME", "asteriskcdrdb"); define ("DB_TYPE", "mysql"); // mysql or postgres define ("DB_TABLENAME", "cdr");

Asterisk-stat v2.0.1 tiene un bug cuando tu esta exportando un cdr en formato pdf para corregir esto hay que editar el archivo export_pdf.php cambiar la linea 5: include_once(dirname(__FILE__) . "/lib/fpdf.php"); cambiar a: include_once(dirname(__FILE__) . "/lib/fpdf.php"); Crear un enlace simblico de cdr.php index.php [root@blackangel asterisk]# ln -sf cdr.php index.php Ahora iniciemos el servicio de httpd: [root@blackangel asterisk]# service httpd start Lo agregamos al inicio del sistema [root@blackangel asterisk]# chkconfig httpd on *** Si todos los paso fueron exitosos accedemos desde el navegado a asterisk-stat: http://blackangel.fcld.local/asterisk ****

Asterisk GUI
Como configurar Asterisk-GUI la interfaz grfica de asterisk ya no es necesario utilizar aplicacin de terceros para obtener una aplicacin grfica por interfaz web. Descargamos asterisk Gui de la siguiente manera.
[root@asterisk src]# svn checkout http://svn.digium.com/svn/asterisk-gui/trunk asterisk-gui

Procedemos a instalar asterisk Gui.


[root@asterisk src]#cd asterisk-gui [root@asterisk asterisk-gui]# ./configure [root@asterisk asterisk-gui]# make [root@asterisk asterisk-gui]# make install [root@asterisk asterisk-gui]# make samples

Luego editamos los archivos de configuracin que son http.conf y manager.conf de /etc/asterisk [root@asterisk asterisk-gui]# vim /etc/asterisk/http.conf
[general] displaysystemname = yes enabled = yes webenabled = yes port = 5038 httptimeout = 60 bindaddr = 0.0.0.0 [admin] ; este es el usuario admin, puede ser por ejemplo: antonio secret = fcld1 ; esta es su contrasea read = system,call,log,verbose,command,agent,user,config write = system,call,log,verbose,command,agent,user,config

[root@asterisk asterisk-gui]# vim /etc/asterisk/manager.conf


[general] enabled = yes enablestatic = yes bindaddr = 127.0.0.1 ; Si pone esta direccin solo podr ingresar desde el equipo local bindport = 8088

[root@asterisk asterisk-gui]#asterisk -vvr asterisk*CLI> reload [root@asterisk asterisk-gui]# make checkconfig


--- Checking Asterisk configuration to see if it will support the GUI --* Checking for http.conf: OK * Checking for manager.conf: OK * Checking if HTTP is enabled: OK * Checking if HTTP static support is enabled: OK

Fundacin Cdigo Libre Dominicano - http://www.codigolibre.org

30

________________________________________________Cuaderno de Practicas Diplomado GNU-ASTERISK


* Checking if manager is enabled: OK * Checking if manager over HTTP is enabled: OK --- Everything looks good --* GUI should be available at http://asterisk.codigolibre.org:8088/asterisk/static/config/cfgbasic.html * The login and password should be an entry /etc/asterisk/manager.conf which has 'config' permission in read and write. For example: [admin] secret = mysecret7797 read = system,call,log,verbose,command,agent,config write = system,call,log,verbose,command,agent,config --- Good luck! ---

Ahora desde la interfaz grfica de Asterisk-GUI en: http://172.31.100.254:8088/asterisk/static/config/index.html

Fundacin Cdigo Libre Dominicano - http://www.codigolibre.org

31

También podría gustarte