Curso a distancia: Implementacion de callcenter con Vicidial en modo Cluster

vicidialLuego de brindar el curso en modo presencial en algunos países y debido a la petición de personas que pedían un versión Online, me animé a brindar la versión del curso a distancia.

Objetivo del curso

Tiene como objetivo capacitar al curso el participante en implementar, configurar y poner en producción una Plataforma de CallCenter basada en la distribución de Software Libre Vicidial®

El participante logrará crear campañas de Entrada, Salida (Inbound/Outbound) , simultanea conocida como Blended, bajo modalidad predictiva y progresiva, así mismo podrá generar reportes de productividad y de campañas.

Así mismo el participante estará en la capacidad de implementar múltiples servidores Vicidial® de manera distribuida es decir un Servidor de base de datos (MYSQL),  un servidor Web(APACHE) , Servidor de Telefonía (ASTERISK) y Servidor de Archivos (FTP), operando todos conjuntamente como una sola plataforma.

vicidialcluster

Fechas y programación del curso
El curso tiene una duración de 24 horas, las cuales están divididas en 6 sesiones de 4 horas.

Inicio : 11 Abril hasta 09 Mayo 2015
Horario : Sábados de 16:00 a 20:00 (UTC -05:00)
Fechas : 11,18,25 Abril , 2 y 9 de Mayo 2015

Inscripciones hasta el 03 de abril

Más Información
Email : training@silcom.com.pe
Web : http://www.silcom.com.pe/capacitacion-curso_vicidial-cluster.html

Saludos
Juan Oliva
@jroliva

Troncalización de Elastix MT y A2BILLING mediante SIP

ElastixMT

Luego del primer post sobre ELastix 3  Elastix 3 Multi Tenant – Configuración 1 (Extensiones y trunks) por cierto redefinido con el nombre Elastix MT donde mostraba la troncalización SIP funcional, me llegaron muchas consultas, por que al parecer no conseguían realizar el trunk , a continuación veremos como hacer un trunk entre una cuenta (customer) de A2BILLING y Elastix MT para poder sacar llamadas usando este servidor A2BILLING, como se ilustra en el gráfico a continuación.

ElastixMT

No voy a explicar, como es el proceso de instalación o creación de cuentas en A2BILLING,  se asume que ya tienen todo esa parte lista, sin embargo si necesitan alguna referencia, hace poco mi amigo e instructor de Elastix,  Ludwig Ramirez realizó un Webinar llamado “interactuando con A2billing” es muy buen punto de partida.

Ahora vamos al manual:

1.- Configuración del customer en A2BILLING
Digamos que tenemos este customer creado en nuestro a2b

Usuario : 7973430
Contraseña : 915215kd7amaqhkvbts0

ElastixMTelastix3
2.- Creación del trunk en Elastix MT

Ingresar a PBX / PBX / Trunks y hacer clic en “Create New Trunk”

Pestaña General

Descriptive Name : 7973430
Outbound Caller ID : 7973430
Organization: * : Especificar la organización creada previamente.

elastix3

Pestaña Peer Settings

Name: * : 7973430
secret:  ladefinida
host: 192.168.1.42
username: 7973430

elastix3

Pestaña Registration

Register String:  : 7973430:915215kd7amaqhkvbts0@192.168.1.42/7973430

elastix3

Una vez creada la troncal se mostrará de esta forma :

elastix3

3.- Configurar ruta saliente
Ingresar a PBX / PBX / Outbound Routes y editamos la ruta creada (9 + numero)

elastixmt

Luego vamos a la pestaña “Tunk Secuence” y le indicamos que use la troncal creada previamente, como se muestra a continuación :
elastixmt
4.- Servidor A2BILLING

Mientras tanto en el servidor a2b veremos el registro

elastixmt

elastixmt

5.- Llamadas salientes

Cuanto intentamos sacar llamadas en Elastix MT desde el CLI de Asterisk , podemos observar que tenemos el mensaje “todas las lineas están ocupadas”

ElastixMT

EL PROBLEMA!!

En el servidor A2BILLING tenemos el siguiente mensaje de error también.

