Almacenar los correos de voz en MySQL y ODBC en Asterisk 1.6

Actualizado 12 Septiembre 2009

Este articulo va a ser un poquito extenso. Veremos como almacenar los mensajes del correo de voz de Asterisk (Voicemail) en una base de datos MYSQl y como consultarlos, a través de ODBC, en Microsoft Excel y Microsoft Access. La misma cosa podemos hacer con el cdr (el registro de las llamadas). Las ventajas son muy evidentes como, por ejemplo, usar los datos para sacar cualquier tipo de estadística.

Para que esto funcione debemos haber instalado tres paquetes, además de MySQL, antes de la compilación de asterisk. Para averiguar si los módulos estén compilados y cargados en asterisk vamos a la consola:

asterisk -rvvvvvvvvvvvvv

CLI> module show like odbc
Module                         Description                              Use Count
res_config_odbc.so             Realtime ODBC configuration              0
res_odbc.so                    ODBC resource                            0
func_odbc.so                   ODBC lookups                             0
cdr_adaptive_odbc.so           Adaptive ODBC CDR backend                0
cdr_odbc.so                    ODBC CDR Backend                         0
5 modules loaded

Esto indica que tenemos los módulos en asterisk. Si no aparece algo parecido tenemos que seguir estos pasos:

  • parar Asterisk

/etc/init.d/asterisk stop

  • Instalar unixODBC y el conector MySQL para ODBC

yum install mysql-connector-odbc unixODBC unixODBC-devel

  • Instalar la libreria ltdl

yum install libtool-ltdl-devel libtool-ltdl

  • volver a instalar asterisk

cd /usr/src/asterisk-1.6.0.1

make distclean

./configure

make menuselect

  • asegurarnos de seleccionar la opción ODBC_STORAGE

  • salimos presionando la tecla X para guardar la configuracion

make

make install

make samples

  • volvemos a arrancar asterisk y averiguamos, a través de la consola, que aparezcan los módulos como mostrado más arriba

/etc/init.d/asterisk start

Ahora tenemos que crear la base de datos en MySQL donde vamos a crear una tabla para guardar los datos relacionados con los correos de voz. Primero damos un restart del servidor Mysql

/etc/init.d/mysqld restart

creamos la base de datos

mysqladmin -u root -p create voicemail

creamos la tabla voicemessages

mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 81
Server version: 5.0.45 Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> use voicemail
Database changed
mysql> CREATE TABLE `voicemessages` (
 `id` int(11) NOT NULL auto_increment,
 `msgnum` int(11) NOT NULL default '0',
 `dir` varchar(80) default '',
 `context` varchar(80) default '',
 `macrocontext` varchar(80) default '',
 `callerid` varchar(40) default '',
 `origtime` varchar(40) default '',
 `duration` varchar(20) default '',
 `mailboxuser` varchar(80) default '',
 `mailboxcontext` varchar(80) default '',
 `recording` longblob,
 PRIMARY KEY  (`id`),
 KEY `dir` (`dir`)
) ENGINE=InnoDB;

Query OK, 0 rows affected (0.13 sec)

Ahora creamos un nuevo usuario y le damos todos los privilegios para manejar la base de datos voicemail

mysql> GRANT ALL PRIVILEGES ON voicemail.* TO voice IDENTIFIED BY 'sesamo'

Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;

mysql> quit
Bye

Tenemos nuestra base de datos con su tabla y el usuario que tiene los privilegios para manejarla.

Ahora tenemos que crear dos archivos en la carpeta etc para conectar ODBC con MySQL

nano /etc/odbcinst.ini

y añadimos estas líneas

[MySQL]
Description     = ODBC for MySQL
Driver          = /usr/lib64/libmyodbc3.so
Setup           = /usr/lib64/libodbcmyS.so
FileUsage       = 1

En mi caso los dos archivos están en la carpeta /usr/lib64 porque mi servidor Linux es 64bit. Normalmente los encuentran en /usr/lib

nano /etc/odbc.ini

[asterisk-connector]
Description         = MySQL connection to 'asterisk' database
Driver              = MySQL
Database         = voicemail
Servername     = localhost
UserName        = voice
Password         = sesamo
Port                 = 3306
Option             = 3

Como pueden ver aparecen todos los datos de la base de datos recién creada (nombre base de datos, host MySQL, usuario y contraseña). Presten atención a la etiqueta [asterisk-conector] porque la vamos a necesitar en la configuración del archivo res_odbc.conf.

Ahora modificamos el archivo extconfig.conf para decirle a asterisk de guardar los datos en realtime.

nano /etc/asterisk/extconfig.conf

añadimos en la parte final del archivo esta línea:

voicemail => odbc,asterisk,voicemessages

guardamos el archivo

y pasamos al voicemail

nano /etc/asterisk/voicemail.conf

buscamos estas dos líneas y le quitamos el punto y coma que tienen por delante

odbcstorage=asterisk
odbctable=voicemessages

como puede ver odbcstorace es el que indicamos en extconfig.conf y voicemessages es la tabla de la base de datos voicemail

guardamos el archivo y pasamos a otro

nano /etc/asterisk/res_odbc.conf

y añadimos/modificamos estas líneas

[asterisk]
enabled => yes
dsn => asterisk-connector
username => voice
password => sesamo
pre-connect => yes

en dsn aparece la etiqueta de que les hablaba más arriba. Los demás datos se explican solos.

ahora que tenemos todo listo podemos volver a arrancar asterisk

/etc/init.d/asterisk start

y averiguamos si todo esta funcionando bien

