0Pricing
AI Agents · Урок

Основы Slack Bolt SDK

Инициализация приложения, токены бота, режим сокетов и HTTP, подписки на события.

«Основы Slack Bolt SDK» — бесплатный урок AI Agents на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения AI Agents, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс AI Agents содержит 4 уроков всего.

Почему стоит использовать Slack Bolt для разработки агентов

Slack Bolt — официальный SDK Python для создания приложений Slack. Он обрабатывает OAuth, маршрутизацию событий, промежуточное программное обеспечение и жизненный цикл запросов и ответов, поэтому Ваш агент может сосредоточиться на бизнес-логике, а не на работе с HTTP. Bolt поддерживает режим Socket Mode (WebSocket) и режим HTTP.

# Install Slack Bolt
# pip install slack-bolt

# Slack Bolt handles:
# - Event subscriptions (messages, mentions, reactions)
# - Slash commands (/summarize, /ask)
# - Interactive components (buttons, modals, select menus)
# - Shortcuts (global and message shortcuts)
# - OAuth 2.0 for multi-workspace apps
# - Request signature verification (security)

print('Slack Bolt is the official Python SDK for Slack apps')

Токен бота и секрет подписи

Приложению Slack нужны два учётных данных: токен бота (начинается с xoxb-) для вызова API и публикации сообщений и секрет подписи для проверки того, что входящие события действительно поступают из Slack. Оба значения находятся на панели настроек приложения Slack.

import os
from slack_bolt import App

# Load credentials from environment variables
# Never hardcode tokens!
BOT_TOKEN = os.environ['SLACK_BOT_TOKEN']        # xoxb-...
SIGNING_SECRET = os.environ['SLACK_SIGNING_SECRET']  # hex string

# Initialize the Bolt app
app = App(
    token=BOT_TOKEN,
    signing_secret=SIGNING_SECRET
)

print('Slack Bolt app initialized')
print(f'Bot token prefix: {BOT_TOKEN[:10]}...')

Обязательные области доступа токена бота

Приложения Slack используют области доступа OAuth, чтобы определить, что может делать бот. Добавляйте области доступа на панели приложения Slack в разделе OAuth и разрешения → Области доступа → Области доступа токена бота. Распространённые области доступа для бота с ИИ-агентом:

  • chat:write — публикация сообщений
  • app_mentions:read — получение @mentions
  • channels:history — чтение сообщений каналов
  • commands — получение команд с косой чертой
  • im:write — отправка личных сообщений
# Required scopes for a typical AI agent bot:
# - chat:write          → post messages to channels
# - app_mentions:read   → receive @bot mentions
# - channels:history    → read message history
# - channels:read       → list channels
# - commands            → handle slash commands
# - im:write            → send DMs
# - im:read             → receive DMs
# - users:read          → get user info (name, email)

# Add these in Slack App settings:
# https://api.slack.com/apps -> Your App -> OAuth & Permissions

print('Configure scopes in Slack App dashboard before installing')

Режим Socket Mode и режим HTTP

Режим Socket Mode подключается к Slack через постоянное соединение WebSocket — общедоступный URL не нужен, поэтому этот режим идеально подходит для разработки и внутренних инструментов. Режим HTTP требует общедоступной конечной точки HTTPS, на которую Slack отправляет события с помощью POST, — это необходимо для рабочих приложений и установок в нескольких рабочих пространствах.

# SOCKET MODE (development / internal tools):
# - No public URL needed
# - Uses an App-Level Token (xapp-...)
# - Great for local development
from slack_bolt.adapter.socket_mode import SocketModeHandler

APP_TOKEN = os.environ['SLACK_APP_TOKEN']  # xapp-...
handler = SocketModeHandler(app, APP_TOKEN)

# handler.start()  # blocks and handles events

# HTTP MODE (production):
# - Requires public HTTPS URL configured in Slack app settings
# - Works with Flask, FastAPI, etc.
from slack_bolt.adapter.flask import SlackRequestHandler
from flask import Flask, request

flask_app = Flask(__name__)
slack_handler = SlackRequestHandler(app)

print('Socket Mode: dev/internal; HTTP Mode: production')

Инициализация приложения и запуск режима Socket Mode

Минимальное приложение Slack Bolt в режиме Socket Mode: создайте App, зарегистрируйте хотя бы один обработчик, а затем запустите SocketModeHandler. Обработчик подключается к инфраструктуре событий Slack и остаётся подключённым, пока Вы не остановите процесс.

