Un marco de Python para crear aplicaciones de Slack en un instante con las últimas funciones de la plataforma. Lea la guía de introducción y consulte nuestros ejemplos de código para aprender a crear aplicaciones con Bolt. Los documentos del módulo Python están disponibles aquí.
# Python 3.6+ required
python -m venv .venv
source .venv/bin/activate
pip install -U pip
pip install slack_bolt
Cree una aplicación Bolt para Python llamando a un constructor, que es una exportación de nivel superior. Si lo prefieres, puedes crear una aplicación asíncrona.
import logging
logging . basicConfig ( level = logging . DEBUG )
from slack_bolt import App
# export SLACK_SIGNING_SECRET=***
# export SLACK_BOT_TOKEN=xoxb-***
app = App ()
# Add functionality here
if __name__ == "__main__" :
app . start ( 3000 ) # POST http://localhost:3000/slack/events
export SLACK_SIGNING_SECRET= ***
export SLACK_BOT_TOKEN=xoxb- ***
python app.py
# in another terminal
ngrok http 3000
Si utiliza el modo Socket para ejecutar su aplicación, SocketModeHandler
está disponible para ello.
import os
from slack_bolt import App
from slack_bolt . adapter . socket_mode import SocketModeHandler
# Install the Slack app and get xoxb- token in advance
app = App ( token = os . environ [ "SLACK_BOT_TOKEN" ])
# Add functionality here
if __name__ == "__main__" :
# Create an app-level token with connections:write scope
handler = SocketModeHandler ( app , os . environ [ "SLACK_APP_TOKEN" ])
handler . start ()
Ejecute la aplicación de esta manera:
export SLACK_APP_TOKEN=xapp- ***
export SLACK_BOT_TOKEN=xoxb- ***
python app.py
# SLACK_SIGNING_SECRET is not required
# Running ngrok is not required
Las aplicaciones normalmente reaccionan a una colección de eventos entrantes, que pueden corresponder a eventos de API de eventos, acciones, accesos directos, comandos de barra o solicitudes de opciones. Para cada tipo de solicitud, existe un método para crear una función de escucha.
# Listen for an action from a Block Kit element (buttons, select menus, date pickers, etc)
app . action ( action_id )( fn )
# Listen for dialog submissions
app . action ({ "callback_id" : callbackId })( fn )
# Listen for slash commands
app . command ( command_name )( fn )
# Listen for an event from the Events API
app . event ( event_type )( fn )
# Listen for a custom step execution from a workflow
app . function ( callback_id )( fn )
# Convenience method to listen to only `message` events using a string or re.Pattern
app . message ([ pattern ,])( fn )
# Listen for options requests (from select menus with an external data source)
app . options ( action_id )( fn )
# Listen for a global or message shortcuts
app . shortcut ( callback_id )( fn )
# Listen for view_submission modal events
app . view ( callback_id )( fn )
La forma recomendada de utilizar estos métodos son los decoradores:
@ app . event ( event_type )
def handle_event ( event ):
pass
La mayor parte de la funcionalidad de la aplicación estará dentro de las funciones de escucha (los parámetros fn
anteriores). Estas funciones se llaman con un conjunto de argumentos, cada uno de los cuales se puede utilizar en cualquier orden. Si desea acceder a los argumentos de un solo objeto, puede usar args
, una instancia de slack_bolt.kwargs_injection.Args
que contiene todos los argumentos disponibles para ese evento.
Argumento | Descripción |
---|---|
body | Diccionario que contiene el cuerpo completo de la solicitud (superconjunto de payload ). Algunos datos de accesorios solo están disponibles fuera de la carga útil (como trigger_id y authorizations ). |
payload | Contenido del evento entrante. La estructura de la carga útil depende del oyente. Por ejemplo, para un evento de la API de eventos, payload será la estructura del tipo de evento. Para una acción de bloqueo, será la acción dentro de la lista de actions . También se puede acceder al diccionario payload a través del alias correspondiente al oyente ( message , event , action , shortcut , view , command u options ). Por ejemplo, si estuviera creando un detector message() , podría usar los argumentos payload y message de manera intercambiable. Una forma sencilla de comprender qué hay en una carga útil es registrarla . |
context | Contexto del evento. Este diccionario contiene datos sobre el evento y la aplicación, como el botId . El middleware puede agregar contexto adicional antes de que el evento pase a los oyentes. |
ack | Función que se debe llamar para reconocer que su aplicación recibió el evento entrante. ack existe para todas las acciones, accesos directos, ver envíos, comandos de barra diagonal y solicitudes de opciones. ack devuelve una promesa que se resuelve cuando se completa. Lea más en Reconocimiento de eventos. |
respond | Función de utilidad que responde a eventos entrantes si contiene una response_url (atajos, acciones y comandos de barra diagonal). |
say | Función de utilidad para enviar un mensaje al canal asociado al evento entrante. Este argumento solo está disponible cuando el oyente se activa para eventos que contienen un channel_id (los más comunes son los eventos message ). say acepta cadenas simples (para mensajes de texto plano) y diccionarios (para mensajes que contienen bloques). |
client | Cliente API web que utiliza el token asociado al evento. Para instalaciones de un solo espacio de trabajo, el token se proporciona al constructor. Para instalaciones de múltiples espacios de trabajo, el token se devuelve mediante la biblioteca OAuth o manualmente mediante la función authorize . |
logger | La instancia integrada de logging.Logger que puede usar en middleware/oyentes. |
complete | Función de utilidad utilizada para señalar la finalización exitosa de la ejecución de un paso personalizado. Esto le indica a Slack que continúe con los siguientes pasos del flujo de trabajo. Este argumento solo está disponible con el detector .function y .action cuando se manejan ejecuciones de pasos de flujo de trabajo personalizados. |
fail | Función de utilidad utilizada para señalar que un paso personalizado no se pudo completar. Esto le indica a Slack que detenga la ejecución del flujo de trabajo. Este argumento solo está disponible con el detector .function y .action cuando se manejan ejecuciones de pasos de flujo de trabajo personalizados. |
Si prefiere crear su aplicación con asyncio, puede importar la biblioteca AIOHTTP y llamar al constructor AsyncApp
. Dentro de las aplicaciones asíncronas, puede utilizar el patrón asíncrono/espera.
# Python 3.6+ required
python -m venv .venv
source .venv/bin/activate
pip install -U pip
# aiohttp is required
pip install slack_bolt aiohttp
En las aplicaciones asíncronas, todos los middleware/escuchas deben ser funciones asíncronas. Al llamar a métodos de utilidad (como ack
y say
) dentro de estas funciones, es necesario utilizar la palabra clave await
.
# Import the async app instead of the regular one
from slack_bolt . async_app import AsyncApp
app = AsyncApp ()
@ app . event ( "app_mention" )
async def event_test ( body , say , logger ):
logger . info ( body )
await say ( "What's up?" )
@ app . command ( "/hello-bolt-python" )
async def command ( ack , body , respond ):
await ack ()
await respond ( f"Hi <@ { body [ 'user_id' ] } >!" )
if __name__ == "__main__" :
app . start ( 3000 )
Si desea utilizar otro marco web asíncrono (por ejemplo, Sanic, FastAPI, Starlette), eche un vistazo a los adaptadores integrados y sus ejemplos.
La documentación tiene más información sobre conceptos básicos y avanzados de Bolt para Python. Además, todos los documentos del módulo Python de esta biblioteca están disponibles aquí.
Si de lo contrario te quedas atascado, estamos aquí para ayudarte. Las siguientes son las mejores formas de obtener ayuda para solucionar su problema:
[email protected]