Está en la página 1de 12

LABORATORIO III SISTEMAS DE TELECOMUNICACIÓN

PRÁCTICA III
IMPLEMENTACIÓN DE SERVICIOS: AGI.

PRESENTADO A:
Ph.D. ING. CRISTHIAN FIGUEROA

PRESENTADO POR:
BRAYAM DAVID OTERO POMEO
NATALIA SOFÍA QUIÑONES

FACULTAD DE INGENIERÍA ELECTRÓNICA Y TELECOMUNICACIONES


LABORATORIO III SISTEMAS DE TELECOMUNICACIÓN
POPAYÁN, 2019

CONTENIDO
1.1. Introducción.
1.2. Marco conceptual:
1.2.1. AMI.
1.2.2. AGI.
1.2.3. ARI.
1.2.4. Servicios Web.
1.2.5. PHP.
1.3. Bitácora de configuración AGI.
1.4. Explicación del servicio a implementar.
1.5. Configuración del servicio implementado.
1.6. Experiencias de la práctica.
1.7. Conclusiones.
1.8. Referencias.
1.1. Introducción.
Cuando Asterisk se creó su diseño estuvo centrado en el desarrollo de PBX
privadas, las cuales son configuradas con los conocidos archivos .conf, mejor
agrupado con el término de plan de marcado. Es así que para todas las soluciones
requeridas era necesario hacer uso de la programación en C que aún se usa, para
llevar cabo funcionalidades. Sin embargo, no para todos los casos sólo con
Asterisk, son realizables ciertos proyectos, es por esto que se crearon AGI, ARI, y
AMI. Estas interfaces cumplen un importante papel a la hora de hacer de getway
entre Asterisk y programas externos, controlar el canal de transmisión, o ejecución
remota del plan de marcado. Brindando más funciones y facilidades para desarrollar
en otros entornos de desarrollo como PHP, Phyton, Java, y otros.

El objetivo que reúne a esta práctica es la realización de una aplicación mediante el


uso de Asterisk, ARI y PHP. La aplicación a desarrollar se basa en la realización de
un punto de atención al cliente basado en una interface web.

1.2. Marco conceptual.


1.2.1. AMI.
AMI (Asterisk Manager Interface) Esta interfaz permite la conexión de un cliente a
una instancias de Asterisk y modificar comandos o acciones sobre TCP/IP.
1.2.2. AGI.
AGI (Asterisk Gateway Interface) este provee una interface para operar entre
Asterisk y otros programas externamente, los cuales podrán manipular el canal en el
plan de marcado.
1.2.3. ARI.
ARI (Asterisk Rest Interface) fue creada de manera que mientras AMI controla lo
referente a llamadas (TCP/IP) y AGI se ocupa del acceso remoto del dialplan,
ninguna de ella fue diseñada para permitir el desarrollo de aplicaciones de
comunicación según la voluntad del desarrollador mediante la actuación sobre las
primitivas del sistema como puentes, canales, terminales, el medio, etc.
1.2.4. Servicios Web.
Los servicios Web son un conjuntos de soluciones que sirven para intercambiar
datos entre aplicaciones de software desarrolladas en diferentes entorno de
programación y cualquier plataforma, estos se suelen utilizar en redes de
ordenadores como internet, para la utilización de estas es necesario la
interoperabilidad entre estos softwares.
1.2.5. PHP.
Este es un lenguaje de programación popular entre las soluciones web, es muy
adecuado para esto tiene la capacidad de ser incrustado dentro de HTML. Es muy
utilizado debido a su simplicidad para el principiante, sin embargo, con una infinidad
de características avanzadas.

1.3. Bitácora de configuración AGI.


Para iniciar la instalación se instala un WebSocket para recibir eventos, para este
caso se va a utilizar wscat, en caso de no tenerlo se instala npm como gestor de
paquetes el cual facilita la gestión de Node.js.

apt-get install npm

Posteriormente se instala el paquete de nodo wscat:


npm install -g wscat
Para controlar el canal en el dialplan de la aplicación de ARI, es por esto que se
necesita un cliente HTTP para hacer peticiones, modificar y transferir a nivel URL.
apt-get install curl
Continuando se entra al archivo http.conf y se configura de la manera siguiente.

http.con

[general]

enabled = yes

bindaddr = 0.0.0.0

Se configura ari.conf como se ve a continuación:

[general]

enabled = yes

pretty = yes

[asterisk]

type = user

read_only = no

password = asterisk

Además se configura el extensions.conf, para establecer la aplicación Statics


marcando a la extensión 1000.

[default]

exten => 1000,1,NoOp()

same => n,Answer()

same => n,Stasis(hello-world)

same => n,Hangup()

Se conecta a Asterisk por medio de wcast.