import os
from slack_bolt import App
from slack_bolt.adapter.socket_mode import SocketModeHandler

app = App(
    token=os.environ['SLACK_BOT_TOKEN'],
    signing_secret=os.environ['SLACK_SIGNING_SECRET']
)

@app.event('app_mention')
def handle_mention(event, say):
    user = event['user']
    text = event['text']
    say(f'Hi <@{user}>! You said: {text}')

# Start the app
if __name__ == '__main__':
    handler = SocketModeHandler(
        app,
        os.environ['SLACK_APP_TOKEN']
    )
    handler.start()  # blocks until process is killed

Тестирование с ngrok (режим HTTP)

Во время разработки в режиме HTTP используйте ngrok, чтобы сделать локальный сервер доступным из интернета. Выполните ngrok http 3000, чтобы получить общедоступный URL HTTPS, затем обновите URL подписок на события и команд с косой чертой в приложении Slack, указав этот адрес.

# HTTP mode setup with Flask:
from flask import Flask, request
from slack_bolt import App
from slack_bolt.adapter.flask import SlackRequestHandler
import os

app = App(
    token=os.environ['SLACK_BOT_TOKEN'],
    signing_secret=os.environ['SLACK_SIGNING_SECRET']
)

@app.event('app_mention')
def handle_mention(event, say):
    say('Hello from HTTP mode!')

flask_app = Flask(__name__)
handler = SlackRequestHandler(app)

@flask_app.route('/slack/events', methods=['POST'])
def slack_events():
    return handler.handle(request)

# Run: python app.py
# In another terminal: ngrok http 3000
# Set https://abc123.ngrok.io/slack/events as your Request URL in Slack

Токен уровня приложения для режима Socket Mode

Для режима Socket Mode требуется дополнительный токен уровня приложения (начинается с xapp-) с областью доступа connections:write. Он отличается от токена бота. Создайте его в настройках приложения Slack в разделе Основная информация → Токены уровня приложения.

# App-Level Token setup:
# 1. Go to https://api.slack.com/apps -> Your App
# 2. Click 'Basic Information'
# 3. Scroll to 'App-Level Tokens'
# 4. Click 'Generate Token and Scopes'
# 5. Name it 'socket-mode-token'
# 6. Add scope: connections:write
# 7. Click 'Generate'
# 8. Copy the xapp-... token

# In your .env file:
# SLACK_BOT_TOKEN=xoxb-...
# SLACK_SIGNING_SECRET=abc123...
# SLACK_APP_TOKEN=xapp-...

from slack_bolt.adapter.socket_mode import SocketModeHandler
import os

handler = SocketModeHandler(
    app=app,
    app_token=os.environ['SLACK_APP_TOKEN']  # xapp-...
)
print('App-Level Token required for Socket Mode')

Промежуточное программное обеспечение Bolt

Bolt поддерживает промежуточное программное обеспечение — функции, выполняющиеся перед каждым обработчиком событий. Используйте его для журналирования, аутентификации, ограничения частоты запросов или дополнения событий данными пользователя. Вызовите next(), чтобы передать управление следующему промежуточному компоненту или обработчику.

from slack_bolt import App
import time
import logging

app = App(
    token=os.environ['SLACK_BOT_TOKEN'],
    signing_secret=os.environ['SLACK_SIGNING_SECRET']
)

logger = logging.getLogger(__name__)

# Request logging middleware
@app.middleware
def log_request(logger, body, next):
    event_type = body.get('event', {}).get('type', 'unknown')
    start = time.time()
    logger.info(f'Incoming event: {event_type}')
    next()  # must call next() to continue
    elapsed = time.time() - start
    logger.info(f'Handled {event_type} in {elapsed:.2f}s')

print('Middleware runs before every event handler')

Обработка ошибок в Bolt

Зарегистрируйте глобальный обработчик ошибок с помощью @app.error, чтобы перехватывать необработанные исключения из обработчиков событий. Это предотвращает сбой приложения и позволяет записывать ошибки в журнал, уведомлять канал мониторинга или отправлять пользователю сообщение об ошибке.

from slack_bolt import App
import traceback

app = App(
    token=os.environ['SLACK_BOT_TOKEN'],
    signing_secret=os.environ['SLACK_SIGNING_SECRET']
)

