Hace un par de meses instalé un conmutador de Voz sobre IP a un cliente el cuál realiza en promedio cerca de 150 llamadas diarias, por lo que me solicitó que en el conmutador se grabaran las llamadas que recibiera e hiciera, esto quedo funcionando bien, el detalle que en ese tiempo se me pasó agregar un parámetro para que después de finalizada la grabación copiara el archivo de la llamada grabada a una carpeta con la fecha actual de la grabación, esto para ir organizando las llamadas, pero como esto no se hizo 40 días después obviamente tenía miles de llamadas grabadas por lo que revisar una por una fue complicado.
Por lo que se me ocurrió rápidamente hacer un script en PHP que listara la información por fecha y en base a la fecha del archivo crear una carpeta si es que este directorio no existiera y mover ahí el archivo grabado.
En el código solo modificar el directorio de búsqueda y el directorio dónde se crearán las carpetas y moverán los archivos, obviamente este script puede funcionar para cualquier tipo de archivo pero aquí lo hice para que busque archivos wav, cree un directorio de la fecha del archivo si esta no existe y mover ahí el archivo, y asi consecutivamente con todos los archivos.
Espero este script pueda serle de utilidad a alguien más y cualquier comentario hacérmelo llegar..
Hace un rato revisando mi listado de llamadas perdidas desde el CDR de FreePBX quise regresar algunas llamadas, ya que los números eran de algunos amigos, por lo que comencé a marcar desde mi extensión sus números, pero algo que se me hizo poco ilógico es ¿ Cómo marcar a la antigüita si ya tengo un sistema Asterisk ?, lo primero que pensé fué un sistema Click2Dial, imaginé que primero tendría que programar algo adicional al CDR, pero imaginé que a lo mejor ya habría un plugin en Firefox que ya resolviera este detalle, por lo que me metí al sitio de Addons de Firefox a buscar un plugin y pude encontrar Asterisk Click2Dial.
Asterisk Click2Dial
Solo basta agregar el plugin como extensión de firefox, reiniciar firefox y configurar los parámetros de Asterisk Click2Dial.
En este caso preferí usar el modo AMI para hacer las llamadas, por lo que tuve que introducir el host del servidor de Asterisk, Puerto, Login, Password, Contexto y a que extensión mandaría el número marcado.
Los primeros parámetros los podemos configurar en el archivo de /etc/asterisk/manager.conf.
Ahora solo seleccionar cualquier número y presionar el botón derecho para luego elegir llamar al número seleccionado.
Hemos dividido nuestro curso de Telefonía de Voz sobre IP basada en la plataforma Asterisk PBX en 2 cursos, básico-principiantes e intermedio-avanzado, los cursos están diseñados para que el asistente con el curso de principiantes conozca desde los aspectos básicos de telefonía hasta los conocimientos principales para poder integrar un conmutador de voz sobre IP y ponerlo en producción, dónde podrá integrar un conmutador mediante tarjetas de telefonía Sangoma, Digium así como configurar opciones como son IVRs, Grupos de Marcación, Extensiones, Rutas de llamadas entrantes, salientes, bloqueo de llamadas, correos de Voz, etc .
El curso intermedio avazando se enfoca en cuestiones avanzadas de la telefonía de Voz sobre IP como son integración de Asterisk con CRM, desarrollo de aplicaciones, integración de bases de datos, texto a voz y reconocimiento de voz, videoconferencia, domótica y casas inteligentes entre, monitoreo entre otros temas avanzados que le darán al usuario mayores conocimientos en la integración de soluciones de Voz sobre IP más allá de un conmutador IP.
Para información del Temario, Fechas y Costos puede obtenerse mayor información en el siguiente PDF
Hace unos días instalé Asterisk sobre la nueva versión de servidor de Ubuntu, el detalle con esta versión es que ya trae PHP 5.3 por lo que me salió un problema al instalar mis agis, el error que me salía era el siguiente:
PHP Parse error: syntax error, unexpected T_GOTO, expecting T_STRING in/var/lib/asterisk/agi-bin/phpagi/phpagi.php on line 1184<br>
Esto ya que en el código de phpagi se creó una función llamada goto, función que no existía antes en PHP, pero que desde la versión 5.3 ya existe
T_GOTO goto (available since PHP 5.3.0)<br>
Por lo que había un conflicto con los tipos de parámetros, para esto solo basto editar el código y renombrar la función goto a goto2
function goto($context,$extension='s',$priority=1)
El Software enfocado para empresas tales como los ERP (Enterprise Resource Planning) y los CRM (Customer Relationship Management) tienden a ser únicos. Esto debido a que cada empresa los utiliza de diversa manera, por lo que cada Software ERP y CRM deben ser personalizados de acuerdo a las necesidades de cada organización. Tradicionalmente esto implica desarrollar un Sistema ERP o CRM a la medica para los requerimientos específicos de una organización o la otra opción, comprar un Sistema ERP o CRM existente y personalizarlo.
Ambas opciones tienen significantes detalles.
Software hecho en casa
Un desarrollo hecho en casa generalmente tiende a iniciar desde cero, partiendo de la filosofía de "Nosotros sabemos que necesitamos, asi que hagámoslo", "Hacerlo" en desarrollo de software podría resultar caro y riesgoso, y la mayoría de los proyectos de software hechos en casa últimamente fallan en el conocimiento de las necesidades del usuario.
Pero el más grande riesgo actualmente es "saber lo que tu necesitas", incluso si el desarrollo conoce las necesidades al tiempo que este es desarrollado, ya que quizá un software hecho en casa pueda no seguir las mejores prácticas de la industria o no anticipar los planes a largo plazo de la organización.
Tanto la tecnología y los negocios necesitan cambios, asi que la organización tristetemente tendrá que mantener los cambios del software y cubrir los costos que implica. Estudios muestran que los costos de mantenimiento a largo plazo de un software propio incluso son tres o cuatro veces más del costo original del software.
Software Comercial
Comprar un ERP o CRM Comercial de algún proveedor presenta un conjunto de detalles diferentes. Al principio esta opción aparentemente debería eliminar los riesgos de un software hecho a la medida, pues de inicio obtiene las mejores prácticas de la industria y lo más último en tecnología, hace un lado los costos del desarrollo inicial el software a traves de los distribuidores y hace al distribuidor responsable por el mantenimiento a largo plazao del software.
Aunque en realidad un ERP o CRM comercial podría ser más caro y difícil de personalizar, aparte que podría dejar al usuario vulnerable a depender de un solo proveedor.
El software comercial requiere de un licenciamiento, incluso antes de que la organización sepa si realmente el software cumple con sus necesidades.
El software comercial está basado en la visión del proveedor de lo que podría ser una compañía "ideal", si esa visión se desvía de la realidad del usuario, entonces ahí tenemos una limitacion para cambiar el software esto porque no se tiene acceso al código fuente del software.
Finalmente, si el proveedor es comprado por otra compañía, se sale del negocio o simplemente descontinúa el producto, entonces el usuario se quedará sin algún tipo de soporte para sus aplicaciones.
La alternativa Open Source Code (Software de Código Fuente Abierto)
El Código Abierto brinda una alternativa la cuál direcciona muchos de los problemas clave tanto del software comercial como de software hecho a la medida. De inicio el Open Source ofrece al usuario un código base disponible libremente como punto de inicio. El usuario puede obtenerlo gratis y libremente para probarlo, y saber si cumple con sus requerimientos, sin correr el riesgo de pagar el costo de licenciamiento de un software que podría no funcionarle.
Si ninguna modificación es requerida, el software de código abierto puede ser implementado rápidamente tal como los software comerciales empaquetados.
Si es requerida la adecuación del software, el usuario ya tiene un avance significativo con un existente código base desarrollado, por lo tanto las empresas pueden continuar con la personalización del software a traves de su propio personal o hacer uso de la experiencia de la comunidad de desarrolladores.
La ventaja de un proyecto código abierto es que trae el conocimiento de los requerimientos del negocio debido a la contribución de muchas organizaciones, reduciendo significativamente los típicos riesgos de un software hecho a la medida.
La comunidad de código abierto también ofrece múltiples usuarios y desarrolladores que colaboran en el desarrollaro y pruebas de su software.
El resultado neto es, mejor software en menos tiempo.
A largo plazo el software de código abierto ofrece al usuario el control de un software personalizado y también de recursos externos que solo están disponibles en software comerciales.
Con el código fuente en la mano, el usuario puede decidir sobre un soporte y actualización futura.
Aquí nadie descontinuará el software, ya que el software comparte las mismas raíces del software libre, por lo que las organizaciones pueden obtener soporte y actualizaciones de la comunidad open source o adquirir soporte profesional de múltiples distribuidores en la comunidad.
Asi que el riesgo de llegar a ser abandonado debido a la perdida del distribuidor o de un empleado llave son reducidos significativamente con el código abierto.
Con la salida del Wii y luego con el WiiMote salieron múltiples hacks para el wiimote, uno de los más comunes es el usar tu wiimote cómo un mouse ya sea en Linux ó Windows, de hecho hace un par de años adquirí un wiimote solo para probar su funcionamiento, incluso en el ENLi recuerdo que la presentación que hice sobre Asterisk usé el wiimote para controlar las diapositivas.
Recuerdo también que por hay salió otra aplicación en python con el cuál podías usar el WiiMote para controlar diversas aplicaciones como por ejemplo XMMS, VLC, OpenOffice Presentation, etc., esto era interesante ya que podías oir música y solo presionar botones para adelantar la canción, regresarla, ir a la siguiente canción, pausarla, etc.
Pero sin duda el Hack que se llevó las palmas fue el que desarrolló Johnny Chung Lee(No, no tiene algo que ver con la peleadora de Street Fighter o igual quien sabe habría que preguntarle ). Su hack permite usando el wiimote+usb bluetooth+lapiz infrarojo crear una pantalla táctil o whiteboard de bajo costo y rápida implementación.
¿Como funciona ?
El WiiMote tiene un sensor de movimiento el cuál si se mueve arriba, abajo o a los lados manda una posición XY vía bluetooth a la PC, esto e práctico para usarlo como mouse, pero también el wiimote tiene una pequeña camarita la cuál identifica luz infraroja, entonces lo que JCL desarrolló fué un hack que calibra y recibe del wiimote las coordenas XY de dónde detectó la luz infraroja, previamente el WiiMote tiene que calibrarse con el mismo software de JCL para poder crear las posiciones XY cuándo detecte la luz infraroja.
Por lo que este inteligente Hack permite fácilmente crear una pantalla touchscreen de bajo costo y la cuál se puede usar en aulas como pizarrón electrónico con un proyector o en un Monitor o LCD sin proyector.
Esto lo he querido hacer desde hace tiempo, pero aun no he encontrado un lapiz infrarojo en ML, creo que tendré que pedirlo en ebay.
Más abajo Johnny Chung Lee demuestra cómo funciona su interesante hack
Muchos hemos oído hablar de los Widgets, que en términos informáticos se refieren a los diversos controles que tiene un GUI como puede ser un botón, un slider o un display.
Entónces podemos definir que un Phidget es la representación física de un Widget (PHYsical wiDGET), lo que indica que esos controles los podemos tener físicamente.
¿ Cómo es esto ?
Por ejemplo podemos tener botones, sliders, pantallas, sensores de luz, temperatura, movimiento, motores, etc., ¡Hasta lectores de tags RFID! vaya, juguetitos electrónicos para acabar pronto, con lo cuál podemos crear y tener múltiples soluciones de tecnología.
¿Cómo funciona ?
Básicamente se requiere de una tarjeta la cuál tiene entrada para puertos analógicos y digitales, así como salida de puertos digitales.
Esta tarjeta se conecta a la PC vía puerto USB y mediante un API se puede programar aplicaciones para cualquiera de los phidgets conectados a la tarjeta.
¿Cuáles son los puertos de Entrada Analógicos ?
Básicamente los puertos dónde se conectan sensores de movimiento, temperatura, luminosidad, etc.,
¿Cuáles son los puertos de Entrada Digitales ?
Son aquellos dónde puedes recibir información de los Touch, Motion, Force/Pressure Phidgets.
¿Cuáles son los puertos de Salidas digitales ?
Estos pueden pantallas de LEDs, relevadores, etc.,
Lo interesante de los Phidgets es que con el API de Programación podemos desarrollar múltiples soluciones e integrarlos con diversas tecnologías como puede ser Asterisk o una aplicación entre otras cosas, esto ya que la empresa desarrolladora de este concepto tiene librerías de desarrollo para Linux, Windows incluso para MacOS X.
Buscando info en internet encontré que Vestec una empresa Californiana ha desarrollado un software de reconocimiento de voz compatible para Asterisk, asi como para sistemas Linux y Windows en general.
Lo interesante no es su software de Voice Recoignition, si no su costo de licencia, la cuál tiene un costo de $99.00 US Dlls por canal de voz el cuál es una licencia de por vida, aparte que tiene un kit de inicialización que cuesta solo $25.00 US Dlls, por lo que está muy muy asequible para comenzar hacer las primeras pruebas de Reconocimiento de Voz sobre IP y comenzar a desarrollar aplicaciones de telefonía avanzada.
Algo también que es de llamar la atención es el soporte para español, habrá que ir probándolo para sacar las conclusiones sobre su eficiencia.
Hace unos días un cliente me pidió poder visualizar los PINS que se configuraron para poder marcar a números móviles desde la extensión del conmutador de voz sobre IP que se le implementó.
Hint: Los PINS son claves o passwords únicos que se asignan a cada usuario, de tal forma que si se desea llevar un control de llamadas a números 044, 045 o larga distancia por ejemplo tiene que introducir su PIN asignado, de tal forma que ese PIN queda almacenado en los registros de llamadas y por medio del cuál se puede identificar que usuario hizo la llamada independientemente de que extensión haya llamado.
Cómo en este caso se le instaló FreePBX como administrador gráfico ya que asi se le facilitan las opciones de configuración, por lo que se modificó en primera instancia el archivo /var/www/cloudvoox/admin/cdr/call-log.php que es el script en PHP que genera los reportes de las llamadas realizadas, ahí solo se agregó la columna de ACCOUNTCODE de la tabla del CDR dónde quedan almacenados los PINS, pero en este caso la columna no reflejaba nada, por lo que checando la base de datos en el campo ACCOUNTCODE no se estaba guardando el PIN que se utilizaba cuándo se marcaba a un número móvil.
Revisando el código fuente en /usr/src/asterisk/asterisk-addons-1.4.10/cdr/cdr_addon_mysql.c todo estaba bien, pues Asterisk si tenía habilitada la opción de guardado del PIN en ACCOUNTCODE.
Por lo que me puse a revisar cómo estaba la configuración del plan de marcación que genera FreePBX, para esto chequé el archivo /etc/asterisk/extensions_additional.conf y encontré que en la macro de PINSETS, tenía lo siguiente:
[macro-pinsets]
include => macro-pinsets-custom
exten => s,1,GotoIf(${ARG2} = 1?cdr,1)
exten => s,n,ExecIf($["${DB(AMPUSER/${AMPUSER}/pinless)}"!= "NOPASSWD"],Authenticate,/etc/asterisk/pinset_${ARG1})
exten => s,n,ExecIf($["${DB(AMPUSER/${AMPUSER}/pinless)}"!= "NOPASSWD"],ResetCDR,)
exten => cdr,1,ExecIf($["${DB(AMPUSER/${AMPUSER}/pinless)}"!= "NOPASSWD"],Authenticate,/etc/asterisk/pinset_${ARG1},a)
exten => cdr,n,ExecIf($["${DB(AMPUSER/${AMPUSER}/pinless)}"!= "NOPASSWD"],ResetCDR,)
; end of [macro-pinsets]
Ahí pude ver que en esta parte le faltaba una ,'a' despues de {ARG1}
Por lo que lo obvio era solo modificar este archivo y ponerle la 'a' al final, pero este archivo se regenera cada vez que en FreePBX se aplican cambios, por lo que no tenía sentido hacer la modificación aquí ya que al momento de aplicar cambios borraría los cambios realizados manualmente.
Para esto busqué el código de FreePBX dónde generaba esta parte de las Macros de los Pinsets y el archivo es
Ahora solo bastaría en la configuración del ruteo de salida de FreePBX quitar el PIN a la ruta, aplicar los cambios, volver asignar el PIN y aplicar los cambios, con esto al momento de marcar a un número móvil, la ruta pediría el PIN y esté sería ya almacenado en el campo ACCOUNTCODE de la tabla CDR y asi poder ser reflejado en el reporte de llamadas de FreePBX
Comentarios Recientes