Используйте API Slack для включения функций в свое приложение Node.

«Slack объединяет команду, где бы вы ни находились». Slack широко используется в профессиональном мире, и многие корпоративные приложения предоставляют возможность совместного использования напрямую в Slack.
В этой статье будут рассмотрены основы того, как подключить ваше приложение узла к Slack и отправить текстовое сообщение.

Slack предоставляет простые в использовании API. Здесь мы будем использовать веб-API Slack.

Давайте начнем

Что вам нужно от Slack

Если вы изучали аутентификацию и API, вы, должно быть, слышали о токенах (bearer, jwt…) и ключах. Аналогично, чтобы подключить приложение узла к Slack, вам понадобятся токен и ключ.

Во-первых, вам нужно создать приложение в Slack, которое будет работать в каталоге приложений Slack (своего рода игровой магазин).
Перейдите на https://api.slack.com/apps. », Нажмите Create New App и следуйте инструкциям.

После создания приложения в Slack вы перейдете на страницу «Основная информация», на которой будут содержаться две ключевые информации, которые нам нужны.

Обратите внимание на Client Id и Client Secret, мы будем использовать их позже.

Теперь нам нужен токен аутентификации из Slack для вызова методов, предоставленных от имени пользователя для отправки сообщений. Для этого нам нужно настроить несколько вещей.

Настройте URL-адрес перенаправления и добавьте области

Как только пользователь даст разрешение вашему приложению Slack, вы получите код, который будет использоваться для получения токена-носителя, но где? Для этого нам нужно настроить «URL перенаправления». Это маршрут, по которому запрос будет перенаправлен с кодом.

Перейдите в «OAuth & Permissions», здесь вы можете добавить URL-адрес перенаправления. А пока добавлю http://localhost:3000/connecttoslack

Области действия - это разрешения, необходимые для использования каждым методом API. Прочтите о различных методах. Существует два типа области действия:
1. Область действия бота (если вы хотите взаимодействовать со Slack как бот)
2. Область действия пользователя (если вы хотите взаимодействовать со Slack от имени пользователя) < br />
Мы добавим chat:write область действия к обеим областям. Для этого под URL-адресом перенаправления есть раздел Области действия, в котором вы можете добавлять области.

Настройка приложения узла

  1. Создайте папку с именем slack-integration и инициализируйте приложение узла.
In terminal
mkdir slack-integration
cd slack-integration
npm init -y

2. Добавьте зависимости:

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

3. Добавьте общую папку внутри slack-интеграции для обслуживания статических файлов на сервере. И добавить к нему index.html

mkdir public
touch ./public/index.html

4. Создайте server.js внутри slack-интеграции и добавьте к нему подписку

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);
});

Клиентский код

Вам необходимо сделать запрос на стороне клиента для интеграции Slack, который выполнит вход в Slack и вернет токен авторизации (токен носителя). Slack дает вам готовую кнопку для использования. Добавьте код ниже в index.html:

<a href="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/[email protected] 2x" /></a>

Нажав на эту кнопку, пользователь попадет на страницу, где он позволит вашему приложению взаимодействовать со Slack от его имени. URL-адрес перенаправления, который вы передали в redirect_uri, - это то, куда будет отправлен запрос с этой страницы. У него будет код аутентификации, который будет использоваться для получения токена с помощью метода oauth.v2.access.
ПРИМЕЧАНИЕ. Убедитесь, что предоставляемый вами redirect_uri указан в Slack в URL-адресах перенаправления

Настройка маршрута для обработки URI перенаправления и отправки сообщения в Slack

В вашем server.js добавьте маршрут /connecttoslack и получите токен, и, используя этот токен, мы отправим сообщение в Slack, используя postMessage() метод Slack. Он принимает объект в качестве аргумента и возвращает обещание с ответом.

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);
});

Вот и все. Вы успешно отправили сообщение в Slack. Отметьте канал, который вы упомянули, и вы увидите сообщение, которое вы отправили.

Что читать

Когда вы отправляете сообщения в Slack, вы не хотите отправлять обычные текстовые сообщения. Есть что-то под названием Block Kit Builder.

Документация Slack прекрасна: вы можете прочитать о различных методах, которые предоставляет Slack: https://api.slack.com/methods.

Спасибо!