Asterisk SIP Realtime , extensiones sip desde base de datos
A petición de los alumnos del curso de Telefonía IP con Asterisk , el cual tengo el gusto de dictar en la U. del Callao , aquí les dejo un pequeño manual de como configurar Realtime en Asterisk para la creación de extensiones sip desde una base de datos mysql.
1.-CREACION DE TABLA «sip_buddies»
Esta tabla es la cual va almacenar las extensiones sip, la menara mas sencilla de crearla es atravez de phpmyadmin , aqui les dejo el scrip
http://www.silcom.com.pe/soft/asterisk/sip_buddies.sql
2.- CONFIGURACION DE ASTERISK Y REALTIME
a) Ingresar a los archivos «res_mysql.conf» y «extconfig.conf» e ingresar la siguiente informacionrespectiva
#vi /etc/asterisk/res_mysql.conf
[general]
dbhost = 127.0.0.1 ;en caso de que Asterisk y mySQL compartan el mismo servidor.
dbname = mibasededatos
dbuser = miusuario
dbpass = micontrasena
dbport = 3306 ;puerto por defecto en mySQL
#vi /etc/asterisk/extconfig.conf
sipusers => mysql,asteriskcdr,sip_buddies
sippeers => mysql,asteriskcdr,sip_buddies
3) CONFIGURACIÓN DEL ARCHIVO «sip.conf»
#vi /etc/asterisk/sip.conf
[general]
language=es
context = micontexto
bindport = 5060
bindaddr = 0.0.0.0
srvlookup=yes
rtcachefriends=yes
disallow=all
allow=ulaw
allow=allaw
allow=gsm
4.- AGREGANDO EXTENSIONES SIP A LA BASE DE DATOS
Agregarmos las extensiones 101 y 102 a la tabla «sip_buddies» , esto lo pueden hacer desde phpmyadmin sin problema alguno , de la siguiente forma :
INSERT INTO sip_buddies (name, callerid, secret, host, context, mailbox, qualify, dtmfmode) VALUES (101, «101», 101, «dynamic», «micontexto», «101@default», «yes», «RFC2833»);
INSERT INTO sip_buddies (name, callerid, secret, host, context, mailbox, qualify, dtmfmode) VALUES (102, «102», 102, «dynamic», «micontexto», «102@default», «yes», «RFC2833»);
5.- CONFIGURANDO SOFPHONE PARA REGISTRO
A) Configurar un sofphone (el de su prefencia) para registrarlo como extension valida en el servidor asterisk , esta seria la configuracion usando ekiga
b) Verficar registro , si todo esta correcto al pulsar aceptar , el servidor Asterisk debera recibir la peticion de registro y lo consultara con la base de datos y tabla configurara , de la siguiente forma en el CLI de Asterisk:
Connected to Asterisk currently running on centralpbx1 (pid = 2234)
Verbosity is at least 13
— Remote UNIX connection
— Registered SIP ‘101’ at 192.168.1.101 port 5060 expires 3600
— Saved useragent «Ekiga/3.2.6» for peer 101
[May 1 08:10:15] NOTICE[2334]: chan_sip.c:12669 handle_response_peerpoke: Peer ‘101’ is now Reachable. (5ms / 2000ms)
Lo cual nos indica que la extension 101 , ha sido correctamente registrada , y lo podemos comprobar de la siguiente forma :
Asterisk *CLI>sip show peers
centralpbx1*CLI> sip show peers
Name/username Host Dyn Nat ACL Port Status Realtime
102/102 D 5060 UNREACHABLE
101/101 192.168.1.101 D 5060 OK (3 ms)
2 sip peers [Monitored: 1 online, 1 offline Unmonitored: 0 online, 0 offline]
6.- DESARROLLANDO EL DIALPLAN
a) Configurar el archivo «extensions.conf» de la siguiente forma :
#vi /etc/asterisk/extensions.conf
[general]
static=yes
writeprotect=no
autofallthrough=yes
clearglobalvars=no
priorityjumping=no
[globals]
[ramales]
; Carga de datos via RealTime
switch => Realtime/@
;Comunicacion entre anexos
exten=>_102,1,Dial(SIP/102,10,Ttr)
exten=>_101,1,Dial(SIP/101,10,Ttr)
7.- REALIZAR PRUEBAS
Una vez configurado el dialplan , ingresar al CLI de Asterisk y ejecutar el comando «dialplan reload» , luego probar la comunicación entre los anexos 101 y 102 (evidentemente tienen que registrar el anexo 102 antes) , si todo esta correcto podran tener comunicacion entre las dos extensiones.
Tarea pendiente : Con esto ya podrian desarrollar una interface de usuario para ingresar extensiones a la base de datos.
Espero que les Sirva la información
La información está muy buen escrita y es bueno encontrar este tipo de artículos que son tan difíciles de ubicar en la red. Por supuesto que la tecnología de asterisk todavía se encuentra en pañales en el concierto de la telefonía latinoamericana, pero a medida que vaya pasando el tiempo podemos constatar efectivamente que habrá un mayor acercamiento de la sociedad hacia este tipo de servicio que sin duda es de un gran alivio y significa una gran ayuda para toda la población en general. Muy bien por este post.
Amigo una consulta lo que estas haciendo es combinar Asterisk Realtime para anexos SIP y extensions.conf plano ya que la configuracion de los anexos lo haces por base de datos y su comportamiento en archivo plano podrias indicarme como es posible la integracion para tenerlo mas claro que significa.
[ramales]
; Carga de datos via RealTime
switch => Realtime/@
Que es lo que hace esta funcion.
Te agradezco anticipadamente por la atencion y la repsuesta a mi duda.
Hola
[ramales] ; seria le conexto que usas para las extensiones
switch => Realtime/@ ; es justamente la variable que hace el «link» con la base de datos , es decir fuerza a que las extensiones sean buscadas en la bd.
Saludos
Juan
Quiere decir que puedo combinar realtime extensions con archivo plano extensions.conf, por otro lado tengo el siguiente problema
WARNING[6669]: res_config_mysql.c:317 realtime_mysql: MySQL RealTime: Invalid database specified: asteriskrt (check res_mysql.conf)
a que se puede deber este error ya he probado de todo.
Gracias anticipadamente por la atencion a mi pregunta.
Armando
Hola , en realidad si , puedes combinar ambos , sobre tu error verifica bien el nombre de la base de datos y tabla o los campos por que el error es claro
Invalid database specified: asteriskrt (check res_mysql.conf)
Saludos
Doctor he cargado el script de base de datos que esta publicado por tu persona ademas he probado y si hay conectividad, realtime mysql status y si es correcto, al igual que cdr mysql status, tambien he probado que el modulo este cargado correctamente solo al registrar el anexo me muestra el error arriba indicado que puedo estar haciendo mal, estoy utilizando asterisk 1.6 y asterisk-addons-1.6 me puedes indicar por donde puede estar mi error en base a tu experiencia se me olvida tambien le he dado los permisos pertinentes de base de datos.
Armando
Esto esta desarrollado para asterisk 1.4.x , me parece que en 1.6 el manejo de realtime es diferente.
Saludos
El problema esta aqui:
[general] // cambiar por el nombre de la base «mibasededatos»
dbhost = 127.0.0.1 ;en caso de que Asterisk y mySQL compartan el mismo servidor.
dbname = mibasededatos
dbuser = miusuario
dbpass = micontrasena
dbport = 3306 ;puerto por defecto en mySQL
osea:
[mibasededatos]
dbhost = 127.0.0.1 ;en caso de que Asterisk y mySQL compartan el mismo servidor.
dbname = mibasededatos
dbuser = miusuario
dbpass = micontrasena
dbport = 3306 ;puerto por defecto en mySQL
Saludos.
A work mate recommended me to this site. Thnx for the details.
Amigos soy muy novato en este ambiente y tengo unos problemas agradezco que me guiaran de la mejor forma.
1. Mis archivos de llamada no se guardan con el numero de extension.
2. Nec hacer q desde una web pueda acceder a esos archivos y escucharlos, es necesario tenerlos una BD para poder tenerlos asociados con la info de la llamada ?
tengo asterisk , mysql.
Hola
He encontrado muy interesante su ejercicio sobre asterisk.
Actualmente llevo 2 semanas configurando asterisk (elastix) para su integración con MS Active Directory, y anda bien el jale de usuarios, datos, y asignación de extensiones, exceptuando cuando se quiere hacer una llamada.
Al realizarla, no funciona el realtime muy bien, no sabe donde dirijir la llamada, nunca enlaza y borra del registro la IP de los teléfonos.
Tiene alguna sugerencia de extensions.conf para su trabajo con realtime y LDAP?
Hola ummm , hace ya un tiempo que no juego con realtime , en todo caso seria interesante que postees tu avance , así se puede replicar y encontrar el problema.
Saludos
Juan Oliva
Hola el script de la bbdd ya no está activo 😦
Amigos, como puedo hacer para que 1 extensiones no se registre en dos maquinas distintas..?!?! Por favor podrian darme una mano?.
Gracias..!
a que te refieres con registre en dos maquinas distintas?
Hola, se que este comentario es ya algo viejo, pero estoy usando asterisk 1.11, y me gustaria saber si es posible cargar los clientes sip desde una base de datos en postgresql?
Hola Yordan
Claro! , es posible con odbc para postgresql solo es necesario que respetes la estructura de campos como en MYSQL.
Saludos
Juan Oliva
Si, con odbc claro que es posible, me referia a si era posible hacerlo sin usar odbc, como lo hace con mysql sin necesidad de un intermediario (odbc)
Es posible , mira este material : https://www.howtoforge.com/installing-and-configuring-asterisk-1.6-and-postgresql-to-manage-cdr-and-realtime-config-on-debian
Saludos
Juan
Si, ya veo, supongo que la configuración para el asterisk 1.11 en ubuntu sea semejante, voy a intentarlo a ver que tal me va. Por otro lado juan, dime si sabes de algun tutorial donde configuren correctamente la videoconferencia en asterisk, porque donde lo he encontrado no me funciona bien.
muchas gracias por responderme
salu2s
yordan
hola juan mira es que necesito conectar un crm a elastix tu de pronto me podría ayudar como me conecto y por que puerto, el crm es en la nube y trabaja con mysql
Hola, tengo extensiones PJSIP y mi extensions.ael no funciona en la parte donde mando llamar la funcion REALTIME.
macro permiso(campo,dest) {
Set(Fila=${REALTIME(services,exten,${CALLERID(num) },&)});
//Set(${CUT(Fila,&,2)}); // Password
Set(valor=${CUT(CUT(Fila,&,${campo}),=,2)}); // Campo correspondiente
switch (${valor}) {
case 1: // Salir a todo
goto from-internal|${dest}|1;
break;
case 2: // Pedir pass
Authenticate(${password});
goto from-internal|${dest}|1;
break;
default: // No salir a nada
Playback(privacy-incorrect);
Congestion(10);
Hangup;
};
};
en mi extconfig.conf ya di de alta las familias
[settings]
services => mysql,general,services
huespedes => mysql,general,huespedes
Incluso ya esta la conexion con la base de datos pero no me lee los datos la funcion REALTIME. Estoy utilizando FreePBX 14 con asterisk 13.
Antes funcionaba bien cuando tenia elastix 2.5 y todas mis extensiones eran sip
Saludos
Hola como cambio el nombre las extenesiones?