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í 

lunes, 31 de octubre de 2016

Instalar PHP y MySQL en Centos 6 - Asterisk AGI

ahora quiero mostrar como instalar PHP, MySQL y ODBC en Centos 6 para ser utilizados en los scripts AGIs en lenguaje PHP.

yum -y install php-cli php-mysql mysql-server mysql-devel mysql-connector-odbc unixODBC unixODBC-devel libtool-ltdl libtool-ltdl-devel

tengan en cuenta que se instalan las versiones developer que son las recomendadas. Tambien vean que hay mayúsculas y minúsculas, todos esos comandos van en una sola línea, si ustedes gustan pueden tambien instalarlos de dos en dos, poniendo "yum -y install"  y separados de espacio los siguientes dos elementos del comando, cada elemento está separado por un espacio.
luego para checkar e iniciar MySQL damos los siguientes comandos:

chkconfig mysql on

/etc/init.d/mysqld start

las dos lineas son comandos separados. al ejecutarse el segundo  comando nos mostrará la información de inicio de MySQL

domingo, 30 de octubre de 2016

AGI Asterisk - Consumir Webservice parte 1

Hoy me ha tocado consumir un webservice en Internet desde asterisk, de tal modo que se pueda llamar y enviarle el callerId, un pin y un numero de cédula o Id y que este retorne un valor para que luego el "llamante" escuche dicho valor .

primero que nada hay que pensar.... necesito ir a consultar a un sistema externo estos datos,
y pues investigando veo que hay que usar AGI (Asterisk Gateway Interface) que me permite ejecutar un script en variedad de lenguajes, como ser: C#, C, Ruby, PHP, Java, Bash entre algunos....

ahora pensemos... ¿cual de estos lenguajes es mas eficiente?

pues empecemos a analizar:
  • C# y C, son muy buenos estos son binarios, la dificultad es que si hay que cambiar algo rápido, pues hay que ir al IDE y hacer el cambio, luego compilarlo y pasar el compilado a asterisk.
  • Ruby y PHP, esta es la mejor opción de todas, y entre las dos está PHP ya que es un lenguaje muy popular y ya hay mucha documentación y librerias como ser phpagi que está desarrollada para ayudarnos con los scripts en php, hay que tener cuidado de tener instalado y corriendo php en el sistema donde tenemos instalado Asterisk de lo contrario nos podriamos topar con un "no such file or directory found" en la consola de Asterisk y el script no se ejecutará. Si todo sale bien podemos notar que PHP se ejecuta casi de manera nativa y es de facil integración al momento de hacer cambios, tanto que se puede modificar desde el sistema donde tenemos corriendo asterisk con un simple comando: nano script.php.
  • Java y Bash, estas son las menos recomendadas, Java porque al ejecutar un script, se crea una máquina virtual de java para ejecutar ese script, lo que consume mucho mas recursos, a mi ver, se debería de usar solo en caso de no tener otra alternativa por x o y razón. y Bash por que cada script agre una consola en el servidor para ejecutarse por lo que consumen muchos recursos. En definitiva, estos dos ultimos lenguajes cargan el servior por cada llamada que llama al script AGI por eso no son convenientes.
Ya tengo elegído PHP, al menos de momento. ahora lo siguiente: hay 4 tipos de AGI:
  • AGI: Sería la aplicación estándar. Ejecuta la aplicación en la misma máquina que asterisk, y se abre un flujo de entrada y salida clásico por la entrada y salida asociada correspondiente.
  • EAGI: Hace referencia a Enhanced AGI, es exactamente igual que AGI, pero además se incorpora a la entrada, el canal en curso, pero solo en modo "lectura".
  • Fast AGI: Se diferencia de AGI, dado que el proceso se establece a través de una conexión TCP/IP (el flujo de información), concretamente por el puerto 4573, y de esta forma es posible liberar el "peso" de la máquina Asterisk de forma bastante eficiente
  • Async AGI: Se establece una conexión con AMI, y el flujo se realizaría a través de dicha interfaz. Podría servir como una capa de abstracción de AMI dado que se considera de alguna forma un CTI y los problemas de estándares que acarrea. (mas info: wikiasterisk)
yo elegiré lo que es el AGI (normal)
una vez temos estas dos cosas (el lenguaje y el tipo de AGI | [php,agi]) preparamos las librerias de phpagi para evitar problemas futuros, lo pueden descargar de su página oficial o la descargan desde aquí y las colocamos en /var/lib/asterisk/agi-bin/
en esta misma ruta pondremos los scripts a ejecutar, yo usaré uno llamado "juego.php" que me fue dado en un curso de Asterisk para usarlo como prueba.

 luego solo creamos una extension donde llamamos al AGI, podemos hacer un contexto entero para probarlo y solo allí ejecutar el script.

[context-agi]
exten => 800,1,Verbose(1|AGI)
same => n,Answer
same => n,agi(juego.php)
same => n,Hangup 

hay que tener en cuenta que debemos darle permisos al script AGI a ejecutar. lo hacemos en la consola de linux con el comando : chmod 755 script.php 
y luego de esto ya tendremos que cuando el usuario SIP al que hemos asignado el contexto [context-agi] marque a la extensión 800 primero conteste y luego ejecuta el AGI, que en este caso en un juego IVR (Interactive Voice Response) de adivinar un numero.

¡En otra entrada crearemos nuestro propio script AGI que consuma el Webservice, por ahora lo principal ya está!

ahora aquí la parte 2

domingo, 21 de septiembre de 2014

Un busto en zbrush

