Hoy vamos ha añadir presencia SIMPLE (Session Initiation Protocol for Instant Messaging and Presence Leveraging Extensions) a nuestro servidor OpenSER, de manera que podamos ver el estado de los dispositivos (si están online u ofline).
Para esto, lo primero que necesitamos es tener compilado el módulo ‘presence’ (si estáis instalando de paquetes deb saltaos esta parte:) ). El módulo ‘presence’ depende de la librería ‘libxml’, así que la instalamos:
#apt-get install libxml2 libxml2-dev
Editamos el Makefile de OpenSER y eliminamos ‘presence’ de la seción ‘exclude_modules’. Ahora, recompilamos:
#make clean
#make prefix=/
#make prefix=/ include_modules="mysql presence" modules
#make prefix=/ install
Ya tenemos los ficheros necesarios, ahora a configurar! Añadimos esto al principio del fichero, donde cargamos los módulos y ponemos los parámetros:
loadmodule «presence.so»
modparam(«presence», «db_url», «mysql://openser:openserrw@localhost/openser»)
modparam(«presence», «max_expires», 3600)
modparam(«presence», «force_active», 1)
modparam(«presence», «server_address», «sip:192.168.1.123:5060»)
Sustituye 192.168.1.123 por la IP de tu servidor OpenSER.
Tenemos que tratar la presencia, así que en la sección donde tratamos los mensajes de manera individual añadimos:
## Presencia
else if (method==»PUBLISH» || method==»SUBSCRIBE») {
route(8);
exit;
}
Y por último creamos ese route 8 donde trataremos los mensajes relativos a la presencia:
# —————————————————————–
# PRESENCE handler
# —————————————————————–route[8]
{## Auth check
route(22);## Alias check
route(20);## Location check
route(21);if (method==»PUBLISH») {
handle_publish();
t_release();
}
else if (method==»SUBSCRIBE») {
handle_subscribe();
t_release();
}
}
Ya está! Con esto ya tenemos OpenSER listo para soportar presencia!
NOTA (si usas X-Lite): El modo de presencia que hay que seleccionar es «Presence Agent».
Hola… Con que version de Openser estan trabajando en esta explicacion?
Lo hice en su día con la 1.2.0, aunque en la 1.3 debería funcionar 🙂
Si funciona en la version 1.3, pero cuando pasa una hora los clientes aparecen offline a pesar de que siguen registrados, alguna idea ?
Se me olvido esto pasa con Xlite
Has seleccionado el modo de presencia «Presence Agent»?
Si he seleccionado «Presence Agent»
Haciendo una captura con ngrep, ves los PUBLISH y SUBSCRIBE?
Buen día, al parecer a quedado resuelto y era problema de las tablas de mysql por la tabla de «presentity» no se guardaban correctamente solo recree las tablas y configure la siguiente lineas para su persistencia.
modparam(«usrloc», «db_mode», 2)
modparam(«usrloc», «db_url», «mysql://openser:openserrw@localhost/openser»)
Lo curioso del caso es que hecho esto aun no se veían las actualización de los cambios en los clientes, hasta que reinicie los clientes xlite y se volvieron a registrar supongo que hasta ese entonces empezaron a hacer uso de la tablas presentity, active_watchers y watchers.
Alguna idea o realidad de lo ocurrido ?
OpenSER guarda datos en una cache en memoria, antes de usar la BD. Probablemente esos datos fueran inconsistentes…
Hola,
configurando Presencia, ¿podemos enviar la presencia a un servidor de OpenFire y que se actualice el estado en los clientes spark?.
Saludos.
Hay un gateway IM de presencia SIMPLE, pero no lo he probado y no se si será eso lo que hace…