Asterisk 1.6.2.X - ODBC SIP Realtime

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:

sip-odbc1

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:

sip-odbc2

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”:

sip-odbc4

 

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:

sip-odbc5

sip-odbc6

sip-odbc7

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

sip-odbc8

y miramos que aparece en la consola de Asterisk:

sip-odbc9

 

 

 

 

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á:

sip-odbc10

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

Vota el Articulo: 

Sin votos (todavía)
Evalúa la calidad del articulo
Suscribirse a Comentarios de "Asterisk 1.6.2.X - ODBC SIP Realtime" Suscribirse a VozToVoice - Todos los comentarios