You are on page 1of 35

"Ao de la Integracin Nacional y el Reconocimiento de Nuestra Diversidad"

TELECOMUNICACIONES

ASTERISK
Alumnas:

Moreyra Snchez Liseth Moron Garcia Katherine Palomino Gutirrez Mara Rosa
VII ciclo S2

Docente:

Ing. Miguel ngel Flores Hernndez

INDICE
Cartula ....................................................................................................................................... 1 1. 2. 3. 4. 5. Voz Ip ........................................................................................................................................ 3 Telfonos IP ............................................................................................................................. 4 Softhphone ............................................................................................................................... 4 Puertos FXS / FXO ................................................................................................................ 4 ASTERISK ................................................................................................................................ 4 5.1 5.2 5.3 5.4 5.5 HISTORIA ....................................................................................................................... 5 Concepto .......................................................................................................................... 13 Funcionalidades ms usadas: ....................................................................................... 13 Asterisk y VoIP: Cerrando la Brecha entre la telefona tradicional y la Red . 18 El Proyecto de Telefona Zapata ............................................................................... 18 Proyectos basados en ASTERISK ..................................................................... 19

5.5.1 5.6 5.6.1 5.6.2 5.6.3 5.7 5.8 5.9 5.10 5.11 5.12 6.

Funcionamiento de Asterisk ....................................................................................... 20 Encendido y apagado ................................................................................................. 20 Directorios de Asterisk........................................................................................... 21 Estructura modular ................................................................................................... 21 El proyecto Zaptel, ahora DAHDI ............................................................................ 22 Configuracin de Asterisk........................................................................................... 23 Plan de marcado (dial plan) .......................................................................................... 23 Asterisk CLI ................................................................................................................... 27 Asterisk AGI .................................................................................................................. 30 Asterisk AMI ................................................................................................................. 32

Bibliografa ............................................................................................................................. 35

1. Voz Ip

Voip es un mtodo que toma la seal de voz analgica, y la convierte en seal digital, para transmitirla a travs de la red. Permite hacer llamadas telefnicas por interner sin pasar por el servicio de compaa telefnica.

Cmo funciona la telefona de Voz Ip? Consiste en tres etapas: 1. Cifrado de la seal de voz analgica (voz de quien llama) en seal digital. 2. Transmisin de la seal digital (paquete de datos) a travs de la red hacia la persona que contesta la llamada. 3. Descifrar la seal digital en seal de voz analgica de nuevo en el lado del receptor. Las llamadas Voip se hacen a travs de varios mtodos: ATA, telfonos IP, o de PC a PC.

2. Telfonos IP
Un telfono Ip se puede considerar como un punto de la red de enrutamiento de voz a travs de su direccin Ip. Con los telfonos IP, puede lograr nuevas caractersticas avanzadas tales como e-correo de voz, mvil de deteccin y la sesin directa de llamadas.

3. Softhphone
Es un software que hace una simulacin de telfono convencional por computadora.

4. Puertos FXS / FXO


FXS y FXO son los nombres de los puertos usados por las lneas telefnicas analgicas (tambin denominadas OPTS- Servicio Telefnico Bsico y Antiguo) FXS En otras palabras, es el enchufe de la pared que enva tono de marcado, corriente para la batera y tensin de llamada, donde se conecta el telfono analgico. FXO - Interfaz de central externa es el puerto que recibe la lnea analgica. Puerto donde se conecta la lnea del ICE.

5. ASTERISK

5.1

HISTORIA

Mark empez en el mundo Linux con Slackware en 1994 (kernel versin 1.09). Uno de los pocos en Auburn, Alabama por aquellos tiempos que conoca cualquier cosa sobre Linux. Despus de una temporada con Adtran (un proveedor global de equipos de telecomunicaciones) cre su propia compaa. Asterisk, la aplicacin de centralita telefnica PBX bajo licencia GPL, fue desarrollada por Mark Spencer, entonces estudiante de ingeniera informtica en la Universidad de Auburn, Alabama. Mark haba creado en 1999 la empresa "Linux Support Services" con el objetivo de dar soporte a usuarios de Linux. Para ello necesitaba una centralita telefnica, pero ante la imposibilidad de adquirirla dados sus elevados precios, decidi construir una con un PC bajo Linux, utilizando lenguaje C. Este fue el principio del fenmeno mundialmente conocido como Asterisk, la centralita telefnica construida por Mark despus de su experiencia desarrollando GAIM (ahora llamado Pidgin) entre otros proyectos de software libre.

Mark Spencer en el 2006 O'Reilly Emerging Telephony Conference.


Despus de explicarles sus necesidades de capital a sus amigos en Adtran ellos se ofrecieron a invertir en su compaa. Se dio cuenta que reciba ms inters en el PBX Asterisk que por sus servicios generales de consultora Linux. Entonces mark se reuni con Jim Dixon que estaba construyendo hardware open source. Su primer proyecto fue construir una tarjeta T1 open source. Estos ingresos les mantenan a flote pero no reciban contribuciones de nadie y el resto tan solo cogan sus diseos y manufacturaban tarjetas que competan con las suyas. Posteriormente "Linux Support Services" se convertira en el ao 2002 en "Digium", redirigiendo sus objetivos al desarrollo y soporte de Asterisk.

El dinero era escaso en Digium hasta que un da un vendedor de DeltaCom (una competitiva compaa de comercio local) entr para venderles a Mark y a Jim una T1. Despus de entender lo que Mark y Jim haban hecho el vendedor se ofreci a ayudarles. A partir de este punto empezaron a ver un incremento en las ventas, y acabaron el ao con beneficios. Despus de grandes ingresos durante largo tiempo Mark fue capaz de hacer crecer el negoci sin recabar mucho en los beneficios. Cuando Mark empez con Asterisk hizo una cosa muy inteligente. Se le requera firmar un acuerdo a cada desarrollador que contribua en el cdigo para que el copyright se asignara a Asterisk y el compromiso que no hay encumbramientos en el cdigo contribuido. Esto le permiti sentirse confortable con su proyecto que era completamente open source y que su compaa podra relicenciar el cdigo a vendedores OEM como 3COM y NTT. Digium tambin ha hecho las cosas bien al mantener la versin de la comunidad con la funcionalidad completa y no crear una escisin entre ellos y los que los apoyan. La primera release fue Asterisk 0.1 (Diciembre de 1999), y el tarball ocupaba tan slo 124.3K que una vez descompactado venan a ser unos 506 KB en 96 archivos. Para correr Asterisk necesitbamos bsicamente Linux y libaudiofile:

The Asterisk Open Source PBX by Mark Spencer <markster@linux-supp***.***> Copyright (C) 1999, Linux Support Services, LLC and Adtran, Inc. ================================================================ * WHAT IS ASTERISK Asterisk is an Open Source PBX and telephony toolkit. It is, in a sense, middleware between Internet and telephony channels on the bottom, and Internet and telephony applications at the top. For more information on the project itself, please visit the Asterisk home page at: http://www.asteriskpbx.com * REQUIRED COMPONENTS == Linux == Currently, the Asterisk Open Source PBX is only known to run on the Linux OS, although it may be portable to other UNIX-like operating systems as well. == libaudiofile == If you want to use format_wav module, then you need a very recent version of libaudiofile (at least version 0.2.0, or you can apply the following patch to version 0.1.9): </markster@linux-supp***.***>
Esta primera release fue liberada en 1999 bajo licencia GPL2 pero tena clausulas adicionales que indicaban que en todos los productos derivados deba constar el nombre de Linux Support Services, LLC o Adtran Inc., tambin advertan sobre cdecs cubiertos por patentes de software, y la ms curiosa es que si emprendamos acciones legales por infringir patentes en referencia a algn software Open Source nuestro derecho a usar o distribuir el software se terminaba de inmediato:

