Etiqueta: php

  • Programa tus propias aplicaciones de Asterisk en PHP

    phpari_logo_transparent

    Tal y como explicamos cuando hablamos de ARI (Asterisk REST Interface) en la conferencia de Las 12 pruebas de Asterisk, una de las novedades de Asterisk 12, Asterisk 13 y posteriores, es la posibilidad de crear aplicaciones en casi cualquier lenguaje y que sean ejecutadas por Asterisk utilizando el «engine» Stasis que utiliza conexiones HTTP y websocket para enviar y recibir información de la aplicación y del propio Asterisk (similar a como lo hace AGI) pero manteniendo la conexión vía websocket (similar a como lo hace el AMI).

    Esa comunicación HTTP/Websocket requiere de algunas librerías para poder conectar con Stasis y poder interactuar con Asterisk, de ahí que no todos los lenguajes sean válidos, por lo que actualmente los lenguajes que disponen de librerías para conectar con Stasis son:

    Este último lenguaje (PHP) acaba de ser incorporado gracias a Nir Simionovich al que podremos ver en el VoIP2DAY 2014 y a Leonid Notik.

    Este nuevo sistema (ARI) es el camino que va a seguir Asterisk para poder interactuar con otras aplicaciones. Si bien no está claro que sea un sustituto de AGI y del AMI, podemos ver que todos los desarrolladores de Asterisk están volcados en este proyecto por lo que, tiene bastantes papeletas para ser el interfaz Asterisk-Aplicación definitivo de Asterisk y por lo tanto, va siendo hora de ir conociendo este sistema.

    Si tienes más dudas sobre ARI y cómo programar aplicaciones en Asterisk 12, Asterisk 13 y posteriores, puedes empezar leyendo esto: https://wiki.asterisk.org/wiki/display/AST/Getting+Started+with+ARI

    Más información y ejemplos sobre PHPARI: http://www.phpari.org/

  • Cómo programar un AGI en PHP sin librerías raras

    Cómo programar un AGI en PHP sin librerías raras

    Muchas personas que están aprendiendo Asterisk y que ya conocen las posibilidades de esta aplicación, quieren empezar a desarrollar sus propias soluciones para que Asterisk pueda interactuar con bases de datos, archivos del sistema de ficheros y en función de algún valor, conseguir que Asterisk haga una llamada, reproduzca una locución, o mil cosas más.

    Esto se realiza gracias a un concepto en Asterisk llamado AGI (Asterisk Gateway Interface) y que viene a ser un programa desarrollado por nosotros (o por otro usuario) que Asterisk ejecuta (importante esto último) y que sirve para que interactúe Asterisk con el sistema Linux, pudiendo acceder a archivos locales, puertos físicos (usb, puertos series, paralelos, etc.), bases de datos, páginas webs, y prácticamente cualquier otra cosa que pueda manejar nuestro sistema Linux.

    No voy a entrar en la «profundidad» en la que se entra en el curso Asterisk Advanced, pero sí ofrecer un esqueleto básico de un AGI programado en PHP sin necesidad de librerías externas y utilizando una programación muy sencilla (ideal para empezar a familiarizarse con este tipo de sistemas de integración Asterisk-*) (más…)

  • VoicePHP: Programando la VoIP con PHP

    PHP? es un lenguaje de programación interpretado mayoritariamente utilizado para la creación de páginas webs dinámicas, también se puede utilizar para realizar scripts de consola e incluso con alguna librería como GTK o nCurses se puede llegar incluso a programar aplicaciones de escritorio, pero dispone de ciertas limitaciones con respecto a otros lenguajes como puede ser el acceso a dispositivos hardware útiles para la VoIP (micrófonos, altavoces, etc.)

    No obstante TringMe, una empresa que tiene como objetivo conectar la VoIP con la web, acaba de desarrollar VoicePHP, un paquete que dota a PHP de todo lo necesario para integrar PHP en un servidor de aplicaciones de voz y poder conectarlo con otras tecnologías.

    Realmente la función que realiza VoicePHP es similar a la conocida como VoiceXML únicamente que utilizando PHP en lugar de XML por lo que para aquellos que programan en PHP seguro que les ofrece un abanico bastante interesante para realizar proyectos donde este tipo de herramientas sea de uso obligatorio.

    Más información: http://voicephp.com/

  • Lo que el usuario de una distribución con Asterisk no vé

    A menudo recibo emails donde gente muy preparada y con muchos conocimientos sobre redes e informática buscan ayuda para solucionar algún problema que les ocurre cuando configuran su sistema Trixbox, Elastix, AsteriskNow, y no funciona como ellos esperaban.

    Es entonces cuando la gente que responde a estos emails le preguntan acerca de paquetes SIP, parámetros de configuración, o le sugieren determinados valores a ciertos parámetros que no han escuchado ni visto en su vida. Ocurre que tras estas respuestas el usuario se vé en la necesidad de tener que entrar a mano a una consola en modo texto y editar un archivo o ejecutar un comando, algo que, en el 80% de los usuarios que utilizan este tipo de distribuciones para montar su sistema de comunicaciones, no saben cómo se hace o directamente jamás lo han hecho.

    Los usuarios de distribuciones controladas por interfaces web suelen olvidar (o no quieren reconocer) que toda interfaz web es creada con un objetivo: simplificar la configuración y gestión de una aplicación (en este caso, de Asterisk), esta simplificación tiene un efecto muy negativo, impide realizar tareas que no han sido previamente preparadas por los creadores de dicho interfaz o incluso han sido desechadas por su complejidad y poco útil para un público general, se dice entonces que esa distribución está «a merced» de lo que permita hacer el interfaz web. En muchos casos he visto cómo gente con grandes conocimientos de redes, Asterisk y voip, han dicho que XXXXX no se puede hacer, simplemente porque el interfaz web no lo permite. Esto, además de no dejar en buen lugar a Asterisk, demuestra una falsa limitación que el comercial, conociendo las características de una aplicación tan versatil como es Asterisk, sí que anunció que era posible a su cliente.

    Alguna que otra vez me he encontrado con mensajes de usuarios con Trixbox o Elastix que no podían hacer transferencias, o que cuando intentaban llamar a una extensión esta no se encontraba disponible pese a haberse configurado corréctamente. La solución de estos problemas y otros miles, se podría solucionar de una forma muy sencilla mirando la configuración y comprobando que estos parámetros son correctos, o simplemente comprobando que el dialplan hace lo que se supone que debería hacer, pero para hacer un interfaz web que ayude a simplificar la configuración se requieren de macros, includes y variables extras que ayuden a convertir lo que el usuario quiere hacer a través de una web, a un código medianamente funcional y limitado a lo que se pueda hacer.

    Esa limitación no existe en un usuario final que únicamente quiere configurar 5 extensiones y 2 líneas analógicas que atiendan a una cola, pero en usuarios «avanzados» y «profesionales» esa limitación, no únicamente limita su trabajo, si no que le impide «controlar» el verdadero funcionamiento que está realizando su sistema Asterisk.

    Cuando un usuario se encuentra con algún problema, puede ser debido a un fallo de configuración –y de conocimiento– como colocar «inband» en lugar de «outofband» en alguna pestaña del interfaz web porque desconoce para qué sirve estos parámetros, pero el usuario avanzado, que sí sabe lo que significan, debe poder entrar en Asterisk y ver en la consola –que para eso está– qué es exáctamente lo que Asterisk está ejecutando, para poder encontrar el error, y el simple hecho de utilizar un interfaz web que, para simplificar la configuración, utilice macros, includes y variables, se hace inviable su lectura por la cantidad de código que escribe un FreePBX para hacer una simple llamada.

    En muchos casos, y después de comentar este problema con compañeros que trabajan con distribuciones de este tipo, suelen contestar que sus clientes necesitan de un interfaz web para poder añadir extensiones o cambiar el dialplan, es entonces cuando se llega al kit de la cuestión, –¿qué usuario final cambia su dialplan?- ¿es la responsabilidad de un usuario final poder cambiar un dialplan? ¿qué usuario final sabe para qué sirve cada valor de cada pestaña de cada campo necesario para añadir una extensión o crear una cola? Lo único que el usuario final sabe es que quiere añadir una extensión y no quiere prestar atención a los distintos parámetros que conlleva esta decisión, es por eso por lo que hay dos posibilidades:

    – Hacerle un interfaz web a medida que le permita entrar y añadir lo que el usuario avanzado quiera que añada. (para eso hay diferentes maneras: AJAM, AMI, PHP, etc…)

    – Que llame por teléfono y diga que quiere añadir una extensión, en cuyo caso será el usuario avanzado el que lo haga y sea responsable de estos cambios. (quizá no sea lo más agradable, pero el usuario final lo agradecerá y el usuario avanzado controlará que todo sigue funcionando corréctamente).

    IMHO.

    P.D.: Esto por supuesto es a nivel general, siempre hay excepciones.