Automatización de llamadas con Asterisk e Issabel PBX

Los sistemas de comunicación de código abierto basados en Asterisk, como Issabel PBX, Elastix o FreePBX, permiten la automatización de llamadas, para interactuar con los usuarios, y adicionalmente recibir o enviar información de otras plataformas.

Automatización de llamadas con Asterisk
Automatización de llamadas con Asterisk


Enseguida vamos a entrar en más detalle sobre las opciones de Asterisk para la automatización de llamadas:


1. El Dialplan de Asterisk

El dialplan es un script propio de Asterisk, con el cual se controla la secuencia de una llamada,  y por lo tanto las diferentes decisiones que se pueden tomar, de acuerdo a las respuestas del usuario, u otro sistema integrado a él.

Por regla general, el dialplan se encuentra en los archivos llamados extensions.conf. Según la distribución de Asterisk, algunos son automáticamente creados o modificados por Issabel (extensions.conf y extensions_additional.conf), y hay otro que se puede modificar por el usuario manualmente (extensions_custom.conf).

En general un dialplan está encabezado por un contexto, que se nombre entre los símbolos []. Debajo del contexto se tienen las diferentes líneas del dialplan, conformadas de la siguiente forma:

[contexto]
exten => extensión, prioridad, Comando(parámetros)

Donde la extensión indica el número que marca un usuario, o un número que ingresa por una troncal; la prioridad muestra la secuencia de ejecución de los comandos, y el Comando es la aplicación que se desea ejecutar.

Por ejemplo la línea:

exten => 123,1,SayDigits(485)

Instruye a asterisk para que cuando el usuario marque 123 o se reciba de entrada por troncal el número 123, ejecute en primera instancia la acción: lea los dígitos 485.


2. AGI – Asterisk Gateway Interface

AGI es una función que permite la ejecución de scripts PHP,  Perl o Phyton externos a Asterisk, intercambiando información entre Asterisk y otros sistemas, o bases de datos. La aplicación AGI permite el envío de parámetros al script, para que éstos sean sus datos de entrada. El script devuelve datos a Asterisk por medio de variables que se cargan mediante un objeto AGI.

El archivo del script debe ubicarse en el directorio /var/lib/asterisk/agi-bin, con permisos de ejecución. Dicho archivo debe contener una estructura tal y como se muestra:

!/usr/bin/php -q

<?php 

require("/var/lib/asterisk/agi-bin/phpagi.php");

//Recibe parámetros desde asterisk

$p1 = $arg[1];

// Ejecuta algunas acciones en PHP 

...

// Retorna valores a asterisk 

$agi = new AGI();
$agi->answer();
$agi->set_variable('salida',$salida);

?>

Las variables devueltas a asterisk por medio del objeto agi, son accesibles mediante el formato ${var}.

Por ejemplo, si contamos con un script en php llamado accion.php, se puede llamar desde el dialplan de la siguiente forma:

exten => 123,1,ExecIf($["${continua}"="1" ]?AGI(accion.php,${p1},{p2}))

En este ejemplo, se ejecuta el script accion.php con los parámetros p1 y p2, cuando la variable continua tiene un valor igual a 1.

Ahora bien, el objeto AGI también puede realizar toda la secuencia del dialplan desde el propio script, por medio de comandos que ejecutan desde el script hacia el asterisk, por ejemplo:

// Obtiene el número del llamante
$cid = $agi->parse_callerid();

// Pronuncia un texto a audio
$agi->text2wav("Hola buenos dias");

// Cuelga la llamada
$agi-> hangup();

De este modo, toda la secuencia lógica de la llamada se controla desde el script, con las facilidades y funciones que los lenguajes de programación soportados contienen.


3. Acceso a MySQL desde el dialplan

Desde el dialplan es posible conectarse a una base de datos local o externa, mediante la aplicación MySQL, integrando los resultados de las consultas a variables del dialplan, o ejecutando otras acciones en la base de datos como inserción, actualización o borrado de datos.

El uso de esta función se realiza de la siguiente forma:

; Conexión a una base del servidor, con un usuario y contraseña válidos 
exten => _X.,n,MYSQL(Connect connid ${serverdb} ${userdb} ${passdb} ${dbname})

