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.

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

  1. Julio León dijo:

    Aparte de eso si se puede, cómo sería la sintaxis por medio de dialplan si es que se puede

  2. Julio León dijo:

    Buenos días, en asterix hay forma de bloquear una extensión cuando ya tiene un desvío programado es decir que si una extensión por ejemplo la 2020 realizó un desvío a la 2030 ya nadie pueda volver a desviar a la 2020

  3. Alvaro Gutierrez dijo:

    Cordial saludo,
    La consulta que tengo es si por medio del la aplicación Dial() es posible configurar Asterisk para que se reproduzca un audio durante una llamada pero no se tenga cuelgue de la misma.
    El requerimiento es el siguiente:
    Los agentes de una Cola tienen como limite 10 minutos para la atención del cliente. Cuando la llamada supere ese tiempo, la atención es calificada como fuera de ANS.
    Se requiere que cuando la llamada tenga una duración de 9 minutos, el agente escuche un audio que indique ese tiempo pero sin que cuelgue la llamada.

    Mucha gracias.

  4. A todos los que desean informacion de asterisk y apoyo escribirme a ecavides@edcartelecom.com

  5. RICKY dijo:

    se me resulta complicado instalar y configurar asterisk para las llamadas grupales

  6. Julio León dijo:

    Buenas tardes

    Me podria ayudar con algo. Porque cuando se guarda un cambio en una central el procesamiento se eleva de 20% a 99%. Esto esta causando que al momento de guarda se realiza una llamada, esta no se puede realizar, el mensaje que sale en la pantalla es “No hay respuesta”.
    Necesito buscar la forma de ver que proceso es el que se eleva, ver la forma como terminarlo.

  7. Ramir3260 dijo:

    Hola. Muy buena la información. Estoy buscando hacer que el timbrado del teléfono cambie dependiendo de si la llamada es interna o externa, como en cualquier central telefónica y supuse que eso sería un parámetro de DIAL, pero parece que no

  8. Rafael Sánchez dijo:

    Cuando hago una transferencia de llamada o una llamada a un telefono movil funciona perfectamente pero cuando en el dialplan hago un desvio a telefono movil no funciona el audio. ¿que puede ocurrir?

  9. Enrique del Rio dijo:

    Hola Carlos

    En primer lugar, disculpa por tardar tanto en responderte.

    En relación a tu pregunta, la respuesta es afirmativa. En el dialplan de Asterisk (fichero extensions.conf) tienes libertad casi absoluta para hacer todo lo que se te ocurra y el caso que planteas es muy sencillo. Tan solo tienes que utilizar la aplicación Playback() antes de marcar hacia la PSTN, pero con la precaución de colocar por delante de la aplicación Playback(), la aplicación Answer() para que el archivo de audio enviado por Asterisk hacia la extensión, sea reproducido por esta. En este mismo blog puedes encontrar varios ejemplos prácticos de ello.

    Un saludo
    Enrique del Rio
    CIFP Tartanga
    Erandio – Bizkaia

  10. Carlos Lopez dijo:

    Buenas tardes.

    ¿Se puede reproducir un audio antes de realizar la llamada a la PSTN?

  11. luis Enrique Herrera dijo:

    Hola, configure mi ruta de salida así como la troncal y al hacer la llamada a un celular. saca la llamada timbra una vez y se queda como en un bucle, luego de lo cual se cuelga, que puedo revisar de configuración?

  12. Omar Galaviz dijo:

    sabes si hay una forma de pasar un parametro cuando hacemos una transfernecia ciega blind, quiero transferir a un agi pero traerme la extensión origen.

Deja un comentario

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