asterisk -rvvvvvvvvvvvvvvvv

CLI> odbc show

ODBC DSN Settings
-----------------

  Name:   asterisk
  DSN:    asterisk-connector
  Pooled: No
  Connected: Yes

y además en los registros de asterisk tenemos que encontrar estas líneas:

[Dec  5 14:01:59] NOTICE[18763] config.c: Registered Config Engine odbc
[Dec  5 14:02:00] NOTICE[18763] res_odbc.c: Connecting asterisk
[Dec  5 14:02:00] NOTICE[18763] res_odbc.c: res_odbc: Connected to asterisk [asterisk-connector]
[Dec  5 14:02:00] NOTICE[18763] res_odbc.c: Registered ODBC class 'asterisk' dsn->[asterisk-connector]
[Dec  5 14:02:00] NOTICE[18763] res_odbc.c: res_odbc loaded.

Ahora, para probar el sistema, llamamos unas cuantas extensiones y dejamos mensajes en el correo de voz

Perfecto!!!

Si tenemos instalado webmin podemos averiguar que efectivamente en la tabla voicemessages hay registro de todos los correos de voz que hemos registrado.

Pasamos a Windows XP. Queremos desde Microsoft Excel o Microsoft Access conectarnos a la base de datos a través de ODBC y importar los datos que necesitamos.

Primero instalamos el conector mysql para ODBC versión Windows. Los pueden descargar, según su versión, desde esta pagina

Terminada la descarga lo instalamos.

Microsoft Excel

Abrimos Excel y en el menú datos escogemos Obtener datos externos > Nueva consulta de base de datos

Seleccionamos <Nuevo origen de datos> y presionamos el botón Aceptar

Damos un nombre a la origen de datos y escogemos el tipo

ponemos los datos necesarios (host del servidor Mysql - acuerdense de abrir el puerto 3306 tcp en el cortafuegos - usuario, contraseña y nombre de la base de datos

ahora regresamos a la ventana precedente y seleccionamos la tabla > voicemessages y Aceptar

escogemos Asterisk-voicemail y Aceptar

Escogemos las columnas que queremos incluir en la consulta (yo puse todas)

y si queremos filtrar los datos (yo no apliqué ningún filtro)

ordenamos los datos

los devolvemos a microsoft excel

y ahi van

Microsoft Access

Arrancamos access y creamos un nuevo archivo > base de datos en blanco

Obtener datos externos > Importar

Escogemos en la lista "base de datos ODBC"

y Asterisk-Voicemal.dsn (que encontramos ahi porque ya la hemos creada desde Excel)

volvemos a poner los datos de conexión

escogemos la tabla voicemessages

y ahí está

En un próximo articulo veremos como hacer la misma cosa con los registros de llamada (CDR)

Que aprovechen el fin de semana y el puente...

Hasta la vista

 

Technorati Tag: ,,

Vota el Articulo: 

Sin votos (todavía)
Evalúa la calidad del articulo

6 comentarios

Esto es sobre un Asterisk 1.6.1

Hola,
segui las indicaciones, asterisk reconoce la conexion, setee una linea para una casilla de voz en el campo mailbox, asterisk reconoce el buzon de voz seteado, guarda el audio en su fomato tradicional (wav, gsm,etc) dentro del linux, pero no almacena la ruta en el campo "dir" asi como muestras en las imagenes. hay algun dato que faltaria setear ?

otra consulta, porq el engine InnoDB? y no el tradicional MySam

Voicemail ODBC

Primero revisa si los correos de voz, asterisk, los esta guardando en la carpeta /var/spool/asterisk/voicemail

Luego segun el contexto que configuraste para las casillas de voz los mensajes se guardaran en una carpeta con el nombre de ese contexto.

Quiza te pueda ayudar la configuracion de voicemail.conf:

http://www.voztovoice.org/?q=node/53

Por ultimo acerca del engine encontré la tabla en esta pagina:

http://www.voip-info.org/wiki/view/Asterisk+Voicemail+ODBC+storage

No se si haga diferencia usar uno o el otro.

Cuentame

Compilar las fuentes de mysql-connector

Este comentario lo dejo como una nota personal.

He tenido problemas con la conexión ODBC-MySQL

Cada vez que intentaba entrar al buzón de voz, Asterisk iba en "crash".

Como he resuelto?

He removido el paquete mysql-connector-odbc

He descargado las fuentes de mysql-connector-odbc desde la siguiente pagina:

http://dev.mysql.com/downloads/connector/odbc/5.1.html#linux

He compilado el programa con:

./configure --prefix=/usr
make
make install

Si sale algun error:

make distclean
./configure --prefix=/usr --disable-gui --enable-thread-safe
make
make install

En el odbcinst.ini he modificado la siguiente linea:

Driver = /usr/lib/libmyodbc5.so

VoiceMail RealTime Asterisk 1.6.2.X

Hola, antes que nada, gracias por los excelentes tutoriales que se publican en esta página, hace poco me inicié en el mundo de VoIP y Asterisk.

Sólo quiero hacer un comentario a manera de actualización, para almacenar los mensajes de voz como explica este tutorial sobre una versión de Asterisk 1.6.2.X es necesario agregar un campo al final de la tabla "voicemessages" llamado flag, por ejemplo: `flag` varchar(128) default ''´

Ya que de lo contrario en la consola CLI> les apareceran varios errores y los mensajes no se almacenarán.

Gracias y Saludos

Suscribirse a Comentarios de "Almacenar los correos de voz en MySQL y ODBC en Asterisk 1.6" Suscribirse a VozToVoice - Todos los comentarios