Archive for the 'Slack' Category

Enviando Mensaje a Slack con JavaScript/Node.js

Thursday, February 5th, 2015

Hace ya como un año o algo más, entró en mi radar Slack:

https://slack.com/

Leo ahí “Slack is a platform for team communication; everything in one place, instantly searcheable, available wherever you go”.

En general, soy algo excéptico a las herramientas en línea de este tipo, prefiero una combinación más simple. Para lo que dice arriba, me basta gmail y listas de correo por proyecto o equipo. Pero pueden leer la interesante historia del fundador de Slack y las ideas que hay detrás del emprendimiento en:

http://www.wired.com/2014/08/the-most-fascinating-profile-youll-ever-read-about-a-guy-and-his-boring-startup/

Mis enlaces sobre Slack en:

https://delicious.com/ajlopez/slack

Por ejemplo, pueden leer este artículo con tips sobre como usarlo:

https://medium.com/@slackhq/11-useful-tips-for-getting-the-most-of-slack-5dfb3d1af77

Ayer a la tarde me puse a explorar cómo enviar un mensaje, usando la API expuesta por Slack, desde Node.js (que me parece la tecnología más simple para este tipo de experimentos). Más info general de la API en:

https://api.slack.com/

Busqué en Google algún módulo de Node.js y encontré como primer resultado:

https://github.com/xoxco/node-slack

Lo instalé con NPM en un directorio de trabajo, y probé algo como:

var domain = process.env.SLACK_DOMAIN;
var token = process.env.SLACK_TOKEN;

var Slack = require('node-slack');
var slack = new Slack(domain, token);

var channel = process.argv[2];
var message = process.argv[3];

console.log('Sending message', message, 'to channel', channel);

slack.send({
    text: message,
    channel: '#' + channel,
    username: username
});

Se debe poner valores en las variables de ambiente SLACK_DOMAIN y SLACK_TOKEN. Cuando uno ingresa a un grupo de Slack, corresponde a un dominio. Por ejemplo, uno es https://squeakros.slack.com donde está la gente de Smalltalk Squeak Rosario. Otro es https://nodejsar.slack.com, la gente de Node.js Argentina. El token es por usuario y aplicación y lo podemos pedir en:

https://api.slack.com/web

Bien, el programa ejecutó sin problema con

node run.js general “Hello, world”

en Windows (o sea, el primer argumento luego de run.js, es el canal destino, sin el # (numeral), y el segundo argumento es el texto del mensaje). Pero no llegaba el mensaje. Tampoco daba error. Al fin, encontré el Pull Request:

https://github.com/xoxco/node-slack/pull/8

que parece que no fue integrado todavía al código original. Resulta que hace unos meses, cambió la API de Slack. El pull request sugerido usa otro forma de acceso, en vez de token usa una URL provista desde:

https://your-domain.slack.com/services/new/incoming-webhook

Usé la sugerencia que está en uno de los comentarios, pedir el node-slack directamente desde la dirección en GitHub del pull request, en el package.json que describe al proyecto y sus dependencias:

{
  "name": "slack-demo",
  "private": true,
  "version": "0.0.1",
  "dependencies": {
    "node-slack": "git://github.com/Dahlgren/node-slack.git#hook-url"
  }
}

Y el programa ahora usa esa URL, tomada desde una variable de ambiente:

var hookUrl = process.env.SLACK_WEBHOOK;
var username = process.env.SLACK_USER;

var Slack = require('node-slack');
//var slack = new Slack(domain, token);
var slack = new Slack(hookUrl);

var channel = process.argv[2];
var message = process.argv[3];

console.log('Sending message', message, 'to channel', channel);

slack.send({
    text: message,
    channel: '#' + channel,
    username: username
});

Todo funciona. Temas a investigar: ¿se podrá seguir usando dominio/token? ¿de qué manera? ¿hay otros módulos más actualizados? Por ahora, sigo experimento con este módulo.

Nos leemos!

Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez