{"id":370,"date":"2012-09-04T17:55:17","date_gmt":"2012-09-04T20:55:17","guid":{"rendered":"http:\/\/blog.abratel.com.br\/?p=370"},"modified":"2012-09-04T18:07:34","modified_gmt":"2012-09-04T21:07:34","slug":"voicemail-realtime-com-odbc-storage-e-conexao-ao-mysql-usuarios","status":"publish","type":"post","link":"https:\/\/blog.abratel.com.br\/?p=370","title":{"rendered":"Voicemail realtime com odbc storage e conex\u00e3o ao Mysql (usu\u00e1rios)"},"content":{"rendered":"<p>Para que tudo funcione corretamente devemos instalar tr\u00eas pacotes al\u00e9m do MySQL antes da compila\u00e7\u00e3o do Asterisk.<br \/>\nPara verificar se os m\u00f3dulos est\u00e3o compilados e carregados no Asterisk vamos a console:<br \/>\nasterisk \u2013rvvvvvvvvvvvvv<\/p>\n<p>CLI> module show like odbc<br \/>\nModule                                       Description                                         Use Count<br \/>\nres_config_odbc.so             Realtime ODBC configuration              0<br \/>\nres_odbc.so                            ODBC resource                                           0<br \/>\nfunc_odbc.so                          ODBC lookups                                            0<br \/>\ncdr_adaptive_odbc.so       Adaptive ODBC CDR backend             0<br \/>\ncdr_odbc.so                            ODBC CDR Backend                                 0<br \/>\n5 modules loaded<\/p>\n<p>Isto indica que temos os m\u00f3dulos no Asterisk. Se n\u00e3o aparecer algo parecido temos que seguir os seguintes passos:<\/p>\n<p>\u2022\tparar Asterisk<br \/>\n\/etc\/init.d\/asterisk stop<\/p>\n<p>\u2022\tInstalar unixODBC e o conector MySQL para ODBC<br \/>\nyum install mysql-connector-odbc unixODBC unixODBC-devel<\/p>\n<p>\u2022\tInstalar a library ltdl<br \/>\nyum install libtool-ltdl-devel libtool-ltdl<\/p>\n<p>\u2022\tvoltar a instalar o asterisk<br \/>\ncd \/usr\/src\/asterisk-versao<br \/>\nmake clean<br \/>\n.\/configure<br \/>\nmake menuselect  e ir na quest\u00e3o do voicemail ODBC storage marcado-o<\/p>\n<p>\u2022\tter certeza que selecionou a op\u00e7\u00e3o ODBC_STORAGE<\/p>\n<p>\u2022\tPara sair pressione  a tecla X para salvar as configura\u00e7\u00f5es<br \/>\nmake<br \/>\nmake install<br \/>\n\u2022\tIniciamos novamente o Asterisk e verificamos atrav\u00e9s da console se os m\u00f3dulos est\u00e3o ativos como fizemos acima<br \/>\nSafe_asterisk<br \/>\nAgora 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<\/p>\n<p>\/etc\/init.d\/mysqld restart<br \/>\nCriamos as base de dados:<br \/>\nBanco asterisk: Tabela voicemail_users<br \/>\n                          Tabela voicemail_messages<\/p>\n<p>voicemail_users<br \/>\nSET SQL_MODE=&#8221;NO_AUTO_VALUE_ON_ZERO&#8221;;<br \/>\nSET time_zone = &#8220;+00:00&#8243;;<br \/>\nCREATE TABLE IF NOT EXISTS `voicemail_users` (<br \/>\n  `uniqueid` int(4) NOT NULL AUTO_INCREMENT,<br \/>\n  `customer_id` varchar(10) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,<br \/>\n  `context` varchar(10) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,<br \/>\n  `mailbox` varchar(10) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,<br \/>\n  `password` int(4) NOT NULL,<br \/>\n  `fullname` varchar(150) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,<br \/>\n  `email` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,<br \/>\n  `pager` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,<br \/>\n  `tz` varchar(10) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT &#8216;central&#8217;,<br \/>\n  `attach` enum(&#8216;yes&#8217;,&#8217;no&#8217;) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT &#8216;yes&#8217;,<br \/>\n  `saycid` enum(&#8216;yes&#8217;,&#8217;no&#8217;) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT &#8216;yes&#8217;,<br \/>\n  `dialout` varchar(10) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,<br \/>\n  `callback` varchar(10) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,<br \/>\n  `review` enum(&#8216;yes&#8217;,&#8217;no&#8217;) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT &#8216;no&#8217;,<br \/>\n  `operator` enum(&#8216;yes&#8217;,&#8217;no&#8217;) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT &#8216;no&#8217;,<br \/>\n  `envelope` enum(&#8216;yes&#8217;,&#8217;no&#8217;) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT &#8216;no&#8217;,<br \/>\n  `sayduration` enum(&#8216;yes&#8217;,&#8217;no&#8217;) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT &#8216;no&#8217;,<br \/>\n  `saydurationm` tinyint(4) NOT NULL DEFAULT &#8216;1&#8217;,<br \/>\n  `sendvoicemail` enum(&#8216;yes&#8217;,&#8217;no&#8217;) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT &#8216;no&#8217;,<br \/>\n  `delete` enum(&#8216;yes&#8217;,&#8217;no&#8217;) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT &#8216;no&#8217;,<br \/>\n  `nextaftercmd` enum(&#8216;yes&#8217;,&#8217;no&#8217;) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT &#8216;yes&#8217;,<br \/>\n  `forcename` enum(&#8216;yes&#8217;,&#8217;no&#8217;) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT &#8216;no&#8217;,<br \/>\n  `forcegreetings` enum(&#8216;yes&#8217;,&#8217;no&#8217;) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT &#8216;no&#8217;,<br \/>\n  `hidefromdir` enum(&#8216;yes&#8217;,&#8217;no&#8217;) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT &#8216;yes&#8217;,<br \/>\n  `stamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,<br \/>\n  `attachfmt` varchar(10) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,<br \/>\n  `searchcontexts` enum(&#8216;yes&#8217;,&#8217;no&#8217;) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,<br \/>\n  `cidinternalcontexts` varchar(10) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,<br \/>\n  `exitcontext` varchar(10) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,<br \/>\n  `volgain` varchar(4) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,<br \/>\n  `tempgreetwarn` enum(&#8216;yes&#8217;,&#8217;no&#8217;) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT &#8216;yes&#8217;,<br \/>\n  `messagewrap` enum(&#8216;yes&#8217;,&#8217;no&#8217;) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT &#8216;no&#8217;,<br \/>\n  `minpassword` int(2) DEFAULT &#8216;4&#8217;,<br \/>\n  `vm-password` varchar(10) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,<br \/>\n  `vm-newpassword` varchar(10) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,<br \/>\n  `vm-passchanged` varchar(10) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,<br \/>\n  `vm-reenterpassword` varchar(10) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,<br \/>\n  `vm-mismatch` varchar(10) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,<br \/>\n  `vm-invalid-password` varchar(10) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,<br \/>\n  `vm-pls-try-again` varchar(10) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,<br \/>\n  `listen-control-forward-key` varchar(2) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,<br \/>\n  `listen-control-reverse-key` varchar(1) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,<br \/>\n  `listen-control-pause-key` varchar(1) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,<br \/>\n  `listen-control-restart-key` varchar(1) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,<br \/>\n  `listen-control-stop-key` varchar(13) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,<br \/>\n  `backupdeleted` varchar(3) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT &#8217;25&#8217;,<br \/>\n  PRIMARY KEY (`uniqueid`),<br \/>\n  KEY `mailbox_context` (`mailbox`,`context`)<br \/>\n) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;<\/p>\n<p>voicemail_messages<br \/>\nSET SQL_MODE=&#8221;NO_AUTO_VALUE_ON_ZERO&#8221;;<br \/>\nSET time_zone = &#8220;+00:00&#8243;;<\/p>\n<p>CREATE TABLE IF NOT EXISTS `voicemail_messages` (<br \/>\n  `id` int(11) NOT NULL AUTO_INCREMENT,<br \/>\n  `msgnum` int(11) NOT NULL DEFAULT &#8216;0&#8217;,<br \/>\n  `dir` varchar(80) DEFAULT &#8221;,<br \/>\n  `context` varchar(80) DEFAULT &#8221;,<br \/>\n  `macrocontext` varchar(80) DEFAULT &#8221;,<br \/>\n  `callerid` varchar(40) DEFAULT &#8221;,<br \/>\n  `origtime` varchar(40) DEFAULT &#8221;,<br \/>\n  `duration` varchar(20) DEFAULT &#8221;,<br \/>\n  `mailboxuser` varchar(80) DEFAULT &#8221;,<br \/>\n  `mailboxcontext` varchar(80) DEFAULT &#8221;,<br \/>\n  `recording` longblob,<br \/>\n  `flag` varchar(128) DEFAULT &#8221;,<br \/>\n  PRIMARY KEY (`id`),<br \/>\n  KEY `dir` (`dir`)<br \/>\n) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=15 ;<\/p>\n<p>Criar um usu\u00e1rio ou dar permiss\u00e3o ao root All privileges<\/p>\n<p>Temos nossa base de dados e sua tabela com um usuario com total previlegio para manipula-la.<br \/>\nAgora temos que criar dois arquivos no diretorio \/etc para conectar a ODBC com o MySQL<br \/>\nvim \/etc\/odbcinst.ini<br \/>\ne adicionamos essas linhas<br \/>\n[MySQL]<br \/>\nDescription     = ODBC for MySQL<br \/>\nDriver          = \/usr\/lib\/libmyodbc5.so<br \/>\nSetup           = \/usr\/lib\/libodbcmyS.so<br \/>\nDriver64        = \/usr\/lib64\/libmyodbc5.so<br \/>\nSetup64         = \/usr\/lib64\/libodbcmyS.so<br \/>\nFileUsage       = 1<br \/>\nNo meu caso j\u00e1 existia esse diret\u00f3rio criado.<\/p>\n<p>Vim \/etc\/odbc.ini<br \/>\n[asterisk-connector]<br \/>\nDescription = MySQL connection to asterisk database<br \/>\nDriver = MySQL<br \/>\nDatabase = asterisk<br \/>\nServername = localhost<br \/>\nUserName = root<br \/>\nPassword = zoltrix90<br \/>\nPort = 3306<br \/>\nOption = 3<\/p>\n<p>Como pode perceber aqui est\u00e3o todos os dados do banco rec\u00e9m criado (base de dados, host, usuario e senha). Se atente a chave [asterisk-conector] pois vamos necessitar para configura\u00e7\u00e3o do arquivos res_odbc.conf<br \/>\nAgora modificamos o arquivo extconfig.conf para dizer ao Asterisk que agora os dados est\u00e3o em realtime.<br \/>\nvim \/etc\/asterisk\/extconfig.conf adicionamos na parte final do arquivos esta linha:<br \/>\nvoicemail => mysql,asterisk,voicemail_users<br \/>\nsalvamos o arquivo<br \/>\ne passamos para o voicemail<br \/>\nvim \/etc\/asterisk\/voicemail.conf<br \/>\nAdicionar:<br \/>\ndbuser=root<br \/>\ndbpass=senha<br \/>\ndbhost=localhost<br \/>\ndbname=asterisk<\/p>\n<p>procurar por esta duas linhas e descomenta-las retirando o ponto e virgula.<br \/>\nodbcstorage=asterisk<br \/>\nodbctable=voicemail_messages<\/p>\n<p>Como pode notar odbcstorage \u00e9 o que indicamos no extconfig.conf e voicemessages \u00e9 a tabela da base de dados voicemail<br \/>\nsalvamo o arquivos e passamos para o pr\u00f3ximo<br \/>\nnano \/etc\/asterisk\/res_odbc.conf<br \/>\nadicionar\/modificar estas linhas:<br \/>\n[asterisk]<br \/>\nenabled => yes<br \/>\ndsn => asterisk-connector<br \/>\nusername => root<br \/>\npassword => senha<br \/>\npre-connect => yes<br \/>\no dsn \u00e9 a chave que vimos acima<br \/>\nagora que temos tudo configurado vamos iniciar o Asterisk<br \/>\n\/etc\/init.d\/asterisk start<br \/>\ne verificar se tudo est\u00e1 funcionando<br \/>\nasterisk -rvvvvvvvvvvvvvvvv<br \/>\nCLI> odbc show<br \/>\nODBC DSN Settings<br \/>\n\u2014\u2014\u2014\u2014\u2014\u2013<br \/>\nName:   asterisk<br \/>\nDSN:    asterisk-connector<br \/>\nPooled: No<br \/>\nConnected: Yes<br \/>\nnos registros do Asterisk temos que encontrar estas linhas:<br \/>\n[Dec  5 14:01:59] NOTICE[18763] config.c: Registered Config Engine odbc<br \/>\n[Dec  5 14:02:00] NOTICE[18763] res_odbc.c: Connecting asterisk<br \/>\n[Dec  5 14:02:00] NOTICE[18763] res_odbc.c: res_odbc: Connected to asterisk [asterisk-connector]<br \/>\n[Dec  5 14:02:00] NOTICE[18763] res_odbc.c: Registered ODBC class \u2018asterisk\u2019 dsn->[asterisk-connector]<br \/>\n[Dec  5 14:02:00] NOTICE[18763] res_odbc.c: res_odbc loaded.<br \/>\nAgora para testar o sistema efetue alguma chamadas para alguns ramais e deixe um recado no correio de voz<\/p>\n<p>\u00d3timo!!!<br \/>\nCaso voc\u00ea utilize o webmin ou phpmysqladmin pode verificar que na tabela voicemessages j\u00e1 possui os registros dos recados deixados nos testes.<br \/>\nIsso \u00e9 tudo!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Para que tudo funcione corretamente devemos instalar tr\u00eas pacotes al\u00e9m do MySQL antes da compila\u00e7\u00e3o do Asterisk. Para verificar se os m\u00f3dulos est\u00e3o compilados e carregados no Asterisk vamos a console: asterisk \u2013rvvvvvvvvvvvvv CLI> module show like odbc Module Description Use Count res_config_odbc.so Realtime ODBC&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[],"_links":{"self":[{"href":"https:\/\/blog.abratel.com.br\/index.php?rest_route=\/wp\/v2\/posts\/370"}],"collection":[{"href":"https:\/\/blog.abratel.com.br\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.abratel.com.br\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.abratel.com.br\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.abratel.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=370"}],"version-history":[{"count":0,"href":"https:\/\/blog.abratel.com.br\/index.php?rest_route=\/wp\/v2\/posts\/370\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.abratel.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=370"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.abratel.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=370"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.abratel.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=370"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}