Un elemento fundamental en cualquier centralita de empresa es la consola de marcación directa de extensiones. Desde estas consolas es posible la marcación directa con una sola pulsación a las diferentes extensiones de la empresa y también la visualización del estado de las mismas, libre u ocupadas. Habitualmente estas consolas se sitúan junto al teléfono de operadora y cuentan al menos con tantas teclas programables como extensiones hay en servicio en la empresa.
Consola GBX20 junto al teléfono GXV3350 de Grandstream
Para la visualización del estado de las extensiones, el protocolo SIP dispone de los mensajes Subscribe y Notify, ambos descritos en el documento RFC 3265. Estos mensajes constituyen una extensión al propio protocolo SIP y permiten que un nodo SIP conozca el estado de los eventos que ocurren en otro nodo SIP.
- Mensaje Subscribe: Cuando un dispositivo cliente A desea conocer los cambios de estado de un dispositivo B, envía un mensaje Subscribe a dicho dispositivo B o al servidor SIP que conoce en todo momento el estado de B.
- Mensaje Notify: Cada vez que el dispositivo B cambia de estado, envía un mensaje de tipo Notify al dispositivo A, bien directamente o bien a través del servidor SIP que conoce el estado de B.
Intercambio de mensajes Subscribe y Notify
La implementación de este mecanismo en Asterisk se logra a través de los denominados “Hints” que constituyen una relación entre el dispositivo físico cuyo estado se quiere conocer y un nombre arbitrario o etiqueta que identifica a esa monitorización de estado. Por un lado, en el fichero sip.conf se define el dispositivo o dispositivos que estarán monitorizando a otros dispositivos y en el fichero extensions.conf se define la etiqueta o “hint” que corresponde a cada uno de los dispositivos físicos cuyo estado conoce Asterisk en todo momento. En el siguiente ejemplo práctico de configuración la extensión 101 corresponde al teléfono de operadora y en su consola de marcación directa se monitoriza el estado del resto de extensiones del sistema, las extensiones 102, 103, 104 y 105.
Fichero de configuración sip.conf
Fichero de configuración extensions.conf
En el siguiente vídeo se puede ver el funcionamiento práctico del sistema. Como teléfono de operadora con consola de marcación directa de extensiones se ha utilizado el softphone tSIP en su versión 0.01.70.
Funcionamiento práctico sobre el softphone tSIP
La configuración de las teclas de marcación directa en el softphone es tan sencillo como seleccionar para cada una de las teclas la característica BLF (Bussy Lamp Field) e indicar el texto que debe aparecer en cada tecla y el número correspondiente al “hint” del fichero extensions.conf
Configuración de las teclas de marcación directa en el softphone tSIP
Una vez que las teclas de marcación directa están correctamente configuradas en el softphone que realiza las funciones de teléfono de operadora, automáticamente enviará mensajes de tipo Subscribe al servidor SIP, que en este caso es Asterisk. El teléfono envía un mensaje Subscribe por cada una de las teclas configuradas, ya que cada una de ellas monitoriza el estado de otra extensión del sistema.
Mensajes Subscribe enviados hacia el servidor SIP (Asterisk)
En la captura de pantalla anterior se observa que el teléfono tSIP situado en la dirección IP 192.168.1.56 envía 5 mensajes de tipo Subscribe, uno por cada extensión monitorizada, al servidor SIP, que en este caso es Asterisk y que está situado en la dirección IP 192.168.1.158. Inicialmente el servidor SIP rechaza todos los mensajes con la respuesta de tipo 401 Unauthorized por falta de autenticación del teléfono tSIP, de acuerdo al funcionamiento del protocolo SIP. El teléfono tSIP envía 5 nuevos mensajes de tipo Subscribe, que esta vez por estar autenticados son aceptados por el servidor SIP, envíando este 5 respuestas de tipo 200 OK. Finalmente el servidor SIP envía 5 mensajes de tipo Notify al teléfono tSIP indicando en cada uno de esos mensajes el estado de la correspondiente extensión monitorizada. El teléfono tSIP confirma al servidor SIP la correcta recepción de esa información mediante las correspondientes respuestas de tipo 200 OK.
Como curiosidad, la información de los diversos mensajes Notify no se envía mediante el protocolo SDP (Session Description Protocol) sino en forma de documento XML. En estos documentos se encuentra un campo denominado “State” que contiene el estado del teléfono monitorizado y que puede tomar valores como “terminated” cuando el teléfono está colgado, “confirmed” cuando está ocupado y “early” cuando está sonando.
estado “confirmed”
estado “early”
estado “terminated”
En todo momento y desde la consola de Asterisk se puede consultar el estado de las subscripciones activas mediante el comando sip show subscriptions.
Comando “sip show subscriptions”
Como se aprecia en la imagen anterior, este comando nos muestra en pantalla el usuario que está monitorizando a otras extensiones, las extensiones a las que se está monitorizando y el tiempo en el que expiran las subscripciones, tras lo cual se enviarán nuevos mensajes de tipo Subscribe, aunque también es posible forzar este envío iniciando de nuevo el teléfono tSIP.
Con el comando core show hints se muestran en la consola de Asterisk los “hints” activos.
Comando “core show hints”
El comando anterior nos permite conocer cuantos dispositivos están “observando” el estado de una extensión (Watchers) y si la extensión está disponible (state:Idle) o no disponible (state: Unavailable)
Extensión 104 en estado no disponible
El significado de los nuevos parámetros que aparecen en el fichero sip.conf es el siguiente:
- callcounter=yes: Permite a Asterisk el envío de mensajes de tipo Notify, a pesar de que una extensión haya enviado los correspondientes mensajes Subscribe y se hayan producido cambios en el estado de las extensiones monitorizadas.
- allowsubscribe=yes: Permite a Asterisk aceptar mensajes de tipo “subscribe”.
- notifyringing=yes: Habilita a Asterisk para enviar mensajes Notify de tipo “ringing”
- notifyhold=yes: Cuando una extensión está ocupada con una llamada establecida y llega una nueva llamada, Asterisk notifica dicho estado mediante un mensaje de tipo notifyhold.
- notifycid=yes: Asterisk envía notificaciones con información extra que incluye la identificación del usuario que inicia la llamada. Esto solo
- subscribecontext= contexto: es el contexto del fichero extensions.conf donde se tratan los diferentes “hints” asociados a las subscripciones realizadas por una determinada extensión. Si no se especifica ningún subscribecontext, Asterisk usará el mismo context que el asociado a la extensión para el tratamiento de las llamadas en extensions.conf.
Notificación de una llamada en espera a la extensión 102
Información de identificación del usuario
Por otro lado, en el fichero extensions.conf tan solo se debe crear un nuevo contexto con el nombre especificado en subscribecontext, en donde se establecen los diferentes “hints”. En el ejemplo mostrado el contenido de este contexto es el siguiente:
[Grupo-BLF]
exten => 101,hint,SIP/101
exten => 102,hint,SIP/102
exten => 103,hint,SIP/103
exten => 104,hint,SIP/104
exten => 105,hint,SIP/105
Se debe tener en cuenta que ahora el identificador de prioridad queda sustituido por la palabra clave “hint”. Por otro lado, el número asociado a “exten” es tan solo una etiqueta para identificar cada uno de los “hints” y puede ser utilizado cualquier otro valor, aunque en ese caso ya no funcionarán las teclas BLF en el teléfono tSIP como teclas de marcación directa.
Por último, como se ha indicado anteriormente, es posible personalizar la teclas BLF del softphone tSIP colocando un texto descriptivo de la extensión, en lugar de su número.
Texto descriptivo en las teclas BLF del softphone tSIP
Hola. Estoy interesado en la implementación de una centralita basada en Asterisk. Yo mismo la puse en funcionamiento hace tres años y está operativa sobre un equipo con Ubuntu, con una serie de funcionalidades que en su momento programé, pero ahora necesito ampliar una serie de cosas y me resulta imposible por cuestión de tiempo volver a ponerme a programar. Necesito alguien serio y con experiencia. Le explico el proyecto y que me de presupuesto lo antes posible. Muchas gracias.
Magnífica explicación, estoy sorprendido y muy contento de haber encontrado tu blog. Sin duda me será muy útil en mi próxima instalación.
Muchas gracias por compartir