Configuración práctica de Asterisk (1ª parte): La aplicación Dial()

A lo largo del curso 2016/17, dentro del módulo de “Sistemas de Telefonía” del ciclo formativo de “Sistemas de Telecomunicación e Informáticos”, queremos continuar con las prácticas iniciadas en el pasado curso 2015/16 referentes a la instalación, configuración y mantenimiento de sistemas PBX basados en Asterisk. Para ello, los alumnos deberán de utilizar las diferentes aplicaciones incluidas en Asterisk, aplicaciones que forman parte del núcleo de Asterisk y que hacen del mismo un sistema extremadamente potente. Las aplicaciones soportadas por una versión determinada de Asterisk pueden ser consultadas en el CLI mediante la orden core show applications, tal y como se muestra en la siguiente captura de pantalla:

Asterisk_configuracion_practica_0

Aplicaciones de Asterisk

En la versión 11.7.0 de Asterisk son 176 las aplicaciones soportadas y entre todas ellas la aplicación Dial() es, con seguridad, la más importante. El manejo de esta aplicación para realizar una llamada a un determinado usuario es muy simple: la aplicación Dial() simplemente verifica el número marcado por un usuario en un determinado contexto y si coincide con el patrón establecido, procede a realizar la llamada mediante el canal programado a la extensión o extensiones fijadas dentro de los parámetros. En la siguiente captura de pantalla se muestra dos ejemplos simples de dicha aplicación Dial(). En el primero de ellos, si una extensión que está dentro del contexto de “trabajadores” marca el número 201, Asterisk realizará una llamada mediante el protocolo SIP a la extensión 201. En el segundo ejemplo, si una extensión que está dentro del contexto de “trabajadores” marca el número 81, Asterisk llamará de forma simultánea a las extensiones 201 y 202, en ambos casos mediante el protocolo SIP

Asterisk_configuracion_practica_1

Pero la aplicación Dial() es también extremadamente potente y compleja, con un buen número de opciones que ayudan a construir una PBX con Asterisk con tantas o más funcionalidades que una PBX “convencional” de alta gama. La sintaxis completa de la función Dial() es la siguiente:

Asterisk_configuracion_practica_2

Sintaxis de la aplicación Dial(). Wikipedia

Como se observa, son 4 los tipos de parámetros que admite la aplicación Dial(). En primer lugar se indican las diferentes tecnologías y recursos a donde se realizará la llamada. En el ejemplo anterior eso corresponde a (SIP/201) y también a (SIP/201&SIP/202).  A continuación el segundo parámetro opcional es timeout. Este parámetro especifica en segundos el tiempo durante el cual se intentará realizar la llamada. Si no se especifica ningún tiempo, el sistema intentará realizar la llamada de forma indefinida (en realidad, 136 años) hasta que el usuario llamado responda, cuelgue la llamada o el usuario llamado aparezca en modo ocupado o rechazando la llamada. Un ejemplo de programación de este parámetro de timeout se muestra a continuación:

Asterisk_configuracion_practica_3Como se observa, el parámetro de timeout se ha fijado en 15 segundos. Cuando una extensión del contexto de “trabajadores” marque el número 201, Asterisk realizará una llamada SIP a la extensión 201 y si en 15 segundos nadie atiende la llamada, la colgará automáticamente. En la siguiente captura del CLI se observa dicho proceso:

Timeout en la aplicación Dial()

El tercer parámetro de la aplicación Dial() son las denominadas options y pueden ser consultadas en el CLI mediante la orden core show application dial:

Asterisk_configuracion_practica_4

Son muchas las options que están disponibles, algunas son fáciles de entender y otras no tanto. Las diferentes options se escriben unas a continuación de otras sin ningún tipo de separación y si alguna opción lleva parámetros, estos se colocan entre paréntesis. Algunos ejemplos de opciones son las indicadas a continuación:

  • A(x): Reproduce un mensaje de audio a la parte llamada. El fichero de audio que se reproduce es el indicado por “x”
  • H: Permite al usuario llamado colgar la llamada pulsando la tecla “*”
  • h:Permite al usuario llamante colgar la llamada pulsando la tecla “*” Nota: En ambos casos * está definido en features.conf -> featuremap -> disconnect
  • i: Asterisk ignorará en las llamadas a grupo cualquier intento de desvío de llamada, por ejemplo a un buzón de voz. De esta forma, la llamada a grupo sonará en el grupo y podrá ser atendida por alguno de los miembros del grupo. (si en un grupo alguno de los teléfonos tiene activado el desvío inmediato a un buzón de voz, las llamadas a dicho grupo no sonarán, al activarse automáticamente ese desvío y ser atendida la llamada)
  • j: Asterisk  salta a la prioridad n+101 si todos los canales utilizados para la function DIAL están ocupados
  • K: Permite a la parte llamante activar la function “parking of the call” enviando la correspondiente secuencia DTMF para parking de llamadas definida en features.conf.
  • k: Permite a la parte llamada activar la function “parking of the call” enviando la correspondiente secuencia DTMF para parking de llamadas definida en features.conf
  • L(x[:y][:z]): Limita la llamada a “x” milisegundos, lanzando un aviso de warning a “y” milisegundos, repitiendo este warning cada “z” milisegundos. Solo el parámetro “x” es requerido siendo “y” y “z” opcionales. En cualquier caso tienen que ser numeros enteros
  • m: Permite que al realizar una llamada a otra extensión o a un teléfono externo, en lugar de escuchar la señal de ring, se escuchará la música en espera.
  • S(n): Cuelga la llamada n segundos después desde que la parte llamada ha descolgado la llamada.
  • T: Permiso de transferencia de llamada para la parte llamante.
  • t: Permiso de transferencia de llamada para la parte llamada.
  • W: Permite a la parte llamante comenzar la grabación de la llamada después de presionar *1 o lo que esté definido en features.conf
  • w: Permite a la parte llamada comenzar la grabación de la llamada después de presionar *1 o lo que esté definido en features.conf