ElastixMT
“chan_sip.c:23173 handle_request_invite: Failed to authenticate device <sip:101@192.168.1.40:5080>;tag=as5f10d355″

Si no ponemos a googlear existen algo de dos mil entradas referentes al problema….

ElastixMT

Y ahora que hacemos !! traigan a los Avengers !!

LA SOLUCIÓN !!

Nada de eso… toca hacer debug a bajo nivel y recordar las clases de SIP del gran  Olle Johansson

Después de revisar las tramas en Wireshark, me di cuenta de que el tema pasa por la manera como negocia el invite y el puerto, la parte de ElastixMT hacia A2B y viceversa.

http://www.voip-info.org/wiki/view/Asterisk+sip+insecure

Así que le agregué al customer “7973430” los parámetros SIP:

insecure=port,invite

ElastixMT

Luego reiniciar hacer un “sip reload” en el CLI

Nuevamente intentamos hacer llamadas y ahora si lo realiza correctamente:

Elastix MT

ElastixMT

A2Billing

ElastixMT
Luego de realizar esta integración,  se puede afirmar que ElastixMT puede troncalizar con cualquier plataforma, gateway  e inclusive Softwich que converse el estandar SIP.

Espero les sirva

Juan Oliva
@jroliva

 

 

 

 

Elastix con Incrond , monitoreando cambios en los archivos de configuración.

Selection_999(415)Es sábado en la noche , he terminado de dictar la penúltima clase de Ethical Hacing en Huancayo , una de las ciudades mas importantes de la sierra central del Perú, me queda una hora antes de que salga el bus hacia Lima, así que vamos a aprovechar el tiempo con este post.

Hace unos meses una empresa que usa Elastix como su sistema principal de telefonía me pidió una forma de detectar automáticamente, en caso de que archivos como extensions_curstom.conf o sip_general.conf , fueran modificados o siquiera fueran fueran abiertos de alguna forma  y además que les enviara alertas al correo en caso de recibir esos eventos.

Pues alguna forma tendría que a ver, para hacer ello :D , me puse a buscar en la red, y esto es lo maravilloso del todo lo que está al rededor del Open Source y Linux, que puedes encontrar una programa que te sirva como base y luego moldearlo hacia el objetivo que necesites.

Es así que encontré INCROND , es un servicio que lo que hace es justamente, es monitorear los eventos que suceden en el sistema de archivos de Linux, es decir notifica sobre los cambios que pueden suceder en dentro de una carpeta o un archivo en especifico.

Con esto ya tenemos el servicio que en esencia hace lo que buscaba, a continuación vamos a ver como lo configuramos, y nos apoyamos en otros elementos, para cumplir el requerimiento solicitado.

1.- Instalar servicio
Instalar el servicio desde los repositorios

#yum install incron
#service incrond start

2.- Configurar servicio
Luego de instalarlo , la carpeta de configuracion es “/etc/incron.d/”  vamos a crear una archivo llamado “monitor_archivos_elastix” para configurarlo de la siguiente forma.

#vim /etc/incron.d/monitor_archivos_elastix

# contenido del archivo /etc/incron.d/monitor_elastix
# <directorio> <cambio a monitorear> <comando que se debe ejecutar> <parámetros del comando>
/etc/asterisk IN_MODIFY /root/incrond/incrond_email.sh $@ $# $%

Lo que hace el archivo lo siguiente :
/etc/asterisk  : Carpeta a monitorear
IN_MODIFY   : Evento que deseamos monitorear en este caso modificación.
/root/incrond/incrond_email.sh  : Script al cual vamos a enviar los parámetros que se disparan al activarse el evento
$@ : path del fichero o directorio.
$# : Nombre del fichero o directorio, sin el path.
$% : nombre del evento que se disparó

3.- Preparar programa de alertas
Ahora vamos a crear el archivo “incrond_email.sh” el cual va recibir los parametros definidos en el archivo de configuración  “monitor_elastix”

3.1.- Crear la carpeta y los archivos
#mkdir /root/incrond
#touch /root/incrond/incrond_email.sh
#touch /root/incrond/incrond_email.txt

3.2.- Crear el script incrond_email.sh

#vim /root/incrond/incrond_email.sh

