OpenSIPs 3.1 – Acceder a los datos de un determinado dialogo

Cabe recordar que es un dialogo desde el punto de vista del protocolo SIP: “es un relación punto a punto entre dos UA (User Agent) que dura por un tiempo y que facilita el envío/recepción de futuros mensaje SIP. Un dialogo está constituido por dos o más transacciones “

Aclarado el tema, desde la versión 3.1 de OpenSIPs es posible acceder a los datos de cualquier dialogo que esté activo en el Proxy SIP para poder utilizar esos datos en otro dialogo activo para realizar una determinada acción.

Este tipo de operación se realiza con la nueva función load_dialog_ctx activada por el modulo DIALOG. A través de esta función es posible acceder a todos los datos de un determinado dialogo utilizando, por ejemplo, la cabecera Call-ID del mismo dialogo que es un valor que nos permite identificar de manera univoca un dialogo. Una vez obtenidos los datos que se necesiten, se “suelta” el dialogo a través de otra función que va utilizada SIEMPRE junto a la función que se acaba de mencionar: unload_dialog_ctx

Para que se pueda entender un poco mejor como funciona, a seguir un ejemplo tomado desde la documentación oficial del modulo DIALOG de la versión 3.1 de OpenSIPs:

if (load_dialog_ctx("$var(callid)")) {

xlog("The dialog '$var(callid)' already has a duration of $DLG_lifetime seconds\n");

if (is_in_profile("inbound_call"))

xlog("this dialog is an inbound call\n");

unload_dialog_ctx();

}

  • en la primera linea a través de la función load_dialog_ctx se accede al dialogo cuyo Call-ID es el contenido en la variable $var(callid)

  • en la segunda linea se envía al LOG de OpenSIPs la duración del dialogo (llamada) a través de la pseudo variable $DLG_lifitime que justamente contiene ese valor

  • en la tercera linea, si el perfil del dialogo es inbound_call se sigue con la cuarta linea

  • en la cuarta linea se envía al LOG de OpenSIPs la frase que el dialogo en objeto es una llamada entrante

  • en la quinta linea se suelta el dialogo que se estaba consultando a través de la función unload_dialog_ctx

Algunos ejemplo donde se podría utilizar esta nueva funcionalidad:

  • transferencia de llamadas

  • captura de llamadas

Además de poder acceder a los datos de un determinado dialogo podemos acceder a los datos relacionado con el CDR de la llamada a través de una nueva función del modulo ACC: acc_load_ctx_from_dlg con su relativa función para soltar el acceso a los datos: acc_unload_ctx_from_dlg. Siempre a través de un ejemplo presente en la documentación oficial del modulo ACC de la versión 3.1 de OpenSIPs:

if ( load_dialog_ctx("$var(callid)") ) {

# we now have the dialog context of the new dialog

acc_load_ctx_from_dlg();

# we have now also the accouting context of that dialog

xlog("The accounting caller of call '$var(callid)' is '$acc_extra(caller)'\n");

acc_unload_ctx_from_dlg();

unload_dialog_ctx();

}

De esta forma podremos acceder a cualquier dato relacionado con el CDR del dialogo seleccionado.

A mi me parece muy interesante:

¿Que opinan?

Vota el Articulo: 

No votes yet
Evalúa la calidad del articulo
Subscribe to Comments for "OpenSIPs 3.1 – Acceder a los datos de un determinado dialogo" Subscribe to VozToVoice - All comments