Asterisk com Realtime ARA

Asterisk Realtime permite utilizar o MySQL para armazenar as configurações em vez dos tradicionais arquivos texto no /etc/asterisk.

Alem dos dados ficarem em tabelas do MySQL, tambem a recarga das alterações são feitas automaticamente pelo Asterisk dispensando o comando ”reload”.

Para configurar:
Habilitar o acesso ao MySQL.

$ cat /etc/asterisk/res_mysql.conf
[general]
dbhost = 127.0.0.1
dbname = asteriskrealtime
dbuser = asteriskuser
dbpass = senha

Informar quais configurações estarão no MySQL.

$ cat /etc/asterisk/extconfig.conf
[settings]
sipusers => mysql,asteriskrealtime,sip_buddies
sippeers => mysql,asteriskrealtime,sip_buddies

;iaxusers => odbc,asterisk
;iaxpeers => mysql,asteriskrealtime,iax_buddies
;extensions => mysql,asteriskrealtime,extensions
;queues => odbc,asterisk
;queue_members => odbc,asterisk

Habilitar o cache para mostrar as informações dos peers.

$ cat /etc/asterisk/sip.conf
[general]
rtcachefriends=yes

Apos estas configurações iniciais, fazer um ”reload” para carregar as informações. Apos este passo iniciais o Realtime já esta habilitado e todas as alterações e inclusões feitas na tabela sip_buddies refletiram automaticamente para o Asterisk.

Para confirmar que o Asterisk esta realmente ”enxergando” a tabela sip_buddies execute o seguinte comando:

[root@vw1 asterisk]# asterisk -vvvvvr
Parsing ‘/etc/asterisk/asterisk.conf’: Found
Parsing ’/etc/asterisk/extconfig.conf’: Found
Binding sipusers to mysql/asteriskrealtime/sip_buddies
Binding sippeers to mysql/asteriskrealtime/sip_buddies
Asterisk 1.2.20, Copyright© 1999 – 2007 Digium, Inc. and others.
Created by Mark Spencer
Asterisk comes with ABSOLUTELY NO WARRANTY; type ‘show warranty’ for details.
This is free software, with components licensed under the GNU General Public
License version 2 and other licenses; you are welcome to redistribute it under
certain conditions. Type ‘show license’ for details.
=========================================================================
Connected to Asterisk 1.2.20 currently running on voipway1 (pid = 3851)
Verbosity is at least 5
vw1*CLI>

Observe que o Binding esta apontando para o MySQL.

Se precisar carregar manualmente para testar ou para verificar as configurações, utilize o seguinte comando após preencher a tabela sip_buddies no Banco de Dados MySQL.

vw1*CLI> reload
vw1*CLI> realtime load sippeers name 2328
Column Name Column Value
——————– ——————–
id 1
name 2328
canreinvite yes
context cliente
dtmfmode rfc2833
fullcontact
host dynamic
nat yes
port 61095
qualify 100
secret senha
type friend
username 2328
disallow all
allow g729
allow g723.1
allow g726
allow alaw
allow ulaw
regseconds 1194365166
ipaddr 201.262.150.214
cancallforward yes

vw1*CLI> sip show peer 2328

* Name : 2328
Secret :
MD5Secret :
Context : cliente
Subscr.Cont. :
Language : br
AMA flags : Unknown
CallingPres : Presentation Allowed, Not Screened
.
.

Anúncios

Asterisk gravando ligações no MySQL

Para gravar os dados na tabela cdr do banco de dados MySQL , é preciso ajustar alguns parâmetros no Asterisk.

Instalação do Banco MySQL

Para instalar o MySQL, basta usar o comando abaixo.

 apt-get install mysql-server-5.0

Criação do usuário e strutura

