Como integrar Slack en una app hecha con Node.JS

Christian Russo
orbit-software
Published in
5 min readSep 30, 2020

--

Utilice la API de Slack para incorporar funciones en su aplicación Node

“Slack une al equipo, estés donde estés”. Slack se usa ampliamente en el mundo profesional y muchas de las aplicaciones empresariales ofrecen la opción de compartir directamente con Slack.

Este artículo cubrirá los conceptos básicos de cómo conectar su aplicación de nodo a Slack y enviar el mensaje de texto.

Slack proporciona API fáciles de usar. Utilizaremos la API web de Slack aquí.

Empecemos

Qué necesitas de Slack

Si ha estudiado sobre autenticación y API, debe haber oído hablar de tokens (bearer, jwt …) y claves. De manera similar, para conectar su aplicación de nodo a Slack, necesita un token y una clave.

Primero, debe crear una aplicación en Slack que se activará en el directorio de aplicaciones de Slack (una especie de tienda de juegos).

Vaya a https://api.slack.com/apps y haga clic en create new app y siga los pasos

Después de crear la aplicación en Slack, llegará a la página “Información básica”, que tendrá dos datos clave que necesitamos.

Tenga en cuenta la identificación del cliente y el secreto del cliente, los usaremos más adelante.

Ahora necesitamos un token de autenticación de Slack para llamar a los métodos proporcionados en nombre del usuario para enviar mensajes. Para eso, necesitamos configurar algunas cosas.

Configurar la URL de redireccionamiento y agregar ámbitos

Una vez que el usuario dé permiso a su aplicación de Slack, recibirá un código que se utilizará para recuperar el token de portador, pero ¿dónde? Para eso, necesitamos configurar la “URL de redireccionamiento”. Esta es la ruta donde se redireccionará la solicitud con el código.

Vaya a ‘OAuth y permisos’, aquí puede agregar la URL de redireccionamiento. Por ahora, agregaré http://localhost:3000/connecttoslack

Los ámbitos son los permisos requeridos por cada método de API para poder ser utilizados. Lea sobre varios métodos. Hay dos tipos de alcance:

1. Bot Scope (si quieres interactuar con Slack como un bot)

2. Alcance del usuario (si desea interactuar con Slack en nombre del usuario)

Agregaremos chat: write scope a ambos ámbitos. Para hacer eso, debajo de la URL de redireccionamiento, hay una sección de Ámbitos, allí puede agregar ámbitos.

Configuración de la aplicación de nodo

  1. Cree una carpeta llamada slack-integration e inicialice la aplicación de nodo
In terminalmkdir slack-integration
cd slack-integration
npm init -y

2. Agregue dependencias:

// For creating server
npm install express
// Slack web API module
npm install @slack/web-api
// For sending api calls
npm install axios

3. Agregue una carpeta pública dentro de slack-integration para servir archivos estáticos en el servidor. Y agregue index.html a él

mkdir public
touch ./public/index.html

4. Cree server.js dentro de slack-integration y agregue lo siguiente

const express = require('express');
const app = express();
const axios = require('axios');
const { WebClient } = require('@slack/web-api');
const PORT = 3000;
// this will allow us to use slack api methods
const client = new WebClient();
app.use(express.static('public'));
app.use(express.json());
app.listen(PORT, () => {
console.log('listening at', PORT);
});

Código del lado del cliente

Debe realizar una solicitud desde el lado del cliente para integrar Slack, que realizará el inicio de sesión de Slack y devolverá el token de autorización (token de portador). Slack te da el botón listo para usar. Agregue el código a continuación a index.html:

<ahref="https://slack.com/oauth/v2/authorize?client_id=[clientId retrived from above]&scope=[scopes you need]&user_scope=[user scopes you need]&redirect_uri=http://localhost/connecttoslack"><img alt="Add to Slack" height="40" width="139" src="https://platform.slack-edge.com/img/add_to_slack.png" srcSet="https://platform.slack-edge.com/img/add_to_slack.png 1x, https://platform.slack-edge.com/img/add_to_slack@2x.png 2x" /></a>

Hacer clic en este botón llevará al usuario a la página donde permitirá que tu aplicación interactúe con Slack en su nombre. La URL de redireccionamiento que ha pasado en redirect_uri es donde se enviará la solicitud desde esta página. Tendrá un código de autenticación que se usará para recuperar el token usando el método oauth.v2.access.

NOTA: asegúrese de que el redirect_uri que está proporcionando esté incluido en Slack en las URL de redireccionamiento.

Configurar la ruta para manejar la redirección de URI y enviar un mensaje a Slack

En su server.js agregue una ruta / connecttoslack y recupere el token y usando ese token enviaremos un mensaje a Slack usando el método postMessage () de Slack. Toma un objeto como argumento y devuelve una promesa con una respuesta.

const express = require('express');
const app = express();
const axios = require('axios');
const { WebClient } = require('@slack/web-api');
const PORT = 3000;
// this will allow us to use slack api methods
const client = new WebClient();
app.use(express.static('public'));
app.use(express.json());
// code is a query parameter
app.get('/connecttoslack', async (req, res) => {
const auth = await client.oauth.v2.access({
code: req.query.code,
client_id: <your_client_id>,
client_secret: <your_client_secret>,
redirect_uri:'http://localhost:4000/connecttoslack'
});
try {
// Sending Message to slack
const res = await client.chat.postMessage({
token: auth.authed_user.access_token,
channel: <channelName>,
text: <Enter your message to send>,
as_user: true
});
console.log(res);
} catch (e) {}
});
app.listen(PORT, () => {
console.log('listening at', PORT);
});

Y eso es. Has enviado correctamente un mensaje a Slack. Verifique el canal que mencionó y verá el mensaje que envió.

Cosas para leer

Cuando envía mensajes a Slack, no desea enviar mensajes de texto sin formato. Hay algo llamado Block Kit Builder.

La documentación de Slack es excelente; puede leer sobre varios métodos que proporciona Slack. https://api.slack.com/methods.

¡Gracias!

--

--