¡Y si encima se trata de control remoto mejor! Por esto mismo los desarrolladores de Yealink han implementando en todos sus terminales las herramientas suficientes para que podamos interactuar con ellos como si estuviéramos delante. Unas funcionalidades que al menos a nosotros en Irontec nos parecen geniales. Por eso mismo vamos a ver y explicar de forma sencilla cómo sacarles el máximo partido.
Antes de comenzar, tenemos que saber que Yealink presenta 2 metodologías diferentes para poder interactuar con sus terminales. Estas son “Action URI” y “Action URL” y, tal y como vamos a comprobar a continuación, son funcionalmente opuestas.
¡Comencemos!
Action URL
Este método permite al terminal enviarnos información, algo que es posible porque simula una petición GET mediante http o https desde un servidor centralizado cuando el terminal realiza un acción específica, como por ejemplo llamar, activar la funcionalidad de DND (Do Not Disturb), etc…
La sintaxis estándar para configurar este tipo de peticiones es:
http(s)://IP_DEL_SERVIDOR/help.xml?
Disponemos de un gran listado de eventos predefinidos con los que podremos trabajar desde el principio.
Evento | Descripción |
---|---|
Setup Completed | Cuando el terminal completa el arranque. |
Registered | Cuando el terminal completa de forma satisfactoria el registro de una cuenta. |
Unregistered | Cuando el terminal pierde el registro una cuenta que tenia previamente registrada. |
Register Failed | Cuando el terminal falla durante el registro de una cuenta. |
Off Hook | Cuando el teléfono esta descolgado. |
On Hook | Cuando el teléfono esta colgado. |
Incoming Call | Cuando el terminal recibe una llamada. |
Outgoing Call | Cuando el terminal realiza una llamada. |
Established | Cuando el terminal establece una llamada. |
Terminated | Cuando el terminal termina una llamada. |
Open DND | Cuando el terminal activa el DND. |
Close DND | Cuando el terminal desactiva el DND. |
Open Always Forward | Cuando el terminal activa el Desvío siempre. |
Close Always Forward | Cuando el terminal desactiva el Desvío siempre. |
Open Busy Forward | Cuando el terminal activa el Desvío si ocupado. |
Close Busy Forward | Cuando el terminal desactiva el Desvío si ocupado. |
Open NoAnswer Forward | Cuando el terminal activa el Desvío si no contesta. |
Close NoAnswer Forward | Cuando el terminal desactiva el Desvío si no contesta. |
Transfer Call | Cuando el terminal realiza una transferencia. |
Blind Transfer | Cuando el terminal realiza una transferencia ciega o directa. |
Attended Transfer | Cuando el terminal realiza una transferencia atendida o semi atendida. |
Hold | Cuando el terminal retiene una llamada. |
UnHold | Cuando el terminal recupera una llamada previamente retenida. |
Held | Cuando la llamada del teléfono esta retenida. |
UnHeld | Cuando la llamada del teléfono es recuperada. |
Mute | Cuando el terminal silencie o mutee una llamada. |
UnMute | Cuando el terminal de-silencie una llamada o haga un-mute. |
Missed Call | Cuando el terminal tenga una llamada perdida. |
IP Changed | Cuando la IP del terminal cambie. |
Idle To Busy | Cuando el estado del terminal pase de reposo a ocupado. |
Busy To Idle | Cuando el estado del terminal pase de ocupado a reposo. |
Reject Incoming Call | Cuando el terminal rechace una llamada entrante. |
Answer New-In Call | Cuando el terminal conteste una nueva llamada. |
Transfer Failed | Cuando el terminal falle a la hora de transferir una llamada. |
Transfer Finished | Cuando el terminal termine de realizar una transferencia. |
Forward Incoming Call | Cuando el terminal desvíe una llamada entrante. |
Autop Finish | Cuando el terminal termine de provisionarse mediante el método de encendido. |
Open Call Waiting | Cuando el terminal habilite la llamada en espera. |
Close Call Waiting | Cuando el terminal deshabilite la llamada en espera. |
Headset | Cuando se presione en el terminal el botón de cascos o headset. |
Handfree | Cuando se presione en el terminal el botón de altavoz. |
Cancel Call Out | Cuando el teléfono cancela una llamada saliente habiendo obtenido tono. |
Remote Busy | Cuando una llamada saliente es rechazada. |
Call Remote Canceled | Cuando el se cancela una llamada entrante que ha obtenido tono. |
También contamos con una gran cantidad de variables de entorno que nos puede hacer llegar información referente al terminal en el que ha ocurrido la acción, como por ejemplo la IP del terminal, la MAC del terminal, o incluso, en caso de tener diferentes cuentas registradas, en cuál de ellas ha ocurrido la acción.
La sintaxis estándar de este tipo de peticiones con variables es:
http(s)://IP_DEL_SERVIDOR/help.xml?NOMBRE_DE_VARIABLE=$nombre_de_variable
Al igual que con los eventos, disponemos de muchas variables diferentes que podemos utilizar.
Variable | Descripción |
---|---|
$active_user | Fragmento de la parte usuario de la cabecera URI SIP de la cuenta activa cuando el terminal IP realiza, contesta o establece una llamada. |
$active_host | Fragmento de la parte usuario de la cabecera URI SIP de la cuenta activa cuando el terminal IP realiza, contesta o establece una llamada. |
$local | URI SIP del llamante cuando el terminal realiza una llamada. URI SIP del llamante cuando el terminal recibe una llamada. |
$remote | URI SIP del llamante cuando el terminal realiza una llamada. URI SIP del llamante cuando el terminal recibe una llamada. |
$display_local | Muestra el nombre del llamante cuando el terminal recibe una llamada. |
$display_remote | Muestra el nombre del llamante cuando el terminal realiza una llamada. Muestra el nombre del llamante cuando el terminal recibe una llamada. |
$call_id | CALL-ID de la llamada activa. |
$callerID | El nombre a mostrar del llamante cuando el teléfono recibe una llamada entrante. |
$calledNumber | Muestra el numero de llamante cuando el terminal realiza una llamada. |
¿Cómo se configura en un terminal?
Podemos hacerlo de dos formas diferentes: ya sea haciéndolo llegar como parámetro en el fichero de provisión o directamente accediendo a la página web del terminal, hasta la sección específica.
Mediante los ficheros de provisión
Debemos añadir al fichero <y0000000000xx>.cfg las líneas de cada uno de los eventos que queramos que nos envíe información, seguido de la URL y variable, en caso de querer obtenerla.
action_url.incoming_call = http://192.168.1.100/help.xml?IP=$ip ... .. .
Mediante la interfaz web
Para ello tendremos que abrir un navegador e introducir la IP del terminal en el que queremos configurar la Action URL y logearnos.
Ahora tendremos que ir al menú Features >> Action URL
Aquí veremos los diferentes eventos que podemos llegar a configurar, y sólo nos quedará introducir la URL en la casilla correspondiente al evento.
¿Y ahora qué?
Una vez configurado, tendremos la posibilidad de obtener información en tiempo real de los diferentes eventos que tienen lugar en todos los terminales en los que hayamos configurado Action URL. Asimismo, obtendremos información relativa al terminal en el que ha ocurrido, gracias a las diferentes variables.
Pero… ¿Y si quisiéramos poder interactuar con el terminal en función de los eventos que tienen lugar y que ahora recibimos?
¡Vamos con ello!
Action URI
Tal y como se ha apuntado al comienzo del post, este método, en vez de escuchar eventos, nos permite enviar instrucciones al terminal con peticiones GET mediante http o https, con el fin de que realice diferente operaciones. Como hemos señalado, se puede llamar, contestar una llamada, activar el DND, reiniciarlo y un larguísimo etc…
¿Cómo funciona exactamente?
Tendremos que enviar una petición http mediante un navegador o cualquier aplicación de terminal de tipo curl o wget.
La sintaxis de la petición http(s) es:
http(s)://IP_del_terminal/servlet?valor=variable
Disponemos de muchas acciones predefinidas diferentes listas para usarse.
Valor | Descripción |
---|---|
OK | Pulsar el botón Ok. |
ENTER | Pulsar el botón software Enter de la pantalla. |
SPEAKER | Pulsar el botón altavoz del terminal. |
F_TRANSFER | Transfiere una llamada. |
VOLUME_UP | Aumenta el volumen. |
VOLUME_DOWN | Baja el volumen. |
MUTE | Silencia la llamada en curso. |
F_HOLD / HOLD | Retiene la llamada activa |
F_CONFERENCE | Pulsar el botón software Conf de la pantalla. |
Cancel / CANCEL | Cancela opciones, rechaza una llamada o termine una llamada en curso. |
X | Cancela acciones, rechazada una llamada o silencia o desilencia una llamada. |
0-9 / * / POUND | Pulsa el botón correspondiente, del 0 -9, asterisco o almohadilla. |
L1-LX | Pulsa el botón de linea correspondiente. |
F1-F4 | Pulsa los botón equivalentes ubicados debajo de la pantalla. |
MSG | Pulsa el botón de mensaje. |
HEADSET | Pulsa el botón de cascos. |
RD | Pulsa el botón de rellamada. |
UP / DOWN / LEFT / RIGHT | Pulsa el botón de navegación correspondiente de la cruceta. |
Reboot | Reinicia el terminal. |
AutoP | Realiza una petición al sistema de provisioning. |
DNDOn | Activa la funcionalidad de DND (no molestar). |
DNDOff | Desactiva la funcionalidad de DND (no molestar). |
number=xxx&outgoing_uri=y | Realiza una llamada el número XXX utilizando el SIP URI Y |
OFFHOOK | Contesta la llamada en el auricular. |
ONHOOK | Cuelga la llamada. |
ANSWER / ASW / Asw | Contesta una llamada. |
Reset | Reinicia el terminal. |
ATrans=xxx | Realiza una transferencia atendida o semi atendida al numero XXX |
BTrans=xxx | Realiza una transferencia ciega a XXX |
CALLEND / CallEnd | Finaliza una llamada. |
phonecfg=get[&accounts=x][&dnd=x][&fw=x] | Obtiene información de la versión de firmware, registro del terminal, estado de la funcionalidad de DND o desvíos activos. |
CallWaitingOn | Activa la funcionalidad de llamada en espera. |
CallWaitingOff | Desactiva la funcionalidad de llamada en espera. |
AlwaysFwdOn/BusyFwdOn/NoAnswF wdOn=xxx=n | Activa la funcionalidad de desvío en caso de ocupado/no disponible/no contesta para el número XXX. |
AlwaysFwdOff/BusyFwdOff/NoAnswF wdOff=xxx=n | Desactiva la funcionalidad de desvío en caso de ocupado/no disponible/no contesta para el número XXX. |
ASW / CANCEL / HOLD / UNHOLD:xxx | Contestar/terminar/retener/recuperar la llamada con callid XXX |
Una vez lanzada la petición, utilizando un navegador por ejemplo, el terminal ejecutará la acción y nos responderá con un mensaje SIP 200 OK en caso éxito.
Comentar que también es posible enviar ordenes al terminal mediante mensajes de SIP NOTIFY. Para ello, tendremos que añadir en la cabecera del mensaje:
Event: ACTION-URI
En el cuerpo, una sección con los valores y variables.
Key=OK
Quedando de la siguiente forma:
NOTIFY sip:[email protected]:5061 SIP/2.0 Via: SIP/2.0/UDP 192.168.1.110:5062;branch=x728dhT8uyshe736R From: <sip:[email protected]>;tag=2435241536 To: "1001" <sip:[email protected]>;tag=490600926 Call-ID: [email protected] CSeq: 4 NOTIFY Contact: <sip:[email protected]:5062> Max-Forwards: 70 User-Agent: Yealink SIP-T23G Event: ACTION-URI Content-Type: message/sipfrag Content-Length: 6 Message Body key=OK
¿Cómo se configura un terminal para poder utilizar Action URI?
De la misma forma que con el método Action URL, en este caso también podremos hacerlo de 2 maneras. Por un lado, haciéndolo llegar como parámetro en el fichero de provisión o directamente accediendo a la página web del terminal, hasta la sección específica.
Mediante los ficheros de provisión
Debemos añadir al fichero <y0000000000xx>.cfg las líneas de cada uno de los eventos que queramos que nos envíe información, seguido de la URL y variable, en caso de querer obtenerla.
features.action_uri.enable=1 features.show_action_uri_option=1 features.action_uri_limit_ip=192.168.1.100
Mediante la interfaz web
Para ello tendremos que abrir un navegador e introducir la IP del terminal en el que queremos configurar la Action URL y logearnos.
Ahora tendremos que ir al menú Features >> Remote Control y rellenar los diferentes campos.
IMPORTANTE
En caso de que utilicemos el método de configuración web, tendremos que pulsar el botón OK en el propio terminal la primera vez que mandemos una petición http. Es decir, físicamente, ya que, al menos con el firmware actual (44.81.0.XX), no se permite añadir o configurar el valor de ‘features.show_action_uri_option’ en la propia web.
¡Ya tenemos el control de nuestros terminales! Sabemos escucharlos y sabemos comunicarnos con ellos. Ahora tú decides cómo sacarles el mejor de los partidos.
¿Quizás una aplicación de escritorio/web/terminal para automatizar todo esto? Atentos, porque lo veremos en el siguiente post;)
¡Hasta la próxima!
Queremos tu opinión :)