En CLI de asterisk se muestra el siguiente mensaje, el cual indica que el WebSocker
está conectado.

Cuando se marca a la extension 1000 obtenemos lo siguiente en wcast:

Ahora, por medio de curl, hacemos que en el softphone del usuario, se reproduzca
un audio que diga “hello world”, en el parte del id del canal en el comando de curl,
se debe colocar elidentificador que entrega el wscat, este identificador cambia para
cada llamada.

En el CLI de Asterisk se mostrará el siguiente mensaje:


Para el uso exitoso de ARI se hace necesario el uso de Node.js este es una
plataforma de programación con propósitos generales de permitir al usuario hacer
aplicaciones mediante el aprovechamiento de JavaScript. Para esto se actualiza y
luego se procede con la instalación.

sudo apt-get update

sudo apt-get install nodejs

A través de nvm se pueden instalar paquetes de software a través de repositorios


de Ubuntu, para este caso se debe tener Liblssl-dev como librería la cual contiene
cabeceras de archivos, y librerías de desarrollo.

sudo apt-get update


sudo apt-get install build-essential libssl-dev

Utilizando curl se instala nvm desde la página de GitHb. nvm permite instalar
varias versiones independientes de Node.js para controlar el entorno fácilmente.

curl -sL https://raw.githubusercontent.com/creationix/nvm/v0.31.0/install.sh


-o install_nvm.sh

1.4. Explicación del servicio a implementar.

El servicio que se pensó para la práctica de laboratorio, fue un buzón de quejas por
medio de la interfaz AGI programando en el lenguaje de php. Este servicio se
permiten dos tipos de usuarios los cuales mediante el llamado de diferentes
extensiones puedes hacer que el sistema desempeñe dos diferentes opciones, para
la opción 1111 se tiene una contestadora que permite dejar quejas a múltiples
usuarios diferentes y en simultáneo si se quiere. Para la extensión *1111 el usuario
administrador mediante una contraseña accede a las quejas de los usuarios
anteriormente hechas.
1.5. Configuración del servicio implementado.

Nuestro servicio se va implementar por medio de la interfaz AGI, dado a que esta
interfaz se adecua mejor a los requerimientos de nuestro servicio a implementar.
AGI brinda una interfaz entre asterisk y el plan de marcado, como lo que se quiere
es grabar la queja del usuario cliente y que después un usuario administrador la
escuche, por lo tanto se va a modificar el plan de marcado de una extensión, donde
la interfaz AGI es perfecta para esta aplicación.
Instalación de la librería.
Se va programar con el lenguaje PHP, debido a que es el lenguaje que más
conocido para nosotros, además es un lenguaje de muy alto nivel que se hace más
manejable. No es necesario utilizar librerías de PHP para empezar a programar,
pero estas librerías hace más fácil la programación del servicio. Hay varias librerías
de PHP (PAGI, PHPAGI, AgiPhp5, PHP ASTLIB, entre otras), pero por facilidad de
instalación y de uso se escogió la librería PHPAGI.

Para descargar PHPAGI se va al siguiente link:


https://sourceforge.net/projects/phpagi/files/phpagi/2.20/

Se va a la carpeta donde se descargo, se decomprime

Ya con la carpeta descomprimida se mueve a la dirección /usr/share/asterisk/agi-


bin/ y se cambia el nombre a phpagi por fácilidad.

Se dirige a la carpeta donde se movió el archivo, y se le da permisos 755.


De la carpeta phpagi movemos el archivo phpagiexample.conf ubicado en la carpeta
doc a la carpeta de asterisk ubicada en etc.

Instalación de PHP:
Luego se instala el php se debe actualizar el sistema y después ingresar el siguiente
comando:
sudo apt update
sudo apt -y install php
Donde se instala la última versión de php, para comprobar se digita

Permisos necesarios:
Para el correcto funcionamiento del servicio es necesario dar unos permisos a la
carpeta de sonidos de asterisk, de la siguiente forma:

Configuración de extensions.conf:
La configuración del plan de marcado es sencilla dado a que todo el proceso lo hace
los programas php. Al marcar la extensión 1111 lo dirige a un menú para que el
usuario pueda grabar su queja, y al marcar la extensión *1111 un usuario
administrador que necesita una contraseña para autentificarse, escucha las quejas
de los demás usuarios.

La programación del servicio creamos un archivo llamado encuesta.php de la


siguiente forma:

Configuración encuesta.php
Es importante mencionar que en la primera línea del script creado, se debe insertar
la siguiente línea de código, con el fin de que asterisk lo corra como archivo tipo
.php:
#! /usr/bin/php -q

El comando require, sirve para añadir la librería PHPAGI, debemos colocar la


