Enviado por admin el
En artículos anteriores hemos visto como configurar Asterisk en Realtime para los mensajes de voz, las conferencias y los registros de las llamadas. En este articulo veremos como configurar Asterisk, con el conector ODBC para registrar las extensiones SIP (peer y user) en Realtime.
Quizás la parte más complicada de todo el proceso es la creación de la tabla donde iremos a almacenar los parámetros de las extensiones. Algunos campos de la tabla son requeridos y hay que indicarlos obligatoriamente. Otros son opcionales y depende del tipo de extensiones que vamos a configurar.
Para tener una idea de los campos que podemos crear en la tabla podemos mirar la salida de este comando:
asterisk –rvvvvvvvvvvvvvv
CLI> sip show peer 1800
Name : 1800
Realtime peer: No
Secret : <Set>
MD5Secret : <Not set>
Remote Secret: <Not set>
Context : local
Subscr.Cont. : subscribe
Language : it
Accountcode : 1800
AMA flags : Unknown
Transfer mode: open
CallingPres : Presentation Allowed, Not Screened
Callgroup :
Pickupgroup :
Mailbox : 1800@default
VM Extension : asterisk
LastMsgsSent : 32767/65535
Call limit : 2
Dynamic : Yes
Callerid : "Fulano" <1800>
MaxCallBR : 384 kbps
Expire : -1
Insecure : no
Nat : Always
ACL : No
T.38 support : Yes
T.38 EC mode : FEC
T.38 MaxDtgrm: 400
DirectMedia : No
PromiscRedir : No
User=Phone : No
Video Support: Yes
Text Support : Yes
Ign SDP ver : No
Trust RPID : No
Send RPID : No
Subscriptions: Yes
Overlap dial : No
Forward Loop : Yes
DTMFmode : rfc2833
Timer T1 : 500
Timer B : 32000
ToHost :
Addr->IP : (Unspecified) Port 5060
Defaddr->IP : 0.0.0.0 Port 5060
Prim.Transp. : UDP
Allowed.Trsp : UDP
Def. Username:
SIP Options : (none)
Codecs : 0x28010c (ulaw|alaw|g729|h263|h264)
Codec Order : (g729:20,alaw:20,ulaw:20)
Auto-Framing : No
100 on REG : Yes
Status : UNKNOWN
Useragent :
Reg. Contact :
Qualify Freq : 60000 ms
Sess-Timers : Accept
Sess-Refresh : uas
Sess-Expires : 1800 secs
Min-Sess : 90 secs
Parkinglot :
Todos los parámetros que aparecen podemos configurarlos en la tabla, más algunos que son requeridos por Asterisk.
En el ejemplo que voy a presentar he incluido casi todos.
Primero creamos la tabla en una nueva base de datos:
mysql –u root –psesamo
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 42504
Server version: 5.0.77-log Source distribution
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> create database siprealtime;
Query OK, 1 row affected (0.01 sec)
mysql> use siprealtime
Database changed
mysql> CREATE TABLE `sipfriends` (
`name` varchar(40) NOT NULL default ' ',
`type` varchar(10) NOT NULL default ' ',
`defaultuser` varchar(40) default NULL,
`fromuser` varchar(40) default NULL,
`fromdomain` varchar(40) default NULL,
`secret` varchar(40) default NULL,
`md5secret` varchar(40) default NULL,
`auth` varchar(10) default NULL,
`mailbox` varchar(20) default NULL,
`subscribemwi` varchar(10) default NULL,
`vmexten` varchar(20) default NULL,
`callerid` varchar(40) default NULL,
`cid_number` varchar(40) default NULL,
`callingpres` varchar(20) default NULL,
`usereqphone` varchar(10) default NULL,
`language` varchar(10) default NULL,
`incominglimit` varchar(10) default NULL,
`context` varchar(40) NOT NULL default ' ',
`subscribecontext` varchar(40) default NULL,
`amaflags` varchar(20) default NULL,
`accountcode` varchar(20) default NULL,
`musicclass` varchar(20) default NULL,
`mohsuggest` varchar(20) default NULL,
`allowtransfer` varchar(20) default NULL,
`callgroup` varchar(20) default NULL,
`pickupgroup` varchar(20) default NULL,
`autoframing` varchar(10) default NULL,
`disallow` varchar(20) default 'all',
`allow` varchar(20) default NULL,
`maxcallbitrate` varchar(15) default NULL,
`host` varchar(40) default 'dynamic',
`outboundproxy` varchar(40) default NULL,
`ipaddr` varchar(20) NOT NULL default ' ',
`defaultip` varchar(20) NOT NULL default '0.0.0.0',
`port` int(6) NOT NULL default '0',
`fullcontact` varchar(60) default NULL,
`insecure` varchar(20) default NULL,
`qualify` varchar(15) default NULL,
`regseconds` int(11) NOT NULL default '0',
`regexten` varchar(20) default NULL,
`regserver` varchar(20) default NULL,
`rtptimeout` varchar(15) default NULL,
`rtpholdtimeout` varchar(15) default NULL,
`rtpkeepalive` varchar(15) default NULL,
`lastms` int(11) NOT NULL default '-1',
`setvar` varchar(200) default NULL,
`Nat` varchar(3) NOT NULL,
`useragent` varchar(40) default NULL,
`Directmedia` varchar(3) default 'no',
`Deny` varchar(31) default '',
`Permit` varchar(31) default NULL,
PRIMARY KEY (`name`),
KEY `host` (`host`,`port`),
KEY `ipaddr` (`ipaddr`,`port`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Query OK, 0 rows affected (0.01 sec)
Damos al usuario asterisk los permisos para la base de datos creada (desde local y desde remoto)
mysql> GRANT ALL PRIVILEGES ON siprealtime.* TO 'asterisk'@'localhost' IDENTIFIED BY 'sesamo';
Query OK, 0 rows affected (0.07 sec)
mysql> GRANT ALL PRIVILEGES ON siprealtime.* TO 'asterisk'@'%' IDENTIFIED BY 'sesamo';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
mysql> quit
Bye
Ahora modificamos el archivo odbc.ini para agregar esta base de datos al conector ODBC:
nano /etc/odbc.ini
Al final del archivo pegamos las líneas que siguen:
[asterisksip]
Description = MySQL connection to 'asterisk-sip' database
Driver = MySQL
Database = siprealtime
Server = localhost
User = asterisk
Password = sesamo
Port = 3306
Option = 3
Modificamos el archivo res_odbc.conf que es el encargado del Realtime con ODBC:
nano /etc/asterisk/res_odbc.conf
Después de la etiqueta [ENV] pegamos las líneas que siguen:
[asterisk]
enabled => yes
dsn => asterisksip
username => asterisk
password => sesamo
pre-connect => yes
Si se fijan bien, en dns aparece el nombre de la etiqueta que da inicio al bloque configurado en el archivo odbc.ini
Por ultimo modificamos el archivo extconfig.conf que es donde se define el realtime estático y dinámico para Aasterisk:
nano /etc/asterisk/extconfig.conf
Modificamos estas dos líneas:
;sipusers => odbc,asterisk
;sippeers => odbc,asterisk
para que queden:
sipusers => odbc,asterisk,sipfriends
sippeers => odbc,asterisk,sipfriends
Guardamos los cambios. Aquí también, si se fijan, verán que el parámetro asterisk definido en ambas líneas es el nombre de la etiqueta inicial del bloque configurado en el archivo res_odbc.conf
Terminada la configuración podemos recargar la configuración de Asterisk:
/etc/init.d/asterisk reload
entramos en la consola de Asterisk y averiguamos la conexión con ODBC:
asterisk –rvvvvvvvvvvvvvvvvvvv
CLI> odbc show
ODBC DSN Settings
-----------------
Name: asterisk
DSN: asterisksip
Pooled: No
Connected: Yes
Parece que todo está funcionando. Salimos de la consola:
CLI> quit
Llegados a este punto tendremos que definir nuestra primera extensión en realtime. Para hacerlo podemos aprovechar de la sencillez que algunos programas brindan para manipular base de datos, entre ellos, webmin y phpadmin. En mi caso he optado para webmin:
En la lista de las base de datos encontraremos siprealtime. Dando un click sobre ella aparecerá una nueva ventana que contiene la tabla y la claves definidas para la tabla:
Damos otro click sobre la carpeta de la tabla sipfriends y tendremos una lista completa de todos los campos definidos en la tabla. Llegamos al final de la pagina y hundimos el botón “View data”:
La tabla está vacía. Para añadir una nueva entrada presionamos el botón “Add row” y vamos rellenando los campos para la extensión de prueba 1850:
Al terminar presionamos el botón “Save”
Si desde la consola hacemos un sip show peers la extensión no aparecerá; Pero con el comando que sigue veremos la configuración de la extensión:
asterisk –rvvvvvvvvvvvvvvvv
CLI> sip show peer 1850 load
Name : 1850
Realtime peer: Yes, cached
Secret : <Set>
MD5Secret : <Not set>
Remote Secret: <Not set>
Context : phones
Subscr.Cont. : subscribe
Language : es
AMA flags : Unknown
Transfer mode: open
CallingPres : Presentation Allowed, Not Screened
FromUser : 1850
Callgroup : 1
Pickupgroup : 1
Mailbox : 1850@default
VM Extension : asterisk
LastMsgsSent : 32767/65535
Call limit : 2147483647
Dynamic : Yes
Callerid : "Prueba Realtime" <1850>
MaxCallBR : 384 kbps
Expire : -1
Insecure : no
Nat : Always
ACL : No
T.38 support : Yes
T.38 EC mode : FEC
T.38 MaxDtgrm: 400
DirectMedia : No
PromiscRedir : No
User=Phone : No
Video Support: Yes
Text Support : Yes
Ign SDP ver : No
Trust RPID : No
Send RPID : No
Subscriptions: Yes
Overlap dial : No
Forward Loop : Yes
DTMFmode : rfc2833
Timer T1 : 500
Timer B : 32000
ToHost :
Addr->IP : (Unspecified) Port 0
Defaddr->IP : 0.0.0.0 Port 5060
Prim.Transp. : UDP
Allowed.Trsp : UDP
Def. Username: 1850
SIP Options : (none)
Codecs : 0xc (ulaw|alaw)
Codec Order : (ulaw:20,alaw:20)
Auto-Framing : No
100 on REG : Yes
Status : Unmonitored
Useragent :
Reg. Contact :
Qualify Freq : 60000 ms
Sess-Timers : Accept
Sess-Refresh : uas
Sess-Expires : 1800 secs
Min-Sess : 90 secs
Parkinglot :
Para la parte user:
CLI> sip show user 1850 load
Name : 1850
Secret : <Set>
MD5Secret : <Not set>
Context : phones
Language : es
AMA flags : Unknown
Transfer mode: open
MaxCallBR : 384 kbps
CallingPres : Presentation Allowed, Not Screened
Call limit : 2147483647
Callgroup : 1
Pickupgroup : 1
Callerid : "Prueba Realtime" <1850>
ACL : No
Sess-Timers : Accept
Sess-Refresh : uas
Sess-Expires : 1800 secs
Sess-Min-SE : 90 secs
Codec Order : (ulaw:20,alaw:20)
Auto-Framing: No
Por ultimo configuramos la extensión en X-Lite
y miramos que aparece en la consola de Asterisk:
Algunos parámetros de la configuración de la extensión son obligatorios otros aceptan solo un determinado valor. Un ejemplo es el qualify. Si cambiamos el campo del qualify da no a yes en la consola de Asterisk aparecerá:
Tenemos dos opciones: o modificar el parámetro rtcachefriends en el sip.conf de la siguiente manera:
rtcachefriends=yes
o poner el qualify a no.
En el próximo articulo veremos como hacer la misma cosa con MySQL en lugar de ODBC
Comentarios recientes