Cabecera SIP – Diversion

En esta entrada voy a tratar con el concepto de “Diversion” en SIP (RFC 5806). Este RFC es una extensión de protocolo SIP, tal y como veremos, y nos va a servir para que el llamante identifique de quien viene redirigida la llamada.

El objetivo de este artículo es explicar en grandes rasgos el funcionamiento de este campo del protocolo SIP, basándome en mi experiencia profesional. Cualquier comentario será más que bienvenido.

Lo primero que me gustaría comentar es el significado de la propia palabra “diversion”, la cual en castellano significa, ni más ni menos que “desviación”.

En el caso de telefonía esto refiere a cuando un llamante (A – Alice) quiere contactar un destino (B – Bob) pero al no estar disponible, la llamada se desvía a un tercer destino (C – Carol). Bob será el “Divertor” de la llamada, es decir, la entidad que va a desviar la llamada hacia Carol.

La desviación Diversion  puede consistir en un cambio en la porción del usuario en el Requested-URI (la primera parte del INVITE). Esto significa que el recurso que queremos alcanzar con nuestra primera llamada va a ser distinto al que indicamos en nuestra primera petición.

Existen dos tipos de estrategia/configuración para utilizar la desviación a través de Diversion:

  • Recursivo

El SIP Proxy, en este caso P2, recibe la llamada para Bob. Dado que sabe que Bob no está disponible, genera una, o varias, peticiones para realizar esta redirección contra una tercera entidad (Carol).

Tal y como se aprecia en la imagen inferior, la R-URI ha sido modificada, para alcanzar este nuevo destino (“INVITE Carol@C”).

recursive

Es interesante ver como en el flujo de la llamada no se realiza una acción de Back2Back User Agent entre la llamada inicial de Alice a Bob, y la conexión final entre Alice y Carol. Como se aprecia, el ACK es enviado directamente de Alice a Carol, generándose un diálogo directo entre estas dos entidades.

 

  • No-Recursivo

El SIP Proxy o entidad que recibe la llamada para Bob no realizará este diversion, y simplemente indica con un mensaje de tipo 3xx.En este caso P2, en lugar de realizar una traducción de la R-URI, lo que hace es simplemente indicar al llamante, Alice, que debe contactar con Carol@C dado que hay un desvio sobre el destino Bob.
no-recursive

Una vez procesado este 302, Carol enviará directamente un INVITE contra Carol@C indicando que llama a esta entidad dado que Bob@P2 no se encuentra disponible.

Cabe destacar que en ambos casos (recursivo y no recursivo) se establece un diálogo directo entre las dos entidades, Alice y Carol, sin embargo el intercambio de mensajes es diferente.

Ambos paradigmas pueden ser combinados, tal y como se aprecia en el siguiente diagrama:

combined

Existen diversas razones para el call Diversion. A continuación enumero las que se describen en el RFC., las cuales vienen heredadas de ISUP e ISDN:

ISUP/ISDN reason code       Diversion reason code

      0001                        “user-busy”

      0010                        “no-answer”

      1111                        “unconditional”

      1010                        “deflection”

      1001                        “unavailable”

      0000                        all others

Cosideraciones:

A la hora de realizar facturación de llamadas, al activar diversion en nuestro escenario es importante considerar todos los escenarios, dado que esta redirecciones pueden hacer peligrar nuestros CDRs.

Es de vital importancia analizar cuando debemos/podemos de utilizar el paradigma recursivo/no-recursivo, así como tener en cuenta si nos interesa que alguno de nuestros SIP Proxies, además de encontrarse en recursivo, nos interesará que trabaje como Back2Back user agent.

En cualquier caso, las llamadas derivadas de Diversion deberían de ser facturadas al número llamado (en nuestro caso Bob) dado que es quien es el responsable de un escenario donde existe esta movilidad.

Enlaces:

https://tools.ietf.org/html/rfc5806

 

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s