SlideShare a Scribd company logo
1 of 54
Programación de Bots para Slack
Richard B. Kaufman-López
@sparragus
Slack
Programacion de Bots para
Herramientas
basicas
Tipos de bots
Incoming Webhooks
Outgoing Webhooks
Bot User
Slash Commands
Incoming
Webhooks
Slack
Incoming Webhooks
Bot App
Instagram
Twitter
Slack
…
Evento? Mensaje
1 var request = require('request');
2
3 var webhookURL = 'https://hooks.slack.com/services/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';
4
5 var payload = {
6 text: 'Hello, World!'
7 };
8
9 var requestOptions = {
10 uri: webhookURL,
11 method: 'POST',
12 body: JSON.stringify(payload)
13 };
14
15 request(requestOptions);
1 twitter.stream('statuses/filter', {track: ‘taco’}, function(stream) {
2 stream.on('data', function(tweet) {
3 var tweetUser = tweet.user.screen_name;
4 var tweetText = tweet.text;
5
6
7 // El mensaje que quiero enviar. Esta vez va con formato. Ya veran...
8 var payload = {
9 username: 'Tacos de México',
10 icon_url: 'http://hilahcooking.com/wp-content/uploads/2010/06/tacos-al-pastor.jpg',
11
12 fallback: '@' + tweetUser + ': ' + tweetText,
13
14 pretext: 'Tacos <3',
15
16 color: '#33aaff',
17
18 fields: [{
19 title: '@' + tweetUser,
20 value: tweetText,
21 short: true
22 }],
23
24 unfurl_links: false
25 };
26 // Opciones del request
27 var requestOptions = {
28 uri: webhookURL,
29 method: 'POST',
30 body: JSON.stringify(payload)
31 };
32 // Enviar el mensaje
33 request(requestOptions);
34 });
35 });
Video
https://youtu.be/ZaYt9CRBqo4
Outgoing
Webhooks
Slack
Outgoing Webhooks
Bot App
Slack
Message?Message
1 # Crear directorio donde vamos a trabajar
2 $ mkdir slack-background-bot
3 $ cd slack-background-bot
4
5 # Crear repositorio de git
6 $ git init
7 $ touch README.md
8 $ git add README.md
9 $ git commit -m "Initial commit."
10
11 # Crear aplicación de heroku
12 $ heroku apps:create
13 $ heroku ps:scale web=1
14 $ echo "web: node index.js" > Procfile
15
16 # Instalar dependencias
17 $ npm init
18 $ npm install --save express body-parser
heroku nos regresa la URL de
nuestra app.
(https://nameless-journey-4425.herokuapp.com/)
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 aquí
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 });
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 });
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 });
Kanye West interrumpe tus conversaciones
imma-let-you-finish
http://ledhack.org/imma-let-you-finish/
Video
https://www.youtube.com/watch?v=3K21rLBEfeM
Kanye West interrumpe tus conversaciones.
Tiene un 0.5% de probabilidad de que aparezca.
Ejemplo
imma-let-you-finish
Bots como usuario
Bot Slack
Message
Message
Action
Event
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
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();
1 richardkaufman @ kaufman in …/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
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 });
Video
https://youtu.be/9VaaFv9pCag
slack-bot-edward-snowden
Envía mensajes anónimos a #random.
http://ledhack.org/slack-bot-edward-snowden/
Slash Commands
Slack
Slash Commands
Bot App
Slack
Message?Command
Text
Incoming
Webhooks
1 var express = require('express');
2 var app = express();
3
4 var Instagram = require('instagram-node-lib');
5
6 // Set Instagram keys and global callback url.
7 Instagram.set('client_id', '1e6e75e94695423285b11b68181bf5e6');
8 Instagram.set('client_secret', 'c54e930a781844228bc7ec6060e73547');
9 // Instagram.set('callback_url', '');
10
11 var port = process.env.PORT || 3000;
12 app.set('port', port);
13
14 app.get('/', function(req, res) {
15 var tag = req.query.text;
16
17 Instagram.tags.recent({
18 name: tag,
19 complete: function(result) {
20 var pictureURL = result[0].images.standard_resolution.url;
21 res.send(pictureURL);
22 }
23 });
24
25 });
26
27 app.listen(app.get('port'), function() {
28 console.log('Listening at port ' + app.get('port'));
29 });
Video
https://youtu.be/5nwTxLr6nKQ
1 function sendMessageToSlack(tag, pictureURL) {
2 var webhookURL = 'https://hooks.slack.com/services/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';
3
4 var payload = {
5 username: 'Instagram Bot',
6 icon_url: 'http://a.deviantart.net/avatars/i/n/instahack.png?1',
7 attachments: [
8 {
9 fallback: 'A picture of ' + tag,
10 color: '#F99157',
11 pretext: '/instagram ' + tag,
12 image_url: pictureURL
13 }
14 ]
15 };
16
17 var requestOptions = {
18 uri: webhookURL,
19 method: 'POST',
20 body: JSON.stringify(payload)
21 };
22
23 request(requestOptions);
24 }
25
26
27 app.get('/', function(req, res) {
28 var tag = req.query.text;
29
30 Instagram.tags.recent({
31 name: tag,
32 complete: function(result) {
33 var pictureURL = result[0].images.standard_resolution.url;
34 res.status(200).end();
35
36 return sendMessageToSlack(tag, pictureURL);
37 }
38 });
39
40 });
Video
https://youtu.be/77wH0hC3Tvo
Richard Kaufman
twitter: @sparragus
Laboratorio del Error Diseñado
twitter.com/ledhack
facebook.com/ledhack
ledhack.org
Get the code!
https://github.com/Sparragus/slack-bots-chela-js
Programación de Bots para Slack con Javascript
Programación de Bots para Slack con Javascript

