Как создать Slack‑бота для автоматического приветствия новых участников
Зачем нужен приветственный бот
Приветственный бот помогает новым участникам быстрее влиться в канал. Он отправляет последовательные, своевременные и персонализированные сообщения. Это экономит время администратора и повышает вовлечённость команды.
Важно: бот — инструмент для помощи, а не замена живого общения. Персонализируйте сообщения и давайте ссылку на полезные ресурсы.
Что вы получите в этой статье
- Полная инструкция по созданию и установке Slack‑бота.
- Код на Python, готовый к запуску.
- Руководство по подключению локального сервера к Slack через ngrok.
- Проверки безопасности и рекомендации по приватности.
- Чек‑лист тестирования, сценарии и план отката.
Создание Slack‑приложения и получение токена API
- Зарегистрируйте аккаунт Slack или войдите в существующий. Создайте отдельную тестовую рабочую область для разработки и отладки бота.

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

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

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

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

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

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

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

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

Теперь у вас есть все учетные данные для разработки: SLACK_BOT_TOKEN и SLACK_SIGNING_SECRET.
Подготовка окружения
Требования: базовые знания Python.
- Создайте виртуальное окружение.
- В корне проекта создайте файл .env и добавьте в него:
SLACK_BOT_TOKEN=ваш_token SLACK_SIGNING_SECRET=ваш_signing_secret
Примечание: никогда не храните .env в публичных репозиториях.
- Установите зависимости:
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
- Скачайте ngrok с официального сайта и запустите:
ngrok http 500- Скопируйте публичный URL, который выдал ngrok (например https://abcd1234.ngrok.io).

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

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

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

Описание изображения: бот отправляет персонализированное приветствие новому пользователю в канале.
Настройка и персонализация сообщений
- Персонализация: используйте 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.
- Бот не приглашён в конкретный приватный канал.
Важно: приватные каналы требуют отдельного приглашения бота; бот не будет получать события из каналов, в которых он не состоит.
Альтернативные подходы и расширения
- Slack Workflows (no‑code): используйте встроенные Workflows для простых приветствий без кода.
- Events API + Serverless: вместо локального сервера используйте AWS Lambda, Google Cloud Functions или Vercel.
- Socket Mode (RTM альтернативa): Slack Socket Mode позволяет обойтись без внешнего публичного URL и ngrok.
- Хранение состояния: для распределённых развертываний используйте 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 и не падает при временных ошибках.
Тестовые сценарии и примеры приёмки
- Новый пользователь присоединяется к каналу, бот отправляет приветствие — ожидание: сообщение с именем пользователя.
- Пользователь повторно выходит/входит — ожидание: бот не дублирует сообщение (если это требование).
- Бот не состоит в канале — ожидание: сообщение не отправляется и лог содержит понятную причину.
- 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)
- Создать тестовую рабочую область.
- Зарегистрировать приложение и настроить scopes.
- Разработать локально с использованием ngrok.
- Протестировать все сценарии и добавить мониторинг.
- Перенести на продакшен‑сервер или включить Socket Mode.
- Проводить периодические аудиты scopes и логов.
Модель зрелости функции приветствия (уровни)
- Уровень 0 — нет автоматических приветствий.
- Уровень 1 — простой бот, отправляющий текст.
- Уровень 2 — персонализация, сохранение состояния.
- Уровень 3 — интерактивные приветствия (кнопки, формы), интеграция с базой знаний.
- Уровень 4 — адаптивные приветствия на основе роли/проекта нового участника.
Совместимость и миграция
- Для небольших команд достаточно локального сервера и ngrok в разработке.
- Для продакшена рекомендуется развернуть приложение на надёжном хостинге или использовать Socket Mode для упрощения безопасности.
- При смене токена — обновите .env и перезапустите сервис; если scope изменился — переустановите приложение.
Краткий чек‑лист безопасности
- Токены в секретном хранилище.
- Отдельные токены для тестового и продакшен окружения.
- Логи очищены от секретов.
- Ограничение прав бота до необходимого минимума.
Итог и дальнейшие шаги
Приветственный бот — это относительно простая автоматизация, которая повышает вовлечённость и экономит время. После запуска вы можете:
- Добавить блоки с ресурсами и ссылками.
- Интегрировать бота с внутренней базой знаний.
- Расширить поведение на основе роли пользователя (HR, new‑hire, contractor).
Важно: регулярно пересматривайте список прав и проверяйте логи.
Короткая дорожная карта:
- 1–2 дня: реализовать базовый бот и тестовое развертывание.
- 1 неделя: добавить персистентность и обработку ошибок.
- 2–4 недели: добавить интерактивные компоненты и интеграции.
Если вам нужны готовые шаблоны сообщений, блоки для Block Kit или пример развертывания на сервере (gunicorn + systemd), скажите, и я подготовлю готовые фрагменты конфигурации и скрипты развертывания.
Похожие материалы
Gmail и настольные клиенты: выбор и настройка
SketchUp бесплатно: как начать 3D‑моделирование
Как создать аккаунт PlayStation Network (PSN)
Почему iPhone и iPad нагреваются и как это исправить
Как искать жильё на Airbnb для отпуска