Veamos a continuación unos ejemplos prácticos, empezando por una de las opciones más básicas con las que cuenta cualquier PBX, las transferencias de llamadas. En Asterisk esto se consigue con las opciones Tt las cuales dan permiso a la parte llamante y a la parte llamada respectivamente para realizar una transferencia de la llamada. Asterisk dispone de dos tipos de transferencia:

  • Blind Transfer: En esta opción el usuario que inicia la transferencia marca el número de destino y tan pronto como este comienza a sonar, cuelga la llamada. La transferencia se realizará de forma automática a la extensión llamada sin que haya habido ningún tipo de diálogo entre el que transfiere la llamada y el usuario del teléfono a donde va a ser transferida
  • Attended Transfer: En esta opción el usuario que inicia la transferencia marca el número de destino y debe de esperar a que en dicha extensión la llamada sea descolgada. En ese momento, puede colgar su teléfono y la llamada será transferida.

Aunque los códigos para realizar las transferencias de llamada son absolutamente personalizables, por defecto Asterisk incluye unos códigos que pueden ser consultados en el fichero de configuración Features.conf. Para conocer el estado de las Features, en el CLI de asterisk podemos escribir la orden features show. Aparecerá algo como lo siguiente:

Asterisk_configuracion_practica_5

Vemos que la opción de Blind Transfer se ejecutará mediante el código #1 y la opción Attended Transfer mediante el código *2.  En el fichero extensions.conf deberemos de escribir en las aplicaciones de tipo Dial() donde se van a permitir las transferencias, algo como lo siguiente:

Asterisk_configuracion_practica_6

En este caso, cuando desde una de las extensiones que esté en el contexto indicado, en este caso la extensión de operadora, se llame a las extensiones 202 o 203, se permitirán ambos tipos de transferencias. En el siguiente vídeo se muestra el funcionamiento práctico de la transferencia BlindTransfer. Observar que en cuanto la extensión 201 introduce el código de transferencia de llamada, #1 en este caso, Asterisk espera a continuación un número de extensión para proceder con la transferencia. En el momento en que se introduce un número de extensión válido, Asterisk realiza la transferencia y la llamada en la extensión 201 es colgada automáticamente:

BlindTransfer en la aplicación Dial()

Para que las transferencias funcionen es imprescindible que el flujo RTP de audio pase por Asterisk y no vaya de forma directa entre extensiones. Esto es así porque los tonos DTMF utilizados para la señalización van dentro del flujo de audio RTP. Para conseguirlo, en el fichero SIP.CONF es necesario indicar la opción canreinvite=no

Observar también que los mensajes de audio de Asterisk se reproducen en Español, pero eso no es lo que sucede cuando se instala Asterisk por primera vez. Más adelante en este mismo blog se verá como cambiar todos los mensajes de audio de Asterisk al idioma deseado.

Por último y aunque en el vídeo anterior no se aprecia, es posible indicar que la música en espera cuando se realiza la transferencia se elija de forma aleatoria de una serie de ficheros de audio. Para ello, en el fichero musiconhold.conf deberemos de configurar que la música en espera se reproduzca en modo random:

Asterisk_configuracion_practica_7

Además, deberemos dejar en la carpeta donde Asterisk buscará la música en espera, los diversos ficheros de música que queremos que se reproduzcan en modo random. En nuestro caso hemos colocado varios archivos de música, todos en formato wav. El nombre de dichos archivos es indiferente, ya que Asterisk los irá utilizando en modo random

Asterisk_configuracion_practica_8

Con esto finaliza esta entrada del blog dedicada a los aspectos básicos de la aplicación Dial(). En posteriores entradas se irán analizando el resto de las options.

Esta entrada fue publicada en Telefonía IP. Guarda el enlace permanente.

Deja un comentario

Tu dirección de correo electrónico no será publicada.