Integración Avaya y Asterisk mediante un enlace E1 R2 modificado

agosto 17th, 2009 admin Posted in asterisk 1 Comment »

Para quien quiera enlazar un PBX Avaya y con una caja Asterisk mediante un enlace E1 MFC/R2 lo pueden hacer de una manera sencilla usando la última versión de la librería OpenR2. Hace unos días un cliente me pidió realizar las pruebas, y me sorprendió lo transparente que fue la integración, no hubo necesidad de modificar código fuente, o usar una variante especial de R2, simplemente instalé la última versión de OpenR2 (en este momento la openr2-1.2.0rc2), Asterisk 1.4.25.1 con su respectivo parche y listo!

Con el PBX de Avaya configurado para funcionar con un E1 de Telmex, y Asterisk para usar la variante de México, ya se podían lanzar llamadas hacia Avaya, y para recibir sólo hay que ajustar el parámetro de número máximo de dígitos ANI a esperar (max ani) a 4 (ya que Avaya sólo manda los 4 dígitos de la extensión que esta generando la llamada, no lo 10 que normalmente manda Telmex).

Espero que éste post les ayude.

AddThis Social Bookmark Button

Skype para Asterisk versión Beta

agosto 17th, 2009 admin Posted in asterisk 7 Comments »

Digium lanzó hace poco la versión beta del módulo para el canal de Skype para Asterisk chan_skype. La invitación a descarga de la versión beta sólo fue enviada a un grupo de usuarios previamente registrados, invitación que se realizó en el Astricon 2008, y por algunos problemas que tuvieron en el proceso de lanzamiento hasta después de casi un año tenemos acceso a una versión de prueba. Dicha versión sólo funcionará hasta el próximo 30 de Agosto.

Como bien conocen Skype es un cliente VoIP muy popular, con gran aceptación en el mundo de los cibernautas, donde las características principales son la gran calidad de voz, soporte para diferentes sistemas operativos, hardware,  y lo más importante, lo fácil que es conectarse a la red Skype en esquemas donde otros clientes VoIP tienen problemas, como firewalls, proxys, etc. Con la aparición del chan_skype podemos contar con estas bondades dentro de nuestras instalaciones de Asterisk, lanzar llamadas y recibir llamadas de la red Skype, usar los clientes de Skype como clientes propios, ¡ya no más problemas para abrir puertos SIP para usuarios móviles!

La instalación del canal es muy básica, muy parecida a la compra e instalación del codec G.729a que vende Digium,  se copia el módul en la carpeta de módulos de Asterisk y se registra la licencia con la aplicación register. Cuenta con su propio archivo de configuración cha_skype.conf con la sintaxis típica de Asterisk, donde se configura con qué usuario o usuarios de Skype se autenticará en la red, el contexto al que lanzará cada llamada entrante, y un pequeño ACL para restringir las llamadas entrantes de usuarios que no estan en nuestra lista de amigos.

El único problema que encontré en la instalación es que Skype (como empresa) no permite que éste módulo utilice usuarios registrados como la mayoría de la gente conoce, es decir, hay que usar el panel de control empresarial de Skype para crear los usuarios, y éstos ya podrán integrarse con Asterisk, lo bueno es que es gratuito el dar de alta usuarios en dicho panel, supongo que es para que Skype tenga mejor control sobre el uso que se le da para éste propósito.

Como sabrán, la versión final de chan_skype no será gratuita, cada llamada simultánea tendrá un costo, aún no definen el costo final, pero es una gran solución para integraciones empresariales profesionales, y a los integradores nos quita un gran dolor de cabeza.

Actualmente (hasta el 30 de Agosto) pueden llamar a las oficinas de Nucleum en la ciudad de México desde cualquier parte del mundo contactando al usuario nucleumskype en su cliente Skype.

AddThis Social Bookmark Button

Mejora la escritura a disco duro de grabaciones de Asterisk usando un ramdisk

julio 26th, 2009 admin Posted in asterisk 1 Comment »

Cuando tenemos alguna instalación de VoIP usando Asterisk donde demande grabar todas las conversaciones, y se cuenta con un gran número de llamadas simultáneas, como en un call center, o algo por el estilo, es muy importante usar algún método de escritura que no afecte TANTO el funcionamiento de disco duro.

Es muy común ver instalaciones, donde se utiliza la aplicación de Monitor() de Asterisk para grabar las llamadas de alguna oficina grande, y todo se realiza al mismo disco duro donde se encuentra instalado Linux, Asterisk y otras aplicaciones, esto compromete en gran el buen funcionamiento del disco duro. Imagínense que, además del uso cotidiano del disco duro, le demandemos que escriba 70 archivos de forma simultánea (70 agentes) durante 12 horas (horario común para call center) constantes cada día, definitivamente es una gran demanda física de escritura para el disco duro. A menos que se cuente con una solución “profesional” para realizar las grabaciones, donde en la mayoría de las instalaciones con Asterisk no es así, lo más recomendable es usar algún esquema alterno, como es el RAMDISK, donde la escritura directa de las grabaciones de Asterisk se haga en memoria RAM, ya que por su naturaleza, la velocidad de escritura es muy más rápido que hacerlo directo al disco duro, además que no se afectan partes móviles. Recuerden que la memoria RAM tiene esa ventaja, la escritura rápida.

