Asterisk 1.6.2.X - MySQL SIP Realtime

La configuración de Asterisk en Realtime para las extensiones SIP, apoyándose a una base de datos MySQL, es muy parecida a la que ya vimos con ODBC. Primero creamos una base de datos y la tabla:

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

Modificamos el archivo res_mysql.conf

nano /etc/asterisk/res_mysql.conf

Modificamos estas líneas:

[general]
;dbhost = 127.0.0.1
;dbname = asterisk
;dbuser = myuser
;dbpass = mypass
;dbport = 3306
;dbsock = /tmp/mysql.sock

Para que queden:

[general]
dbhost = 127.0.0.1
dbname = siprealtime
dbuser = asterisk
dbpass = sesamo
dbport = 3306
dbsock = /var/lib/mysql/mysql.sock

Por ultimo modificamos el archivo de configuración de Asterisk para el Realtime:

nano /etc/asterisk/extconfig.conf

Cambiamos estas dos líneas:

;sipusers => odbc,asterisk
;sippeers => odbc,asterisk

Para que queden:

sipusers => mysql,general,sipfriends
sippeers => mysql,general,sipfriends

Recargamos la configuración de Asterisk y averiguamos que todo esté bien:

/etc/init.d/asterisk reload

asterisk –rvvvvvvvvvvvv

CLI> realtime mysql status

general connected to siprealtime@127.0.0.1, port 3306 with username asterisk for 58 seconds.

Ahora podemos configurar nuestra primera extensión (1850) en la tabla sipfriends (utilizando el mismo procedimiento visto en el articulo anterior) y averiguar que la extensión esté disponible:

CLI> sip show peer 1850 load

El resultado será:

* 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      : No
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 5060
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  : (alaw:20,ulaw: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   :

Nos conectamos con X-lite:

rtmysql1

Ya tenemos SIP en realtime con MySQL

Vota el Articulo: 

Sin votos (todavía)
Evalúa la calidad del articulo

8 comentarios

no encuentro el archivo mysql.sock

Hola esta excelente  el articulo, solo quería plantearte  un problema que tuve, antes que nada quería comentarte que tengo instalado asterisk en Ubuntu 10.10,  la versión 1.6.2.18,  el motor de base de datos mysql lo instale con el paquete completo  de LAMP  a traves de la heramienta tasksel,  bueno el problema en si es que el archivo mysql.sock no existe en ninguna parte, intente buscandolo con el buscador de archivos de gnome  y con poniendo en  la consola find / | grep sock  o  intente con  find / | grep mysql.sock y nada el archivo no existe!  no se si hay alguna manera de generarlo,  y no se si desintalando mysql y volver a instalarlo va a solucionar el problema, que me recomiendas hacer en este caso? , desde ya muchas gracias 


Pd: lo googlie y no encuentro la respuesta tampoco :( 

no encuentro el archivo mysql.sock

Solucione el problema!, si quieren encontrar  el archivo mysql.sock  deben buscar la ruta correcta en  el archivo my.cnf  que por lo general esta en etc/asterisk/ cuando  se nstala asterisk en ubuntu, de todas maneras muchas gracias si se preocuparon por mi consulta :)

mysql me sigue dando error

Hola que tal amigo, sigo teniendo problemas con mysql  y no puedo encontrar la solución, ya intente de la manera que dijiste de que la linea 

;dbsock = /var/run/mysqld/mysqld.sock

 La coloque como comentada pero  en la consola de asterisk me sigue mostrando el siguiente mensaje  una y otra vez:

[May  2 17:23:07] WARNING[2597]: config.c:2018 find_engine: Realtime mapping for 'sippeers' found to engine 'mysql', but the engine is not available

te  paso antes esto ? sabes cual podria ser una solucion ?

desde ya muchas gracias! 

No encuentra la extension 1850

Buenas tardes:

Desde hace unas semanas, he seguido este blog, la verdad que es uno de los mejores para los que nos inicamos en Asterisk y Linux, bien pasemos al punto.

Realice cuidadosa mente las instrucciones que mencionas, me conecto sin problema desde asterisk a mysql, cree la base de datos, el usuario, modifique los archivos correspondientes

Ejecutar la sentencia  realtime mysql status desde el CLI>

general connected to pbx@127.0.0.1, port 3306 with username asterisk for 17 minutes.

tambien realice el registro de la extension 1850 desde webmin, pero al ejecutar la sentencia  sip show peer 1850 load

la salida que me muestra es la siguiente

Peer 1850 not found.

y cuando trato de registrarme desde el softphon (3CX) esto es lo que me muestra la consolo

[Nov  8 14:39:58] NOTICE[3129]: chan_sip.c:24331 handle_request_register: Registration from '"1850"<sip:1850@192.168.10.4:5060>' failed for '192.168.10.3:61937' - No matching peer found

Tengo instalado en CentOS 6 la version 1.8.7.1 de Asterisk y la version 5.5 de mysql

Cual podra ser la razon por la que no logro conectarme al mi PBX??

Saludos y gracias por tu tiempo

Re: No encuentra la extension 1850

Hola,

revisa la tabla de la base de datos. A veces en el campo Name antes de 1850 se crea un espacio y es por eso que Asterisk no encuentra la extensión.

Te agradezco que cuando encuentres la solución escribas un comentario para que sirva a los demás.

Saludos

Solucionado

Buenas tardes:

Gracias por tu pronta respuesta, en efecto verifique lo del espacio en el campo nombre  y lo elimine, con eso ya puedo trabajar con la extension 1850

saludos

Suscribirse a Comentarios de "Asterisk 1.6.2.X - MySQL SIP Realtime" Suscribirse a VozToVoice - Todos los comentarios