Если вы когда-нибудь задумывались, что получится, если прокрастинация разработчика встретится с коммуникационной платформой компании, то получите Slack-бота. И позвольте сказать вам — создавать их гораздо увлекательнее, чем кажется.
В этом руководстве мы подробно рассмотрим искусство и науку создания мощных Slack-ботов с использованием Node.js и Slack Bolt API. Независимо от того, автоматизируете ли вы рутинные задачи, запрашиваете данные из баз данных или просто облегчаете жизнь своей команде (и делаете её немного интереснее), это подробное руководство поможет вам в этом.
Зачем Slack-боты? Почему сейчас?
Прежде чем углубиться в технические детали, давайте ответим на главный вопрос: зачем кому-то добровольно добавлять ещё один инструмент в Slack, когда люди и так утопают в уведомлениях?
Ответ прост — потому что, если всё сделано правильно, Slack-бот становится невидимой рукой вашей команды. Он берёт на себя повторяющиеся задачи, чтобы люди могли сосредоточиться на реальном мышлении. Представьте себе развёртывание кода без выхода из Slack, проверку состояния сервера без переключения вкладок или генерацию отчётов во время третьей чашки кофе. Вот о чём мы мечтаем.
Инструменты для работы
Давайте определимся, с чем мы работаем:
- Node.js: ваша среда выполнения (версия 12 или выше, хотя новее — всегда лучше).
- Slack Bolt API: фреймворк, который делает всё менее болезненным.
- npm: ваш менеджер пакетов (должен быть уже установлен, если у вас есть Node.js).
- Рабочее пространство Slack: место, где ваш бот будет жить и работать.
Bolt API — это экспресс-режим разработки Slack. Вместо борьбы с необработанными HTTP-запросами и обработкой событий вы получаете красивый уровень абстракции, который позволяет сосредоточиться на том, что действительно важно — логике вашего бота.
Этап 1: настройка вашего Slack-приложения
Эта часть больше бюрократическая, чем кодовая, но она необходима. Думайте об этом как о получении паспорта для вашего бота перед международными поездками.
Шаг 1: создайте своё Slack-приложение
Перейдите на сайт Slack API и перейдите в раздел Ваши приложения. Нажмите Создать новое приложение, затем выберите С нуля.
Вам будет предложено:
- Назвать своего бота (проявите креативность — «бот» скучно).
- Выбрать рабочее пространство.
- Нажать Создать приложение.
Шаг 2: сгенерируйте свои учётные данные
Оказавшись на панели управления вашего приложения, вам понадобятся три магических токена, которые позволят вашему боту пройти аутентификацию в Slack:
Перейдите в OAuth и разрешения и прокрутите вниз до Областей. Вам нужно добавить области действия токена бота. Вот основные, с которых стоит начать:
chat:write— отправлять сообщения.commands— прослушивать слэш-команды.app_mentions:read— отвечать на упоминания.message.channels— прослушивать сообщения в каналах.message.im— прослушивать личные сообщения.
Полный список областей может показаться пугающим, но они охватывают 80% случаев использования бота. Вы всегда можете добавить больше позже, когда ваш бот начнёт мечтать о большем.
После настройки областей нажмите кнопку Сгенерировать токен и URL-адреса. Скопируйте свой Токен OAuth пользователя бота (начинается с xoxb-). Это удостоверение личности вашего бота — не делитесь им широко.
Шаг 3: настройте режим сокетов (или HTTP, на ваш выбор)
Slack предлагает два способа получения событий вашим ботом: режим сокетов (на основе WebSocket) или HTTP с туннелированием ngrok.
Режим сокетов проще для локальной разработки, поскольку вам не нужно выставлять свой localhost в интернет. Перейдите в Настройки > Режим сокетов и включите его.
Затем сгенерируйте Токен на уровне приложения, нажав Сгенерировать токен и области. Добавьте область connections:write. Этот токен начинается с xapp-.
Теперь у вас есть три токена:
SLACK_BOT_TOKEN(тот, что сxoxb-).SLACK_SIGNING_SECRET(находится в разделе Основная информация).SLACK_APP_TOKEN(тот, что сxapp-, для режима сокетов).
Храните их в файле .env — никогда не кодируйте их жёстко:
SLACK_BOT_TOKEN=xoxb-your-token-here
SLACK_SIGNING_SECRET=your-signing-secret-here
SLACK_APP_TOKEN=xapp-your-app-token-here
PORT=3000
Этап 2: настройка проекта
Давайте займёмся реальным кодом. Создайте новый каталог и инициализируйте свой проект:
mkdir slack-bot-project
cd slack-bot-project
npm init -y
npm install @slack/bolt dotenv
Пакет @slack/bolt — это ваш швейцарский нож для разработки Slack, а dotenv позволяет безопасно загружать секреты.
Этап 3: ваш первый Slack-бот
Вот где происходит волшебство. Создайте файл app.js:
const { App } = require("@slack/bolt");
require("dotenv").config();
// Инициализация приложения Bolt
const app = new App({
token: process.env.SLACK_BOT_TOKEN,
signingSecret: process.env.SLACK_SIGNING_SECRET,
socketMode: true,
appToken: process.env.SLACK_APP_TOKEN,
});
// Запуск приложения
(async () => {
await app.start(process.env.PORT || 3000);
console.log("⚡️ Приложение Bolt запущено!");
})();
Перед запуском этого необходимо переустановить приложение в вашем рабочем пространстве. Перейдите в Установить приложение на панели управления и нажмите Переустановить в рабочее пространство.
Теперь запустите своего бота:
node app.js
Если вы видите «⚡️ Приложение Bolt запущено!», поздравляю — ваш бот жив. Он пока не делает ничего полезного, но он жив.
Этап 4: заставить вашего бота реагировать
Здесь ваш бот превращается из молчаливого наблюдателя в активного участника. Давайте добавим реальную функциональность.
Прослушивание сообщений
Добавьте это в свой файл app.js:
app.message("hello", async ({ message, say }) => {
try {
say(`Привет, <@${message.user}>! 👋`);
} catch (error) {
console.error(error);
}
});
Теперь всякий раз, когда кто-то пишет «hello» в канале, где присутствует ваш бот, он отвечает дружеским приветствием. Магия? Не совсем. Соответствие шаблону? Определённо.
Вы можете сделать это более мощным с помощью регулярных выражений:
app.message(/hey|hi|howdy/i, async ({ message, say }) => {
try {
say(`Что нового, <@${message.user}>! 😎`);
} catch (error) {
console.error(error);
}
});
Флаг /i делает его регистронезависимым. «HEY», «Hey», «hey» — всё вызывает одинаковый ответ.
Слэш-команды
Слэш-команды — это мощные приёмы вашего бота. Это инициируемые пользователем команды, которые выполняют определённые действия. Давайте добавим одну:
app.command("/knowledge", async ({ command, ack, say }) => {
// Подтверждение команды немедленно
await ack();
try {
say("🎓 Инициирован запрос к базе знаний!");
// Добавьте свою фактическую логику здесь
} catch (error) {
console.error(error);
}
});
Вызов ack() имеет решающее значение — он сообщает Slack: «да, я получил вашу команду» в течение 3 секунд. Если не подтвердить, Slack предполагает, что что-то пошло не так.
В Slack зарегистрируйте эту команду в панели управления вашим приложением в разделе Слэш-команды. Добавьте /knowledge и укажите URL-адрес запроса.
Богатое форматирование сообщений
Slack Block Kit — это место, где обычные сообщения становятся красивыми. Вместо простого текста вы можете отправлять структурированные блоки с кнопками, изображениями и форматированным текстом:
app.command("/report", async ({ command, ack, say }) => {
await ack();
say({
blocks: [
{
type: "section",
text: {
type: "mrkdwn",
text: "*Ежедневный отчёт* 📊\nСгенерирован: " + new Date().toISOString(),
},
},
{
type: "section",
fields: [
{
type: "mrkdwn",
text: "*Статус:*\n✅ Все системы работают",
},
{
type: "mrkdwn",
text: "*Время безотказной
