20. 1 var express = require('express');
2 var bodyParser = require('body-parser');
3
4 var app = express();
5 app.set('port', process.env.PORT || 3000);
6
7 // body parser middleware
8 app.use(bodyParser.urlencoded({ extended: true }));
9
10 // Slack nos va a enviar los mensajes aqui
11 app.post(‘/', function (req, res) {
12 // Paso 1: Recibir mensaje
13 // Paso 2: Contestar (o no) el mensaje
14 });
15
16 app.listen(app.get('port'), function () {
17 console.log('Background bot is listening on port ' + app.get('port'));
18 });
21.
22. 1 // Slack nos va a enviar los mensajes aquí
2 app.post(‘/', function (req, res) {
3 // Paso 1: Recibir mensaje
4 var username = req.body.user_name;
5 var message = req.body.text;
6
7 // Paso 2: Contestar (o no) el mensaje
8
9 // Virar el mensaje y construir la contestación
10 var reversedMessage = message.split('').reverse().join('');
11 var reply = {
12 text: reversedMessage
13 };
14
15 // Enviar la contestación.
16 res.json(reply);
17
18 // Si por alguna razón no queremos contestar, es importante
19 // res.end()
20 });
23.
24. 1 // Slack nos va a enviar los mensajes aqui
2 app.post('*', function (req, res) {
3 // Paso 1: Recibir mensaje
4 var username = req.body.user_name;
5 var message = req.body.text;
6
7 // Paso 1.5: verificar si el mensaje viene de slackbot
8 if (username === 'slackbot') {
9 res.end();
10 return;
11 }
12
13 // Paso 2: Contestar (o no) el mensaje
14
15 // Construir la contestacion
16 var reversedMessage = message.split('').reverse().join('');
17 var reply = {
18 text: reversedMessage
19 };
20
21 res.json(reply);
22
23 });
25.
26. Kanye West interrumpe tus conversaciones
imma-let-you-finish
http://ledhack.org/imma-let-you-finish/
33. 1 # Crear directorio donde vamos a trabajar
2 $ mkdir slack-bot
3 $ cd slack-bot
…
16 # Instalar dependencias
17 $ npm init
18 $ npm install --save slack-client
Nuestra única
dependencia
34. 1 var Slack = require('slack-client');
2
3 var token = 'xoxb-8392211527-6STZVyHnmuV33VKsmVt0wHKn';
4 var autoReconnect = true;
5 var autoMark = true;
6
7 var slack = new Slack(token, autoReconnect, autoMark);
8
9 slack.on('open', function() {
10 console.log('Bienvenido a Slack. Eres @' + slack.self.name + ' de ' + slack.team.name);
11 });
12
13 slack.on('message', function (message) {
14 // Ver de que canal llego el mensaje y responder a ese canal
15 var channel = slack.getChannelGroupOrDMByID(message.channel);
16 channel.send(‘Hello, World!’);
17 });
18
19 slack.on('error', function (error) {
20 console.error('Error:', error);
21 });
22
23 slack.login();
35. 1 richardkaufman @ kaufman in ~/D/h/m/C/P/c/bot master
2 $ node index.js
3 [Wed Jul 29 2015 17:47:09 GMT-0500 (CDT)] INFO Connecting...
4 Bienvenido a Slack. Eres @grammar-nazi de richardbkaufman
36.
37. 1 var getSpellingSuggestions = require('./spellcheckerSuggestions');
2
3 slack.on('message', function (message) {
4 // Ver de que canal llego el mensaje y responder a ese canal
5 var channel = slack.getChannelGroupOrDMByID(message.channel);
6 var user = slack.getUserByID(message.user).name;
7
8 // Hacer spellcheck
9 var suggestions = getSpellingSuggestions(message.text);
10
11 // Si no hay correciones, return.
12 if (!suggestions.suggestion) {
13 return;
14 }
15
16 // Componer mensaje y enviar.
17 var suggestion = suggestions.suggestion;
18 var response = 'FTFY @' + user + ': ' + suggestion;
19 channel.send(response);
20 });
La comunidad usa Slack para chatear entre nosotros. Y también lo usan varias compañías. Pero antes de Slack…
Muchas antes de Slack estaba IRC. Es el mismo concepto. Canales de chats. La mayoría de los proyectos open source usan IRC como su chat.
Recuerdo que hace mucho tiempo buscaba canales de IRC donde estaba este bot: triviabot. Alguien mas jugaba?
De forma sencilla, un bot es un programa metido en el chat. Extienden la función básica de enviar mensajes.
No todos los bots de chat estaban en IRC. Cleverbot es ejemplo clásico.
Estos bots cada año son mejores y mejores. En cada competencia de la prueba turing, lo bots no dejan de impresionar.
me divierte mucho hacer estos bots. Como recientemente hemos comenzado a usar Slack bastante, se me hizo que es buena idea dar esta platica.
Herramientas que vamos a estar usando
Con Slack podemos bots usando cuatro integrations que Slack ofrece. Cual usamos depende de que queremos hacer.
Feature principal: Puedes enviar mensajes a un canal del Team.
Como funciona: Slack te provee un URL a donde puedes enviar POSTs con la data que quieres enviar a Twitter.
Ademas te permite: enviar mensajes sencillos, o con formato estilo attachment.
La buscamos como un integration.
En la pagina de configuracion tomamos nota de la URL a donde hay que enviar los POSTs
Tambien le configuramos que canal va a recibir los mensajes, el username, y un icono.
El clásico hello world.
Hello, Chelas!
Hagamos un ejemplo donde tengamos un evento que activa el enviar un mensajes.
Twitter. Stream escuchando hashtag “Tacos”
Desde codigo tambien podemos configurar el username e icono. En este caso estamos haciendo un attachment. Va a tener un titulo, un mensaje, y una barra de color que demuestra que es attachment.
Feature principal: escuchar/recibir mensajes en tiempo real.
Como funciona: Le damos a slack un URL a donde va a hacer POST de los mensajes enviados a un canal especifico.
Ademas te permite: responder (o no) al POST con un mensaje.
Creamos la integracion. Aparece como Outgoing Webhooks
La configuración básica es:
determinar en que canal opera nuestro bot.
Añadir la URL donde está el app de nuestro bot.
Además podemos darle un username al bot y un icono o avatar.
Este app lo voy a poner en Heroku, y voy a hacer un servidor con Express para recibir y escuchar los mensajes.
Nuestro app es una app de express muy básica.
Aquí están los datos que nos llegan en el POST
JSON básico con el que podemos responder.
A probarlo…
slackbot escucha sus propios mensajes…
La realidad es que en el cliente de Slack, el bot se llama “background-bot” pero internamente se llama “Slackbot”. Hay que bloquear cualquier mensaje de Slackbot. Si no tenemos un loop.
Listo
Tiene un 0.5% de probabilidad de que aparezca.
Feature principal: Tiene acceso al API de Slack.
Como funciona: Conectando tu app a un API basado en WebSockets.
Ademas te permite: Apareces como un usuario en el Team.
Metodos del API
Podemos entrar y salirnos de canales. Enviar mensajes. …
En este caso en la configuración obtenemos las llaves para conectarnos al API.
Vamos hacer un bot que corrija la gramática de los que escriben mal. Un grammar-nazi
En este caso no es necesario deploy el app al cloud. Lo podemos correr desde nuestra computadora. El app se va a conectar al API de slack usando WebSockets y van a estar comunicándose directamente.
Esa dependencia en realidad no es la mejor. La documentación es poca, no la están manteniendo (tiene 15 pull requests y varios issues) pero es la que se usar.
Hello, World!
Abrimos la conexión y esperamos a escuchar mensajes. Cuando se escribe uno, contestamos con Hello, World!
Corremos el app con node, y esperamos a que conecté.
Vean como aparece como user.
Encontre un modulo que hace spellchecking. Ahora el bot escucha todos los mensajes y si hay un error gramatical, te lo va a corregir.
Lo que haces es enviarle un mensaje a edward snowden y el lo envia a #random de forma anonima. Imaginense que #random es 4chan.
Feature principal: Creas comandos que puedes ejecutar desde Slack.
Como funciona: Cuando escribes la diagonal, aparece la lista de comandos que puedes usar.
En la configuración decimos cual es el nombre de comando que queremos crear. Ademas le decimos a que URL debe enviar el comando.
Vamos a crear un comando que le pedirmos que busque una foto en instagram.
Si le añadimos un incoming-integration como habiamos hecho con Twitter, podemos hacer que todo el mundo vea la foto.
me pueden escribir a:
El Laboratorio del Error Diseñado (LED) es un colectivo de artistas y programadores donde exploramos la tecnología con fines artísticos.
En el blog hay posts sobre los bots que he hecho.
Preguntas
Ojala comience a ver bots en nuestro Slack.