A continuación les mostraré la forma de realizar la configuración de una RAMDISK en un servidor con CentOS/Redhat 5.x, así como la instalación de unos scripts que nos permitirán mover la información de la RAMDISK al dico duro:

  1. Establecer el tamaño de la RAMDISK a usar

La distribución de CentOS/Redhat ya tiene creadas por default 16 RAMDISK con tamaño fijo, esto lo podemos comprobar ejecutando el comando:

[root@pbx ~]# dmesg | grep RAMDISK
 
RAMDISK driver initialized: 16 RAM disks of 16384K size 4096 blocksize

La estrategia es tener el suficiente espacio en la RAMDISK para guardar aproximadamente 5 minutos de grabaciones, para después, con un script, mover cada 5 minutos las grabaciones al disco duro, de tal manera que le quitemos mucho trabajo al disco duro para la escritura. El tamaño de la RAMDISK depende mucho de la operación de cada solución Asterisk, por lo que deben hacer dichos cálculos. Para éste ejemplo usaremos una RAMDISK de 10 MB. La forma de establecer el tamaño es configurando el GRUB para que asigne el tamaño cada vez que inicie el servidor. Para realizar esto hay que abrir el archivo /etc/grub.conf y añadir al final de la línea del kernel que usamos por default el texto:

ramdisk_size=10000

El tamaño se establece en bloques de 1 KB, por lo que para decirle que necesitamos 10 MB debemos poner 10,000 KB. Recuerden reiniciar el servidor para ver el tamaño disponible.

  1. Formatear y montar la RAMDISK a nuestro sistema de archivos

Cada que se inicie el servidor debemos de formatear y montar nuestro RAMDISK a alguna carpeta de nuestro sistema de archivos. Para este ejemplo usamos la RAMDISK /dev/ram0 y la montamos en /var/spool/asterisk/grabaciones (por lo que debemos de apuntar nuestro plan de marcado en Asterisk para que escriba las grabaciones en dicha carpeta). Para poder realizar esto y facilitarles un poco el trabajo hemos creado un sencillo scirpt en bash para que se ejecute cada que el servidor inicia, por lo que sólo deben crear un archivo llamado ramdisk dentro de la carpeta /etc/init.d y ponerle el siguiente contenido:

#!/bin/bash
#
# $Id: ramdisk,v 1.00 Leon Ramos/Juan Carlos Huerta $
#
# Script para el control de RAMDISK
#
# chkconfig: 2345 89 61
# description: Script para el control de RAMDISKinitdir=/etc/init.d
 
initdir=/etc/init.d
 
test -e $DAEMON || exit 0
 
if [ -r $initdir/functions ]; then
        . $initdir/functions
fi
 
PATH=/sbin:/usr/sbin:/bin:/usr/bin
export PATH
MONTAJE=/var/spool/asterisk/grabaciones
DEVICE=/dev/ram0
prog=ramdisk
 
function start() {
        echo "Starting ramdisk: "
        echo -n $"Formateando ramdisk $DEVICE"
        mkfs.ext2 $DEVICE &> /dev/null
        RETVAL=$?
 
        if [ $RETVAL -eq 0 ] ; then
                success "formateado"
                echo -n $"Montando ramdisk en $MONTAJE"
                mount $DEVICE $MONTAJE &> /dev/null
                RETVAL=$?
                if [ $RETVAL -eq 0 ] ; then
                        success "$prog montada"
                else
                        failure "$prog no montada"
                fi
        else
                failure "$prog no formateada"
        fi
 
        echo
        return $RETVAL
}
 
function stop() {
        echo -n $"Stopping ramdisk: "
        CUENTA=0
        RETVAL=1
        while [ $CUENTA -lt 15 ] ; do
                lsof $DEVICE &> /dev/null
                LIBRE=$?
                if [ $LIBRE -eq 0 ] ; then
                        echo "Intentando $CUENTA de 15..."
                        CUENTA=`expr $CUENTA + 1`
                        sleep 3
                else
                        CUENTA=15
                        RETVAL=0
                fi
        done
 
        if [ $RETVAL -ne 0 ] ; then
                failure "ramdisk shutdown"
                echo "El dispositivo se encuentra ocupado"
        else
                umount $MONTAJE &> /dev/null
                success "ramdisk shutdown"
        fi
        echo
        return $RETVAL
 
}
 
function restart() {
        stop
        start
}
 
function status2() {
        df -h | grep 'ram' &> /dev/null
        RETVAL=$?
        if [ $RETVAL -eq 0 ] ; then
                echo "Filesystem            Size  Used Avail Use% Mounted on"
                df -h | grep 'ram'
        else
                echo "Aparentemente no hay un Ramdisk funcionando"
        fi
        return $RETVAL
}
 
RETVAL=0
 
case "$1" in
        start)
                start
                ;;
        stop)
                stop
                ;;
        status)
                status2
                ;;
        restart)
                restart
                ;;
        *)
                echo $"Usage: $0 {start|stop|status|restart}"
                exit 1;
                ;;
