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


Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

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