#!/bin/bash
/bin/echo “ALERTA DE MONITOR DE ARCHIVOS / Se ha producido cambios en los archivos del servidor ELASTIX , los detalles son : Ruta archivo modificado: $1 Nombre archivo modificado: $2 Evento/Accion: $3 \n” > /root/incrond/incrond_email.txt
/bin/mail -s ALERTA-MODIFICACION-ARCHIVOS-ELASTIX jroliva@gmail.com</root/incrond/incrond_email.txt

4.- Desarrollando las pruebas
Ahora vamos a crear un archivo dentro de la carpeta “/etc/asterisk” que generará el evento.

– Creamos el archivo
#touch /etc/asterisk/prueba1.txt

– Luego incrond le envia los parametros al archivo “incrond_email.sh” y este genera el email , la salida la pueden ver en :
#tail -f /var/log/maillog

5.- Agregando Funciones horarias
Digamos que queremos que la monitorizacion solo lo haga a partir de las 18 horas , ya que en horario de oficina hacemos cambios regulares en el servidor.

5.1.- Programa para verificar horario

#vi /root/incrond/incrond_funcionhoraria.sh

#!/bin/bash
HORA=$(date +%H)
echo $HORA

if [ $HORA > 18 ]; then
/sbin/service incrond start
else
/sbin/service incrond stop
fi

5.2.- Automatizando en el Crontab

#chmod a+x  /root/incrond/incrond_funcionhoraria.sh
#crontab -e

*/60 *     * * *     /root/incrond/incrond_funcionhoraria.sh

Cualquier cambio o aporte serán bienvenidos
Espero les sirva
Juan Oliva
@jroliva

Instalación Elastix en Rasperry PI

uelastix

Para los que no lo saben, existe una distribución de Elastix especifica para dispositivos Rasperry  y se llama “uelastix” http://uelastix.com  , ahora veremos como instalarlo.

uelastix

1.- Descargar Uelastix.

Primero necesitamos descargar el tar.gz para Rasperry de la pagina de Uelastix : http://uelastix.com/

Luego descomprimir el archivo creará una carpeta “elastix-arm-2014-01-30″ con los archivos necesarios para la instalación de la siguiente forma :

uelastix

2.-  Iniciando el particionado

Necesitamos una memoria SD al menos de 4GB ..  en esta instalación yo uso una de 8GB.

primera partición deberá ser de tipo FAT y de tamaño al menos 256  MB.
La segunda partición deberá ser de tipo EXT3 de al menos 1.6 GB.
La tercera partición puede ocupar el resto del espacio per debe ser de al menos 1 GB.

#fdisk -l

uleastix

Comenzando el particionado

uelastix

Una vez finalizado el particionado debería debería quedar de esta forma.

uleastix

Creamos los sistemas de archivos que son obligatorios para cada partición.

#mkfs.vfat -n ‘/BOOT’ /dev/mmcblk0p1
#mkfs.ext3 -L ‘/usr’ /dev/mmcblk0p2
#mkfs.ext3 -L ‘/’ /dev/mmcblk0p3

3.- Copiando los archivos

Ahora copiamos los archivos para cada partición montada.

#mount /dev/mmcblk0p1 /mnt/
#tar -C /mnt/ -xzf BOOT.tar.gz
#umount /dev/mmcblk0p1
#mount /dev/mmcblk0p2 /mnt/
#tar -C /mnt/ -xzf usr.tar.gz
#umount /dev/mmcblk0p2
#mount /dev/mmcblk0p3 /mnt/
#tar -C /mnt/ -xzf root.tar.gz
#umount /dev/mmcblk0p3

4.- Probando Uelastix

Una vez que esté desmontado ingresar la tarjeta SD al Rasperry  , la IP por defecto es 192.168.1.251 el usuario “admin” y la contraseña “palosanto”

uelastix

Referencias :

– El archivo README.es que viene a la hora de descomprimir.
Probando uElastix (1era Parte)

Espero les sirva
Juan Oliva
@jroliva

 

 

 

GHOST , Vulnerabilidad fantasma en glibc Linux

ghost

Hace unos días,  fue anunciada una nueva vulnerabilidad que afecta a sistemas Linux, la cual se ha detectado en la biblioteca glibc Linux y nombrado esta vulnerabilidad como “FANTASMA”  o “GHOST”