More Related Content

More from Software Guru

Estructuras de datos avanzadas: Casos de uso reales
Estructuras de datos avanzadas: Casos de uso realesEstructuras de datos avanzadas: Casos de uso reales
Estructuras de datos avanzadas: Casos de uso realesSoftware Guru
 
Building bias-aware environments
Building bias-aware environmentsBuilding bias-aware environments
Building bias-aware environmentsSoftware Guru
 
El secreto para ser un desarrollador Senior
El secreto para ser un desarrollador SeniorEl secreto para ser un desarrollador Senior
El secreto para ser un desarrollador SeniorSoftware Guru
 
Cómo encontrar el trabajo remoto ideal
Cómo encontrar el trabajo remoto idealCómo encontrar el trabajo remoto ideal
Cómo encontrar el trabajo remoto idealSoftware Guru
 
Automatizando ideas con Apache Airflow
Automatizando ideas con Apache AirflowAutomatizando ideas con Apache Airflow
Automatizando ideas con Apache AirflowSoftware Guru
 
How thick data can improve big data analysis for business:
How thick data can improve big data analysis for business:How thick data can improve big data analysis for business:
How thick data can improve big data analysis for business:Software Guru
 
Introducción al machine learning
Introducción al machine learningIntroducción al machine learning
Introducción al machine learningSoftware Guru
 
Democratizando el uso de CoDi
Democratizando el uso de CoDiDemocratizando el uso de CoDi
Democratizando el uso de CoDiSoftware Guru
 
Gestionando la felicidad de los equipos con Management 3.0
Gestionando la felicidad de los equipos con Management 3.0Gestionando la felicidad de los equipos con Management 3.0
Gestionando la felicidad de los equipos con Management 3.0Software Guru
 
Taller: Creación de Componentes Web re-usables con StencilJS
Taller: Creación de Componentes Web re-usables con StencilJSTaller: Creación de Componentes Web re-usables con StencilJS
Taller: Creación de Componentes Web re-usables con StencilJSSoftware Guru
 
