Está en la página 1de 7

Unidad de Trabajo n5 Actividad de Desarrollo Mejorando el servidor Asterisk Servicios de redes e Internet - I.E.S.

Siete Palmas
Objetivo general: o Configuracin de una centralita con Asterisk Activar el buzn de voz cuando no se contesta una llamada y enviar un mensaje de correo avisando de mensaje nuevo en el contestador Acceder al buzn de voz de un usuario para gestionar sus mensajes de voz Grabacin de un mensaje de voz para un usuario / centralita Asignar una locucin a una llamada no contestada Creacin de una centralita sencilla (IVR) Duracin prevista: 2 horas aproximadamente. Software: Distribucin Ubuntu 10.04 11.10 Mnimos que se persiguen en la actividad: Reflexin sobre la utilidad de VoIP. Ventajas e Inconvenientes de utilizacin sobre una PBX tradicional. Documentacin: La documentacin que se ha aportado al tema en la plataforma Moodle. Basic Asterisk Configuration http://phplinuxandthelike.wordpress.com/2007/09/04/basic-asterisk-configuration/ Referencia de los comandos de Asterisk: https://wiki.asterisk.org/wiki/display/AST/Asterisk+Command+Reference Introduccin Terica: En la prctica anterior hemos aprendido a: Crear cuentas, o clientes Asterisk, en el fichero sip.conf Crear un plan de marcado sencillo en el fichero extensions.conf

En esta prctica continuaremos mejorando nuestra centralita Asterisk, o PBX, creando los planes de marcado (o dialplan) necesarios para algunos de los escenarios ms habituales: Activar el buzn de voz cuando no se contesta una llamada, y enviar un mensaje de correo avisando de un mensaje nuevo en el contestador Acceder al buzn de voz de un usuario para gestionar sus mensajes de voz Grabacin de un mensaje de voz para un usuario / centralita pg. 1 de 7

Asignar una locucin a una llamada no contestada Creacin de una centralita sencilla (IVR)

Usando el lenguaje de script de Asterisk para definir los planes de marcado En las PBX tradicionales, las extensiones son asociadas con telefonos fisicos, en Asterisk una extension queda descrita a travs de un plan de marcado. Para crear el plan de marcado, en el fichero extensions.conf, se usa el lenguaje de script de Asterisk (Referencia de comandos de Asterisk: https://wiki.asterisk.org/wiki/display/AST/Asterisk+Command+Reference ). Por lo tanto el plan de marcado correspondiente a una extensin de Asterisk es una lista de reglas de marcado. Es decir, cuales son los pasos o acciones que se han de seguir cuando se marca una extensin. Cada regla de un plan de marcado sigue la siguiente sintaxis: exten => <extensin_marcada>, <orden>,<aplicacin> donde <aplicacin> define la aplicacin que se ejecutar cuando se marque la extensin <extensin_marcada>. El parmetro <orden> indica el orden de cada regla, desde la primera hasta la ltima. As, tal como vimos en la prctica anterior: exten => 103,1,Dial(SIP/103) indica por ejemplo que, cuando el cliente 104 marque 103, la centralita o PBX buscar la regla asociada al usuario/extensin 103. Una vez encontrada la regla anterior marcar (dial) a su vez 103, para poner en contacto los extremos 104 y 103. Se esta manera podemos establecer una llamada entre las dos extensiones/usuarios. En este ejemplo se define una regla para un usuario vlido de Asterisk, el 103, definido en el fichero sip.conf. Pero podemos definir las extensiones que queramos, coincidan o no con usuarios definidos en sip.conf. Es decir, imaginemos que el usuario 104 quiere grabar un mensaje de voz para anunciar que se va de vacaciones. El administrador podra definir la extensin 450 para que los usuarios puedan grabar sus propios mensajes de voz. En este caso la centralita no deriva la llamada del usuario 104, a ningn otro usuario sino que grabar el mensaje de voz del cliente 104 en un directorio que le indiquemos. Ms adelante veremos como podemos hacer esto. A diferencia del plan de marcado anterior, que consista en una sola regla, la mayora de los planes de marcado contienen varias reglas. Cuando se marca una extensin se ejecutan las reglas en el orden de prioridad, indicado por el segundo parmetro. Este flujo se pude cortar cuando: La llamada es cortada por uno de los extremos de la comunicacin. La llamada es desviada a otra extensin con la aplicacin Dial. Una aplicacin retorna como parametro -1, es decir, su ejecucin no ha tenido xito (error). El proximo parmetro de prioridad es menor al actual.

Existen muchas aplicaciones en el lenguaje de Asterisk (AGI), algunas de las cuales vamos a usar a continuacin son: Answer(): la centralita contesta automticamente la llamada HangUp(): se cuelga la llamada, normalmente se usa en la ltima regla de marcado Playback(): se reproduce un archivo de audio, o locucin VoiceMail(): se accede al buzn de voz para dejar un mensaje VoiceMailMain(): se accede al buzn de voz para gestionar los mensajes de un usuario Record(): se graba un mensaje, o locucin, en un directorio determinado Pasos de la Actividad: Configuracin del buzn de voz de un usuario de Asterisk: pg. 2 de 7

Paso 1: Primero vamos a instalar los mensajes de voz predefinidos en Asterisk en espaol apt-get install asterisk-prompt-es Para ver los ficheros de audio, en formato gsm, que se han instalado podemos ir al directorio: /usr/share/asterisk/sounds/es Aunque los nombres estn en ingles, para todos los idiomas es as, el contenido de estos ficheros son locuciones en espaol. Podemos probar esto escuchando cualquiera de estos ficheros haciendo: play <nombre_fichero_a_escuchar>

Paso 2: Modifcacin del fichero sip.conf En este fichero debemos indicar que, por ejemplo, el usuario 104 va a tener un buzn de voz, para ello aadimos la siguiente lnea en la definicin de este usuario: [104] mailbox=104@miclase donde 104 indica el usuario definido el sip.conf, y miclase el contexto al que pertenece.

Paso 3: El fichero voicemail.conf Este fichero permite definir los datos para el buzn de voz de un usuario de Asterisk. Aade lo siguiente al final de este fichero: [miclase] ;usuario => clave, Nombre completo, direccion correo valido 104 =>104,Pepe Prez,pepe@empresac10.org donde 104 es el usuario cuyo buzn de voz se est definiendo, y a continuacin definimos la clave del buzn, el nombre completo del usuario o su descripcin, y el correo electrnico donde queremos recibir las comunicaciones de que tenemos un mensaje nuevo. NOTA: Los valores preferiblemente se escribirn pegados a las comas, sin espacios. Pero este fichero permite tambin otras muchas funciones. Por ejemplo en el contexto general, es decir, aplicable a todos los buzones de voz que se definan, podemos ver algunas de las siguientes opciones: attach=yes; permite enviar el mensaje de voz adjunto en un mensaje de correo maxmsg=100 ; nmero mximo de mensajes por directorio, por defecto 100 si no se especifica esta variable o est comentada. El mximo total permitido es de 9999 maxsecs=180; Longitud mxima del mensaje de voz en segundos maxlogins=3; Nmero mximo de logins, cuando queremos acceder a nuestro buzn El Asterisk permite enviar un mensaje de correo electrnico para comunicarnos la llegada de un mensaje de voz nuevo en nuestro contestador/buzn. Para ello vamos a usar el servidor de correo electrnico que hemos creado en nuestro servidor en la unidad de trabajo anterior. El correo que indiquemos para el usuario 104, pepe@empresac10.org, debe pertenecer a nuestro servidor de correo. Para personalizar el mensaje de correo electrnico que recibir el usuario podemos usar las siguientes variables (bscalas en el fichero): ;El mensaje que enviaremos est aqu personalizado, pero t puedes cambiarlo pg. 3 de 7

;El tema del mensaje emailsubject=[PBX]: Nuevo mensaje n ${VM_MSGNUM} en el buzn de correo de ${VM_MAILBOX} ;El cuerpo del mensaje emailbody= ${VM_NAME}:\n\n\t solo queramos que supiese que tiene un nuevo mensaje de voz del usuario/extensin ${VM_CALLERID} de ${VM_DUR} segundos, nmero ${VM_MSGNUM}, en el buzn de voz ${VM_MAILBOX}, recibido la fecha ${VM_DATE}. Gracias\n\n\t\t\t\t--Asterisk\n Las variables de Asterisk permiten acceder a valores predefinidos en la centralita. Algunos ejemplos son los que acabamos de ver: VM_MSGNUM: nmero del mensaje de voz recibido VM_MAILBOX: nombre del buzn de voz VM_NAME: nombre completo del usuario al que se destina el mensaje VM_DATE: fecha en la que el mensaje ha sido recibido Y se accede a ellas usando la expression ${VARIABLE}

Paso 4: El fichero extensions.conf Como ya sabemos este fichero me permite definir los planes de marcado para cada extension. Vamos a contemplar el siguiente escenario para resolver este objetivo: Cuando se llame al usuario/extensin 104, se haga durante 15 segundos Si en 15 segundos no contesta la llamada o si est ocupado que salte el mensaje de El usuario est ocupado o si no est disponible que salte el mensaje de El usuario no se encuentra o que deje un mensaje de voz en el buzn del usuario 104 Cuelgue la llamada El plan de marcado correspondiente a este escenario es el que viene a continuacin y que hay que aadir en el contexto miclase del fichero extensions.conf. ;se marca la extension 104 durante 15 segundos exten => 104,1,Dial(SIP/104,15,r) ;se accede a la lnea con la etiqueta busy si 104 est ocupado ;se accede a la lnea con la etiqueta unavail si 104 no est disponible exten => 104,n,GotoIf($["${DIALSTATUS}"="BUSY"]?busy:unavail) ;se oye la locucin el usuario no se encuentra, deje un mensaje exten => 104,n(unavail),VoiceMail(104@miclase,u) ; y se cuelga la llamada exten => 104,n,HangUp() ;se oye la locucin el usuario est ocupado, deje un mensaje exten => 104,n(busy),VoiceMail(104@miclase,b) ;y se cuelga la llamada exten => 104,n,HangUp() Fjate que la aplicacin VoiceMail(104@miclase, opcin) permite dejar un mensaje de voz en el buzn 104@miclase, que hemos definido en el fichero voicemail.conf. La opcin u permite escuchar el mensaje el usuario no se encuentra, deje un mensaje, y la opcin b el mensaje el usuario est ocupado, deje un mensaje. Para conocer ms sobre la aplicacin VoiceMail, y sobre cualquier otra, puedes acceder al siguiente enlace: https://wiki.asterisk.org/wiki/display/AST/Application_VoiceMail Por ultimo tienes que recargar los ficheros de configuracin en el servidor de la siguiente manera: pg. 4 de 7

service asterisk reload Prueba que todo funcione llamando al usuario 104, y usa el commando asterisk r para depurar cualquier error que pueda generarse. Aceso al buzn de un usuario para gestionar sus mensajes de voz Paso 1: Vamos a crear el plan de marcado de este escenario habitual que consiste en marcar una extensin para que un usuario pueda gestionar sus mensajes de voz En este caso la extensin no tiene que corresponderse con ningn usuario, porque no vamos a hablar con ninguno. Quin responder ser el propio servidor Asterisk que nos pondr en contacto con nuestro buzn de voz (contestador). Para ello usaremos la aplicacin VoiceMailMain(), cuya sintaxis es:
VoiceMailMain([buzn][@contexto][,options])

Podramos crear la extensin 6104 que nos permitira aceder al buzn de voz del usuario 104, de la siguiente manera: VoiceMailMain(104@miclase). Pero esto lo tendramos que hacer para cada uno de los usuarios definidos en sip.conf Por eso sera mejor, de ms fcil configuracin, que todos los usuarios pudiesen acceder a la misma extensin para acceder a su buzn de voz. Por ejemplo podramos acceder a la extensin 650. Pero cmo sabemos quin ha hecho la llamada? Para esto podemos usar la funcin de Asterisk CALLERID(). Una funcin de Asterisk nos permite obtener una determinada informacin en Asterisk. Para llamar y acceder al valor de una funcin se debe hacer lo siguiente: ${FUNCION} Algunos ejemplos de funciones son: CALLERID(num): con el parmetro num devuelve el nmero del usuario que realiza la llamada. Es decir, si 103 llama a 104, CALLERID(num) vale 103. Con el parmetro name devuelve su nombre, etc. SET(variable, valor): permite asignar un valor a una variable Para ms informacin sobre esta funcin, y las dems, puedes acceder al siguiente enlace: https://wiki.asterisk.org/wiki/display/AST/Function_CALLERID A continuacin exponemos el plan de marcado que debemos introducir en el contesto miclase del fichero extensions.conf, para acceder al buzn de voz de un usuario ;primero Asterisk abre el canal para contestar a la llamada. exten => 650,1,Answer() ;a continuacin se usa la aplicacin VoiceMailMain para acceder al buzn de voz ; del usuario que llama exten => 650,n,Voicemailmain(${CALLERID(num)}@miclase) Vuelve a recargar los ficheros de configuracin de Asterisk y prueba tu buzn de voz marcando la extensin 650. Cuando te los pida, debers indicarle a la operadora tu nmero de buzn y la clave para poder acceder correctamente. Estos datos los has definido t mismo en el fichero voicemail.conf. Grabacin de una locucin para un usuario Paso 1: Vamos a crear el plan de marcado de este escenario habitual que consiste en grabar una locucin para un usuario. Esto permitira al usuario grabar un mensaje para indicar: que no se encuentra, que est de vacaciones, etc.

pg. 5 de 7

En este caso la extensin no tiene que corresponderse con ningn usuario, porque no vamos a hablar con ninguno. Quin responder ser el propio servidor Asterisk que nos permitir grabar un mensaje con la aplicacin Record(). La aplicacin Record() tiene la siguiente sintaxis:
Record(filenameformat[,silence[,maxduration[,options]]])

donde se debe indicar como primer parmetro la ruta y el nombre del fichero donde se va a guardar la locucin, seguido del formato del fichero. Normalmente las locuciones de Asterisk se almacenan en formato gsm. Por ejemplo, si quisisemos grabar una locucin para el usuario 105 podramos hacer lo siguiente: Record(/tmp/mensaje105:gsm,,10). Esto permite grabar y almacenar una locucin en el fichero /tmp/mensaje105, de 10 segundos de duracin mxima. Para terminar podemos colgar o pulsar el carcter #. Pero de nuevo sera mejor, y de ms fcil configuracin, crear solo una extensin para grabar las locuciones de cualquier usuario. Por eso vamos a hacer uso de los patrones de extensin. Imaginemos que queremos que el usuario 105 y el usuario 104 graben una locucin. Cualquiera de ellos debera marcar por ejemplo 66105 y 66104 para guardar su locucin. Y los mensajes resultantes podran ser /tmp/mensaje105 y /tmp/mensaje104. Vamos a ver como se pude hacer esto. Un patrn de extensin permite definir una parte fija para la extensin (66) y una parte variable (104 105). De la siguiente manera: _66XXX, donde _ indica que se trata de un patrn, 66 es la parte fija, y XXX la parte variable. La variable EXTEN permite acceder a la extensin que ha sido marcada. Si el usuario 104 marca 66104 para grabar su locucin el valor de ${EXTEN} es 66104. Si queremos quedarnos con la parte variable, los ltimos tres dgitos, debemos indicar ${EXTEN:2} donde el nmero 2 indica que no nos vamos a quedar con los primeros dos dgitos, por lo tanto su valor es 104. Vamos a ver como queda nuestro plan de marcado: exten => _66XXX,1,Answer() ; espera 2 segundos antes de indicar al usuario que grabe exten => _66XXX,n,Wait(2) ; reproducimos con Playback un mensaje para que hable despus de la seal, exten => _66XXX,n,Playback(priv-recordintro) ; grabamos el mensaje o locucin exten => _66XXX,n,Record(/tmp/mensaje${EXTEN:2}:gsm,,10) ;reproducimos el mensaje de que ha sido grabado exten => _66XXX,n,Playback(vm-saved) ;esperamos otros dos segundos exten => _66XXX,n,Wait(2) ;reproducimos el mensaje grabado por el usuario exten => _66XXX,n,Playback(/tmp/mensaje${EXTEN:2}) exten => _66XXX,n,Wait(2) exten => _66XXX,n,Hangup() Recargamos la configuracin del Asterisk y probamos este escenario marcando 66XXX, donde XXX es el nmero de la extensin desde donde llamamos. Por ejemplo para la extensin 105. Asignar la locucin que hemos grabado a una llamada no contestada Imaginemos ahora que en el punto anterior hemos guardado el mensaje /tmp/mensaje105.gsm. Para que Asterisk pueda usar este mensaje lo ms conveniente que es el administrador lo mueva al directorio de las locuciones en espaol de Asterisk. Paso 1: pg. 6 de 7

mv /tmp/mensaje105 /usr/share/asterisk/sounds/es Paso 2:

Ahora vamos a generar el plan de marcado que permita que cuando el usuario 105 no conteste, se reproduzca el mensaje personalizado grabado anteriormente por el usuario 105. La reproduccin la haremos con la aplicacin Playback(). Su sintaxis es:
Playback(filename[&filename2[&...]][,options])

Donde filename es el nombre del fichero que queremos reproducir sin su extension. ;cuando no conteste 105 durante 10 segundos salta una locucin exten => 105,1,Dial(SIP/105,10,r) exten => 105,n,Playback(mensaje105) Desafos de la actividad: 1. Graba un mensaje de voz que diga que el usuario que ha sido llamado est ocupado o no contesta, y que puede dejar un mensaje de voz a continuacin. 2. Para ello crea un plan de marcado comn a todos los usuarios, en lugar de crear un plan de marcado para cada uno, que haga lo siguiente: intente llamar al usuario durante 20 segundos si el usuario no contesta se reproduce el mensaje guardado en el punto 1. Y se activa el buzn de voz para que pueda dejar un mensaje

Pista: Para crear un solo plan de marcado para todos los usuarios haz uso de la variable EXTEN.

pg. 7 de 7