La libreria GNU C Library (glibc) es una implementación de la biblioteca estándar de C y una parte central del sistema operativo Linux,

La vulnerabilidad ha sido etiquetada con el código CVE-2015-0235  .la cual fue descubierta  por  investigadores de seguridad de la empresa Qualys .

GHOST es un error de tipo  ‘buffer overflow’ que afecta un par de funciones llamadas gethostbyname () y gethostbyname2 () residentes en la biblioteca glibc.

Esta vulnerabilidad permite a un atacante remoto que es capaz de hacer una llamada de solicitud de cualquiera de estas funciones para ejecutar código arbitrario con los permisos del usuario que ejecuta la aplicación.

A la fecha, existen dos exploit P.O.C. en concreto para explotar la vulnerabilidad, uno es para EXIM y otro para WordPress, pero no se descarta que mas adelante se desarrollen para otros programas o servicios.

Por lo tanto, es mas que recomendable actualizar los sistemas, a continuación veremos si somos vulnerables en un sistema Centos 5.X,  mediante el uso de un script desarrollado por la gente de Redhat , que valida la versión de de GLIBC  instalada.

El script se puede descargar desde aqui

1. Copiar el script en el sistema Linux a evaluar con el nombre ghost.sh

Ghost

2.-Brindarle permisos de ejecución

#chmod +x ghost.sh

3.- Ejecutar y probar si es vulnerable.

ghost

4.- Parchando
Para corregir y parchar el sistema, es necesario ejecutar el comando :

#yum update glibc

ghost

5.- Verificar el parche

ghost

Aquí los enlaces informativos de las distribuciones afectadas:

RedHat: https://rhn.redhat.com/errata/RHSA-2015-0090.html

Ubuntu: https://launchpad.net/ubuntu/+source/eglibc

Debian: https://security-tracker.debian.org/tracker/CVE-2015-0235

Oracle Enterprise Linux: https://oss.oracle.com/pipermail/el-errata/2015-January/004810.html CentOS: http://lists.centos.org/pipermail/centos-announce/2015-January/020906.html

OpenSUSE: http://lists.opensuse.org/opensuse-updates/2015-01/msg00085.html GNU C Library: http://www.gnu.org/software/libc/

Espero les sirva
Saludos
Juan Oliva
@jroliva

 

 

 

 

 

Elastix Developer addon – Desarrollo de formulario para ingreso de datos en Mysql

Elastixdeveloper

Como sabrán durante el 2014 se vinieron organizando los llamados “Elastixwebinarwednesdays”  , los cuales eran charlas sobre algún tema en particular del ecosistema de Elastix, de todos los realizados hubieron 3 que me llamaron mucho la atención:

Construyendo un Addon Elastix: Avanzado – Juan Pablo Romero
Construyendo un Addon Elastix Elementos Básicos  – Juan Pablo Romero
Pasos esenciales para generar el RPM de tu Elastix Addon – Luis Abarca

Desde hace tiempo, que quería organizar mi tiempo para poder entender adecuadamente el proceso de creación de un addon en Elastix, por un lado mi alma de programador me lo pedía, y por otro lado el que poder incorporar aplicaciones dentro del esquema de Elastix , brinda una gama muy interesante de posibilidades, por ejemplo agregar un reporte tipo grid de los formularios para el modulo de callcenter, solo por citar un ejemplo.

Así que me puse a revisar los vídeos y puse manos a las obra, para el siguiente ejemplo voy a tomar como base y referencia, el vídeo y material que Juan Pablo Romero tuvo la gentileza de subir a la red los ejemplos (aquí lo pueden ver ) que desarrollo en el webinar “Construyendo un Addon Elastix Elementos Básicos”  así que les recomiendo primero darse el tiempo de verlo para poder no solo desarrollar el addon, si no también entender conceptos como MVC , Smarty y la estructura de archivos y funcionamiento del Developer.

Vamos a crear un módulo llamado “producto_ingreso” que tenga 3 campos de entrada (codigo,nombre,descripcion) la cual permita guardar la información en la base de datos Mysql local del servidor.

