jueves, 10 de noviembre de 2016

AGI Asterisk - Consumir Webservice parte 2

<- Primera parte
Ya estamos en la parte dos... necesitamos aun dos cosas, unos repositorios Extra llamados EPEL en centros. para ello ejecutamos el comando: yum install epel-release
la segunda cosa es, unas librerías para manejar Webservices con php, para ello ejecutamos el comando: yum install php-soap

Ahora editamos con nano el archivo de configuración de php con el comando: nano /etc/php.ini
al final del archivo escribimos la siguiente línea:
extension='/usr/lib/php/modules/soap.so'

también ocupamos las clases de nusoap para manejar mas fácilmente el webservice
puedes descargarla de aquí. estas librerías las colocas junto con las de php-agi en /var/lib/asterisk/agi-bin  yo elegí colocarlas dentro de una carpeta llamada nusoap para tener mas orden, eso si, tenerlo en mente al momento de hacer el AGI,
como pueden ver allí están las librerías php junto con los AGI's


y reiniciamos Asterisk, ya con eso debería de estar instalado lo necesario.

Ahora si, a programar el AGI que consuma el Webservice.

El Webservice que tengo de prueba es sencillo, solo para asegurarse de que el AGI se conecte, envíe los parámetros correctos y reciba otro parámetro.

Para ello, mi Webservice pide dos parámetros, el CallerId y un numero (password) dependiendo de este último, se devolverá un valor.

aquí les dejo la muestra de mi archivo pruebaws2.php (AGI)

#!/usr/bin/php -q
<?php
    include 'phpagi.php';
    require_once 'nusoap/nusoap.php'; //incluimos las librerias de phpagi y nusoap
 
    $agi =new AGI();     // creamos un objeto de la clase AGI
    $agi->answer();     // contestamos el canal
    $callerId=$agi->request[agi_callerid]; // obtiene el CallerId
    //Variables
    $pass = $agi->get_data('please-enter-your');
    $pass = $pass['result'];
    $agi->verbose('ingrese su...'.$callerId.'-'.$pass);// utilizamos verbose para ir depurando que todo valla bien
    //**************************Obtener resultados del WebService
    $cliente = new nusoap_client('http://192.168.22.110/asteriskTest002.netEnvironment/apruebaAGIws.aspx?wsdl',true);
    $parametros = array('Callerid'=>$callerId,'Pass'=>$pass); //parametros que resibe el webService
    $respuesta = $cliente->call("Execute",$parametros); //Execute es el metodo del WS que deseo llamar
    $saldo=$respuesta['Saldo'];
    $agi->verbose('Respuesta:'.$saldo);          //parametros de salida del webservice
    $agi->say_number($saldo);

$agi->hangup();
?>

recuerden darle permisos con chmod 755 pruebaws2.php de lo contrario no funcionará... además hacer el archivo en el mismo linux para evitar problemas con el juego de caracteres, en caso de algún problema, les dejo el archivo php ya con permisos de ejecución, pueden descargarlo aquí