================================================================= Please note that Asterisk is distributed under the GNU General Public License, with the following additional notices (some of these notices may be revised or relaxed in future releases): a) All distributions or derivative works MUST not remove the name of Linux Support Services, LLC or Adtran, Inc. from the product. b) Some codecs included in the full Asterisk distribution *may* be covered by software patents. c) If You bring legal action against an organization or individual for patent infringement regarding any Open Source software (as defined by the Open Source Definition available at http://www.opensource.org/osd.html) then your right to use and/or distribute this software is immediately terminated. =================================================================
De todos modos estas clausulas duraron bien poco, ya que de los primeros cambios que se hicieron para la release 0.1.1 fue aparte de arreglar numerosos bugs revisar la licencia que pas a ser pura GPL, y nada ms.

* Asterisk 0.1.1 -- Revised translator, fixed some general race conditions throughout * -- Made dialer somewhat more aware of incompatible voice channels -- Added Voice Modem driver and A/Open Modem Driver stub -- Added MP3 decoder channel -- Added Microsoft WAV49 support -- Revised License -- Pure GPL, nothing else -- Modified Copyright statement since code is still currently owned by author -- Added RAW GSM headerless data format -- Innumerable bug fixes
Asterisk est formado por varios paquetes: Asterisk: Ficheros base del proyecto. Zaptel: Soporte para hardware. Drivers de tarjetas. Addons: Complementos y aadidos del paquete Asterisk. Opcional. Libpri: Soporte para conexiones digitales. Opcional. Sounds: Aporta sonidos y frases en diferentes idiomas. Zaptel, inicialmente llamado Zapata se bas en el Zapata Telephony Project, el driver Open Source de Zapata Telephony (anteriormente llamada BSD Telephony Of Mexico).

Imagen: (Zapata Telephony Project) Emiliano Zapata, nuestra inspiracin La primera release fue Zapata 0.1.1 (Noviembre 2001), que vena a ser muy parecido al original liberado por Zapata Telephony en Octubre del ao 2000. De hecho no se introducieron cambios importantes hasta la release 0.1.6(Marzo 2002), donde se movieron las estructuras de red para usar malloc()cuando fuera necesario, se le aadi soporte HDLC PPP, junto con algunos arreglos multicanal en Torisa y Zaptel:

... 0.1.6: * Move network structures to be malloc()'d when needed * Add HDLC PPP Support * Fix multi-channel stuff in zaptel and torisa En la primera release, Libpri 0.1 Markster nos relataba que libpri era la implementacin en C de la especificacin para primarios RDSI basado en la especifiacin de Bellcore (12 de Mayo de 2001), por aquel entonces Asterisk pas a ofrecer soporte para conexiones digitales: libpri: An implementation of Primate Rate ISDN Written by Mark Spencer <markster@linux-supp***.***> What is libpri? =============== libpri is a C implementation of the Primary Rate ISDN specification. It was based on the Bellcore specification SR-NWT-002343 for National ISDN. As of May 12, 2001, it has been tested work with NI-2, Nortel DMS-100, and Lucent 5E Custom protocols on switches from Nortel and Lucent. </markster@linux-supp***.***>
Las funcionalidades y aadidos que no podan ser incluidas en el ncleo se fueron incorporando al paquete Addons, y tambin se pas a ofrecer paquetes de sonidos. El lanzamiento de Asterisk 1.0 (Setiembre 2004) fue anunciado por Mark durante la Astricon. El tarball de Asterisk 1.0.0 pesaba unos 9 MB, y ya varias compaas daban soporte al desarrollo de Asterisk: Pilosoft, Inc. (soporte al desarollo ADSI), GFS (soporte al desarrollo ALSA), Telesthetic (soporte al desarrollo SIP), Paul Bagyenda, Digital Solutions (desarrollo

inicial del driver Voicetronix), entre otros muchos desarrolladores que contribuan como Christos Ricudis que realiz importantes aportes al cdigo de Asterisk. Con un changelog mucho ms amplio ya, puesto que desde la release incial se haban resuelto unos 340 bugs, se dispona de canales IAX2, SIP, PRI, Zap, OSS, backends para CDR, mejoras en el soporte para FreeBSD/OpenBSD/MacOS X, mejoras en H.323, se aadi el codec iLBC, G.726, G.729, LPC10, ADPCM, speech, u-law, formato GSM WAV, formato de fichero PCM, tambin MP3 aunque luego se quit, soporte para ISDN4Linux e incluso soporte para vdeo en el canal SIP e IAX2. Tambin se disponia de DISA, ENUM, voicemail, transferencias, autenticacin de propsito general, macros, conferencia MeetMe, AGI, grabaciones, call parking, soporte para mltiples idiomas, se elimin la dependencia con libaudiofile, entre otras muchas mejoras como el control del eco. Asterisk 1.0.0 ya tena soporte para diferente hardware Zaptel entre otros:

A PBX is only really useful if you can get calls into it. Of course, you can use Asterisk with VoIP calls (SIP, H.323, IAX), but you can also talk to the real PSTN through various cards. Supported Hardware is divided into two general groups: Zaptel devices and non-zaptel devices. The Zaptel compatible hardware supports pseudo-TDM conferencing and all call features through chan_zap, whereas non-zaptel compatible hardware may have different features. Zaptel compatible hardware ========================== -- Digium (Primary author of Asterisk) http://www.digium.com, http://store.yahoo.com/asteriskpbx * Wildcard X100P - Single FXO interface connects to Loopstart phone line * Wildcard T400P (obsolete) - Quad T1 interface connects to four T1/PRI interfaces. Supports RBS and PRI voice and PPP, FR, and HDLC data. * Wildcard E400P (obsolete)- Quad E1 interface connects to four E1/PRI (or PRA) interfaces. Supports PRA/PRI, EuroISDN voice and data. * Wildcard T100P - Single T1 interface connects to a single T1/PRI interface. Supports RBS and PRI voice and PPP, FR, and HDLC data. * Wildcard E100P - Single E1 interface connects to a single E1/PRI (or PRA) interface. Supports PRA/PRI, EuroISDN voice and PPP, FR, HDLC data. * Wildcard S100U - Single FXS interface connects to a standard analog telephone.

* Wildcard TDM400P - Quad Modular FXS interface connects to standard analog telephones. * Wildcard TE410P - Quad T1/E1 switchable interface. Supports PRI and RBS signalling, as well as PPP, FR, and HDLC data modes. Non-zaptel compatible hardware ============================== -- QuickNet, Inc. http://www.quicknet.net * Internet PhoneJack - Single FXS interface. Supports Linux telephony interface. DSP compression built-in. * Internet LineJack - Single FXS or FXO interface. Supports Linux telephony interface.

Miscellaneous other interfaces ============================== -- ISDN4Linux http://www.isdn4linux.de/ * Any ISDN terminal adapter supported by isdn4linux should provide connectivity. -- ALSA http://www.alsa-project.org * Any ALSA compatible full-duplex sound card -- OSS http://www.opensound.com * Any OSS compatible full-duplex sound card
Paralelamente a Asterisk fue lanzado Zaptel 1.0.0 (Setiembre 2004), tena soporte para udev (kernel Linux 2.6), zttool tena como dependencia a libnewt, parte del software tambin necesitaba la librera Zapata. Por aquel entonces existan problemas con la directiva PROSLIC_POWERSAVE, donde el audio se cortaba despus de cuatro segundos:

README: Zapata Telephony Interface Driver Requirements:

10

Some of the testing programs still require the zapata library The zttool program requires libnewt [...] README.udev: UDEV -- What the heck is udev OR why did I get a message to read this? This is the new mechanism of doing a dyamic /dev. [...] README.fxsusb: Currently known bugs: --------------------* If PROSLIC_POWERSAVE is defined, the ability to send audio while on hook is limited to four seconds after ring is turned off. Libpri 1.0.0 (Septiembre 2004) traa algunas mejoras para Q.931 entre otros: ChangeLog: libpri 0.3.0 -- Fix talking to switch -- Add pri dump -- Add test application -- Fix strncpy stuff libpri 0.1.2 -- Added PRI_EVENT_HANGUP_ACK so you can know when the disconnect was acknowledged libpri 0.1.1 -- Added PRI_DEBUG_Q931_ANOMALY flag so that certain non-error-related messages would not be output unless specifically desired. libpri 0.1.0 -- Initial release TODO: General: -- D-Channel Backup -- Test against 4e Q.921: -- Support unnumbered information frames Q.931: -- Locking Shift IE -- Implement the 11 missing Q.931 timers
Un ao ms tarde (Noviembre 2005) se anunciaba el lanzamiento de la versin 1.0.10 de Asterisk y Zaptel. Libpri, Asterisk-addons, y Asterisk-sounds ya no presentaban cambios, lo cual ya dejaba entrever la discontinuidad de la rama 1.0 en favor de 1.2

11

Y efectivamente as fue, solo Asterisk lleg a la release 1.0.12 dejando paso a Asterisk 1.2.0 (Noviembre 2005). La nueva rama de Asterisk fue presentada durante la conferencia IP.4.IT en Las Vegas, Nevada. Asterisk 1.2 introduca sobre 3,000 funcionalidades y mejoras sobre el rendimiento global y eficiencia en el uso de la memoria. Entre las principales novedades tenamos: Mejora de las funcionalidades de voicemail Aadido protocolo DUNDi (Distributed Universal Number Discovery) Configuracin de Asterisk ms sencilla Creacin de un motor de almacenamiento de configuracin en tiempo real sobre una base de datos Un Asterisk Dialplan ms potente Introduccin de Asterisk Extension Logic, un nuevo mtodo flexible para configurar el dialplan Nueva interficie para flujos de llamada IVR dinmicos Acceso configurable a funcionalidades de llamada generales Mejoras en el protocolo SIP Nuevas funcionalidades para el protocolo IAX (Inter-Asterisk eXchange) Uso de ficheros de sonido para la msica en espera nativa Soporte CDR customizable Mejoras en el soporte PRI En la release 1.4.0 (Setiembre 2006), Asterisk ya contaba con: Lneas de cdigo fuente Esfuerzo estimado de desarrollo (persona/ao - persona/mes) Estimacin de tiempo (aos) Estimacin de nmero de desarrolladores en paralelo Coste total estimado Lenguajes de programacin en Asterisk 1.4.0: Lenguaje ANSI C sh cpp perl yacc asm tcl PHP Lneas de cdigo 232.514 7.550 5.815 2.259 1.508 642 113 62 Porcentaje 92,83% 3,01% 2,32% 0,90% 0,60% 0,26% 0,05% 0,02% 250.463 66,03 - 792,30 2,63 25,08 8.919.128 $

12

El desarrollo de Asterisk contina imparable, donde ya tenemos cinco betas de la release 1.6 que aportaran de nuevo un gran nmero de cambios y mejoras entre ellos una muy esperada reescritura del chan_sip, mejoras para videoconoferencia, JACK ,.... Cuando se le pregunta a Mark sobre el futuro del hardware open source no esta convencido que funcione de la misma manera que el software open source. El cita la barrera para entrar en la produccin de hardware en contra de el punto mucho ms bajo para entrar en el desarrollo de software. En ejemplo es el Open Cores Project que corre en Field Programmable Gate Arrays(FPGA).

5.2

Concepto

Asterisk es un programa de software libre (bajo licencia GPL) que proporciona 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 (bsicos y primarios), lneas analgicas, lneas GSM, etc.

5.3 Funcionalidades

ms usadas:

Auto attendant (operadora automatica) Permite crear menus interactivos. Generalmente usado para las llamadas entrantes. Buzones de voz Integrable con cuentas de correo y BBDD relacionales. Grabaciones de llamadas Podemos grabar las conversaciones automticamente o bajo demanda. Callbacks Existe la posibilidad de llamar a travs de la centralita sin coste alguno para el llamante. Salas de conferencia

13

Se pueden crear salas con mltiples usuarios. Msica en espera Como ya hemos dicho Asterisk es un software de centralita rico en caractersticas. Al momento de escribir este libro las caractersticas soportadas ms relevantes son las que enlistaremos a continuacin. 56 Contestacin Automtica de llamadas Transferencia de Llamadas Opcin de No Molestar Parqueo de Llamadas Contestacin de una llamada a una extensin remota Monitoreo y Grabacin de Llamadas Voicemail Conferencias Reportacin de Llamadas Colas de atencin Llamada en espera Identificador de Llamante Bloqueo por llamante identificado Recepcin de Fax Listado Interactivo del directorio de extensiones Interactive Voice Response (IVR) Msica en espera Manejo de coportamiento por tiempo (Time Conditions) Follow me Contestacin automtica de llamada Asterisk provee la facilidad de configurar una contestadora automtica que ayuda al manejo del flujo de llamadas entrantes contestndolas automticamente sin necesidad de una operadora en vivo. Diseado para empresas que reciben altos flujos de llamadas o que no poseen personal necesario para manejar un alto trfico de llamadas entrantes. La contestadora responde a los dgitos marcados por el teclado de la persona que llama, enruta las llamadas a extensiones especficas, provee acceso a informacin pregrabada y toma mensajes 24 horas al da. Transferencia de llamadas Existen dos mtodos para transferir llamadas: transferencias desatendidas y transferencias atendidas. Transferencia atendida de llamadas Este mtodo es el usual, es decir, la llamada que usted est atendiendo, es transferida a una extensin, en donde primero la extensin a la cual es transferida contesta, usted hace la presentacin de la llamada y cuelga su extensin, en este caso la llamada queda conectada a la nueva extensin. Si la nueva extensin no desea que se le transfiera la extensin, simplemente deber colgar su telfono, en cuyo caso, la llamada ser nuevamente conectada a la extensin original. Mientras el proceso de transferencia se completa, el llamante de la llamada externa escuchar la msica Music On Hold. Para realizar una transferencia atendida, usted debe digitar un cdigo predeterminado. En ese momento un mensaje pedir que le digite la extensin donde desea transferir la llamada, una vez discada dicha extensin, usted escuchar el ringeado de la llamada hacia la nueva extensin y podr establecer una comunicacin preliminar con esta extensin. Cuelgue su telfono y la llamada externa quedar conectada a la nueva extensin. Transferencia desatendida de llamadas Este mtodo permite transferir una llamada sin establecer una comunicacin previa con la extensin a la cual se desea transferir la llamada. Para transferir una llamada de manera no atendida, mientras atiende una llamada digite en el telfono un cdigo predeterminado. Usted escuchar un mensaje pidiendo el nmero de la extensin a la cual desea transferir la llamada y una vez discada usted recibir el tono de ocupado y la llamada ha quedado conectada a la nueva extensin. Opcin de No Molestar Esta opcin permite a cualquier usuario configurar su extensin para que no reciba llamadas por un perodo que el crea conveniente. Cualquier llamada entrante a esta extensin ser ruteada automticamente al buzn de correos de la misma. Para habilitar la opcin de No Molestar y para deshabilitar esta opcin, en el teclado de su telfono digite los respectivos cdigos predeterminados.

14

Parqueo de llamadas 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 ms 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 llamante 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. Contestacin de una llamada a una extensin remota Esta caracterstica permite atrapar una llamada que se encuentra timbrando en una extensin que no es la suya de manera remota. Para atrapar la llamada timbrando en una extensin, digite en su telfono el predeterminado para esta funcin. Monitoreo y Grabacin de llamadas Esta caracterstica de Asterisk permite dar seguimiento a las llamadas, por ejemplo para fines de control de calidad del desenvolvimiento de los operadores telefnicos o de los agentes de ventas. Para esto existe la facilidad de que a travs de la digitacin de un cdigo predeterminado se ejecute un comando que permita escuchar en lnea la conversacin sostenida desde cualquier de las extensiones. Adicionalmente existe la facilidad de grabar las conversaciones de cualquier extensin en forma aleatoria programada previamente. Estas grabaciones se almacenarn en el disco duro del servidor Asterisk para su posterior revisin. Buzn de Mensajes de Voz (VoiceMail) El buzn de mensajes de voz es una aplicacin que permite escuchar mensajes dejados por llamadas que no pudieron ser atendidas por la extensin. Para acceder al buzn de mensajes, digite en su telfono el cdigo predeterminado respectivo. Se le pedir que ingrese el nmero de la extensin y la clave que debe haber sido suministrada por el administrador del sistema. Una vez ingresados estos dos datos, una grabacin le indicar si tienes nuevos mensajes de voz, y adems opciones para grabar mensajes personalizados para ser usados en esta aplicacin. Conferencias Por defecto, cada extensin tiene asociado un cuarto de conferencias. Este cuarto de conferencias puede ser utilizado por cualquier usuario que pida a sus compaeros que ingresen a su cuarto y as, poder establecer una comunicacin multiusuarios. Tambin es posible enviar una llamada externa a un cuarto de conferencias, simplemente transfiriendo la llamada al cuarto de conferencias. Los cuartos de conferencias estn asociados a los nmeros de extensiones, anteponiendo un nmero predeterminado, Por ejemplo: Si su extensin es 101 y el nmero para esta funcin es 8, usted tiene asociado el cuarto de conferencias 8101, por lo que si usted desea

15

establecer una llamada multiusuarios, en su telfono digite la extensin 8101, e ingresar al cuarto de conferencias; pida a las personas con las cuales desea establecer la conferencia que en sus telfonos tambin dig iten 8101 y podr conversar con cualquier usuario que ingrese a ese cuarto. Al primer usuario que ingresa a un cuarto de conferencias, una grabadora le indicar que es el nico usuario en el cuarto de conferencias. Si desea establecer una conferencia incluyendo una llamada externa, en el momento que est atendiendo dicha llamada, haga una transferencia desatendida a la extensin 8101; al usuario que usted envi al cuarto de conferencias se le indicar mediante un mensaje que es el nico usuario en el saln de conferencias. Ahora usted debe discar en su telfono el nmero del saln de conferencias e indicar al resto de participantes que ingresen al mismo saln. Reportacin de nmero marcados Asterisk genera CDRs (Call Detail Records) o Registros de Detalle de Llamadas y los puede almacenar en una base de datos. Accediendo a esta base de datos, se pueden generar reportes que detallan qu extensin llam a qu nmero, si la llamada fue contestada o no, cunto dur la llamada, por qu puerto o lnea se realiz la llamada telefnica. Colas de Atencin Esta caracterstica permite que un ilimitado nmero de llamantes puedan permanecer en espera hasta que un representante o recurso est disponible para dar asistencia. Esto permite que usted provea a sus clientes la misma calidad de servicio. Adicionalmente, esto asegura que sus clientes no terminarn obligatoriamente en el voicemail, lo cual puede resultar molestoso para el llamante. Es decir, con esto nos aseguramos que el llamante siempre tenga la oportunidad de ser atendido por una persona. El tiempo que el llamante permanece en espera puede aprovecharse para darle a conocer ms servicios o productos de su compaa, ofertas especiales, anuncios informativos se puede proporcionar msica en espera. Llamada en espera Esta caracterstica permite que la persona que se encuentra atendiendo una llamada y recibe otra pueda interrumpir temporalmente su primera conversacin para atender la segunda llamada y poder acordar un tiempo para devolver o atender su llamada. Debemos recordar que esta caracterstica afecta muchas veces a las conexiones telefnicas para transferencia de datos, por lo que es comn que los clientes la deshabiliten. Identificador de llamante Esta seal es enviada entre las seales de RING o durante el proceso de establecimiento de la llamada, antes de que sea contestada. Asterisk aprovecha esta facilidad y a nivel extensiones IP soporta plenamente su manejo. Sin embargo a nivel de lneas de la red telefnica pblica conmutada es el proveedor de estas quien debe habilitar o proporcionar esta caracterstica. Se la conoce tambin como Caller Display Calling Line Identification Presentation. Bloqueo por llamante identificado Esta caracterstica previene que alguien con identificador de llamante vea el nmero desde el que usted llama. Esta facilidad de ocultar el ID puede ser completa o selectiva. No todas las redes de telefona pblica soportan esta caracterstica. En Asterisk esta caracterstica tambin describe el bloquear una llamada entrante en funcin del ID. Envo y recepcin de Fax Asterisk permite detectar automticamente cuando un llamante est intentando enviar un fax. Se puede poner como parte del mensaje de bienvenida de la central una frase que diga: Si quiere enviar un fax, envelo ahora.

16

Esto nos ayuda a eliminar papel, prescindir de mquinas puertos telefnicos exclusivos para fax y digitalizar la informacin recibida como fax. Luego de ser digitalizado, este documento puede ser enviado va e-mail a una cuenta especfica para su revisin. As tambin Asterisk puede ser configurado como Fax Server para que los documentos que son enviados a una cuenta de correo especfica automticamente sean enviados como faxes. Listado interactivo del directorio de extensiones Asterisk puede contener en su base de datos el directorio telefnico del personal de la empresa (nombre, apellido y extensin). Esta facilidad permite por ejemplo, que la persona que llama pueda digitar desde su telfono los nmeros correspondientes a las 4 primeras letras del apellido nombre de la persona con la que desea hablar. Esto puede proporcionar una alternativa para llamantes que no conocen la extensin de la persona que quieren contactar pero conocen solo su apellido nombre. Interactive Voice Response (IVR) A travs de esta caracterstica se proporciona acceso a opciones telefnicas que mejorar la forma en que un sistema telefnico acepta y distribuye sus llamadas. Con un men de IVR usted podr distribuir sus llamadas de una manera precisa que ayudar a incrementar el desempeo de sus empleados y la satisfaccin de sus clientes, ya que se agilita el acceso a los servicios y a la informacin que posee su compaa. Con esta facilidad se proporcionan procesos de auto atencin que permitirn incluso prescindir de una recepcionista. Con esta caracterstica se pueden crear mens de activacin por dgitos por comandos de voz para ejecutar incluso transacciones a travs de tarjetas de crditos consultas a base de datos.

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, Mac OS X, Solaris y Microsoft Windows, aunque la plataforma nativa (GNU/Linux) es la que cuenta con mejor soporte de todas. Asterisk incluye muchas caractersticas que anteriormente slo estaban disponibles en costosos sistemas propietarios PBX, como buzn de voz, conferencias, IVR, distribucin automtica de llamadas, y otras muchas. 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 en GNU/Linux. Para conectar telfonos estndares 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 reconoce 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.

17

Asterisk se empieza a adoptar en algunos entornos corporativos como una gran solucin de bajo coste junto con SER (Sip Express Router)

5.4 Asterisk y VoIP: Cerrando la Brecha entre la telefona tradicional y la Red


Voz sobre IP (VoIP) es a menudo considerado como poco ms que un mtodo de obtencin gratuita llamadas de larga distancia. El valor real (y-seamos honestos-reto tambin) de VoIP es que permite que la voz para convertirse en nada ms que otra aplicacin en la red de datos. A veces parece que hemos olvidado que el propsito del telfono es permitir que la gente se comunique. Se trata de un objetivo sencillo, en realidad, y debe ser posible para nosotros hacer que esto suceda de forma mucho ms flexibles y creativas que estn actualmente disponibles para nosotros. Las tecnologas como Asterisk reducir las barreras a la entrada.

5.5

El Proyecto de Telefona Zapata

Cuando el proyecto Asterisk se inici (en 1999), hubo otros de cdigo abierto de telefona proyectos en existencia. Sin embargo, Asterisk, en combinacin con el Proyecto de Telefona Zapata, fue capaz de proporcionar pblicas de telefona conmutada (PSTN) las interfaces, lo que represent un hito importante en la transicin del software a partir de algo puramente basada en la red a algo ms prctico en el mundo de las telecomunicaciones en el ese momento, que era PSTN-cntrica. El Proyecto de Telefona Zapata fue concebido por Jim Dixon, un ingeniero consultor de telecomunicaciones que se inspir en los increbles avances en la velocidad de la CPU que la industria de la computacin ha llegado a dar por sentado. La creencia de Dixon fue que los sistemas de telefona mucho ms econmica podra ser creada si existiera una tarjeta que no tena nada ms en l que los componentes electrnicos bsicos necesarios para interactuar con un circuito telefnico. En lugar de tener componentes caros en la tarjeta, procesamiento de seales digitales (DSP) [ 3 ] se manejan en la CPU por software. Aunque ello no suponga una carga tremenda de la CPU, Dixon estaba seguro de que el bajo costo de CPU con respecto a su rendimiento les hizo mucho ms atractivo que el DSP caros, y, ms importante an, que esta relacin precio / rendimiento seguir mejorando a medida que las CPU sigui aumentando en el poder. Al igual que tantos visionarios, Dixon cree que muchos otros se ve esta oportunidad, y que l slo tena que esperar a que alguien ms para crear lo que para l era una evidente mejora. Despus de unos aos, se dio cuenta de que no slo no tena uno creado estas tarjetas, pero pareca poco probable que alguien alguna vez iba a. En ese momento estaba claro que si quera una revolucin, que iba a tener que empezar a s mismo. Y por lo que el proyecto de telefona Zapata naci:

18

Dado que este concepto era tan revolucionario, y estaba seguro de hacer un montn de olas en la industria, me decid por el motivo de la Revolucin Mexicana, y nombr a la tecnologa y la organizacin del famoso revolucionario mexicano Emiliano Zapata. Decid llamar a la tarjeta de la "tormenta" que, en espaol, significa "tormenta", pero contextualmente se utiliza generalmente para implicar una gran tormenta, como un huracn o algo as. [ 4 ] Tal vez deberamos ser nosotros llamando Asteristas. De todos modos, debemos Jim Dixon una deuda de agradecimiento, en parte por pensar esto y en parte para ver a travs, pero sobre todo para dar los resultados de sus esfuerzos a la comunidad de cdigo abierto. Como resultado de la contribucin de Jim, PSTN Asterisk el motor lleg a ser. Con los aos, la interfaz de telefona Zapata en Asterisk ha sido modificado y mejorado. El Asterisk de Digium de hardware de dispositivo de interfaz (DAHDI) de la interfaz de telefona en uso hoy en da es el fruto de la contribucin de Jim Dixon.

5.5.1 Proyectos basados en ASTERISK

Trixbox Elastix DebPbx Digium (AsteriskNOW)

19

5.6

Funcionamiento de Asterisk

5.6.1 Encendido y apagado


A pesar de que Asterisk puede ser controlado directamente con su script de inicio (ubicado en /etc/rc.d/init.d/asterisk) lo recomendable en Elastix es hacerlo mediante el programa amportal. Esto es as debido a que existen otros programas relacionados con Asterisk que tambin se deben sincronizar con el encendido y apagado de Asterisk. Para apagarlo podemos ejecutar: # amportal stop

Para encenderlo: # amportal start

Para reiniciarlo: # amportal restart

20

5.6.2 Directorios de Asterisk


Asterisk organiza sus archivos en algunos directorios. Entre los ms importantes tenemos a los siguientes. Directorio /etc/asterisk/ /usr/lib/asterisk/modules/ /usr/sbin/ /var/log/asterisk/ /var/lib/asterisk/agi-bin/ /var/lib/asterisk/mohmp3 /var/lib/asterisk/sounds /var/spool/asterisk/ Descripcin Aqu residen los configuracin de asterisk archivos de

Este directorio contiene los mdulos de Asterisk Aqu reside el binario de Asterisk Contiene los logs de Asterisk Directorio donde residen los scripts AGI Carpeta que contiene msica en espera Sonidos que Asterisk prompts de voz archivos utiliza para como

Directorio donde Asterisk guarda archivos que genera producto de su funcionamiento como voicemails y grabaciones de llamadas Archivos con informacin de PIDs Aqu residen los archivos de log de Asterisk como el /var/log/asterisk/full o el log de texto de CDRs /var/run/ /var/log/asterisk/

5.6.3 Estructura modular


Asterisk utiliza la idea de mdulos para extender su funcionalidad. Es tan importante la funcionalidad residente en los mdulos que sin ellos Asterisk por si solo no cumplira ninguna funcin interesante. Estos mdulos residen en la carpeta /usr/lib/asterisk/modules/ y son archivos con extensin .so Los mdulos pueden ser controlados a travs del archivo de configuracin modules.conf. En este archivo puedo decirle a Asterisk que cargue o no cargue un mdulo especfico a travs de las directivas load y noload. Por omisin en Elastix todos los mdulos tratan de ser cargados. A continuacin un fragmento del archivo modules.conf que viene con Elastix, donde se puede observar cmo se le dice a Asterisk que no cargue algunos mdulos en el arranque.

; ; DON'T load the chan_modem.so, as they are obsolete in * 1.2 noload => chan_modem.so noload => chan_modem_aopen.so noload => chan_modem_bestdata.so noload => chan_modem_i4l.so ; Trunkisavail is a broken module supplied by Trixbox noload => app_trunkisavail.so ; Ensure that format_* modules are loaded before res_musiconhold ;load => format_ogg_vorbis.so load => format_wav.so load => format_pcm.so load => format_au.so

21

Adicionalmente se pueden cargar mdulos en tiempo real a travs de la consola de Asterisk con el comando module load. Veremos ms de la consola de Asterisk o CLI ms adelante.

5.7

El proyecto Zaptel, ahora DAHDI

A pesar de ser un gran producto de software Asterisk no puede hacer todo el trabajo. Uno de los paquetes de software que lo complementa se llama Zaptel. Bsicamente Zaptel es un conjunto de drivers para controlar hardware telefnico como tarjetas PCI que nos permiten conectarnos a la PSTN. Estos drivers se comunican con Asterisk a travs de un mdulo de Asterisk llamado chan_zap.so que se configura a travs del archivo zapata.conf. Adicionalmente Zaptel tiene su propio archivo de configuracin, independiente de Asterisk, llamado zaptel.conf y ubicado en la carpeta /etc/.

Breve historia del proyecto Zaptel En el ao 2000 Jim Dixon lanz el proyecto Zaptel cuyo nombre era una abreviacin de Zapata Telephony Project. Lo nombr as en honor a Emiliano Zapata, hroe de la revolucin mexicana. Los drivers fueron lanzados bajo licencia GPL de tal manera que cualquiera pudo tener acceso al cdigo. Inicialmente Zaptel contena drivers para tarjetas Tormenta fabricadas por Zapata Telecom, pero pronto Digium comenz a mejorar los drivers y extender el soporte para nuevos modelos de hardware, entre ellos los que el mismo Digium fabricaba. Pronto Digium se convirti en el principal desarrollador de Zaptel.

Luego de algunos aos de mantener Zaptel, Digium cay en cuenta de que Zaptel era una marca registrada de Zapata Telecom y para evitar cualquier posible confusin futura decidi cambiar de nombre a sus drivers. El nombre elegido es DAHDI. DAHDI ya se encuentra disponible para descarga pero muchos continan usando Zaptel por razones histricas o esperando a que este nuevo paquete se estabilice un poco ms. Digium ha manifestado que en su nueva versin de Asterisk 1.6 ya no soportarn Zaptel oficialmente.

22

5.8

Configuracin de Asterisk

Archivos de configuracin

Asterisk se puede configurar a travs de algunos archivos de configuracin ubicados en la ruta /etc/asterisk. Existen decenas de archivos de configuracin en este directorio y se encuentran en texto plano para facilitar su modificacin por lo que nosotros podremos modificarlos desde la lnea de comandos utilizando el editor vim o el editor de lnea de comandos de nuestra preferencia. Si bien todos estos archivos son importantes no todos son necesarios y existen otros que ya han sido pre-configurados por Elastix para que no tengamos que modificarlos. Algunos de los ms importantes se explican en la siguiente tabla. Archivo extensions.conf Descripcin Aqu reside el plan de marcado. En Elastix este archivo incluye otros ms para organizar el plan de marcado de mejor manera. Estos archivos adicionales empiezan con la cadena extensions_ Aqu se definen los endpoints SIP Aqu se definen los endpoints IAX Archivo de configuracin de los canales tipo ZAP. Aqu se puede troncalizar dichos canales y configurar algunos parmetros sip.conf iax.conf zapata.conf Comentarios en los archivos de configuracin Los archivos de configuracin de Asterisk pueden contener comentarios. Un comentario empieza con el carcter de punto y coma, y una vez escrito el resto de la lnea se convierte en un comentario. Es decir que es ignorado por Asterisk al interpretar el archivo. Veamos un ejemplo de comentario. ; ; El siguiente es un bloque de comentarios. ; Como pueden ver puedo escribir cualquier cosa ; aqu porque ser ignorada por Asterisk. ; Los comentarios son muy tiles para escribir ; notas e informacin relativa a la configuracin ; que estamos escribiendo. ; Ahora si contino con las directivas... ; #include #include #include #include sip_general_custom.conf sip_nat.conf sip_registrations_custom.conf sip_registrations.conf

5.9

Plan de marcado (dial plan)

El plan de marcado en Elastix reside principalmente en el archivo extensions.conf. Desde este archivo se incluyen otros importantes que contienen tambin porciones del plan de marcado. Los principales son: extensions_additional.conf: Aqu reside el plan de marcado variable escrito por freePBX. Si se escribe manualmente en este archivo los cambios se perdern cuando freePBX sobreescriba este archivo. extensions_custom.conf: Aqu se puede escribir plan de marcado definido manualmente por el usuario. Este archivo no es tocado por el freePBX por lo que es seguro escribirlo sin temor a perder los cambios.

23

Todos estos archivos de plan de marcado estn escritos en texto plano en un formato definido por Asterisk. Estos archivos se encuentran divididos en secciones llamadas contextos.

Contextos Bsicamente los contextos sirven para agrupar lgica de plan de marcado. Los contextos tambin pueden incluir otros contextos mediante la clusula "include" o redirigir el hilo de ejecucin del plan de marcado a otros contextos dependiendo de condiciones. Por ejemplo, un contexto puede contener la lgica necesaria para rutear una llamada hacia la troncal correspondiente luego de examinar el prefijo del nmero telefnico marcado. Un contexto tambin puede agrupar la lgica necesaria para la aplicacin de reloj despertador. Tambin puede incluir lgica para acceder al voicemail o para autenticar un nmero de PIN. En general prcticamente todo en el plan de marcado se encuentra agrupado en contextos. Los contextos son los agrupadores u organizadores del plan de marcado. Cada contexto debe llevar un nombre nico y este nombre va encerrado entre los smbolos [ y ]. A continuacin un ejemplo donde se pueden observar dos contextos llamados app-pickup y ext-test

[app-pickup] include => app-pickup-custom exten => _**.,1,Noop(Attempt to Pickup ${EXTEN:2}) exten => _**.,n,Pickup(${EXTEN:2}) [ext-test] include => ext-test-custom exten => 7777,1,Goto(from-pstn,s,1) exten => 666,1,Goto(ext-fax,in_fax,1) exten => h,1,Macro(hangupcall,)

Fragmento del archivo extensions_additional.conf para ilustrar los contextos Contextos reservados Hay dos nombres de contextos que estn reservados para un propsito especial y son [general] y [globals] .

Instrucciones Los contextos contienen instrucciones. Estas instrucciones son lneas de plan de marcado que tienen la siguiente sintaxis. exten => nombre_extension, prioridad, aplicacin

Estas instrucciones tambin son llamadas extensiones. Nota: Normalmente asociamos el trmino extensin a un nmero de telfono, pero en Asterisk el trmino extensin va ms all

24

de lo que normalmente conocemos. Una extensin es una serie de lgica de plan de marcado. Es ms, cuando marcamos un nmero desde nuestro telfono no necesariamente tiene que ringar otro telfono pues podemos crear la lgica que queramos para este nmero dado. Por ejemplo podemos hacer que la llamada simplemente se cuelgue, que reproduzca un mensaje dado o cosas mucho ms complejas. Una tpica instruccin luce como la siguiente. exten => 4567, 1, Answer() Nombre de Extensin El nombre de extensin es un identificador numrico de la extensin. Llammosle el nmero de telfono por ahora para simplificar las cosas. Sin embargo hay una extensin especial no numrica llamada extensin s que le prestaremos particular atencin. La extensin s significa cualquier extensin. La letra s viene de la palabra start que significa inicio. Un ejemplo del uso de la extensin s es el siguiente. [prueba] exten => s, 1, Answer() exten => s, 2, noOp(Prueba)

La extensin s se usa cuando el usuario que realizo la llamada aun no ha presionado el numero de la extensin. Por ejemplo una llamada entrante que todava se encuentra escuchando el IVR de bienvenida.

Prioridad La prioridad indica el orden en el que debe ser ejecutada una instruccin dentro de un contexto. Es necesario que la primera prioridad sea la 1 pues cuando Asterisk lee un contexto lo primero que busca es esta prioridad.

Existen tambin dos prioridades especiales que son la prioridad s y la prioridad n. La prioridad n significa que a la prioridad de la instruccin anterior se le debe sumar uno. Esto es muy til para facilitar la escritura del plan de marcado. Nota: Hay que tener cuidado de no confundir la prioridad s con la extensin s.

Aplicacin En las aplicaciones radica el verdadero poder del plan de marcado en Asterisk. Para hacer una analoga, las aplicaciones son el equivalente a las funciones de un lenguaje de programacin. Las aplicaciones nos permitirn contestar una llamada o colgarla, reproducir msica en espera, saltar a otros contextos entre otras muchas cosas. Las aplicaciones tambin pueden recibir parmetros. Por ejemplo a la aplicacin Dial( ) habr que indicarle qu nmero marcar para que pueda realizar su labor. Ms adelante en el presente captulo se explicarn con ms detalle las aplicaciones ms comunes en el plan de marcado.

25

Variables Las variables en el plan de marcado son un concepto similar a las variables en un lenguaje de programacin. Es decir que son abstracciones que pueden almacenar informacin de naturaleza variable. Una variable tiene la siguiente sintaxis. ${NOMBRE} Donde nombre es el nombre de la variable. Las variables pueden ser de tres tipos:

Globales Son las variables definidas en la seccin [globals] del extensions.conf. La palabra global quiere decir que pueden ser referenciadas desde cualquier lugar.

De canal Son las variables que se pueden definir usando el comando (o aplicacin) "Set". Pre-definidas Asterisk se encarga de administrar algunos nombres de variables por su cuenta. Estos nombres se encuentran predefinidos y se llenan con cierta informacin dependiendo del comportamiento de la llamada o de otros factores. Algunas variables predefinidas son: ${CALLERID} ${CALLERIDNAME} ${CALLERIDNUM} ${CHANNEL} ${CONTEXT} ${EPOCH} ${EXTEN} ${SIPUSERAGENT} ${UNIQUEID} Nota: Hay un tipo adicional de variable que ser introducida en Asterisk 1.6 llamada "Shared" pero no la estudiaremos aqu puesto que la ltima versin estable de Elastix disponible usa Asterisk 1.4 A continuacin un segmento del archivo extensions.conf que se distribuye con Elastix. Podemos ver aqu algunas variables predefinidas como ${UNIQUEID}, ${BLINDTRANSFER} y ${EPOCH}, y variables de canal como ${CALLFILENAME}. [macro-record-enable] exten => s,1,GotoIf($[${LEN(${BLINDTRANSFER})} > 0]?2:4) exten => s,2,ResetCDR(w) exten => s,3,StopMonitor() exten => s,4,AGI(recordingcheck,${STRFTIME(${EPOCH},,%Y%m%d%H%M%S)},${UNIQUEID}) exten => s,5,Noop(No recording needed) exten => s,999,MixMonitor(${CALLFILENAME}.wav)

Aplicaciones ms comunes Answer Sintaxis: Answer([delay])

Contesta un canal si este est timbrando. Puede recibir opcionalmente el parmetro delay que le indica si debe esperar un nmero determinado de milisegundos antes de contestar.

26

Background Sintaxis: Background(filename1[&filename2...][|opciones[|langoverride ][|context]]) Reproduce un listado de archivos de audio en el fondo, es decir que devuelve el control a Asterisk, quien puede continuar ejecutando el plan de marcado mientras el audio contina siendo reproducido. Cuando termina de reproducir el ltimo archivo termina su ejecucin por lo que si se quiere seguir esperando por una extensin se debe usar otra aplicacin en conjunto llamada WaitExten. Esta aplicacin es tpicamente usada para reproducir el mensaje de bienvenida de un IVR. La aplicacin Background puede recibir algunas opciones: Opcin s n m Descripcin Saltarse la reproduccin del audio si el canal no se encuentra contestado No contestar el canal antes de reproducir los archivos Dejar de reproducir el audio si un dgito marcado coincide con una extensin existente en el contexto destino

Playback Sintaxis: Playback(filename1[&filename2...][,options]) Reproduce uno o ms archivos de audio. La diferencia con la aplicacin Background es que Playback reproduce todo el archivo de audio hasta el final y no retorna el control hasta que termina la reproduccin. Nota: No es necesario especificar la extensin del archivo de audio en esta funcin. Los archivos de audio son buscados en el directorio /var/lib/asterisk/sounds

Hangup

Sintaxis: Hangup() Cuelga el canal y retorna -1

Goto Sintaxis: Goto([[context|]extension|]priority) Salta la ejecucin del plan de marcado a un contexto, extensin y prioridades dados. Si solo se pasa un parmetro se sobreentiende que se trata de una prioridad dentro del mismo contexto.

Dial Sintaxis: Dial(type/identifier, timeout, options, URL) Este comando es el que hace la magia. Marca un canal especificado y lo vincula con el canal corriente.

5.10 Asterisk CLI


Asterisk CLI es el nombre que recibe la consola de Asterisk. Es decir, una lnea de comandos para controlar Asterisk directamente. Para ingresar al CLI debemos ejecutar el siguiente comando desde la consola de Linux.

27

# asterisk -r Asterisk 1.4.21.2, Copyright (C) 1999 - 2008 Digium, Inc. and others. Created by Mark Spencer <markster@digium.com> Asterisk comes with ABSOLUTELY NO WARRANTY; type 'core show warranty' for details. This is free software, with components licensed under the GNU General Public License version 2 and other licenses; you are welcome to redistribute it under certain conditions. Type 'core show license' for details. ========================================================================= Connected to Asterisk 1.4.21.2 currently running on elastix (pid = 2245) Verbosity is at least 3 elastix*CLI>

Como podemos observar obtenemos un prompt CLI> desde donde podemos ejecutar una serie de comandos que veremos en breve.

El CLI tambin nos puede proveer informacin en tiempo real de la actividad de Asterisk. Podemos controlar el grado de detalle con el que queremos ver dicha informacin con algunos comandos. Los ms usados son los siguientes. elastix*CLI> core set debug 9 Core debug was 3 and is now 9 elastix*CLI> core set verbose 9 Verbosity is at least 9

Mientras ms altos los niveles de las variables debug y verbose ms detallada ser la informacin mostrada. Por omisin el grado nivel de verbose en Elastix se encuentra en 3. Nota: Debido al gran volumen de informacin que se puede generar con estos comandos es importante reestablecer los valores de las variables debug y verbose a los mnimos al finalizar nuestras tareas de diagnstico. Caso contrario Asterisk continuar generando esta informacin detallada cuando realmente no la necesitamos, lo cual es un trabajo extra que consume recursos. En sistemas con mucha actividad este gasto extra puede ser significativo y afectar el desempeo de las llamadas.

Comandos del CLI A continuacin una breve lista de los comandos de CLI ms comunes. Para ver una lista completa de comandos revisar el Apndice C. Comando agi debug core set debug channel core set debug core set verbose core show channels Descripcin Permite habilitar el debug de scripts AGI. Se apaga con agi debug off Habilita el debug en un canal determinado Permite cambiar el nivel de debugging. Se apaga con core set debug off Incre menta la intensidad del logging. Muy til en diagnstico Muestra informacin de los canales activos en el instante de ejecutar el comando Recarga todo el plan de marcado Muestra el plan de marcado Muestra un listado con todos los

28

dialplan reload dialplan show help comandos de CLI disponibles iax2 set debug Habilita el debug a nivel de IAX2. Se deshabilita con el comando iax2 set debug off Muestra los peers definidos y alguna informacin adicional como el IP desde donde se conectan, el estatus, entre otros datos Muestra informacin de registro IAX2 e informacin como el estatus y el IP a la que se trata de conectar Recarga todos los mdulos de Asterisk. til para aplicar los cambios hechos en los archivos de configuracin Habilita debug de un span determinado de una interfase PRI Reinicia Asterisk de manera ordenada Reinicia Asterisk de manera brusca Reinicia Asterisk cuando no haya actividad en la central. Adecuado en ambientes de produccin donde no tenemos otra opcin que reiniciar la central pero no queremos tampoco que se corten llamadas Habilita debug de SIP a nivel de una direccin IP especfica Habilita debug de SIP a nivel de un peer especfico Muestra un listado con todos los peers SIP configurados e informacin de cada uno de ellos como el estatus Muestra un listado con los registros SIP e informacin relevante de cada uno de ellos Detiene Asterisk de manera ordenada Detiene Asterisk de manera brusca Detiene Asterisk cuando no haya actividad en la central. Adecuado en ambientes de produccin donde no tenemos otra opcin que reiniciar la central pero no queremos tampoco que se corten llamadas Muestra un listado de los canales ZAP y algunos parmetros de funcionamiento. Ver ejemplo luego de esta tabla.

iax2 show peers iax2 show registry module reload pri debug span restart gracefully restart now restart when convenient sip set debug ip sip set debug peer sip show peers sip show registry stop gracefully stop now stop when convenient zap show channels zap show status Muestra un listado de los dispositivos ZAP y un reporte de alarmas y errores

elastix*CLI> zap show channels Chan Extension pseudo 1 2 3 4 5 6 7 8 9 10 11 12 elastix*CLI> Context from-zaptel from-pstn from-pstn from-pstn from-pstn from-zaptel from-zaptel

29

from-zaptel from-pstn from-zaptel from-zaptel from-zaptel from-zaptel es es es es es es es Language es MOH Interpret default default default default default default default default default default default default default

5.11 Asterisk AGI


AGI (Asterisk Gateway Interface) es una manera de interactuar con Asterisk desde un programa de lnea de comandos. Este programa puede ser escrito en prcticamente cualquier lenguaje y es invocado por Asterisk desde el dialplan. Al momento de la invocacin de un programa AGI se le pasan ciertos parmetros y este a su vez responde con comandos AGI que son entendidos por Asterisk. La utilidad de AGI es enorme y nos permite desarrollar funcionalidad extra para nuestra central telefnica. Un ejemplo muy comn de esto es el desarrollo de aplicaciones de consulta telefnica a bases de datos. Los programas o scripts AGI son muy populares y Elastix viene con algunos preinstalados en la carpeta /var/lib/asterisk/agi-bin/

Ejecucin de scripts AGI Los scripts AGI se comunican con Asterisk a travs de STDIN, STDOUT y STDERR. Esto quiere decir que deberan poderse ejecutar desde la misma lnea de comandos. Algo muy importante a notar es que los scripts AGI deben ser ejecutables por el usuario asterisk as que es bueno asegurarse de que esto suceda. # chown asterisk.asterisk script_prueba.agi # chmod 755 script_prueba.agi

Luego de esto ya podemos ejecutar el script AGI desde el dialplan para que haga algo til. Esto se lo hace gracias a la funcin AGI(). A continuacin un ejemplo. exten => 6789,1,Answer exten => 6789,2,AGI(script_prueba.agi)

Como vemos en el ejemplo anterior le hemos dicho a Asterisk que ejecute el script llamado script_prueba.agi. Este script se ejecutar cuando el usuario digite la extensin 6789. Por omisin Asterisk asume que el script se encuentra en la ruta /var/lib/asterisk/agi-bin/ as que si lo ubicamos en un lugar diferente habr que especificar la ruta completa.

30

Parmetros enviados al script AGI Como habamos dicho antes, en el momento de la invocacin del script, Asterisk le enva cierta informacin. A continuacin un ejemplo de la informacin enviada cuando ejecutamos un script llamado dialparties.agi, un componente de freePBX.

agi_request: dialparties.agi agi_channel: SIP/4444-08d6ab60 agi_language: en agi_type: SIP agi_uniqueid: 1222117320.271 agi_callerid: 4444 agi_calleridname: Edgar Landivar agi_callingpres: 0 agi_callingani2: 0 agi_callington: 0 agi_callingtns: 0 agi_dnid: 216 6 agi_rdnis: unknown agi_context: macro-dial agi_extension: s agi_priority: 3 agi_enhanced: 0.0 agi_accountcode:

Adicionalmente a la informacin que por omisin Asterisk le enva al script AGI, nosotros podramos enviarle informacin adicional invocando la funcin AGI() de la siguiente manera. exten => 6789,1,Answer exten => 6789,2,AGI(script_prueba.agi|param1|param2|param3) En el ejemplo anterior le estoy enviando 3 parmetros adicionales al script. Se pueden enviar tantos parmetros como sean necesarios. Ya veremos ms adelante cmo diferenciar estos dos grupos de parmetros desde la programacin del script.

Comandos AGI A continuacin un listado de los comandos AGI disponibles en la ltima versin de Elastix 1.3. Este listado ha sido generado con el comando agi show desde el CLI. Comando answer channel status Descripcin Answer channel Returns status of the connected channel database del database deltree database get database put exec get data get full variable get option get variable hangup noop receive char receive text record file say alpha say digits say number say phonetic say date say time say datetime send image send text set autohangup set callerid set context set extension set music set priority set variable stream file control stream file tdd mode verbose

Removes database key/value Removes database keytree/value Gets database value Adds/updates database value Executes a given Application Prompts for DTMF on a channel Evaluates a channel expression Stream file, prompt for DTMF, with timeout Gets a channel variable Hangup the current channel Does nothing Receives one character from channels supporting it Receives text from channels supporting it Records to a given file Says a given

31

character string Says a given digit string Says a given number Says a given character string with phonetics Says a given date Says a given time Says a given time as specfied by the format given Sends images to channels supporting it Sends text to channels supporting it Autohangup channel in some time Sets callerid for the current channel Sets channel context Changes channel extension Enable/Disable Music on hold generator Set channel dialplan priority Sets a channel variable Sends audio file on channel Sends audio file on channel and allows the listner to control the stream Toggles TDD mode (for the deaf) Logs a message to the asterisk verbose logwait for digit

Waits for a digit to be pressed

Libreras AGI A pesar de que un programa AGI puede ser escrito en prcticamente cualquier lenguaje, existen algunos lenguajes que ya cuentan con libreras para facilitar las labores de desarrollo de scripts AGI. Algunos de estos lenguajes son los siguientes. Pearl PHP Python Ruby C .NET

Para ver informacin actualizada de las libreras o frameworks disponibles para estos lenguajes recomendamos revisar el siguiente link: http://www.voip-info.org/wikiAsterisk+AGI En nuestro caso utilizaremos una librera para PHP llamada phpAGI con la que codificaremos un sencillo script AGI de ejemplo.

5.12 Asterisk AMI


AMI (Asterisk Manager Interface por sus siglas en ingls) es una manera de comunicarse con Asterisk a travs del protocolo IP. Digamos que es un concepto similar a AGI pero mientras que AGI est pensado para comunicaciones locales AMI puede ser ejecutado desde equipos remotos. Es esto ltimo lo que lo convierte en una herramienta poderosa. Gracias a AMI se pueden desarrollar poderosas aplicaciones cliente que pueden ejecutarse en otros computadores, liberando con esto de carga al servidor Asterisk. Un ejemplo de esto es el mdulo para call centers que forma parte del proyecto Elastix. Este mdulo de Elastix est codificado en gran parte usando AMI. Debido a que a travs de AMI equipos remotos estn en la capacidad de controlar Asterisk se requiere que estos equipos se autentiquen. Estos usuarios, claves y permisos se definen en un archivo llamado manager.conf A continuacin el archivo manager.conf que se distribuye con Elastix 80

32

; ; Asterisk Call Management support ; [general] enabled = yes port = 5038 bindaddr = 0.0.0.0 [admin] secret = elastix456 deny=0.0.0.0/0.0.0.0 permit=127.0.0.1/255.255.255.0 read = system,call,log,verbose,command,agent,user write = system,call,log,verbose,command,agent,user #include manager_additional.conf #include manager_custom.conf

Como podemos observar en el archivo anterior se define un usuario llamado admin con clave elastix456 que puede conectarse desde el IP 127.0.0.1 con mscara 255.255.255.0. Luego de esto se definen ciertos permisos para este usuario.

Probando desde telnet No necesitamos de un programa sofisticado para probar si podemos interactuar con el AMI. Una manera sencilla de hacerlo es a travs del programa telnet disponible en casi cualquier computador. Veamos un ejemplo desde el propio servidor Elastix y suponiendo el archivo de configuracin anterior. Primero nos conectamos al propio servidor Elastix a travs de una sesin telnet. Para esto ejecutamos lo siguiente desde la lnea de comandos. [root@elastix ~]# telnet 127.0.0.1 5038 Trying 127.0.0.1... Connected to localhost.localdomain (127.0.0.1). Escape character is '^]'. Asterisk Call Manager/1.0

Como podemos ver el servidor nos ha contestado con un mensaje indicando que el AMI est escuchando y nos dice tambin que se trata de la versin 1.0 del protocolo. A continuacin nos autenticamos con el usuario y clave especificado en el archivo manager.conf Action: Login ActionID: 1 Username: admin Secret: elastix456 Es importante conocer que para enviar un comando debemos ingresar dos retornos de carro. O sea que debemos dar ENTER un par de veces para enviar la peticin de autenticacin anterior. Luego de esto AMI nos contestar con un mensaje de xito o error. En nuestro caso como ingresamos bien la clave nos contestar con xito.

Response: Success ActionID: 1 Message: Authentication accepted Luego de esto comenzaremos a ver aparecer mensajes de registro que el AMI enva a nuestra sesin cada vez que ocurre un evento como por ejemplo cuando una llamada cuelga o si una extensin est timbrando. A partir de aqu ya podemos interactuar con AMI a travs de comandos.

33

Comandos AMI El siguiente listado de comandos AMI se obtuvo con el comando show manager commands desde el CLI de Elastix 1.3. Comando AbsoluteTimeout AgentCallbackLo AgentLogoff Agents Privilegios call,all agent,all agent,all agent,all Descripcin Set Absolute Timeout Sets an agent as logged in by callback Sets an agent as no longer logged in Lists agents and their status ChangeMonitor Command DBGet DBPut Events ExtensionState GetConfig Getvar Hangup IAXnetstats IAXpeers ListCommands Logoff MailboxCount MailboxStatus MeetmeMute MeetmeUnmute Monitor Originate Park ParkedCalls PauseMonitor Ping PlayDTMF QueueAdd QueuePause QueueRemove Queues QueueStatus Redirect SetCDRUserField Setvar SIPpeers SIPshowpeer Status call,all command,all system,all system,all <none> call,all config,all call,all call,all <none> <none> <none> <none> call,all call,all call,all call,all call,all call,all call,all <none> call,all <none> call,all agent,all agent,all agent,all <none> <none> call,all call,all call,all system,all system,all call,all Change monitoring filename of a channel Execute Asterisk CLI Command Get DB Entry Put DB Entry Control Event Flow Check Extension Status Retrieve configuration Gets a Channel Variable Hangup Channel Show IAX Netstats List IAX Peers List available commands Logoff Manager Check Mailbox Message Count Check Mailbox Mute a Meetme user Unmute a Meetme user Monitor a channel Originate Call Park a channel List parked calls Pause monitoring of a channel Keepalive command Play DTMF signal on a specific channel Add interface to queue Makes a queue member temporarily unavailable Remove interface from queue Queues Queue Status Redirect (transfer) a call Set the CDR UserField Set Channel Variable List SIP peers (text format) Show SIP peer (text format) Lists channel status 83 manager StopMonitor UnpauseMonitor UpdateConfig UserEvent WaitEvent ZapDialOffhook ZapDNDoff ZapDNDon ZapHangup ZapRestart ZapShowChannels ZapTransfer call,all call,all config,all user,all <none> <none> <none> <none> <none> <none> <none> <none> Stop monitoring a channel Unpause monitoring of a channel Update basic configuration Send an arbitrary event Wait for an event to occur Dial over Zap channel while offhook Toggle Zap channel Do Not Disturb status OFF Toggle Zap channel Do Not Disturb status ON Hangup Zap Channel Fully Restart zaptel channels (terminates calls) Show status zapata channels Transfer Zap Channel

34

6. Bibliografa
http://www.youtube.com/watch?v=mh_Qfw7qHlI http://es.wikipedia.org/wiki/Asterisk http://www.voip-info.org/wiki/view/Asterisk http://www.youtube.com/watch?v=4RjQOStUHe0 http://www.asteriskdocs.org/en/3rd_Edition/asterisk-book-html-chunk/asteriskRevolution-SECT-1.html Fuentes: Wikipedia: Mark Spencer Asterisk Otros: Zapata Telephony Digium Blog Tom Keating: 1.0, 1.2

35