El camino del full stack developer (o como hacemos en SERTI para que no solo ...
El camino del full stack developer (o como hacemos en SERTI para que no solo ...El camino del full stack developer (o como hacemos en SERTI para que no solo ...
El camino del full stack developer (o como hacemos en SERTI para que no solo ...Software Guru
 
¿Qué significa ser un programador en Bitso?
¿Qué significa ser un programador en Bitso?¿Qué significa ser un programador en Bitso?
¿Qué significa ser un programador en Bitso?Software Guru
 
Colaboración efectiva entre desarrolladores del cliente y tu equipo.
Colaboración efectiva entre desarrolladores del cliente y tu equipo.Colaboración efectiva entre desarrolladores del cliente y tu equipo.
Colaboración efectiva entre desarrolladores del cliente y tu equipo.Software Guru
 
Pruebas de integración con Docker en Azure DevOps
Pruebas de integración con Docker en Azure DevOpsPruebas de integración con Docker en Azure DevOps
Pruebas de integración con Docker en Azure DevOpsSoftware Guru
 
Elixir + Elm: Usando lenguajes funcionales en servicios productivos
Elixir + Elm: Usando lenguajes funcionales en servicios productivosElixir + Elm: Usando lenguajes funcionales en servicios productivos
Elixir + Elm: Usando lenguajes funcionales en servicios productivosSoftware Guru
 
Así publicamos las apps de Spotify sin stress
Así publicamos las apps de Spotify sin stressAsí publicamos las apps de Spotify sin stress
Así publicamos las apps de Spotify sin stressSoftware Guru
 
Achieving Your Goals: 5 Tips to successfully achieve your goals
Achieving Your Goals: 5 Tips to successfully achieve your goalsAchieving Your Goals: 5 Tips to successfully achieve your goals
Achieving Your Goals: 5 Tips to successfully achieve your goalsSoftware Guru
 
Acciones de comunidades tech en tiempos del Covid19
Acciones de comunidades tech en tiempos del Covid19Acciones de comunidades tech en tiempos del Covid19
Acciones de comunidades tech en tiempos del Covid19Software Guru
 
De lo operativo a lo estratégico: un modelo de management de diseño
De lo operativo a lo estratégico: un modelo de management de diseñoDe lo operativo a lo estratégico: un modelo de management de diseño
De lo operativo a lo estratégico: un modelo de management de diseñoSoftware Guru
 
La importancia de crear User Personas y Escenarios
La importancia de crear User Personas y EscenariosLa importancia de crear User Personas y Escenarios
La importancia de crear User Personas y EscenariosSoftware Guru
 

More from Software Guru (20)

Estructuras de datos avanzadas: Casos de uso reales
Estructuras de datos avanzadas: Casos de uso realesEstructuras de datos avanzadas: Casos de uso reales
Estructuras de datos avanzadas: Casos de uso reales
 
Building bias-aware environments
Building bias-aware environmentsBuilding bias-aware environments
Building bias-aware environments
 
El secreto para ser un desarrollador Senior
El secreto para ser un desarrollador SeniorEl secreto para ser un desarrollador Senior
El secreto para ser un desarrollador Senior
 
Cómo encontrar el trabajo remoto ideal
Cómo encontrar el trabajo remoto idealCómo encontrar el trabajo remoto ideal
Cómo encontrar el trabajo remoto ideal
 
Automatizando ideas con Apache Airflow
Automatizando ideas con Apache AirflowAutomatizando ideas con Apache Airflow
Automatizando ideas con Apache Airflow
 
How thick data can improve big data analysis for business:
How thick data can improve big data analysis for business:How thick data can improve big data analysis for business:
How thick data can improve big data analysis for business:
 
Introducción al machine learning
Introducción al machine learningIntroducción al machine learning
Introducción al machine learning
 
Democratizando el uso de CoDi
Democratizando el uso de CoDiDemocratizando el uso de CoDi
Democratizando el uso de CoDi
 
Gestionando la felicidad de los equipos con Management 3.0
Gestionando la felicidad de los equipos con Management 3.0Gestionando la felicidad de los equipos con Management 3.0
Gestionando la felicidad de los equipos con Management 3.0
 
Taller: Creación de Componentes Web re-usables con StencilJS
Taller: Creación de Componentes Web re-usables con StencilJSTaller: Creación de Componentes Web re-usables con StencilJS
Taller: Creación de Componentes Web re-usables con StencilJS
 
El camino del full stack developer (o como hacemos en SERTI para que no solo ...
El camino del full stack developer (o como hacemos en SERTI para que no solo ...El camino del full stack developer (o como hacemos en SERTI para que no solo ...
El camino del full stack developer (o como hacemos en SERTI para que no solo ...
 
¿Qué significa ser un programador en Bitso?
¿Qué significa ser un programador en Bitso?¿Qué significa ser un programador en Bitso?
¿Qué significa ser un programador en Bitso?
 
Colaboración efectiva entre desarrolladores del cliente y tu equipo.
Colaboración efectiva entre desarrolladores del cliente y tu equipo.Colaboración efectiva entre desarrolladores del cliente y tu equipo.
Colaboración efectiva entre desarrolladores del cliente y tu equipo.
 
Pruebas de integración con Docker en Azure DevOps
Pruebas de integración con Docker en Azure DevOpsPruebas de integración con Docker en Azure DevOps
Pruebas de integración con Docker en Azure DevOps
 
Elixir + Elm: Usando lenguajes funcionales en servicios productivos
Elixir + Elm: Usando lenguajes funcionales en servicios productivosElixir + Elm: Usando lenguajes funcionales en servicios productivos
Elixir + Elm: Usando lenguajes funcionales en servicios productivos
 
Así publicamos las apps de Spotify sin stress
Así publicamos las apps de Spotify sin stressAsí publicamos las apps de Spotify sin stress
Así publicamos las apps de Spotify sin stress
 
Achieving Your Goals: 5 Tips to successfully achieve your goals
Achieving Your Goals: 5 Tips to successfully achieve your goalsAchieving Your Goals: 5 Tips to successfully achieve your goals
Achieving Your Goals: 5 Tips to successfully achieve your goals
 
Acciones de comunidades tech en tiempos del Covid19
Acciones de comunidades tech en tiempos del Covid19Acciones de comunidades tech en tiempos del Covid19
Acciones de comunidades tech en tiempos del Covid19
 
De lo operativo a lo estratégico: un modelo de management de diseño
De lo operativo a lo estratégico: un modelo de management de diseñoDe lo operativo a lo estratégico: un modelo de management de diseño
De lo operativo a lo estratégico: un modelo de management de diseño
 
La importancia de crear User Personas y Escenarios
La importancia de crear User Personas y EscenariosLa importancia de crear User Personas y Escenarios
La importancia de crear User Personas y Escenarios
 

Programación de Bots para Slack con Javascript

  • 1. Programación de Bots para Slack Richard B. Kaufman-López @sparragus
  • 2.
  • 3.
  • 4.
  • 5.
  • 8. Tipos de bots Incoming Webhooks Outgoing Webhooks Bot User Slash Commands
  • 9.
  • 11.
  • 12.
  • 13.
  • 14. 1 var request = require('request'); 2 3 var webhookURL = 'https://hooks.slack.com/services/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'; 4 5 var payload = { 6 text: 'Hello, World!' 7 }; 8 9 var requestOptions = { 10 uri: webhookURL, 11 method: 'POST', 12 body: JSON.stringify(payload) 13 }; 14 15 request(requestOptions);
  • 15.
  • 16. 1 twitter.stream('statuses/filter', {track: ‘taco’}, function(stream) { 2 stream.on('data', function(tweet) { 3 var tweetUser = tweet.user.screen_name; 4 var tweetText = tweet.text; 5 6 7 // El mensaje que quiero enviar. Esta vez va con formato. Ya veran... 8 var payload = { 9 username: 'Tacos de México', 10 icon_url: 'http://hilahcooking.com/wp-content/uploads/2010/06/tacos-al-pastor.jpg', 11 12 fallback: '@' + tweetUser + ': ' + tweetText, 13 14 pretext: 'Tacos <3', 15 16 color: '#33aaff', 17 18 fields: [{ 19 title: '@' + tweetUser, 20 value: tweetText, 21 short: true 22 }], 23 24 unfurl_links: false 25 }; 26 // Opciones del request 27 var requestOptions = { 28 uri: webhookURL, 29 method: 'POST', 30 body: JSON.stringify(payload) 31 }; 32 // Enviar el mensaje 33 request(requestOptions); 34 }); 35 });
  • 19.
  • 20.
  • 21. 1 # Crear directorio donde vamos a trabajar 2 $ mkdir slack-background-bot 3 $ cd slack-background-bot 4 5 # Crear repositorio de git 6 $ git init 7 $ touch README.md 8 $ git add README.md 9 $ git commit -m "Initial commit." 10 11 # Crear aplicación de heroku 12 $ heroku apps:create 13 $ heroku ps:scale web=1 14 $ echo "web: node index.js" > Procfile 15 16 # Instalar dependencias 17 $ npm init 18 $ npm install --save express body-parser heroku nos regresa la URL de nuestra app. (https://nameless-journey-4425.herokuapp.com/)
  • 22. 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 aquí 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 });
  • 23.
  • 24. 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 });
  • 25.
  • 26. 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 });
  • 27.
  • 28. Kanye West interrumpe tus conversaciones imma-let-you-finish http://ledhack.org/imma-let-you-finish/
  • 30. Kanye West interrumpe tus conversaciones. Tiene un 0.5% de probabilidad de que aparezca. Ejemplo imma-let-you-finish
  • 31. Bots como usuario Bot Slack Message Message Action Event
  • 32.
  • 33.
  • 34.
  • 35. 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
  • 36. 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();
  • 37. 1 richardkaufman @ kaufman in …/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
  • 38.
  • 39. 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 });
  • 41. slack-bot-edward-snowden Envía mensajes anónimos a #random. http://ledhack.org/slack-bot-edward-snowden/
  • 42.
  • 43. Slash Commands Slack Slash Commands Bot App Slack Message?Command Text Incoming Webhooks
  • 44.
  • 45.
  • 46. 1 var express = require('express'); 2 var app = express(); 3 4 var Instagram = require('instagram-node-lib'); 5 6 // Set Instagram keys and global callback url. 7 Instagram.set('client_id', '1e6e75e94695423285b11b68181bf5e6'); 8 Instagram.set('client_secret', 'c54e930a781844228bc7ec6060e73547'); 9 // Instagram.set('callback_url', ''); 10 11 var port = process.env.PORT || 3000; 12 app.set('port', port); 13 14 app.get('/', function(req, res) { 15 var tag = req.query.text; 16 17 Instagram.tags.recent({ 18 name: tag, 19 complete: function(result) { 20 var pictureURL = result[0].images.standard_resolution.url; 21 res.send(pictureURL); 22 } 23 }); 24 25 }); 26 27 app.listen(app.get('port'), function() { 28 console.log('Listening at port ' + app.get('port')); 29 });
  • 48. 1 function sendMessageToSlack(tag, pictureURL) { 2 var webhookURL = 'https://hooks.slack.com/services/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'; 3 4 var payload = { 5 username: 'Instagram Bot', 6 icon_url: 'http://a.deviantart.net/avatars/i/n/instahack.png?1', 7 attachments: [ 8 { 9 fallback: 'A picture of ' + tag, 10 color: '#F99157', 11 pretext: '/instagram ' + tag, 12 image_url: pictureURL 13 } 14 ] 15 }; 16 17 var requestOptions = { 18 uri: webhookURL, 19 method: 'POST', 20 body: JSON.stringify(payload) 21 }; 22 23 request(requestOptions); 24 } 25 26 27 app.get('/', function(req, res) { 28 var tag = req.query.text; 29 30 Instagram.tags.recent({ 31 name: tag, 32 complete: function(result) { 33 var pictureURL = result[0].images.standard_resolution.url; 34 res.status(200).end(); 35 36 return sendMessageToSlack(tag, pictureURL); 37 } 38 }); 39 40 });
  • 51. Laboratorio del Error Diseñado twitter.com/ledhack facebook.com/ledhack ledhack.org