esac
 
exit $?

Ahora tenemos que crear la carpeta donde recidirán al final las grabaciones en nuestro disco duro, para este ejemplo usamos una carpeta llamada almacenGrabaciones:

]# mkdir /var/spool/asterisk/grabaciones

Y finalmente hacemos que nuestro script sea ejecutable cada que arranquemos el servidor:

]# chkconfig ramdisk on
  1. Script de monitoreo de RAMDISK para mover archivos a disco duro

Para éste ejemplo pondremos nuestro script en la carpeta /opt y lo nombraremos ramdisk-watcher.sh:

#!/bin/sh
#
# RAMDISK Watcher
#
# Revisa el contenido del RAMDISK y lo pasa a disco duro
#
# Fecha de creacion: 2009-06-29
# Autores: Leon Ramos y Juan Carlos Huerta
 
## Variables
RMDIR="/var/spool/asterisk/grabaciones"
ALMACEN="/var/spool/asterisk/almacenGrabaciones"
 
for i in $(ls -1a $RMDIR | grep gsm | egrep -v '\-in\.gsm$' | egrep -v '\-out\.gsm$' ) ; do
        lsof $RMDIR/$i &> /dev/null
        valor=$?
        if [ $valor -ne 0 ] ; then
                mv $RMDIR/$i $ALMACEN
        fi
done

En éste caso estamos grabando en formato gsm, y lo que hace el script es mover cada uno de los archivos que ya se encuentren mezclados, con extensión gsm y que no estén abiertos por el sistema, de la carpeta donde tenemos montado nuestra RAMDISK a la carpeta final de nuestro disco duro.

Después hay que darle permiso de ejecución:

]# chmod o+x /opt/ramdisk-watcher.sh

Y posteriormente modificar nuestro crontab para que cada 5 minutos haga la revisión de nuestra RAMDISK:

]# vim /etc/crontab
*/5 * * * * root /opt/ramdisk-watcher.sh > /dev/null 2&>1

Y listo!, configurando nuestro plan de marcado para que deposite las grabaciones en nuestra RAMDISK le quitaremos mucho trabajo a nuestro disco duro y mejoraremos el performance. Es importante monitorear el espacio libre de nuestra RAMDISK al principio por si es necesario ajustar el tamaño.

AddThis Social Bookmark Button

Soporte oficial a MFC/R2 por parte de Asterisk!

marzo 16th, 2009 admin Posted in asterisk No Comments »

Russell Bryant, Ing. de Software de Digium, acaba de anunciar la inlcusión oficial libopenr2 para Asterisk 1.6.2, lo que significa soporte oficial en los próximas liberaciones de Asterisk para la señalización MFC/R2, que es usado ampliamente en toda Latino América.

AddThis Social Bookmark Button

Guía de instalación OpenR2 en español

febrero 2nd, 2009 admin Posted in asterisk 2 Comments »

Ya se encuentra disponible la versión en español de la guía OpenR2 creada por Moy, donde se cubren la mayoría de los puntos necesarios para poder compilar, parchar, instalar una solución completa de Asterisk con soporte MFC/R2 con OpenR2. La pueden descargar dando clic aquí.

AddThis Social Bookmark Button

Problemas de funcionalidad con Grandstream GXW410x! actualicen firmware!

enero 18th, 2009 admin Posted in asterisk 5 Comments »

Los adaptadores Grandstream GXW410x son una opción económica de conseguir puertos FXO para instalaciones con Asterisk, pero hemos detectado que tienen problemas con versiones de Firmware anteriores a 1.0.1.8, además que tienen un relajo con la distribución de nuevos equipos, ya que de los que hemos comprado hemos detectado de todas las versiones. La actualización es muy fácil, sólo descarguen el firmware de esta liga (al momento de publicar la última versión es la 1.0.1.10):

http://www.grandstream.com/firmware.html

Después descompriman el .zip y coloquen los archivos en un servidor Web al que pueda acceder el equipo Grandstream, lo más fácil es ponerlo en el mismo servidor donde tienen Asterisk en la carpeta de Apache, después en la página de configuración del equipo seleccionen el menú de “Advance Settings”, en el campo de Firmware Server pongan la ip del servidor y carpeta donde pusieron los archivos descargado, seleccionen que el método sea por HTTP y no olviden seleccionar en el siguiente radio button que busque nuevo Firmware la próxima vez que reinicie el servidor. Guarden los cambios y reinicien el equipo.

Una vez que reinicia va a buscar en dicho servidor actualización del Firmware, se tarda unos 4 minutos, no desesperen, van a ver que blinkean todos los leds en diferentes ocasiones, podrán saber que ya terminó cuando vean que se queda quiero por un buen rato.

Como los equipos no tienen ningún indicador que digan “Descargando Firmware” entonces lo que pueden hacer para corroborar que lo esta haciendo correctamente es dar una revisada a los archivos de log de su servidor web (en el caso de Apache el archivo acces_log) y ahí verán si hay peticiones del GXW a su servidor Web. Espero les ayude.

AddThis Social Bookmark Button