Após instalar o Banco MySQL, entrar com o usuário root e executar o script abaixo.

 CREATE DATABASE asteriskcdrdb; 

 GRANT INSERT 
  ON asteriskcdrdb.* 
  TO asteriskcdruser@localhost 
  IDENTIFIED BY 'yourpassword'; 

 USE asteriskcdrdb; 

 CREATE TABLE cdr ( 
 `id` bigint NOT NULL auto_increment PRIMARY KEY,
 `calldate` datetime NOT NULL default '0000-00-00 00:00:00', 
 `clid` varchar(80) NOT NULL default '', 
 `src` varchar(80) NOT NULL default '', 
 `dst` varchar(80) NOT NULL default '', 
 `dcontext` varchar(80) NOT NULL default '',  
 `channel` varchar(80) NOT NULL default '', 
 `dstchannel` varchar(80) NOT NULL default '', 
 `lastapp` varchar(80) NOT NULL default '', 
 `lastdata` varchar(80) NOT NULL default '', 
 `duration` int(11) NOT NULL default '0', 
 `billsec` int(11) NOT NULL default '0', 
 `disposition` varchar(45) NOT NULL default '',  
 `amaflags` int(11) NOT NULL default '0', 
 `accountcode` varchar(20) NOT NULL default '', 
 `userfield` varchar(255) NOT NULL default '',
 `enviado`char(1) NOT NULL default 'N'
 ) ENGINE = innodb; 

 ALTER TABLE `cdr` ADD INDEX ( `calldate` ); 
 ALTER TABLE `cdr` ADD INDEX ( `dst` );

Ajustar o cdr_mysql.conf

Criar um arquivo de configuração informando a senha do Banco MySQL.
Exemplo: /etc/asterisk/cdr_mysql.conf

 ; 
 ; Note - if the database server is hosted on the same machine as the 
 ; asterisk server, you can achieve a local Unix socket connection by 
 ; setting hostname=localhost 
 ; 
 ; port and sock are both optional parameters.  If hostname is specified 
 ; and is not "localhost", then cdr_mysql will attempt to connect to the 
 ; port specified or use the default port.  If hostname is not specified 
 ; or if hostname is "localhost", then cdr_mysql will attempt to connect 
 ; to the socket file specified by sock or otherwise use the default socket 
 ; file. 
 ; 
 [global] 
  hostname=localhost 
  dbname=asteriskcdrdb 
  password=yourpassword 
  user=asteriskcdruser 
  ;port=3306 
  ;sock=/tmp/mysql.sock 
  ;userfield=1

Ajustar o modules.conf

Editar o /etc/asterisk/modules.conf e acrescentar

 load cdr_addon_mysql.so

e reinicializar o asterisk para carregar o módulo.

Verificando a implenetação

Entre no asterisk com asterisk -r e dê um restart now .

Entre novamente, e verifique:

asterisk*CLI> cdr mysql status
Connected to asteriskcdrdb@localhost, port 3306 using table cdr for 8 seconds.
Wrote 0 records since last restart.
asterisk*CLI>

Pronto, seu asterisk já está gravando o CDR em MySQL.

Obs: se voce for compilar o asterisk, lembre-se se acrescentar o “add on” e a biblioteca do MySQL (libmysqlclient15-dev).

BillVOIP – Tarifador Ligações VOIP – Asterisk

O sistema consiste em ler a tabela “cdr”, do banco de dados MySQL, na maquina onde está instalado o Asterisk e trazer as ligações para o servidor central onde serão tarifadas conforme regras pre-estabelecidas.

  • Conceder poderes para o usuario ler a tabela ‘cdr’ remotamente;

grant all on asteriskcdrdb.cdr to ‘cdr’@’%’ identified by ‘senha’;

flush privileges;

  • Alterar a tabela ‘cdr’ para conter mais dois campos;

alter table asteriskcdrdb.cdr add column enviado char(1) not null default ‘N’;
alter table asteriskcdrdb.cdr add column id bigint(20) NOT NULL auto_increment, add primary key (id);