; Se ejecuta la consulta MySQL
exten => _X.,n,MYSQL(Query r1 ${connid} SELECT p1, p2 FROM tabla where p2='${EXTEN}')

; Se asignar los resultados de la consulta a variables Asterisk
exten => _X.,n,MYSQL(Fetch fetchid ${r1} p1 p2)

; Se libera la consulta
exten => _X.,n,MYSQL(Clear ${r1})

; Se realiza la desconexión a la base de datos
exten => _X.,n,MYSQL(Disconnect ${connid})

4. AMI – Asterisk Manager Interface

Esta es una forma de integrar a Asterisk con aplicaciones externas, mediante una interfaz de tipo TCP/IP, basado en consultas de tipo clave : valor.

De este modo se pueden enviar comandos a Asterisk, recibir su respuesta y también recibir eventos cuando éstos ocurran.

AMI se habilita en Asterisk en el archivo manager.conf. En este archivo se encuentran las credenciales de ingreso y las direcciones IP con permiso o denegación para ejecutar comandos.

Por ejemplo, una vez que se estable la conexión TCP a Asterisk, se pueden enviar comandos tales como:

Action: Login
ActionID: 1
Username: administrador
Secret: contrasena1

Recibiendo una respuesta de Asterisk como:

Response: Success
ActionID: 1
Message: Authentication accepted

5. Llamadas automáticas

Asterisk permite la ejecución de llamadas de forma automática, por medio de archivos de extesión .call, que se ubican en un directorio específico del servidor Asterisk, para el caso de Centos, el directorio es /var/spool/asterisk/outgoing.

En el archivo .call se pueden incluir opciones como la cantidad de veces que se intentará realizar una llamada, cuál será su troncal de salida, cuál va a ser el contexto, extensión y prioridad en el dialplan que va a usar, y también se pueden fijar variables que pueda requerir el asterisk en la ejecución de la secuencia de la llamada.

Este es un ejemplo de un archivo llamado llamada.call para realizar la comunicación a un número celular 3187449095, usando la troncal TRK1, fijando una variable ${var1} para Asterisk, intentando 3 veces, esperando 2 horas entre llamadas:

Channel: SIP/TRK1/3187449095
MaxRetries: 3
WaitTime: 7200
Context: out-pbx
Extension: s
Priority: 1
Set: var1=5

6. Festival Text to Speech

Festival es una aplicación que permite convertir un texto a voz, desde el dialplan o un script externo.
Si se desea usar plataformas más potentes de conversión de texto a audio, se puede hacer el proceso mediante una comunicación por la API del proveedor del servicio.


7. Módulos personalizados de Issabel

Issabel PBX permite la creación de módulos personalizados por medio del Addon Developer, con el cual se crean los menús necesarios para llamar funciones, que pueden reportar operaciones o realizar cambios de configuraciones en una base de datos.

Issabel PBX
Issabel PBX
Issabel Developer Addon
Issabel Developer Addon


¿Qué se puede hacer con estas alternativas de automatización de llamadas con Asterisk?


La flexibilidad del dialplan y la ejecución de scripts mediante el AGI o el AMI, permiten la realización de llamadas, con interacción de los clientes por medio de un IVR, recibiendo y enviando información con otros sistemas, y sus bases de datos.

De este modo se pueden realizar una automatización de llamadas, ya sea para atención de solicitudes en una mesa de ayuda, o para la consulta de estados de vuelos, reservas de hoteles, estados de envíos, alertas de fallas, y en fin, cualquier tipo de interacción que se requiera entre un cliente, y un sistema externo a asterisk, con el cual se quieran exponer o guardar sus datos de entrada.

Si tu empresa requiere automatizar algunos de sus procesos por medio de Asterisk y sus diferentes opciones, no olvides contactarnos a nuestro Whatsapp, ahí te podemos asesorar y ayudar con tus necesidades.

Este artículo hace parte del sistema de divulgación de conocimiento de ITSoftware.

Si te gustó, por favor no olvides compartirlo en las redes sociales. 🙂

Deja un comentario

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

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.