HipChat es una herramienta de Atlassian enfocada en facilitar y ampliar el canal de comunicación entre los empleados. Entre sus funciones más destacadas se encuentran:

  • Chats públicos y privados
  • Acceso seguro
  • Video llamada
  • Compartición de pantallas y ficheros
  • Buscador de textos, ficheros y links
  • Integración con herramientas de terceros (79 hasta ahora).

Puedes encontrar información detallada sobre HipChat en el siguiente enlace - https://www.atlassian.com/software/hipchat

En DEISER la utilizamos desde sus inicios y hoy queremos contarles cómo podemos integrar mensajes de Twitter dentro de una sala de HipChat utilizando una aplicación externa.

Básicamente lo que haremos será crear una aplicación en [Node.js](https://nodejs.org/
) en la que vamos a establecer una lista de palabras que estaremos escuchando durante períodos determinados de tiempo en Twitter, cuando alguien escriba un mensaje que contenga alguna de las palabras establecidas enviaremos una notificación con la información del tweet a la sala de HipChat predefinida.

Vamos a asumir que estamos trabajando en una máquina con sistema operativo Linux y Node.js previamente instalado. Los pasos para crear la solución son los siguientes:

1.- Creamos un directorio llamado node-application donde vamos a alojar nustra aplicación Node.js.

$ mkdir node-application

2.- Una vez creado el directorio nos metemos dentro.

$ cd node-application

3.- Instalamos las dependencias necesarias para comunicarnos con las API's de Twitter y HipChat.

$ npm install twitter-stream-channels
$ npm install node-hipchat

4.- Creamos un fichero llamado twitter-hipchat.js.

$ nano twitter-hipchat.js

y añadimos el siguiente contenido.

setInterval(function(){  
      getTwitterMessages();
},10000);

function getTwitterMessages(){  
    var TwitterStreamChannels = require('twitter-stream-channels');
    var credentials = require('./twitter.credentials.json');
    var client = new TwitterStreamChannels(credentials);
    var channels = {
        "company" : ['atlassian','deiser', 'apple']
    };
    var stream = client.streamChannels({track:channels});
    stream.on('channels/company',function(tweet){
        var hipchat = require('node-hipchat');
        var hc = new hipchat('YOUR_API_KEY');
        var roomId = 123456; // The Room Id from HipChat
        var hcMessage = '<a href="https://twitter.com/'+ tweet.user.screen_name +'">@' + tweet.user.screen_name + '</a>' + ' -> ' + tweet.text + ' | ' + '<a href="https://twitter.com/'+ tweet.user.screen_name +'/status/'+ tweet.id_str +'">Ver en Twitter</a>';
        var params = {
            room: roomId,
            from: 'Twitter-Bot',
            message: hcMessage,
            color: 'green',
            notify: 0,
            message_format: 'html'
        };
        hc.postMessage(params, function(data) {
          console.log('Mensaje enviado a la sala', data);
        });
    });
    setTimeout(function(){
        stream.stop();
    },3000);
}

Sustituimos 'YOURAPIKEY' por la key que podemos generar en la administración de nuestro HipChat.

5.- Creamos el fichero llamado twitter.credentials.json que contiene los parámetros para autenticar nuestra aplicación con Twitter y poder hacer uso de su API.

$ nano twitter.credentials.json

Y añadimos el siguiente contenido.

{
  "consumer_key": "xxxxxxxxxxxxxx",
  "consumer_secret": "xxxxxxxxxxxxxx",
  "access_token": "xxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "access_token_secret": "xxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}

Sustituimos 'xxxxxxxxxxxxxx' por los valores que obtenemos al registrar nuestra aplicación en https://apps.twitter.com/.

Con esto ya tenemos una aplicación que cada 10 segundos estará escuchando en twitter por la lista de palabras que hemos establecido en la función durante un periodo de 3 segundos.

Veamos el código paso a paso:

Establecemos el nombre de la función que deseamos ejecutar cada 10 segundos.

setInterval(function(){  
      getTwitterMessages();
},10000);

Declaramos el cliente y las credenciales que utilizara para autenticarse en Twitter y realizar las peticiones al API.

var TwitterStreamChannels = require('twitter-stream-channels');  
var credentials = require('./twitter.credentials.json');  
var client = new TwitterStreamChannels(credentials);  

Declaramos el canal y las palabras que deseamos escuchar del stream de Twitter.

var channels = {  
    "company" : ['atlassian','deiser', 'apple']
};

Podríamos declarar múltiples canales. Por ejemplo:

var channels = {  
    "company" : ['atlassian','deiser', 'apple'],
    "languages" : ['java','c#']
};

Asignamos al cliente los canales declarados.

var stream = client.streamChannels({track:channels});  

Declaramos la función que vamos a ejecutar en lo que el stream de Twitter contenga algún mensaje que deseamos enviar a HipChat.

stream.on('channels/company',function(tweet){  
    ........
});

Si hemos declarado múltiples canales podemos declarar funciones independientes para cada uno. Por ejemplo:

stream.on('channels/company',function(tweet){  
    ........
});

stream.on('channels/languages',function(tweet){  
    ........
});

Declaramos las propiedades del cliente de HipChat y la sala a la que se enviaran los mensajes de Twitter, y aprovechamos para declarar el cuerpo del mensaje.

var hipchat = require('node-hipchat');  
var hc = new hipchat('YOUR_API_KEY');  
var roomId = 123456; // The Room Id from HipChat  
var hcMessage = '<a href="https://twitter.com/'+ tweet.user.screen_name +'">@' + tweet.user.screen_name + '</a>' + ' -> ' + tweet.text + ' | ' + '<a href="https://twitter.com/'+ tweet.user.screen_name +'/status/'+ tweet.id_str +'">Ver en Twitter</a>';  

Declaramos los parámetros del mensaje. Más información y posibles valores (https://www.hipchat.com/docs/api/method/rooms/message).

var params = {  
    room: roomId,
    from: 'Twitter-Bot',
    message: hcMessage,
    color: 'green',
    notify: 0,
    message_format: 'html'
};

Método que envía el mensaje parametrizado a la sala de HipChat.

hc.postMessage(params, function(data) {  
    console.log('Mensaje enviado a la sala', data);
});

Pasados 3 segundos detenemos el stream.

setTimeout(function(){  
    stream.stop();
},3000);

Para ejecutar la aplicación nos ubicamos en la raíz del proyecto y ejecutamos el comando.

$ node twitter-hipchat.js

Si lo hemos declarado todo correctamente en nuestra sala de HipChat empezaremos a recibir los mensajes provenientes de Twitter con el formato que hemos declarado en los pasos anteriores.

Espero que te sea de utilidad, y si deseas compartir alguna opinión al respecto te esperamos en los comentarios.