martes, diciembre 02, 2008

Integración con SkypeWeb API desde ASP.net y Mono

Todos los códigos de este artículo os los podéis descargar desde:
  • Proyecto de Visual Web Developer Express 2005, aquí
  • Solución de Monodevelop, aquí

En este artículo vamos a ver una pequeña integración con el API de Skype para plataformas web. Lo que vamos a hacer es implementar un pequeño control de presencia que podremos utilizar en nuestra web. La idea es que, a través del API Web de Skype, interrogar sobre nuestro estado en Skype y, en base a la respuesta, mostrar un icono de estado.

¿Para qué nos puede servir esto, os preguntareis? Pues, por ejemplo, Skype es una muy buena opción para dar soporte a usuario y siempre queda bien poner un icono de que estamos online o no en nuestra página web. También sirve como base para cuando Skype ofrezca más servicios vía web, en fin, y como curiosidad.

Vamos al lío entonces...
Lo primero que tenemos que hacer es configurar Skype para permitirle que notifique nuestro estado. En Herramientas -> Opciones, en la pestaña Privacidad, marcaremos la opción "Mostrar mi estado de conexión en la web":




















Una vez marcada esta opción, el servidor de Skype permitirá que le interroguen sobre el estado de nuestro usuario a través de su API. Skype provee de dos métodos por los que obtener el estado de un usuario: vía consulta DNS, vía petición HTTP. Nosotros vamos a ver la segunda opción. La sintaxis para interrogar es la siguiente:

http://mystatus.skype.com/[nombre_usuario].extension

En [nombre_usuario] pondremos el usuario sobre el que queremos obtener el estado, en este caso, será el nuestro, y en extensión le indicaremos a Skype cómo queremos que nos devuelva la información. Disponemos de cuatro opciones:
  • Sin extensión: Skype devuelve una imagen con el estado del usuario (en la documentación se muestra las diferentes imágenes de que dispone)
  • xml: devuelve un XML con el estado del usuario en diferentes idiomas
  • txt: devuelve el estado del usuario en formato texto en el idioma del explorador
  • num: devuelve un código equivalente al estado del usuario (ésta es la opción que vamos a utilizar).
Lo que vamos a hacer, por lo tanto, es lanzar una petición http al servidor de Skype, obtener la respuesta y en base al código que nos devuelva, poner una imagen u otra en pantalla. Los posibles códigos de retorno son:
  • 0: desconocido
  • 1: offline
  • 2: online
  • 3: fuera
  • 4: no disponible
  • 5: no molestar
  • 6: invisible
  • 7: skype me


Vamos a codificar el asunto
La página de demo la podéis encontrar pinchando aquí

El proyecto está realizado tanto para Monodevelop (para los de Linux) como para Web Developer Express Edition 2005 (para los de Windows). La única diferencia es que Mono no dispone de soporte para el AJAX de ASP.net y en la versión de Mono está quitado el tema de AJAX.

La pantalla del proyecto es la siguiente:
















Introduciremos el nombre del usuario a interrogar y pulsaremos sobre el botón "Buscar desde Servidor". El código que se ejecuta en este botón es:
















Lo primero que se hace es realizar un HttpWebRequest hacia el servidor de Skype pasándole el usuario que se ha introducido en el textbox. Obtenemos la respuesta y creamos un Stream para ir leyendo el resultado que nos devuelve Skype.

Al leer el código de la respuesta, ponemos en pantalla una imagen correspondiente al estado del usuario. En la carpeta img disponemos de 8 imágenes llamadas 0.png, 1.png, 2.png,... en función del código devuelto, pondremos una u otra.

El resultado es el siguiente:
















En el proyecto de Web Developer, le he puesto un UpdatePanel para que no haya refrescos de pantalla, mientras que en Mono no está puesto.

Control de Presencia
Con esta pequeña integración podemos poner un icono en nuestra página web indicando nuestro estado en Skype. Tenemos dos alternativas:
  • Poner un timer para que vaya refrescando el estado cada x tiempo.
  • Realizar esta operación en el Page_Load y actualizar el estado solamente cuando se acceda a la página.
También existe la posibilidad de implementar las llamadas desde Javascript a través de un Proxy y manejar la respuesta directamente desde la página (en Javascript).

En fin, espero que os haya gustado este pequeño post, y que os sirva para investigar más allá y para poner vuestro icono de presencia en vuestras webs.

No hay comentarios: