Fundamentos del SDK Slack Bolt
Inicialización de la aplicación, tokens de bot, modo socket frente a HTTP y suscripciones a eventos.
Fundamentos del SDK Slack Bolt es una lección gratuita de AI Agents en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de AI Agents, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de AI Agents incluye 4 lecciones en total.
¿Por qué utilizar Slack Bolt para desarrollar agentes?
Slack Bolt es el SDK oficial de Python para crear aplicaciones de Slack. Gestiona OAuth, el enrutamiento de eventos, el middleware y el ciclo de vida de las solicitudes y respuestas, para que su agente se concentre en la lógica de negocio y no en la infraestructura HTTP. Bolt admite tanto Socket Mode (WebSocket) como 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 y Signing Secret
Una aplicación de Slack necesita dos credenciales: un Bot Token (comienza por xoxb-) para realizar llamadas a la API y publicar mensajes, y un Signing Secret para verificar que los eventos entrantes proceden realmente de Slack. Ambas se encuentran en el panel de configuración de la aplicación de 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]}...')Ámbitos obligatorios del Bot Token
Las aplicaciones de Slack utilizan ámbitos de OAuth para definir lo que puede hacer el bot. Añada los ámbitos en el panel de Slack App, en OAuth & Permissions → Scopes → Bot Token Scopes. Ámbitos habituales para un bot agente de IA:
chat:write— publicar mensajesapp_mentions:read— recibir @mentionschannels:history— leer mensajes de canalescommands— recibir comandos de barraim:write— enviar mensajes directos
# 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 frente a HTTP Mode
Socket Mode se conecta a Slack mediante un WebSocket persistente; no necesita una URL pública, por lo que es perfecto para el desarrollo y las herramientas internas. HTTP Mode requiere un endpoint HTTPS público al que Slack envía eventos mediante POST; es necesario para aplicaciones en producción e instalaciones en varios espacios de trabajo.
# 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')Inicializar la aplicación e iniciar Socket Mode
Para crear la aplicación mínima de Slack Bolt en Socket Mode, cree la App, registre al menos un controlador y, después, inicie SocketModeHandler. El controlador se conecta a la infraestructura de eventos de Slack y permanece conectado hasta que detenga el proceso.
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 killedProbar con ngrok (HTTP Mode)
Durante el desarrollo con HTTP Mode, utilice ngrok para exponer su servidor local a Internet. Ejecute ngrok http 3000 para obtener una URL HTTPS pública y, después, actualice las URL de Event Subscriptions y Slash Command de su aplicación de Slack para que apunten a ella.
# 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 SlackApp-Level Token para Socket Mode
Socket Mode requiere un App-Level Token adicional (comienza por xapp-) con el ámbito connections:write. Es independiente del Bot Token. Genérelo en la configuración de la aplicación de Slack, en 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 de Bolt
Bolt admite middleware: funciones que se ejecutan antes de cada controlador de eventos. Utilice middleware para registrar información, autenticar, limitar la velocidad o enriquecer los eventos con datos del usuario. Llame a next() para pasar el control al siguiente middleware o controlador.
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')Gestión de errores en Bolt
Registre un controlador de errores global con @app.error para capturar las excepciones no controladas de los controladores de eventos. Esto evita que la aplicación se bloquee y permite registrar errores, notificar a un canal de supervisión o enviar un mensaje de error al usuario.
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')Utilizar el cliente de Slack Web API
La propiedad app.client proporciona acceso directo a Slack Web API para cualquier operación que no cubran los controladores de eventos. Utilícela para publicar mensajes, cargar archivos, invitar a usuarios a canales o recuperar el historial de canales mediante programación.
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 de comprobación de configuración
Antes de poner en funcionamiento su bot de Slack, repase esta lista de comprobación para asegurarse de que está configurado correctamente:
- Bot Token y Signing Secret en variables de entorno
- Ámbitos obligatorios añadidos en el panel de Slack App
- Suscripciones a eventos habilitadas (app_mention, message.im, etc.)
- Socket Mode habilitado (o URL pública configurada para HTTP Mode)
- Aplicación instalada en su espacio de trabajo (flujo OAuth completado)
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()Comprobación rápida: Socket Mode frente a HTTP Mode
Compruebe sus conocimientos sobre los modos de implementación de Slack Bolt.
Repaso de los fundamentos de Slack Bolt
Ya cuenta con los fundamentos para crear bots de Slack con Bolt:
- App(token, signing_secret): inicializa la aplicación de Bolt con las credenciales de las variables de entorno
- Bot Token (
xoxb-) para llamadas a la API; App-Level Token (xapp-) para Socket Mode - Socket Mode: WebSocket, sin URL pública, ideal para el desarrollo y las herramientas internas
- HTTP Mode: endpoint HTTPS público, obligatorio para aplicaciones en producción o en varios espacios de trabajo
- Scopes: se configuran en el panel de Slack App; añada solo los que necesite
- Middleware y @app.error: para el registro, la validación y la gestión de errores
Preguntas frecuentes
¿La lección «Fundamentos del SDK Slack Bolt» es gratis?
Sí — el texto completo de «Fundamentos del SDK Slack Bolt» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de AI Agents, actualiza a CoddyKit PRO. El curso de AI Agents incluye 4 lecciones en total.
¿Qué aprenderé en «Fundamentos del SDK Slack Bolt»?
Inicialización de la aplicación, tokens de bot, modo socket frente a HTTP y suscripciones a eventos. Practicas AI Agents con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar AI Agents?
No se requiere experiencia previa. AI Agents en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.
¿Cuánto tiempo toma la lección «Fundamentos del SDK Slack Bolt»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de AI Agents?
Sí. Cada lección de AI Agents incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Fundamentos del SDK Slack Bolt
- Escucha de eventos y comandos de barra
- Envío de mensajes y bloques enriquecidos
- Creación de un bot de notificaciones para equipos