Voicemail realtime com odbc storage e conexão ao Mysql (usuários)

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-versao
make clean
./configure
make menuselect e ir na questão do voicemail ODBC storage marcado-o

• ter certeza que selecionou a opção ODBC_STORAGE

• Para sair pressione a tecla X para salvar as configurações
make
make install
• Iniciamos novamente o Asterisk e verificamos através da console se os módulos estão ativos como fizemos acima
Safe_asterisk
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 as base de dados:
Banco asterisk: Tabela voicemail_users
Tabela voicemail_messages

voicemail_users
SET SQL_MODE=”NO_AUTO_VALUE_ON_ZERO”;
SET time_zone = “+00:00″;
CREATE TABLE IF NOT EXISTS `voicemail_users` (
`uniqueid` int(4) NOT NULL AUTO_INCREMENT,
`customer_id` varchar(10) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
`context` varchar(10) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
`mailbox` varchar(10) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
`password` int(4) NOT NULL,
`fullname` varchar(150) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
`email` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
`pager` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
`tz` varchar(10) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT ‘central’,
`attach` enum(‘yes’,’no’) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT ‘yes’,
`saycid` enum(‘yes’,’no’) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT ‘yes’,
`dialout` varchar(10) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
`callback` varchar(10) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
`review` enum(‘yes’,’no’) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT ‘no’,
`operator` enum(‘yes’,’no’) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT ‘no’,
`envelope` enum(‘yes’,’no’) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT ‘no’,
`sayduration` enum(‘yes’,’no’) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT ‘no’,
`saydurationm` tinyint(4) NOT NULL DEFAULT ‘1’,
`sendvoicemail` enum(‘yes’,’no’) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT ‘no’,
`delete` enum(‘yes’,’no’) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT ‘no’,
`nextaftercmd` enum(‘yes’,’no’) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT ‘yes’,
`forcename` enum(‘yes’,’no’) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT ‘no’,
`forcegreetings` enum(‘yes’,’no’) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT ‘no’,
`hidefromdir` enum(‘yes’,’no’) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT ‘yes’,
`stamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`attachfmt` varchar(10) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
`searchcontexts` enum(‘yes’,’no’) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
`cidinternalcontexts` varchar(10) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
`exitcontext` varchar(10) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
`volgain` varchar(4) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
`tempgreetwarn` enum(‘yes’,’no’) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT ‘yes’,
`messagewrap` enum(‘yes’,’no’) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT ‘no’,
`minpassword` int(2) DEFAULT ‘4’,
`vm-password` varchar(10) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
`vm-newpassword` varchar(10) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
`vm-passchanged` varchar(10) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
`vm-reenterpassword` varchar(10) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
`vm-mismatch` varchar(10) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
`vm-invalid-password` varchar(10) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
`vm-pls-try-again` varchar(10) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
`listen-control-forward-key` varchar(2) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
`listen-control-reverse-key` varchar(1) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
`listen-control-pause-key` varchar(1) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
`listen-control-restart-key` varchar(1) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
`listen-control-stop-key` varchar(13) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
`backupdeleted` varchar(3) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT ’25’,
PRIMARY KEY (`uniqueid`),
KEY `mailbox_context` (`mailbox`,`context`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

voicemail_messages
SET SQL_MODE=”NO_AUTO_VALUE_ON_ZERO”;
SET time_zone = “+00:00″;

CREATE TABLE IF NOT EXISTS `voicemail_messages` (
`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,
`flag` varchar(128) DEFAULT ”,
PRIMARY KEY (`id`),
KEY `dir` (`dir`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=15 ;

Criar um usuário ou dar permissão ao root All privileges

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
vim /etc/odbcinst.ini
e adicionamos essas linhas
[MySQL]
Description = ODBC for MySQL
Driver = /usr/lib/libmyodbc5.so
Setup = /usr/lib/libodbcmyS.so
Driver64 = /usr/lib64/libmyodbc5.so
Setup64 = /usr/lib64/libodbcmyS.so
FileUsage = 1
No meu caso já existia esse diretório criado.

Vim /etc/odbc.ini
[asterisk-connector]
Description = MySQL connection to asterisk database
Driver = MySQL
Database = asterisk
Servername = localhost
UserName = root
Password = zoltrix90
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.
vim /etc/asterisk/extconfig.conf adicionamos na parte final do arquivos esta linha:
voicemail => mysql,asterisk,voicemail_users
salvamos o arquivo
e passamos para o voicemail
vim /etc/asterisk/voicemail.conf
Adicionar:
dbuser=root
dbpass=senha
dbhost=localhost
dbname=asterisk

procurar por esta duas linhas e descomenta-las retirando o ponto e virgula.
odbcstorage=asterisk
odbctable=voicemail_messages

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 => root
password => senha
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!

Deixe um comentário