@app.error
def custom_error_handler(error, body, logger):
    logger.error(f'Error handling event: {error}')
    logger.error(traceback.format_exc())

    # Try to notify the user who triggered the error
    event = body.get('event', {})
    channel = event.get('channel')
    if channel:
        app.client.chat_postMessage(
            channel=channel,
            text='Sorry, I encountered an error. The team has been notified.'
        )

print('Global error handler prevents unhandled crashes')

Использование клиента Slack Web API

Свойство app.client предоставляет прямой доступ к Slack Web API для любых операций, которые не поддерживаются обработчиками событий. Используйте его для публикации сообщений, загрузки файлов, приглашения пользователей в каналы или программного получения истории канала.

from slack_bolt import App

app = App(
    token=os.environ['SLACK_BOT_TOKEN'],
    signing_secret=os.environ['SLACK_SIGNING_SECRET']
)

# Use app.client for direct API calls
def post_to_channel(channel_id, text):
    result = app.client.chat_postMessage(
        channel=channel_id,
        text=text
    )
    print(f'Message posted: ts={result["ts"]}')
    return result

# Get channel list
def list_channels():
    result = app.client.conversations_list(
        types='public_channel',
        limit=100
    )
    channels = result['channels']
    print(f'Found {len(channels)} public channels')
    return channels

# Look up user info
def get_user(user_id):
    result = app.client.users_info(user=user_id)
    return result['user']

Контрольный список настройки окружения

Перед запуском бота Slack выполните все пункты этого контрольного списка, чтобы убедиться в правильности настройки:

  • токен бота и секрет подписи добавлены в переменные окружения
  • необходимые области доступа добавлены на панели приложения Slack
  • подписки на события включены (app_mention, message.im и т. д.)
  • режим Socket Mode включён (или для режима HTTP задан общедоступный URL)
  • приложение установлено в рабочем пространстве (поток OAuth завершён)
import os
from slack_bolt import App

def verify_slack_setup():
    required_env = [
        'SLACK_BOT_TOKEN',
        'SLACK_SIGNING_SECRET',
        'SLACK_APP_TOKEN'
    ]
    missing = [var for var in required_env if not os.environ.get(var)]
    if missing:
        raise EnvironmentError(f'Missing env vars: {missing}')

    token = os.environ['SLACK_BOT_TOKEN']
    if not token.startswith('xoxb-'):
        raise ValueError('SLACK_BOT_TOKEN must start with xoxb-')

    app_token = os.environ['SLACK_APP_TOKEN']
    if not app_token.startswith('xapp-'):
        raise ValueError('SLACK_APP_TOKEN must start with xapp-')

    print('Slack environment setup looks correct!')

verify_slack_setup()

Быстрая проверка: режим Socket Mode и режим HTTP

Проверьте, насколько хорошо Вы понимаете режимы развёртывания Slack Bolt.

Повторение основ Slack Bolt

Теперь у Вас есть основа для создания ботов Slack с помощью Bolt:

  • App(token, signing_secret) — инициализирует приложение Bolt с учётными данными из переменных окружения
  • токен бота (xoxb-) для вызовов API; токен уровня приложения (xapp-) для режима Socket Mode
  • режим Socket Mode — WebSocket, общедоступный URL не нужен, отлично подходит для разработки и внутренних инструментов
  • режим HTTP — общедоступная конечная точка HTTPS, необходимая для рабочих приложений и приложений в нескольких рабочих пространствах
  • области доступа — настраиваются на панели приложения Slack; добавляйте только необходимые
  • промежуточное программное обеспечение и @app.error — для журналирования, проверки и обработки ошибок

Часто задаваемые вопросы

Урок «Основы Slack Bolt SDK» бесплатный?

Да — полный текст урока «Основы Slack Bolt SDK» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс AI Agents, подпишись на CoddyKit PRO. Курс AI Agents содержит 4 уроков всего.

Чему я научусь в уроке «Основы Slack Bolt SDK»?

Инициализация приложения, токены бота, режим сокетов и HTTP, подписки на события. Ты практикуешь AI Agents с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать AI Agents?

Предыдущий опыт не требуется. AI Agents на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Основы Slack Bolt SDK»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке AI Agents?

Да. Каждый урок AI Agents включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Основы Slack Bolt SDK
  2. Обработка событий и команд со слешем
  3. Отправка сообщений и содержательных блоков
  4. Создание бота для уведомлений команды
← Назад к AI Agents