AI Agents · Lekcja

Podstawy Slack Bolt SDK

Inicjalizacja aplikacji, tokeny bota, tryb socket a HTTP oraz subskrypcje zdarzeń.

Lekcja 1 z 413 kroki

Podstawy Slack Bolt SDK to bezpłatna lekcja AI Agents na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej AI Agents, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs AI Agents zawiera 4 lekcji w sumie.

Dlaczego warto używać Slack Bolt do tworzenia agentów?

Slack Bolt to oficjalny pakiet SDK Pythona do tworzenia aplikacji Slack. Obsługuje OAuth, routing zdarzeń, middleware oraz cykl życia żądań i odpowiedzi — dzięki czemu agent może skupić się na logice biznesowej, a nie na obsłudze HTTP. Bolt obsługuje zarówno Socket Mode (WebSocket), jak i HTTP mode.

# 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')

Bot Token i Signing Secret

Aplikacja Slack potrzebuje dwóch danych uwierzytelniających: Bot Token (zaczynający się od xoxb-) do wykonywania wywołań API i publikowania wiadomości oraz Signing Secret do weryfikowania, czy przychodzące zdarzenia rzeczywiście pochodzą ze Slacka. Oba elementy znajdują się w panelu ustawień aplikacji 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]}...')

Wymagane zakresy tokenu bota

Aplikacje Slack korzystają z zakresów OAuth, aby określić, jakie działania może wykonywać bot. Zakresy należy dodać w panelu Slack App w sekcji OAuth & Permissions → Scopes → Bot Token Scopes. Typowe zakresy dla bota agenta AI:

  • chat:write — publikowanie wiadomości
  • app_mentions:read — odbieranie wzmianek @mentions
  • channels:history — odczytywanie wiadomości z kanałów
  • commands — odbieranie poleceń slash
  • im:write — wysyłanie wiadomości bezpośrednich
# 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 a HTTP Mode

Socket Mode łączy się ze Slackiem za pośrednictwem trwałego połączenia WebSocket — nie wymaga publicznego adresu URL, dlatego doskonale nadaje się do tworzenia aplikacji i narzędzi wewnętrznych. HTTP Mode wymaga publicznego punktu końcowego HTTPS, do którego Slack wysyła zdarzenia metodą POST — jest niezbędny w aplikacjach produkcyjnych i instalacjach obejmujących wiele obszarów roboczych.

# 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')

Inicjalizowanie aplikacji i uruchamianie trybu Socket Mode

Minimalna aplikacja Slack Bolt działająca w Socket Mode wymaga utworzenia elementu App, zarejestrowania co najmniej jednego handlera, a następnie uruchomienia elementu SocketModeHandler. Handler łączy się z infrastrukturą zdarzeń Slacka i pozostaje połączony do momentu zatrzymania procesu.

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

Testowanie za pomocą ngrok (HTTP Mode)

Podczas tworzenia aplikacji w HTTP Mode należy użyć narzędzia ngrok, aby udostępnić lokalny serwer w internecie. Należy uruchomić ngrok http 3000, aby uzyskać publiczny adres HTTPS, a następnie zaktualizować adresy URL Event Subscriptions i Slash Command w aplikacji Slack, wskazując na ten adres.

# 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

Token na poziomie aplikacji dla Socket Mode

Socket Mode wymaga dodatkowego App-Level Token (zaczynającego się od xapp-) z zakresem connections:write. Jest on niezależny od Bot Token. Należy wygenerować go w ustawieniach aplikacji Slack w sekcji Basic Information → App-Level Tokens.

# 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')

Middleware w Bolt

Bolt obsługuje middleware — funkcje uruchamiane przed każdym handlerem zdarzeń. Middleware można wykorzystać do rejestrowania, uwierzytelniania, ograniczania częstotliwości żądań lub wzbogacania zdarzeń o dane użytkownika. Należy wywołać next(), aby przekazać sterowanie do następnego middleware lub handlera.

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')

Obsługa błędów w Bolt

Należy zarejestrować globalny handler błędów za pomocą @app.error, aby przechwytywać nieobsłużone wyjątki z handlerów zdarzeń. Zapobiega to awarii aplikacji i umożliwia rejestrowanie błędów, powiadamianie kanału monitorującego lub wysyłanie użytkownikowi komunikatu o błędzie.

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')

Korzystanie z klienta Slack Web API

Właściwość app.client zapewnia bezpośredni dostęp do Slack Web API w przypadku operacji, których nie obsługują handlery zdarzeń. Można jej używać do publikowania wiadomości, przesyłania plików, zapraszania użytkowników do kanałów lub programowego pobierania historii kanałów.

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']

Lista kontrolna konfiguracji środowiska

Przed uruchomieniem bota Slack należy przejść przez poniższą listę kontrolną, aby upewnić się, że jest prawidłowo skonfigurowany:

  • Bot Token i Signing Secret znajdują się w zmiennych środowiskowych
  • Wymagane zakresy zostały dodane w panelu Slack App
  • Subskrypcje zdarzeń są włączone (app_mention, message.im itd.)
  • Socket Mode jest włączony (lub ustawiono publiczny adres URL dla HTTP Mode)
  • Aplikacja została zainstalowana w obszarze roboczym (przepływ OAuth został ukończony)
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()

Szybki test: Socket Mode a HTTP Mode

Proszę sprawdzić znajomość trybów wdrażania Slack Bolt.

Podstawy Slack Bolt — podsumowanie

Mają Państwo podstawy potrzebne do tworzenia botów Slack za pomocą Bolt:

  • App(token, signing_secret) — inicjalizuje aplikację Bolt przy użyciu danych uwierzytelniających ze zmiennych środowiskowych
  • Bot Token (xoxb-) do wywołań API; App-Level Token (xapp-) do Socket Mode
  • Socket Mode — WebSocket, bez publicznego adresu URL; doskonały do tworzenia aplikacji i narzędzi wewnętrznych
  • HTTP Mode — publiczny punkt końcowy HTTPS, wymagany w aplikacjach produkcyjnych i obejmujących wiele obszarów roboczych
  • Scopes — konfigurowane w panelu Slack App; należy dodawać tylko te, które są potrzebne
  • Middleware i @app.error — do rejestrowania, walidacji i obsługi błędów
Bezpłatny start

Ucz się AI Agents dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
60
Lekcje
239

Często zadawane pytania

Czy lekcja „Podstawy Slack Bolt SDK” jest bezpłatna?

Tak — pełny tekst „Podstawy Slack Bolt SDK” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu AI Agents, przejdź na CoddyKit PRO. Kurs AI Agents zawiera 4 lekcji w sumie.

Co nauczysz się w „Podstawy Slack Bolt SDK”?

Inicjalizacja aplikacji, tokeny bota, tryb socket a HTTP oraz subskrypcje zdarzeń. Ćwiczysz AI Agents z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć AI Agents?

Nie wymagamy żadnego doświadczenia. AI Agents w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.

Ile czasu zajmuje lekcja „Podstawy Slack Bolt SDK”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji AI Agents?

Tak. Każda lekcja AI Agents zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Podstawy Slack Bolt SDK
  2. Nasłuchiwanie zdarzeń i poleceń slash
  3. Wysyłanie wiadomości i rozbudowanych bloków
  4. Tworzenie bota do powiadomień zespołowych
← Powrót do AI Agents