Estoy firmemente convencido que seguir las guías que publican los “tipos” de “Nerd Vittles” es siempre un buen ejercicio para aprender cosas nuevas. En este caso veremos, siguiendo unas de las guías recientemente publicadas, como usar el conector ODBC y el archivo de configuración de asterisk func_odbc.conf para hacer consultas en una base de datos MySQL y restituir los resultados, todo a través de unas cuantas líneas del Diaplan. La guía de Nerd Vittles es pensada para asterisk 1.4.X, para que funcionara en asterisk 1.6.X tuve que hacerle unas cuantas modificaciones.
Antes que nada para el soporte de ODBC en Asterisk tenemos que descargar unos archivos y volver a compilar las fuentes:
si no tenemos instalado MySQL escribimos:
yum install mysql mysql-devel mysql-server
seguimos con ODBC:
yum install unixODBC unixODBC-devel libdbi-dbd-mysql mysql-connector-odbc
Compilamos asterisk:
cd /usr/src/asterisk.1.6.0.9
./configure
make
make install
Ahora continuamos con la configuración del driver ODBC:
nano /etc/odbcinst.ini
pegamos las siguientes líneas (para Centos 32bit)
[MySQL]
Description = ODBC for MySQL
Driver = /usr/lib/libmyodbc3.so
Setup = /usr/lib/libodbcmyS.so
FileUsage = 1
Ahora creamos una base de datos de prueba en MySQL:
wget http://pbxinaflash.net/source/odbc/timeclock.sql
mysql –u root –p <>
si miramos la base de datos viene con dos records insertados
mysql –u root –p
mysql> SELECT * FROM users;
+----+--------+----------+----------+------------+
| id | empnum | lastin | lastout | comments |
+----+--------+----------+----------+------------+
| 1 | 12345 | 00:00:00 | 00:00:00 | Uncle Ward |
| 2 | 23456 | 00:00:00 | 00:00:00 | Miss Mary |
+----+--------+----------+----------+------------+
2 rows in set (0.00 sec)
mysql> quit
Ahora tenemos que modificar algunos archivos de asterisk para que todo funcione:
nano /etc/asterisk/res_odbc.conf
añadimos las siguientes líneas
[timeclock]
enable=yes
dns=timeclock
username=root
password=clave
loguniqueid=yes
pre-connect=yes
en el campo password ponemos la contraseña configurada en MySQL para el usuario root (normalmente definida al momento de instalar mysql-server)
nano /etc/asterisk/func_odbc.conf
añadimos las líneas:
[TIMECLOCK]
dsn=timeclock
readsql=SELECT comments FROM users WHERE empnum='${SQL_ESC(${ARG1})}'
writesql=UPDATE users SET empnum='${SQL_ESC(${VAL1})}' WHERE empnum='${SQL_ESC(${ARG1})}'
seguimos con:
nano /etc/odbc.ini
[timeclock]
Description = MySQL ODBC TIMECLOCK
Driver = MySQL
Server = localhost
User = root
Password = clave
Database = timeclock
Port = 3306
Option = 3
En clave volvemos a poner la contraseña configurada en MySQL para el usuario root
Ahora solo nos falta la parte del dialplan que usaremos para hacer consultas en la base de datos:
nano /etc/asterisk/extensions.conf
exten => 222,1,Answer
exten => 222,n,Wait(2)
exten => 222,n,Flite("Please enter the 5 digit employee number.")
exten => 222,n,Read(EMPNUM,beep,5)
exten => 222,n,NoOp(EMPNUM: ${EMPNUM})
exten => 222,n,Set(EMPNAME=${ODBC_TIMECLOCK(${EMPNUM})})
exten => 222,n,GotoIf($["${EMPNAME}foo" = "foo"]?notfound)
exten => 222,n,Flite("The employee name is ${EMPNAME}. Good bye.")
exten => 222,n,NoOp(Employee: ${EMPNAME})
exten => 222,n,Hangup
exten => 222,n(notfound),Flite("No such employee on file. Good bye.")
exten => 222,n,Hangup
Volvemos a arrancar Asterisk
/etc/init.d/asterisk reload
o
/etc/init.d/asterisk restart
Como pueden ver, se contesta la llamada, se usa un programa de síntesis de voz (podrías ser también festival o cepstral), en este caso Flite (festival-lite). Se espera que el llamante digite una serie de 5 números(aplicacion Read); se consulta la base de datos para ver si ese numero existe. Si no existe el dialplan sigue desde la etiqueta (notfound) sino desde la línea que sigue donde escucharemos la frase con el nombre del empleado asociado a los 5 dígitos que hemos enviados.
Hagan sus pruebas y luego me cuentan
1 comentario:
Buenas noches!!! Excelente ejemplo!!! Usted sabe si puedo hacer lo mismo con una base de datos externa en Oracle ??? maripedg@hotmail.com
Publicar un comentario