Гид по технологиям

Как создать Slack‑бота для автоматического приветствия новых участников

9 min read Dev Tools Обновлено 17 Apr 2026
Slack‑бот для приветствия новых участников
Slack‑бот для приветствия новых участников

Зачем нужен приветственный бот

Приветственный бот помогает новым участникам быстрее влиться в канал. Он отправляет последовательные, своевременные и персонализированные сообщения. Это экономит время администратора и повышает вовлечённость команды.

Важно: бот — инструмент для помощи, а не замена живого общения. Персонализируйте сообщения и давайте ссылку на полезные ресурсы.

Что вы получите в этой статье

  • Полная инструкция по созданию и установке Slack‑бота.
  • Код на Python, готовый к запуску.
  • Руководство по подключению локального сервера к Slack через ngrok.
  • Проверки безопасности и рекомендации по приватности.
  • Чек‑лист тестирования, сценарии и план отката.

Создание Slack‑приложения и получение токена API

  1. Зарегистрируйте аккаунт Slack или войдите в существующий. Создайте отдельную тестовую рабочую область для разработки и отладки бота.

Белый и синий робот

  1. Войдите в тестовую рабочую область. Slack создаёт базовый канал автоматически.

Страница входа в рабочие пространства Slack

  1. В интерфейсе рабочего пространства найдите раздел «Apps». Переходите на сайт Slack API (https://api.slack.com).

Тестовое рабочее пространство Slack с названием Testing space

  1. На Slack API нажмите Create an app → From scratch.

Всплывающее окно создания приложения в Slack API

  1. Укажите имя приложения и рабочую область разработки.

Ввод имени приложения и рабочей области в Slack API

  1. После создания приложения откройте страницу с базовой информацией. Запишите Signing Secret — он потребуется для проверки подлинности приходящих запросов от Slack.

Страница с основной информацией приложения Slack и Signing Secret

  1. Перейдите в раздел OAuth & Permissions. В блоке Bot Token Scopes добавьте следующие права:
  • users:read — позволяет боту получать информацию о пользователях.
  • chat:write — позволяет отправлять сообщения от имени бота.

Страница OAuth & Permissions с настройкой прав бота

  1. Вернитесь к базовой информации и нажмите Install to Workspace. Разрешите приложению доступ.

Страница установки приложения в рабочую область Slack

  1. После установки сохраните Bot User OAuth Token, который сгенерировал Slack. Бот появится в списке приложений вашей рабочей области.

Рабочая область Slack с отображением бота в разделе приложений

Теперь у вас есть все учетные данные для разработки: SLACK_BOT_TOKEN и SLACK_SIGNING_SECRET.

Подготовка окружения

Требования: базовые знания Python.

  1. Создайте виртуальное окружение.
  2. В корне проекта создайте файл .env и добавьте в него:

SLACK_BOT_TOKEN=ваш_token SLACK_SIGNING_SECRET=ваш_signing_secret

Примечание: никогда не храните .env в публичных репозиториях.

  1. Установите зависимости:
pip install slack-sdk pathlib dotenv flask slackeventsapi

Кратко о пакетах:

  • slack-sdk — Web API клиент и вспомогательные функции для интеграции с Slack.
  • pathlib — удобная работа с путями (входит в стандартную библиотеку у современных Python версий).
  • python-dotenv (dotenv) — загрузка переменных окружения из .env.
  • flask — лёгкий веб‑фреймворк для приёма HTTP‑запросов от Slack.
  • slackeventsapi — адаптер событий Slack, упрощающий обработку входящих событий.

Полный пример проекта можно хранить в репозитории GitHub и игнорировать .env.

Импорт необходимых библиотек

Создайте файл, например bot.py, и импортируйте библиотеки:

import slack_sdk as slack  
import os  
from pathlib import Path  
from dotenv import load_dotenv  
from flask import Flask  
from slackeventsapi import SlackEventAdapter

Объяснение в одну строку: SlackEventAdapter обрабатывает события, приходящие от Slack, и сопоставляет их с вашими функциями‑обработчиками.

Настройка бота в коде

В .env создайте две переменные: SLACK_BOT_TOKEN и SLACK_SIGNING_SECRET. Затем в коде создайте Flask‑приложение и загрузите переменные окружения:

app = Flask(__name__)  
env_path = Path('.') / '.env'  
load_dotenv(dotenv_path=env_path)  

Создайте SlackEventAdapter, который будет слушать события по пути /slack/events:

slack_event_adapter = SlackEventAdapter(os.environ['SLACK_SIGNING_SECRET'],  
                                        '/slack/events', app)  

Создайте WebClient для вызова Web API и получите ID бота:

client = slack.WebClient(token=os.environ['SLACK_BOT_TOKEN'])  
BOT_ID = client.api_call("auth.test")['user_id']

Определите шаблон приветствия и структуру для хранения уже поприветствованных пользователей:

GREETING_MESSAGE = "Hello {user_name}, welcome to the {channel_name} " \  
                   "channel! We're excited to have you here."  
welcomed_users = set()  

Совет: добавьте возможность сохранять welcomed_users в персистентное хранилище (файл, Redis, БД), если бот перезапускается.

Обработчик события member_joined_channel

Зарегистрируйте обработчик на событие member_joined_channel:

@slack_event_adapter.on('member_joined_channel')  

Реализуйте функцию, которая извлечёт user_id и channel_id, проверит, не были ли уже поприветствованы, и отправит сообщение:

def handle_member_joined_channel(event_data):  
    user_id = event_data['event']['user']  
    channel_id = event_data['event']['channel']  
  
    # Only send a welcome message if the user is new  
    if user_id not in welcomed_users:  
        welcomed_users.add(user_id)  
  
        user_info = client.users_info(user=user_id)  
        user_name = user_info['user']['name']  
  
        channel_info = client.conversations_info(channel=channel_id)  
        channel_name = channel_info['channel']['name']  
  
        greeting = GREETING_MESSAGE.format(user_name=user_name,  
                                          channel_name=channel_name)  
  
        client.chat_postMessage(channel=channel_id, text=greeting)  

Пояснение: event_data содержит данные о событии, включая id пользователя и канала. Для избежания дублирования мы используем множество welcomed_users.

Запуск приложения локально

Запустите Flask‑приложение на порту 5000:

if __name__ == "__main__":  
    app.run(debug=True, port=5000)

Важно: debug=True полезен в разработке, но раскрывает внутреннюю информацию. Для production‑среды используйте WSGI‑сервер (gunicorn/uvicorn) и не включайте debug.

Подключение локального сервера к Slack через ngrok

  1. Скачайте ngrok с официального сайта и запустите:
ngrok http 500
  1. Скопируйте публичный URL, который выдал ngrok (например https://abcd1234.ngrok.io).

Вывод работы ngrok в терминале

  1. В Slack API откройте Event Subscriptions. Включите подписки и в поле Request URL укажите адрес ngrok с добавлением /slack/events:

https://ваш-ngrok-url.ngrok.io/slack/events

Страница подписки на события Slack API

  1. Подпишитесь на событие member_joined_channel. Slack автоматически подскажет необходимые scope; при изменениях scope потребуется переустановить приложение в рабочую область.

Страница повторной установки приложения Slack при изменении прав

  1. Нажмите Reinstall App, если это требуется.

Тестирование бота

  1. В рабочей области перейдите в канал, в котором хотите тестировать бота.
  2. Добавьте бота в канал (обычно через упоминание @ИмяБота или кнопку Add).
  3. При входе нового пользователя в канал бот должен отправить приветственное сообщение.

Бот отправляет приветственное сообщение в канале Slack

Описание изображения: бот отправляет персонализированное приветствие новому пользователю в канале.

Настройка и персонализация сообщений

  • Персонализация: используйте user_name, real_name или display_name из users_info.
  • Форматирование: поддерживаются базовые форматирования Slack — ссылки, упоминания, emoji.
  • Блоки (Block Kit): для богатых сообщений используйте blocks и attachments.

Пример варианта приветствия с блоками (упрощённо):

client.chat_postMessage(
    channel=channel_id,
    blocks=[
        {
            "type": "section",
            "text": {"type": "mrkdwn", "text": f"Добро пожаловать, <@{user_id}>!"}
        },
        {
            "type": "section",
            "text": {"type": "mrkdwn", "text": "Пожалуйста, ознакомьтесь с правилами канала и представьтесь."}
        }
    ]
)

Когда приветственный бот может не сработать — типичные причины

  • Неправильно настроен Request URL в Event Subscriptions. Slack проверяет URL при включении.
  • Отсутствуют необходимые OAuth‑scopes. Проверьте users:read и chat:write.
  • Ngrok не запущен или URL изменился после перезапуска ngrok.
  • Приложение не установлено в рабочую область или установлено в другой workspace.
  • Бот не приглашён в конкретный приватный канал.

Важно: приватные каналы требуют отдельного приглашения бота; бот не будет получать события из каналов, в которых он не состоит.

Альтернативные подходы и расширения

  1. Slack Workflows (no‑code): используйте встроенные Workflows для простых приветствий без кода.
  2. Events API + Serverless: вместо локального сервера используйте AWS Lambda, Google Cloud Functions или Vercel.
  3. Socket Mode (RTM альтернативa): Slack Socket Mode позволяет обойтись без внешнего публичного URL и ngrok.
  4. Хранение состояния: для распределённых развертываний используйте Redis или БД вместо in‑memory множества welcomed_users.

Когда использовать Socket Mode: если вы не хотите открывать публичный endpoint и предпочитаете выводить события через постоянное websocket‑соединение.

Безопасность и приватность

  • Храните SLACK_BOT_TOKEN и SLACK_SIGNING_SECRET в безопасном хранилище (сервис секретов, переменные окружения CI/CD).
  • Не публикуйте .env в репозитории.
  • Проверяйте подпись запросов с помощью Signing Secret (SlackEventAdapter делает это автоматически).
  • Минимизируйте scope: давайте боту только те права, которые ему действительно нужны.
  • При работе с персональными данными соблюдайте требования локального законодательства и GDPR‑подобные практики: документируйте, какие данные вы храните и зачем.

Примечание: если вы храните список поприветствованных пользователей, укажите в политике конфиденциальности, зачем это нужно и на какой срок данные хранятся.

Чек‑лист перед запуском в продакшен

  • Установлены только необходимые scopes (users:read, chat:write и др. по необходимости).
  • Signing secret хранится безопасно.
  • Ngrok используется только для разработки; в проде — публичный сервер или Socket Mode.
  • Логи не содержат токенов и секретов.
  • Механизм персистентности welcomed_users реализован.
  • Тестовые сценарии выполнены.
  • Плана отката и метрик для мониторинга достаточно.

Критерии приёмки

  • Бот отправляет приветствие новым пользователям каналов, где он состоит.
  • Сообщение содержит имя пользователя и имя канала.
  • Сообщение отправляется не более одного раза для одного пользователя в пределах настроенного периода (например, сесcии или навсегда в зависимости от требований).
  • Нет утечек токенов в логах или репозиториях.
  • Бот корректно обрабатывает ошибки API и не падает при временных ошибках.

Тестовые сценарии и примеры приёмки

  1. Новый пользователь присоединяется к каналу, бот отправляет приветствие — ожидание: сообщение с именем пользователя.
  2. Пользователь повторно выходит/входит — ожидание: бот не дублирует сообщение (если это требование).
  3. Бот не состоит в канале — ожидание: сообщение не отправляется и лог содержит понятную причину.
  4. API Slack возвращает 5xx — ожидание: бот логирует ошибку и пытается повторить отправку согласно стратегии retry.

План отката и аварийный сценарий

  • Откат: при ошибочном поведении быстро удалите приложение из рабочей области или отключите Event Subscriptions.
  • Локальный откат: остановите сервис, отключите ngrok.
  • Уведомление: оповестите администраторов рабочего пространства о проблеме и предпринимаемых шагах.

Роли и обязанности

  • Разработчик: внедряет и поддерживает код бота.
  • DevOps: развертывает сервис в продакшене, настраивает секреты и мониторинг.
  • Администратор Slack: устанавливает приложение и управляет правами доступа.

Примеры расширений и варианты сообщений

  • Добро пожаловать + ссылка на FAQ канала.
  • Приветствие с просьбой представиться и ссылкой на правила.
  • Лёгкое интерактивное сообщение с кнопкой «Представиться сейчас» (используйте interactive components и обработку actions).

Пример шаблонов сообщений:

  • Формальный: “Здравствуйте, {user_name}! Добро пожаловать в #{channel_name}.”
  • Дружелюбный: “Привет, {user_name}! Рады видеть в #{channel_name} 🎉”
  • С подсказкой: “Добро пожаловать, {user_name}. Начните с того, чтобы рассказать, чем вы занимаетесь. Вот FAQ: <ссылка>.”

Мини‑методология разработки (быстрый SOP)

  1. Создать тестовую рабочую область.
  2. Зарегистрировать приложение и настроить scopes.
  3. Разработать локально с использованием ngrok.
  4. Протестировать все сценарии и добавить мониторинг.
  5. Перенести на продакшен‑сервер или включить Socket Mode.
  6. Проводить периодические аудиты scopes и логов.

Модель зрелости функции приветствия (уровни)

  • Уровень 0 — нет автоматических приветствий.
  • Уровень 1 — простой бот, отправляющий текст.
  • Уровень 2 — персонализация, сохранение состояния.
  • Уровень 3 — интерактивные приветствия (кнопки, формы), интеграция с базой знаний.
  • Уровень 4 — адаптивные приветствия на основе роли/проекта нового участника.

Совместимость и миграция

  • Для небольших команд достаточно локального сервера и ngrok в разработке.
  • Для продакшена рекомендуется развернуть приложение на надёжном хостинге или использовать Socket Mode для упрощения безопасности.
  • При смене токена — обновите .env и перезапустите сервис; если scope изменился — переустановите приложение.

Краткий чек‑лист безопасности

  • Токены в секретном хранилище.
  • Отдельные токены для тестового и продакшен окружения.
  • Логи очищены от секретов.
  • Ограничение прав бота до необходимого минимума.

Итог и дальнейшие шаги

Приветственный бот — это относительно простая автоматизация, которая повышает вовлечённость и экономит время. После запуска вы можете:

  • Добавить блоки с ресурсами и ссылками.
  • Интегрировать бота с внутренней базой знаний.
  • Расширить поведение на основе роли пользователя (HR, new‑hire, contractor).

Важно: регулярно пересматривайте список прав и проверяйте логи.

Короткая дорожная карта:

  • 1–2 дня: реализовать базовый бот и тестовое развертывание.
  • 1 неделя: добавить персистентность и обработку ошибок.
  • 2–4 недели: добавить интерактивные компоненты и интеграции.

Если вам нужны готовые шаблоны сообщений, блоки для Block Kit или пример развертывания на сервере (gunicorn + systemd), скажите, и я подготовлю готовые фрагменты конфигурации и скрипты развертывания.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Gmail и настольные клиенты: выбор и настройка
Почта

Gmail и настольные клиенты: выбор и настройка

SketchUp бесплатно: как начать 3D‑моделирование
3D моделирование

SketchUp бесплатно: как начать 3D‑моделирование

Как создать аккаунт PlayStation Network (PSN)
Руководство

Как создать аккаунт PlayStation Network (PSN)

Почему iPhone и iPad нагреваются и как это исправить
Мобильные устройства

Почему iPhone и iPad нагреваются и как это исправить

Как искать жильё на Airbnb для отпуска
Путешествия

Как искать жильё на Airbnb для отпуска

Arduino Pong: ретро-игра на TV
Arduino

Arduino Pong: ретро-игра на TV