En esta vez, me quise iniciar en el mundo de ZBrush, se me hace un poco difícil pero no imposible, ya que hasta el momento el único programa de modelado 3d que utilizo es Cinema 4D, pero bueno aun en este programa no podía modelar bien un rostro humano, así que empece como práctica a hacer unos labios a partir de una esfera dynamesh, luego que vi como me iba quedando me gusto y empecé seguidamente con la nariz y así sucesivamente, aunque todavía me falta arreglar una parte de las orejas y agregar detalles aquí esta cómo lo llevo hasta ahora

como digo no está perfecto porque no es algo planeado, sino que fue algo de momento y por práctica pero bueno como dije aún faltan retoques como reparar la parte superior de la oreja y la parte inferior de los parpados

miércoles, 9 de julio de 2014

Agregar computadoras a Windows Update Services (WSUS) servidor de actualizaciones Windows Server 2012 R2 usando políticas

Tengo un servidor de dominio el cual me hace falta pegarlo o añadirlo a las computadoras en el WSUS asi que aquí vamos!!

primero que nada hay que indicarle al Servidor de dominio, quién es el servidor de actualizaciones (WSUS), eso lo realizamos mediante políticas así que configuramos la política y la aplicamos a todo el dominio!


para configurarla hacemos lo siquiente:
clic derecho sobre el nombre del dominio (en mi caso clic derecho sobre "Oceano.com")

y elegimos la primera opción que dice "Crear un GPO en este dominio y vincularlo aquí"
aparecerá el siguiente cuadro donde ponen el nombre de la política (en mi caso lo tengo selección de WSUS) y aparece la ventana para configurar la política



ahora es hora de configurar la política
para ello nos vamos a:
configuración del equipo> Plantillas administrativas> Componentes de Windows> Windows update
allí vamos a habilitar las siguientes políticas:

Explicación de políticas:

Configurar Actualizaciones automáticas
esta actualización permite que la computadora cliente actualice de forma automática una vez que las actualziaciones son aprobadas por WSUS

habilitamos la politica y le decimos que descargue las actualizaciones automáticamente todos los días a las 12:00pm


Especificar la ubicación del servicio Windows Update
aquí especificamos la dirección IP del WSUS o bien su nombre en la red local

como ven, ponen "http://" + el nombre del servidor en la red + el puerto por donde se conecta, el puerto debe ser 8530.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!olvidé cambiar el nombre del servidor antes de unirlo al dominio, por eso el nombre tan raro!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!


No conectar con ninguna ubicación de internet de windows
no necesitamos que las computadoras se actualicen desde internet dado que entonces no necesitaríamos la implantación de WSUS así que la habilitamos para que no busque actualizaciones en Internet


yo tengo más configuraciones pero son opcionales dependiendo las necesidades de cada quien, las principales para que funcione son las que le seleccioné

luego le dan cerrar a la ventana del editor de políticas y pueden echar un vistazo seleccionando la política y dándole en detalles para que nos muestre en resumen la política aplicada

luego de esto ya podemos cerrar la ventada de las políticas

recordemos que esto es en el controlador de dominio


ahora que ya tenemos la politica establecida vamos al cliente que ya debería estar unido al dominio y si ya está encendido, abrimos el cmd con permiso de administrador y ejecutamos gpupdate para que actualice las políticas y pueda encontrar al WSUS, en mi caso la que me hace falta unir es el servidor de dominio, el mismo donde cree la política,

1- abro el cmd (como administrador) y ejecuto "gpupdate"

como se puede ver dice que la actualizó de la directiva se completó correctamente

2- ahora lo que necesitamos es que el servidor WSUS aparesca esta computadora para asignarle las actualizaciones

así que en el mismo cliente, en la misma ventana, ejecutamos el comando "wuauclt.exe /detectnow" esto enviará una solicitud a WSUS para que la agregue a su lista de coputadoras


3- debes esperar un momento para que WSUS la agregue y mientras tanto, en el WSUS en la ventana de Administrador de servidores ve a  Herramientas> Windows Server Update Services
te aparecerá esta ventana:

despliegas el árbol tal como te lo seleccioné
nombreWSUS>Equipos

allí en la seccion de "Todos los equipos" en la parte de abajo dice: "equipos sin estado: 1" eso indica que ya encontró la computadora que estamos uniendo, si no aparece prueba a dar en el botón actualizar o ejecutar de nuevo el comando "wuauclt.exe /detectnow" en la computadora que estas uniendo.


ahora necesitas crear grupos de computadoras para asignar las actualizaciones, como ves, yo tengo los grupos W7, W8.1, WServer2012R2 para hacer estos grupos solo das clic derecho en "Todos los equipos" y seleccionas "Agregar grupo de equipos" y le ponen el nombre que competa a las necesidades

teniendo ya hechos los grupos ahora falta asignar la computadora agregada a un grupo para ello nos devolvemos a a "equipos" y damos clic en donde dice "Equipos sin estado: 1"
y nos muestra lo siguiente:

aparece la computadora "reydelmar.oceano.com" esta es el controlador de dominio y la otra que aparece con nombre raro es el WSUS que como les dije  antes se me olvidó cambiar el nombre, ahora damos clic derecho sobre rey del mar y damos clic en "Cambiar pertenencia"

y seleccionamos el grupo al que la vamos a meter, en mi caso, los grupos están por sistema operativo así que selecciono la opción de WServer2012R2
luego clic en aceptar

y yá está agregada para que descarguen las actualizaciones y las apliquen al grupo! aparecen las maquinas agregadas al grupo WServer2012R2