1.- Setup de la base de datos

Descargar el archivo “webinar.sql” desde aquí y cargar la información a la base de datos de la siguiente forma:

#mysql -u root -p 123456 < webinar.sql

2.- Creación del módulo desde el Developer

Ingresar al Build Module y configurarlo de la siguiente forma :

Module Name: producto_ingreso
Your Name : tu nombre
Your e-mail : tu email
Module Level : Level 3
Leve 1 Parent Exist : No
Level 1 Parent Name : Sistema
Level 2 Parent Name : mantenimiento
Module Type: Form
Field Name : codigo,nombre,descripcion
Type Filed: Type Text

Una vez configurado hacer clic en el botón “Save”

Elastix_Developer

Cuando el Developer crea el modulo se verá de la siguiente forma.

Elastix_Developer

El Developer internamente habrá creado las siguiente carpetas :

Elastix_Developer

3.- Modificar la conexión a la base de datos

Ingresar al archivo “default.conf.php” ubicado en la carpeta “/var/www/html/modules/producto_ingreso/configs”

Cambiar:

$arrConfModule[‘dsn_conn_database’] = ”;

Por :

$arrConfModule[‘dsn_conn_database’] = “mysql://webinar:webinar@localhost/webinar”;

4.- Crear el archivo que corresponde al idioma español

– Desde la consola, crear el archivo es.lang en la carpeta lang del modulo de la siguiente forma:

#touch /var/www/html/modules/producto_ingreso/lang/es.lang

– Copiar el contenido desde la siguiente url https://github.com/jprb79/webinar_addons/blob/master/modules/producto_lista/lang/es.lang y copiarlo al archivo es.lang previamente creado.

Elastix_developer

5.- Modificar el archivo “paloSantoproducto_ingreso.class.php” ubicado en /var/www/html/modules/producto_ingreso/libs/ el cual que corresponde a la  clase del módulo

– Desactivar/comentar las funciones “getproducto_ingreso” y “getproducto_ingresoById” de la siguiente forma:

Elastix_Developer

– Luego agregar la función “saveNew” de la siguiente forma:

Elasltix_Developer

6.- Modificar el controlador “index.php” ubicado en la ubicación “/var/www/html/modules/producto_ingreso/”

– Linea 61 aproximadamente, Modificar la cadena de conexión

$pDB = “”;

por

$pDB = new paloDB($arrConf[‘dsn_conn_database’]);
– Linea 139 aproximadamente, identificar la función “saveNewproducto_ingreso” luego de la condicional “else”

Elastix_Developer
Cambiar/agregar la condicional de la siguiente forma:

Elastix_Developer
– Linea 160 aproximadamente, en la función “createFieldForm” cambiar la siguientes lineas

“codigo”   => array(      “LABEL”                  => _tr(“codigo”),

Por:

“codigo”   => array(      “LABEL”                  => _tr(“Product code”),

“nombre”   => array(      “LABEL”                  => _tr(“nombre”),

Por:

“nombre”   => array(      “LABEL”                  => _tr(“Name”),

“descripcion”   => array(      “LABEL”                  => _tr(“descripcion”),

Por:

“descripcion”   => array(      “LABEL”                  => _tr(“Description”),

 

La cual quedará de la siguiente forma:

Elastix_Developer

– Linea 202 aproximadamente, luego de la función “getAction” agregar la nueva función “_pre” como se muestra a continuación:

Elastix_Developer

7.- Pruebas al módulo

Una vez que hemos culminado con la programación del modulo, ingresamos ingresamos información y hacemos clic en el boton “Save”

Elastix_Developer

Si todo esta correcto , nos mostrará un mensaje que indica que el producto se ha guardado correctamente, como se muestra a continuación :

Elastix_Developer

Para poder validar que los datos están correctamente grabados en la base de datos, podemos realizar la consulta directa como se muestra a continuación.

Elastix_Developer

En caso de tener errores, o que no funcione el modulo, el archivo a consultar es :

/var/log/httpd/ssl_error_log

En el próximo post desarrollaremos el módulo para listar los registros ingresados.

Saludos
Juan Oliva
@jroliva

 

Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

Únete a otros 110 seguidores