Un framework Python pour créer des applications Slack en un éclair avec les dernières fonctionnalités de la plateforme. Lisez le guide de démarrage et consultez nos exemples de code pour savoir comment créer des applications à l'aide de Bolt. Les documents du module Python sont disponibles ici.
# Python 3.6+ required
python -m venv .venv
source .venv/bin/activate
pip install -U pip
pip install slack_bolt
Créez une application Bolt pour Python en appelant un constructeur, qui est une exportation de niveau supérieur. Si vous préférez, vous pouvez créer une application asynchrone.
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 vous utilisez le mode Socket pour exécuter votre application, SocketModeHandler
est disponible pour celle-ci.
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 ()
Exécutez l'application de cette façon :
export SLACK_APP_TOKEN=xapp- ***
export SLACK_BOT_TOKEN=xoxb- ***
python app.py
# SLACK_SIGNING_SECRET is not required
# Running ngrok is not required
Les applications réagissent généralement à un ensemble d'événements entrants, qui peuvent correspondre à des événements, des actions, des raccourcis, des commandes slash ou des demandes d'options de l'API Events. Pour chaque type de requête, il existe une méthode pour créer une fonction d'écoute.
# 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 manière recommandée d'utiliser ces méthodes est celle des décorateurs :
@ app . event ( event_type )
def handle_event ( event ):
pass
La plupart des fonctionnalités de l'application se trouveront dans les fonctions d'écoute (les paramètres fn
ci-dessus). Ces fonctions sont appelées avec un ensemble d’arguments, chacun pouvant être utilisé dans n’importe quel ordre. Si vous souhaitez accéder aux arguments d'un seul objet, vous pouvez utiliser args
, une instance slack_bolt.kwargs_injection.Args
qui contient tous les arguments disponibles pour cet événement.
Argument | Description |
---|---|
body | Dictionnaire qui contient l'intégralité du corps de la requête (sur-ensemble de payload ). Certaines données accessoires ne sont disponibles qu'en dehors de la charge utile (telles que trigger_id et authorizations ). |
payload | Contenu de l'événement entrant. La structure de la charge utile dépend de l'auditeur. Par exemple, pour un événement API Events, payload sera la structure du type d’événement. Pour une action de blocage, il s'agira de l'action figurant dans la liste actions . Le dictionnaire payload est également accessible via l'alias correspondant à l'écouteur ( message , event , action , shortcut , view , command ou options ). Par exemple, si vous construisiez un écouteur message() , vous pourriez utiliser les arguments payload et message de manière interchangeable. Un moyen simple de comprendre le contenu d'une charge utile est de la consigner . |
context | Contexte de l'événement. Ce dictionnaire contient des données sur l'événement et l'application, telles que le botId . Le middleware peut ajouter un contexte supplémentaire avant que l'événement ne soit transmis aux auditeurs. |
ack | Fonction qui doit être appelée pour reconnaître que votre application a reçu l'événement entrant. ack existe pour toutes les actions, raccourcis, soumissions de vues, commandes slash et demandes d'options. ack renvoie une promesse qui se résout une fois terminée. En savoir plus dans Reconnaître les événements. |
respond | Fonction utilitaire qui répond aux événements entrants si elle contient une response_url (raccourcis, actions et commandes slash). |
say | Fonction utilitaire pour envoyer un message au canal associé à l'événement entrant. Cet argument n'est disponible que lorsque l'écouteur est déclenché pour des événements contenant un channel_id (le plus courant étant les événements message ). say accepte des chaînes simples (pour les messages en texte brut) et des dictionnaires (pour les messages contenant des blocs). |
client | Client API Web qui utilise le jeton associé à l'événement. Pour les installations à espace de travail unique, le jeton est fourni au constructeur. Pour les installations multi-espaces de travail, le jeton est renvoyé à l'aide de la bibliothèque OAuth ou manuellement à l'aide de la fonction authorize . |
logger | L'instance logging.Logger intégrée que vous pouvez utiliser dans les middlewares/écouteurs. |
complete | Fonction utilitaire utilisée pour signaler la réussite de l'exécution d'une étape personnalisée. Cela indique à Slack de passer aux étapes suivantes du flux de travail. Cet argument n'est disponible qu'avec les écouteurs .function et .action lors de la gestion des exécutions d'étapes de workflow personnalisées. |
fail | Fonction utilitaire utilisée pour signaler l'échec d'une étape personnalisée. Cela indique à Slack d'arrêter l'exécution du flux de travail. Cet argument n'est disponible qu'avec les écouteurs .function et .action lors de la gestion des exécutions d'étapes de workflow personnalisées. |
Si vous préférez créer votre application avec asyncio, vous pouvez importer la bibliothèque AIOHTTP et appeler le constructeur AsyncApp
. Dans les applications asynchrones, vous pouvez utiliser le modèle async/wait.
# Python 3.6+ required
python -m venv .venv
source .venv/bin/activate
pip install -U pip
# aiohttp is required
pip install slack_bolt aiohttp
Dans les applications asynchrones, tous les middlewares/écouteurs doivent être des fonctions asynchrones. Lors de l'appel de méthodes utilitaires (comme ack
et say
) dans ces fonctions, il est nécessaire d'utiliser le mot-clé 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 vous souhaitez utiliser un autre framework Web asynchrone (par exemple, Sanic, FastAPI, Starlette), jetez un œil aux adaptateurs intégrés et à leurs exemples.
La documentation contient plus d'informations sur les concepts de base et avancés de Bolt pour Python. De plus, tous les documents du module Python de cette bibliothèque sont disponibles ici.
Si vous êtes bloqué, nous sommes là pour vous aider. Voici les meilleures façons d’obtenir de l’aide pour résoudre votre problème :
[email protected]