Asterisk 1.2.0 Realtime com Postgresql
AsteriskPBXSoftware
Compilar Asterisk
AsteriskCompilar
Postgresql
PostgreSQL
Instalar postgresql
#!/bin/sh
apt-get install postgresql
Criar tabelas no postgresql
Criar banco.
#!/usr/bin/sudo -u postgres /usr/bin/psql template1
CREATE USER asterisk
WITH PASSWORD 'tabacudodoinferno'
NOCREATEDB NOCREATEUSER;
CREATE DATABASE db_asterisk
WITH OWNER asterisk
TEMPLATE template0;
\connect db_asterisk
CREATE TABLE cdr
(
id bigserial,
calldate timestamptz NOT NULL DEFAULT now(),
clid varchar(80) NOT NULL DEFAULT ''::character varying,
src varchar(80) NOT NULL DEFAULT ''::character varying,
dst varchar(80) NOT NULL DEFAULT ''::character varying,
dcontext varchar(80) NOT NULL DEFAULT ''::character varying,
channel varchar(80) NOT NULL DEFAULT ''::character varying,
dstchannel varchar(80) NOT NULL DEFAULT ''::character varying,
lastapp varchar(80) NOT NULL DEFAULT ''::character varying,
lastdata varchar(80) NOT NULL DEFAULT ''::character varying,
duration int8 NOT NULL DEFAULT 0::bigint,
billsec int8 NOT NULL DEFAULT 0::bigint,
disposition varchar(45) NOT NULL DEFAULT ''::character varying,
amaflags int8 NOT NULL DEFAULT 0::bigint,
accountcode varchar(20) NOT NULL DEFAULT ''::character varying,
uniqueid varchar(32) NOT NULL DEFAULT ''::character varying,
userfield varchar(255) NOT NULL DEFAULT ''::character varying,
CONSTRAINT cdr_p_key PRIMARY KEY (id)
);
ALTER TABLE cdr
OWNER TO asterisk;
ALTER TABLE cdr_id_seq
OWNER TO asterisk;
-- CREATE TABLE sip (
-- name varchar(40) NOT NULL default '' CONSTRAINT name_uni UNIQUE,
-- username varchar(40) NOT NULL default '',
-- "type" varchar(6) NOT NULL default '',
-- secret varchar(80) default NULL,
-- host varchar(31) default NULL,
-- callerid varchar(80) default NULL,
-- context varchar(80) default NULL,
-- dtmfmode varchar(7) default NULL,
-- mailbox varchar(50) default NULL,
-- nat varchar(5) default NULL,
-- qualify varchar(4) default NULL,
-- fromuser varchar(80) default NULL,
-- authuser varchar(80) default NULL,
-- fromdomain varchar(80) default NULL,
-- insecure varchar(4) default NULL,
-- canreinvite char(3) default NULL,
-- disallow varchar(100) default NULL,
-- allow varchar(100) default NULL,
-- restrictid varchar(6) default NULL,
-- ipaddr varchar(15) default NULL,
-- port varchar(5) default NULL,
-- regseconds int8 default NULL
-- );
CREATE TABLE sip (
id bigserial,
name varchar(80) NOT NULL default '' CONSTRAINT name_uni UNIQUE,
accountcode varchar(20) default NULL,
amaflags varchar(7) default NULL,
callgroup varchar(10) default NULL,
callerid varchar(80) default NULL,
canreinvite char(3) default 'yes',
context varchar(80) default NULL,
defaultip varchar(15) default NULL,
dtmfmode varchar(7) default NULL,
fromuser varchar(80) default NULL,
fromdomain varchar(80) default NULL,
host varchar(31) NOT NULL default '',
insecure varchar(4) default NULL,
language char(2) default NULL,
mailbox varchar(50) default NULL,
md5secret varchar(80) default NULL,
nat varchar(5) NOT NULL default 'no',
deny varchar(95) default NULL,
permit varchar(95) default NULL,
mask varchar(95) default NULL,
pickupgroup varchar(10) default NULL,
port varchar(5) NOT NULL default '',
qualify char(3) default NULL,
restrictcid char(1) default NULL,
rtptimeout char(3) default NULL,
rtpholdtimeout char(3) default NULL,
secret varchar(80) default NULL,
"type" varchar(6) NOT NULL default 'friend',
username varchar(80) NOT NULL default '',
disallow varchar(100) default 'all',
allow varchar(100) default 'g729;ilbc;gsm;ulaw;alaw',
musiconhold varchar(100) default NULL,
regseconds int8 NOT NULL default '0',
ipaddr varchar(15) NOT NULL default '',
regexten varchar(80) NOT NULL default '',
cancallforward char(3) default 'yes',
CONSTRAINT sip_p_key PRIMARY KEY (id)
);
ALTER TABLE sip
OWNER TO asterisk;
ALTER TABLE sip_id_seq
OWNER TO asterisk;
CREATE TABLE extension (
id bigserial,
context varchar(20) NOT NULL default '',
exten varchar(20) NOT NULL default '',
priority int4 NOT NULL default '0',
app varchar(20) NOT NULL default '',
appdata varchar(128) NOT NULL default '',
CONSTRAINT uni_v UNIQUE (context,exten,priority),
CONSTRAINT extensions_p_key PRIMARY KEY (id)
);
ALTER TABLE extension
OWNER TO asterisk;
ALTER TABLE extension_id_seq
OWNER TO asterisk;
Configuracoes de acesso
#!/bin/sh
cat << EOF > /etc/postgresql/pg_hba.conf
local all postgres ident sameuser
# All other connections by UNIX sockets
local all all ident sameuser
# db_asterisk
host db_asterisk asterisk 127.0.0.1 255.255.255.255 md5
# reject all other connection attempts
host all all 0.0.0.0 0.0.0.0 reject
EOF
/etc/init.d/postgresql reload
ODBC
Instalar unixODBC
O asterisk só tem suporte (até onde eu sei) a mysql e odbc para realtime.
#!/bin/sh
apt-get install unixodbc-bin odbc-postgresql
Configurar unixODBC
Como eu uso um servidor remoto e meu X esta desabilitado a porta 600x vou usar o Xnest para poder executar o ODBCConfig
#!/bin/sh
Xnest -ac :1 -geometry 720x480 & twm -display :1
rodar o ODBCConfig no servidor agora
#!/bin/sh
# odbcinst -i -d -f /usr/share/psqlodbc/odbcinst.ini.template
DISPLAY="146.209.3.16:1" ODBCConfig
Clique em
Drivers,
Add... agora colque:
Name=PostgreSQL,
Driver=/usr/lib/odbc/psqlodbc.so,
Setup=/usr/lib/odbc/libodbcpsqlS.so,
FileUsage=1 clique na setinha de confirmação (check)
Vou usar uma system DSN porque eu quero (e a máquina também não é compartilhada com mas niguem

)
Clique em
System DSN,
Add.. selecione
PostgreSQL e clique em
OK, coloque agora:
Name=asterisk,
Database=db_asterisk,
username=asterisk,
password=tabacudodoinferno, clique na setinha de confirmação (check).
Testar a configuração
Como eu uso um servidor remoto e meu X esta desabilitado a porta 600x vou usar o Xnest.
#!/bin/sh
Xnest -ac :1 -geometry 720x480 & twm -display :1
Pronto, podemos testar com o
DataManager
#!/bin/sh
DISPLAY='146.209.3.16:1' /usr/bin/DataManager
Vá em ODBC > System Data Sources > asterisk , coloque como
id=asterisk e
PWD=tabacudodoinferno
Configurar Asterisk
cdr (log de chamadas)
configurar /etc/asterisk/cdr_odbc.conf
;
; cdr_odbc.conf
;
[global]
dsn=asterisk
username=asterisk
password=tabacudodoinferno
loguniqueid=yes
dispositionstring=yes
table=cdr
usegmtime=no
res_odbc.config
[asterisk]
dsn => asterisk
username => asterisk
password => tabacudodoinferno
pre-connect => yes
modules.conf
Garantir que estas linhas estão no
modules.conf
preload => res_odbc.so
preload => res_config_odbc.so
extconfig.conf
Aqui é onde eu digo que o aterisk irá pegar os usuários e extensões do banco (realtime)
[settings]
sipusers => odbc,asterisk,sip
sippeers => odbc,asterisk,sip
extensions => odbc,asterisk,extension
cadastrar um usuário sip
Um usuario com entrado no arquivo sip.conf assim:
[iuridiniz]
allow=ulaw
type=friend
context=default
host=dynamic
dtmfmode=rfc2833
secret=irru
deny=0.0.0.0/0.0.0.0
permit=146.209.3.16/255.255.255.255
permit=146.201.111.108/255.255.255.255
ficaria assim como query para INSERT no banco:
#!/usr/bin/psql -W -h localhost -U asterisk db_asterisk
INSERT INTO sip (name, allow, "type", context, host, dtmfmode, secret, deny, permit) VALUES ('iuridiniz','ulaw;alaw', 'friend', 'default', 'dynamic', 'rfc2833', 'irru', '0.0.0.0/0.0.0.0', '146.209.3.16/255.255.255.255;146.201.111.108/255.255.255.255');
executando o comando:
realtime load sipusers name iuridiniz detro do shell do asterisk vc obtem informacoes sobre o usuario.
executando o comando:
realtime update sipusers name iuridiniz allow ulaw;alaw;gsm voce troca os codecs permitidos de iuridiniz para ulaw, alaw e gsm.
Configurando extensoes
é ideal que cada usuario sip tenha um numero, entao configuraremos isto, para o proposito de exemplo, os usuarios sip agora teram como contexto 'sip-db-users' entao ao adiconar usuarios sip use este contexto
adicione as seguintes linhas no /etc/asterisk/extensions.conf
[sip-db-users]
switch => Realtime/@
Para as seguintes linhas em
/etc/asterisk/extensions.conf:
[sip-db-users]
exten => _09.,1,DIAL(SIP/${EXTEN}@${ROUTER})
exten => _09.,102,Congestion
exten => 60001,1,DIAL(SIP/60001)
exten => 60002,1,DIAL(SIP/60002)
as entradas no banco de dados ficaram assim:
INSERT INTO extension (context,exten,priority,app,appdata) VALUES ('sip-db-users', '_09.', 1, 'DIAL', 'SIP/${EXTEN}@${ROUTER}');
INSERT INTO extension (context,exten,priority,app) VALUES ('sip-db-users', '_09.', 102, 'Congestion');
INSERT INTO extension (context,exten,priority,app,appdata) VALUES ('sip-db-users', '60001', 1, 'DIAL', 'SIP/60001');
INSERT INTO extension (context,exten,priority,app,appdata) VALUES ('sip-db-users', '60002', 1, 'DIAL', 'SIP/60002');
realtime load extensions exten 60001
--
IuriDiniz - 26 Oct 2005