dirección completa donde está ubicado el archivo phpagi.php. La siguiente línea de
código es con el fin de que todos los errores del script aparezcan en la consola de
comandos de asterisk para depurarlos.
Se crea un objeto de la clase AGI, para poder realizar acciones que nos ayudarán a
encontrar los valores de las variables y utilizarlas en nuestro servicio. En la siguiente
línea de código, se responde al canal.

Por medio del objeto creado de tipo AGI, se llama a la función parse_callerid(), que
nos entrega un vector con información del usuario que llama, esto con el fin de darle
una bienvenida al usuario que llamó. El comando Verbose(), muestra el valor de la
variable $callerid en el cli, con el comando exec(), se puede ejecutar servicios o
funciones propias de Asterisk, como en este caso, Wait que da una pausa al
sistema de un determinado tiempo. El text2wav(), reproduce por medio del servicio
de asterisk de Festival y así darle la bienvenida al usuario por medio de voz.

Se reproduce un audio indicando al usuario que si digita la tecla uno, le permite


grabar una queja, y si el usuario no quiere, marque 2. Para tomar la tecla que
ejecutó el usuario se hace con la ayuda del comando get_data(), que reproduce un
sonido,en este caso un beep, espera un tiempo determinado de 3 segundos para
tomar la número del usuario y lo guarda en la variable pin. Luego se reproduce un
audio indicando al usuario cuál fue la tecla que presionó y también se muestra en el
cli de Asterisk.
Si digitó el número 1 quiere decir que si quiere mandar una queja, por lo que entra al
primer condicional, donde por medio de un audio le pide al usuario que mencione su
queja, con el comando exec activamos el servicio de Record(), para grabar la queja
con el nombre queja(#número).wav, el %d es con el fin de que cuando se grabe otra
queja la guarde con otro nombre, aumentando un número. Y finaliza diciéndole al
usuario gracias.
Si tomo la decisión de no mandar una queja, entra al segundo condicional donde el
sistema se despide del usuario.

Llegado el caso que el usuario haya digitado una tecla diferente al dos, el usuario
escuchará un audio diciendo que escoja una opción correcta. El usuario tendrá 3
intentos para marcar una opción correcta, después de tercero el sistema se despide.

Para terminar la comunicación se hace por medio del comando hangup().

Configuración escucharQueja.php
Este archivo hace posible la escucha de las quejas dejadas por otros usuarios
clientes, inicialmente se crea un cliente AGI, y se saluda al usuario mediante el
servicio de festival con $callerid posteriormente el saludo y $cid que permite
insertar el número del usuario para hacerlo más personalizado.
A continuación el código permite que el usuario administrador escuche las quejas
dejadas por otros usuarios clientes. De esta manera se procede con un if de
validación para el cual se tiene que una vez se haya digitado la contraseña correcta
123, el entre al ciclo que en primera instancia comunica al usuario que entró
exitosamente mediante $agi->text2wav(“you entered succesfully”);
posteriormente hace una espera de dos segundos $agi->exec(‘Wait’,’2’);
El contador $num=0; hará la función de contador para el número de quejas que se
disponga en el sistema, de manera que como se ve a través de los comandos antes
mencionados, se cuenta en voz el número de la queja y se repita la queja, pasando
a la siguiente hasta que se hayan terminado.

Posteriormente una vez el contador $cont permite seguir introduciendo la


contraseña, para que en el momento que este sea mayor que 3 se salga del siglo y
despida al usuario.
1.6. Experiencias de la práctica.
En la práctica se tuvieron diversas dificultades al buscar información concisa
respecto a la instalación de librerías o servicios en las tres interfaces ARI,AMI, y
AGI, por lo cual el tiempo para la elaboración de la práctica se incrementó más que
en otras prácticas de las cuales se tenía conocimiento previo o eran temas más
documentados en internet.
Para el manejo de archivos en las interfaces de AGI, es necesario dar permisos 755
a dichos archivos. Se tuvo varios problemas por no conceder estos permisos a
carpetas de los sonidos de Asterisk, los archivos php y a las librerías. Con las
interfaces AGI, ARI y AMI, se pueden crear servicios muy avanzados y novedosos
en Asterisk.

1.7. Referencias.
❏ https://www.lumenvox.com/knowledgebase/index.php?/article/AA-
01889/0/Building-Asterisk-Speech-Applications-with-AGI.html
❏ https://www.voip-info.org/asterisk-agi/
❏ http://www.aitelephony.com/uncategorized/connecting-asterisk-with-
google-speech-api/
❏ https://wiki.asterisk.org/wiki/display/AST/Getting+Started+with+ARI#Get
tingStartedwithARI-Example:ARIHelloWorld!
❏ https://www.digitalocean.com/community/tutorials/como-instalar-node-
js-en-ubuntu-16-04-es

También podría gustarte