Resumidamente, o RealTime fornece a possibilidade de colocar os arquivos de configuração em servidores Base de Dados. Não se precisa dizer que isso facilita a configuração do servidor asterisk através de programas externos, scripts e webpages.
Quando fazendo mudanças no dialplan ou nos usuários, não há necessidade para um reload ou um restart, tudo é pego na base de dados todas às vezes. (isso é opcional e pode ser desabilitado, veja adiante).
Além da facilidade para fazer interface com outras ferramentas de configuração, esse também permite se ter um servidor reserva em standby rodando o asterisk, ou mesmo facilitar uma configuração de balanceamento de carga.
Em geral, o uso do RealTime dá a você a flexibilidade quando você armazena e arranca dados do Asterisk.
Existem duas formas para você poder se conectar ao módulo realtime a uma Base de Dados.
A primeira forma é usar o driver MySQL que é embutida no Asterisk-addons e a segunda forma é usar o driver ODBC que está incluído no Asterisk HEAD CVS snapshot.
O driver ODBC é de longe a melhor opção, é uma abordagem mais ampla para acesso a base de dados, e suporta muitas e não apenas o mysql. (é também o mais usado, conseqüentemente mais testado, e, portanto, o mais estável provavelmente dos dois).
Para os objetivos desse tutorial, usamos o ODBC. Novamente temos duas opções, no linux existem duas formas para conectividade ODBC, chamada iodbc e unixodbc. Usamos o unixodbc. Também temos a mencionar que por causa de algumas duplicações de arquivos cabeçalhos você não pode usar ambos os driver ao mesmo tempo, você tem de escolher um deles. Importante é que a configuração de ambos é feita numa forma similar ou com pequenas alterações.
Este tutorial é todo a respeito do ODBC com a base de dados pgsql (PostgreSQL). Se desejamos usar o pgsql, vamos precisar não somente do ODBC apim, mas também o driver odbc-postgresql.
Também precisaremos criar algumas coisas na base de dados, isso será documentado adiante neste tutorial.
Essa é a segunda possibilidade, aqui todas as alterações de configuração refletem imediatamente no realtime. Mas, se o seu servidor de base de dados cair, assim também vai acontecer com o seu serviço VoIP.
Neste tutorial iremos partir do estoque de uma distribuição Debian, mas qualquer outra Distro será beleza também, embora algumas coisas pequenas sejam diferentes.
Asterisk e realtime precisam de alguns pacotes adicionais instalados.
Pacotes necessários antes da instalação do Asterisk:
cvs
libssl-dev
zlib1g-dev
No Debian você os pode instalar com o comando apt-get install <package_name>.
Pacotes necessários para incluir RealTime no Asterisk:
unixodbc (our version is 2.2.4-11)
unixodbc-dev
postgresql (our version is 7.4.7-6sarge1)
postgresql-client
postgresql-contrib
postgresql-dev
odbc-postgresql (our version is 07.03.0200-5)
Como desejamos ter uma versão do asterisk com suporte ao RealTime, precisamos pegar cvs head do servidor CVS asterisk:
A versão que usamos para esse tutorial foi - CVS-HEAD-06/03/05-10:59:09.
Escolha algum diretório onde colocar os fontes e faça o download dos fontes.
astrealtime:~# mkdir /usr/src/asterisk
astrealtime:~# cd /usr/src/asterisk
astrealtime:~# export CVSROOT=:pserver:anoncvs@cvs.digium.com:/usr/cvsroot
astrealtime:~# cvs login (password for login on cvs server is "anoncvs")
astrealtime:~# cvs checkout zaptel libpri asterisk (getting CVS HEAD sources)
astrealtime:~# cd /usr/src/asterisk/libpri
astrealtime:~# make
astrealtime:~# make install
astrealtime:~# cd /usr/src/asterisk/zaptel
astrealtime:~# make linux26
Faremos tudo com o kernel 2.6.x.
Assegure de incluir as seguintes características no kernel: Device Drivers → Character Devices → Enhanced Real Time Clock Support
Library Routines → CRC-CCITT functions
É recomendado, mas não necessário compilá-los como módulos.
Nota: No kernel 2.6, você não mais precisa do módulo usb_uhci.
astrealtime:~# make install
astrealtime:~# cd /usr/src/asterisk/asterisk
Se você tem um tipo de processador especial você pode alterá-lo no Makefile antes da compilação do Asterisk.
Por exemplo, para o VIA Samuel 2 processors precisa estar com o parâmetro PROC=i586 definido neste Makefile do contrário o Asterisk não vai rodar.
astrealtime:~# make
astrealtime:~# make install
astrealtime:~# make templates
Se essa é a sua primeira instalação do Asterisk você pode criar modelos (templates) para os arquivos de configuração necessários.
O próximo passo é configurar o driver ODBC, no nosso caso UnixODBC. Se você instalou a partir dos pacotes Debian você pode usar arquivos modelos (templates) para montar os arquivos de configuração necessários. Os arquivo de configuração que precisamos para fazer o odbc funcionar são /etc/odbc.ini e /etc/odbcinst.ini.
Agora precisamos incluir algumas funções extras e tipos de dados na base de dados PostgreSQL para sermos capazes de usar conexão ODBC apropriada.
astrealtime:~# su – postgres (usuário admin do PostGreSQL)
astrealtime:~$ psql -d template1 </usr/share/psqlodbc/odbc.sql (na minha install não foi gerado tal arquivo ...) astrealtime:~$ psql -d template1 (... esse BD modelo já existia)
template1=# CREATE DOMAIN lo AS int4;
template1=# \quit
Agora devemos criar o usuário asterisk e a Base de Dados chamada asterisk na qual colocaremos as tabelas que precisamos para a nossa configuração.
astrealtime:~$ createuser -P -N -d -D asterisk (isso é executado no shell Linux do usuário postgres)
astrealtime:~$ createdb asterisk
astrealtime:~$ psql -d asterisk
Agora é o momento de criar as tabelas necessárias para estocar a configuração na Base de Dados.
CREATE TABLE extensions_conf (
id serial NOT NULL,
context character varying(20) DEFAULT '' NOT NULL,
exten character varying(20) DEFAULT '' NOT NULL,
priority smallint DEFAULT 0 NOT NULL,
app character varying(20) DEFAULT '' NOT NULL,
appdata character varying(128)
);
CREATE TABLE cdr (
calldate timestamp with time zone DEFAULT now() NOT NULL,
clid character varying(80) DEFAULT '' NOT NULL,
src character varying(80) DEFAULT '' NOT NULL,
dst character varying(80) DEFAULT '' NOT NULL,
dcontext character varying(80) DEFAULT '' NOT NULL,
channel character varying(80) DEFAULT '' NOT NULL,
dstchannel character varying(80) DEFAULT '' NOT NULL,
lastapp character varying(80) DEFAULT '' NOT NULL,
lastdata character varying(80) DEFAULT '' NOT NULL,
duration bigint DEFAULT 0::bigint NOT NULL,
billsec bigint DEFAULT 0::bigint NOT NULL,
disposition character varying(45) DEFAULT '' NOT NULL,
amaflags bigint DEFAULT 0::bigint NOT NULL,
accountcode character varying(20) DEFAULT '' NOT NULL,
uniqueid character varying(32) DEFAULT '' NOT NULL,
userfield character varying(255) DEFAULT '' NOT NULL
);
CREATE TABLE sip_conf (
id serial NOT NULL,
name character varying(80) DEFAULT '' NOT NULL,
accountcode character varying(20),
amaflags character varying(7),
callgroup character varying(10),
callerid character varying(80),
canreinvite character varying(3) DEFAULT 'yes',
context character varying(80),
defaultip character varying(15),
dtmfmode character varying(7),
fromuser character varying(80),
fromdomain character varying(80),
host character varying(31) DEFAULT '' NOT NULL,
insecure character varying(4),
"language" character varying(2),
mailbox character varying(50),
md5secret character varying(80),
nat character varying(5) DEFAULT 'no' NOT NULL,
permit character varying(95),
deny character varying(95),
mask character varying(95),
pickupgroup character varying(10),
port character varying(5) DEFAULT '' NOT NULL,
qualify character varying(3),
restrictcid character varying(1),
rtptimeout character varying(3),
rtpholdtimeout character varying(3),
secret character varying(80),
"type" character varying DEFAULT 'friend' NOT NULL,
username character varying(80) DEFAULT '' NOT NULL,
disallow character varying(100) DEFAULT 'all',
allow character varying(100) DEFAULT 'g729;ilbc;gsm;ulaw;alaw',
musiconhold character varying(100),
regseconds bigint DEFAULT 0::bigint NOT NULL,
ipaddr character varying(15) DEFAULT '' NOT NULL,
regexten character varying(80) DEFAULT '' NOT NULL,
cancallforward character varying(3) DEFAULT 'yes'
);
CREATE TABLE voicemail_users (
id serial NOT NULL,
customer_id bigint DEFAULT (0)::bigint NOT NULL,
context character varying(50) DEFAULT '' NOT NULL,
mailbox bigint DEFAULT (0)::bigint NOT NULL,
"password" character varying(4) DEFAULT '0' NOT NULL,
fullname character varying(50) DEFAULT '' NOT NULL,
email character varying(50) DEFAULT '' NOT NULL,
pager character varying(50) DEFAULT '' NOT NULL,
stamp timestamp(6) without time zone NOT NULL
);
Há algum tempo que já existe suporte também no Realtime para queues e queue members que foi acrescentada ao Asterisk HEAD CVS. Permita-nos adicioná-los também...
GRANT ALL ON TABLE cdr TO asterisk;
GRANT ALL ON TABLE extensions_conf TO asterisk;
GRANT ALL ON TABLE sip_conf TO asterisk;
GRANT ALL ON TABLE voicemail_users TO asterisk;
GRANT ALL ON TABLE queue_member_table TO asterisk;
GRANT ALL ON TABLE queue_table TO asterisk;
O Asterisk se conectará a Base de Dados com o usuário asterisk, de modo que o PostgreSQL precisa de alguns parâmetros para permitir conexões à base de dados asterisk.
Devemos adicionar as seguintes linhas ao arquivo /etc/postgres/pg_hba. conf:
local asterisk asterisk password
host asterisk asterisk 127.0.0.1 255.255.255.255 password
Agora é o momento de configurar o asterisk para se comunicar com a base de dados.
Os arquivos que precisamos configurar são /etc/asterisk/res_odbc.conf e /etc/asterisk/extconfig.conf.
O arquivo /etc/asterisk/res_odbc.conf contém as configurações para a conexão a base de dados.
Aqui está um exemplo do arquivo res_odbc.conf:
O arquivo /etc/asterisk/extconfig.conf contem às configurações que define o tipo de conectividade de base de dados, famílias, tabelas e outras coisas importante que vai ser considerado depois.
Aqui está um exemplo do arquivo extconfig.conf:
Os parâmetros de configuração no arquivo /etc/asterisk/res_odbc.conf são suficientes claros para serem considerados. Algumas explicações sobre o arquivo extconfig.conf.
É importante mencionar que eu explicarei somente o RealTime e não a configuração do RealTime Estático.
Portanto na primeira coluna fica a família, esse é o nome que é associado à chamada do RealTime.
Somente o nome de família de extensions pode ser diferente como mencionado aqui, todas as outras precisam ser o mesma.
Os próximos parâmetros no arquivo de configuração são "driver", "database_context","table_name".
Os valores para "driver" podem ser mysql ou ODBC que depende da base de dados no backend que nós estamos usando, em nosso exemplo é o ODBC.
O parâmetro "database_context" é o contexto chamado o qual é usado no arquivo res_odbc.conf em nosso exemplo ast_cnf.
"table_name" é a tabela na qual colocamos os dados.
É muito importante mencionar que o parâmetro database_context não é o nome da database para o qual nos conectaremos é o contexto que estamos usando no arquivo res_odbc.conf para configurar a conexão da database.
Uma das coisas que não está implementada é o rastreamento das filas (queues) disponível estocada na database.
O rastreamento de filas (queues) disponíveis somente é possível depois que você tiver um Agente (Agent) registrado e logados no sistema. Com diferença de que você pode fazer tal rastreamento quando você estoca a configuração a respeito das filas (queues) nos arquivos.
A forma que você pode verificar isso é executando o comando seguinte da CLI do Asterisk:
astrealtime*CLI>show queues
No queues.>
Em geral a forma que você pode verificar seu sistema de que existe uma conexão com a database a partir da CLI para verificar a conectividade ODBC é:
astrealtime*CLI>odbc show
Possível resultado do comando pode ser: Name: ast_cnf
DSN: asterisk
Connected: yes
Devido à carência de documentação em português sobre como configurar o realtime com o Postgresql, resolvi compartilhar essa tradução com a comunidade AsteriskBrasil e com os usuários do Asterisk no Brasil e contribuir para melhor documentar o Asterisk em português. Todos podem dar sua contribuição para melhorar esse tutorial.
asterisk_realtime_e_postgresql.txt (42013 views) · Modificado em: 15/01/2008 20:47 por cleviton
Apoio
Blog
Warning: fsockopen() [function.fsockopen]: php_network_getaddresses: getaddrinfo failed: Name or service not known in /var/www/portal/modules/mod_slick_rss/simplepie.inc on line 2238
Warning: fsockopen() [function.fsockopen]: unable to connect to www.voipmania.com.br:80 (Unknown error) in /var/www/portal/modules/mod_slick_rss/simplepie.inc on line 2238