Bases du SDK Slack Bolt
Initialisation de l’application, tokens de bot, mode socket contre HTTP et abonnements aux événements.
Bases du SDK Slack Bolt est une leçon AI Agents gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage AI Agents, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours AI Agents comprend 4 leçons au total.
Pourquoi utiliser Slack Bolt pour développer des agents ?
Slack Bolt est le SDK Python officiel pour créer des applications Slack. Il gère OAuth, le routage des événements, les intergiciels et le cycle de vie des requêtes/réponses — votre agent peut ainsi se concentrer sur la logique métier plutôt que sur l’infrastructure HTTP. Bolt prend en charge le mode Socket (WebSocket) et le mode 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')Jeton du bot et secret de signature
Une application Slack a besoin de deux identifiants : un jeton du bot (qui commence par xoxb-) pour effectuer des appels d’API et publier des messages, et un secret de signature pour vérifier que les événements entrants proviennent bien de Slack. Vous trouverez les deux dans le tableau de bord des paramètres de l’application 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]}...')Portées requises du jeton du bot
Les applications Slack utilisent des portées OAuth pour définir ce que le bot peut faire. Ajoutez les portées dans le tableau de bord de l’application Slack, sous OAuth et autorisations → Portées → Portées du jeton du bot. Voici des portées courantes pour un bot agent d’IA :
chat:write— publier des messagesapp_mentions:read— recevoir les @mentionschannels:history— lire les messages des canauxcommands— recevoir les commandes slashim:write— envoyer des messages directs
# 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')Mode Socket ou mode HTTP
Le mode Socket se connecte à Slack via un WebSocket persistant — aucune URL publique n’est nécessaire, ce qui est idéal pour le développement et les outils internes. Le mode HTTP nécessite un point de terminaison HTTPS public auquel Slack envoie les événements avec POST — il est nécessaire pour les applications de production et les installations sur plusieurs espaces de travail.
# 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')Initialiser l’application et démarrer le mode Socket
Une application Slack Bolt minimale en mode Socket consiste à créer App, à enregistrer au moins un gestionnaire, puis à démarrer SocketModeHandler. Le gestionnaire se connecte à l’infrastructure d’événements de Slack et reste connecté jusqu’à l’arrêt du processus.
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 killedTester avec ngrok (mode HTTP)
Pendant le développement en mode HTTP, utilisez ngrok pour exposer votre serveur local sur Internet. Exécutez ngrok http 3000 pour obtenir une URL HTTPS publique, puis mettez à jour les URL des abonnements aux événements et des commandes slash de votre application Slack afin qu’elles pointent vers celle-ci.
# 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 SlackJeton au niveau de l’application pour le mode Socket
Le mode Socket nécessite un jeton au niveau de l’application supplémentaire (qui commence par xapp-) avec la portée connections:write. Il est distinct du jeton du bot. Générez-le dans les paramètres de l’application Slack, sous Informations de base → Jetons au niveau de l’application.
# 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')Intergiciels de Bolt
Bolt prend en charge les intergiciels — des fonctions exécutées avant chaque gestionnaire d’événements. Utilisez-les pour la journalisation, l’authentification, la limitation du débit ou l’enrichissement des événements avec les données utilisateur. Appelez next() pour transmettre le contrôle à l’intergiciel ou au gestionnaire suivant.
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')Gestion des erreurs dans Bolt
Enregistrez un gestionnaire global d’erreurs avec @app.error pour intercepter les exceptions non gérées de vos gestionnaires d’événements. Cela empêche l’application de s’arrêter et vous permet de consigner les erreurs, d’avertir un canal de supervision ou de renvoyer un message d’erreur à l’utilisateur.
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')Utiliser le client de l’API Web Slack
La propriété app.client fournit un accès direct à l’API Web Slack pour toute opération qui n’est pas couverte par les gestionnaires d’événements. Utilisez-la pour publier des messages, téléverser des fichiers, inviter des utilisateurs dans des canaux ou récupérer l’historique des canaux par programmation.
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']Liste de contrôle de la configuration de l’environnement
Avant de mettre votre bot Slack en service, parcourez cette liste de contrôle pour vous assurer qu’il est correctement configuré :
- Jeton du bot et secret de signature dans les variables d’environnement
- Portées requises ajoutées dans le tableau de bord de l’application Slack
- Abonnements aux événements activés (app_mention, message.im, etc.)
- Mode Socket activé (ou URL publique configurée pour le mode HTTP)
- Application installée dans votre espace de travail (flux OAuth terminé)
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()Vérification rapide : mode Socket ou mode HTTP
Vérifiez votre compréhension des modes de déploiement de Slack Bolt.
Récapitulatif des bases de Slack Bolt
Vous disposez maintenant des bases nécessaires pour créer des bots Slack avec Bolt :
- App(token, signing_secret) — initialise l’application Bolt avec les identifiants provenant des variables d’environnement
- Jeton du bot (
xoxb-) pour les appels d’API ; jeton au niveau de l’application (xapp-) pour le mode Socket - Mode Socket — WebSocket, aucune URL publique, idéal pour le développement et les outils internes
- Mode HTTP — point de terminaison HTTPS public, requis pour les applications de production ou multispace de travail
- Portées — à configurer dans le tableau de bord de l’application Slack ; ajoutez uniquement celles dont vous avez besoin
- Intergiciel et @app.error — pour la journalisation, la validation et la gestion des erreurs
Questions Fréquemment Posées
La leçon « Bases du SDK Slack Bolt » est-elle gratuite ?
Oui — le texte complet de « Bases du SDK Slack Bolt » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours AI Agents, passe à CoddyKit PRO. Le cours AI Agents comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Bases du SDK Slack Bolt » ?
Initialisation de l’application, tokens de bot, mode socket contre HTTP et abonnements aux événements. Tu pratiques AI Agents avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer AI Agents ?
Aucune expérience préalable n'est requise. AI Agents sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.
Combien de temps prend la leçon « Bases du SDK Slack Bolt » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon AI Agents ?
Oui. Chaque leçon AI Agents inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Bases du SDK Slack Bolt
- Écouter les événements et les commandes slash
- Envoyer des messages et des blocs enrichis
- Créer un bot de notifications d’équipe