Correio de Voz no Mysql
Nesse artigo veremos como armazenar as mensagens do correio de voz do Asterisk(Voicemail) em uma base de dados MySQL.
Para que tudo funcione corretamente devemos instalar três pacotes além do MySQL antes da compilação do Asterisk.
Para verificar se os módulos estão compilados e carregados no Asterisk vamos a console:
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
Isto indica que temos os módulos no Asterisk. Se não aparecer algo parecido temos que seguir os seguintes passos:
- parar Asterisk
/etc/init.d/asterisk stop
- Instalar unixODBC e o conector MySQL para ODBC
yum install mysql-connector-odbc unixODBC unixODBC-devel
- Instalar a library ltdl
yum install libtool-ltdl-devel libtool-ltdl
- voltar a instalar o asterisk
cd /usr/src/asterisk-1.6.0.1
make distclean
./configure
make menuselect
- ter certeza que selecionou a opção ODBC_STORAGE
- Para sair pressione a tecla X para salvar as configurações
make
make install
make samples
- Iniciamos novamente o Asterisk e verificamos através da console se os módulos estão ativos como fizemos acima
/etc/init.d/asterisk start
Agora temos que criar a base de dados MySQL onde vamos criar uma tabela para armazenar os dados relacionados aos correios de voz. Primeiro um restart no servidor MySQL
/etc/init.d/mysqld restart
criamos a base de dados
mysqladmin -u root -p create voicemail
criamos a tabela voicemessages
mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is xx
Server version: 5.x.x
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)
Agora criamos um novo usuario e damos todos os prvilegios para manipular a base de dados
mysql> GRANT ALL PRIVILEGES ON voicemail.* TO mestre IDENTIFIED BY ‘mestre’
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
mysql> quit
Bye
Temos nossa base de dados e sua tabela com um usuario com total previlegio para manipula-la.
Agora temos que criar dois arquivos no diretorio /etc para conectar a ODBC com o MySQL
nano /etc/odbcinst.ini
e adicionamos essas linhas
[MySQL]
Description = ODBC for MySQL
Driver = /usr/lib/libmyodbc3.so
Setup = /usr/lib/libodbcmyS.so
FileUsage = 1
No meu caso estou utilizando o diretorio /usr/lib, pois meu servidor é 32bits. Caso o seu servidor seja 64bits os diretorios seriam /usr/lib64
nano /etc/odbc.ini
[asterisk-connector]
Description = MySQL connection to ‘asterisk’ database
Driver = MySQL
Database = voicemail
Servername = localhost
UserName = mestre
Password = mestre
Port = 3306
Option = 3
Como pode perceber aqui estão todos os dados do banco recém criado (base de dados, host, usuario e senha). Se atente a chave [asterisk-conector] pois vamos necessitar para configuração do arquivos res_odbc.conf
Agora modificamos o arquivo extconfig.conf para dizer ao Asterisk que agora os dados estão em realtime.
nano /etc/asterisk/extconfig.conf
adicionamos na parte final do arquivos esta linha:
voicemail => odbc,asterisk,voicemessages
salvamos o arquivo
e passamos para o voicemail
nano /etc/asterisk/voicemail.conf
procurar por esta duas linhas e descomenta-las retirando o ponto e virgula.
odbcstorage=asterisk
odbctable=voicemessages
como pode notar odbcstorage é o que indicamos no extconfig.conf e voicemessages é a tabela da base de dados voicemail
salvamo o arquivos e passamos para o próximo
nano /etc/asterisk/res_odbc.conf
adicionar/modificar estas linhas:
[asterisk]
enabled => yes
dsn => asterisk-connector
username => mestre
password => mestre
pre-connect => yes
o dsn é a chave que vimos acima
agora que temos tudo configurado vamos iniciar o Asterisk
/etc/init.d/asterisk start
e verificar se tudo está funcionando
asterisk -rvvvvvvvvvvvvvvvv
CLI> odbc show
ODBC DSN Settings
—————–
Name: asterisk
DSN: asterisk-connector
Pooled: No
Connected: Yes
nos registros do Asterisk temos que encontrar estas linhas:
[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.
Agora para testar o sistema efetue alguma chamadas para alguns ramais e deixe um recado no correio de voz
Ótimo!!!
Caso você utilize o webmin ou phpmysqladmin pode verificar que na tabela voicemessages já possui os registros dos recados deixados nos testes.
Isso é tudo!
Abs,
