Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Diciembre 2010
Cuaderno de Prcticas
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
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).
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.
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
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
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
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.
[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
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 ,.
10
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.
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.
11
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
12
Variable ${EXTEN}
Permite saber cul es la extensin que fue marcada. Se utiliza comnmente para eliminar dgitos marcados:
${EXTEN:x}
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
13
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 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
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)
15
As cuando la extensin 101 o 102 marquen el 9 + un telfono, se habilitara el tono en la linea anloga y podr realizar llamadas.
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.
16
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)
17
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:
18
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
19
20
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.
21
22
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
23
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.
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
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
24
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)
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)
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
25
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
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
26
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]
27
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
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
28
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';
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
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");
29
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
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
30
31