Ein Python-Framework zum blitzschnellen Erstellen von Slack-Apps mit den neuesten Plattformfunktionen. Lesen Sie den Leitfaden „Erste Schritte“ und schauen Sie sich unsere Codebeispiele an, um zu erfahren, wie Sie Apps mit Bolt erstellen. Die Dokumente zum Python-Modul sind hier verfügbar.
# Python 3.6+ required
python -m venv .venv
source .venv/bin/activate
pip install -U pip
pip install slack_bolt
Erstellen Sie eine Bolt for Python-App, indem Sie einen Konstruktor aufrufen, bei dem es sich um einen Export auf oberster Ebene handelt. Wenn Sie möchten, können Sie eine asynchrone App erstellen.
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
Wenn Sie den Socket-Modus zum Ausführen Ihrer App verwenden, ist SocketModeHandler
dafür verfügbar.
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 ()
Führen Sie die App folgendermaßen aus:
export SLACK_APP_TOKEN=xapp- ***
export SLACK_BOT_TOKEN=xoxb- ***
python app.py
# SLACK_SIGNING_SECRET is not required
# Running ngrok is not required
Apps reagieren normalerweise auf eine Sammlung eingehender Ereignisse, die Ereignissen, Aktionen, Verknüpfungen, Schrägstrichbefehlen oder Optionsanfragen der Event-API entsprechen können. Für jeden Anforderungstyp gibt es eine Methode zum Erstellen einer Listener-Funktion.
# 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 )
Die empfohlene Methode zur Verwendung dieser Methoden sind Dekoratoren:
@ app . event ( event_type )
def handle_event ( event ):
pass
Die meisten Funktionen der App befinden sich in den Listener-Funktionen (die oben genannten fn
Parameter). Diese Funktionen werden mit einer Reihe von Argumenten aufgerufen, die jeweils in beliebiger Reihenfolge verwendet werden können. Wenn Sie auf Argumente eines einzelnen Objekts zugreifen möchten, können Sie args
verwenden, eine slack_bolt.kwargs_injection.Args
-Instanz, die alle verfügbaren Argumente für dieses Ereignis enthält.
Argument | Beschreibung |
---|---|
body | Wörterbuch, das den gesamten Hauptteil der Anfrage enthält (Obermenge der payload ). Einige Zusatzdaten sind nur außerhalb der Nutzlast verfügbar (z. B. trigger_id und authorizations ). |
payload | Inhalte der eingehenden Veranstaltung. Die Nutzlaststruktur hängt vom Listener ab. Bei einem Ereignis-API-Ereignis ist payload beispielsweise die Ereignistypstruktur. Bei einer Blockierungsaktion handelt es sich um die Aktion aus der actions . Auf das payload -Wörterbuch kann auch über den Alias zugegriffen werden, der dem Listener entspricht ( message , event , action , shortcut , view , command oder options ). Wenn Sie beispielsweise einen message() Listener erstellen, könnten Sie die payload und message Argumente austauschbar verwenden. Eine einfache Möglichkeit zu verstehen, was in einer Nutzlast enthalten ist, besteht darin, sie zu protokollieren . |
context | Ereigniskontext. Dieses Wörterbuch enthält Daten zum Ereignis und zur App, beispielsweise die botId . Middleware kann zusätzlichen Kontext hinzufügen, bevor das Ereignis an Listener übergeben wird. |
ack | Funktion, die aufgerufen werden muss , um zu bestätigen, dass Ihre App das eingehende Ereignis empfangen hat. ack existiert für alle Aktionen, Verknüpfungen, Ansichtsübermittlungen, Slash-Befehle und Optionsanfragen. ack gibt ein Versprechen zurück, das nach Abschluss aufgelöst wird. Weitere Informationen finden Sie unter Anerkennung von Ereignissen. |
respond | Dienstprogrammfunktion, die auf eingehende Ereignisse reagiert , wenn sie eine response_url enthält (Verknüpfungen, Aktionen und Schrägstrichbefehle). |
say | Dienstprogrammfunktion zum Senden einer Nachricht an den Kanal, der dem eingehenden Ereignis zugeordnet ist. Dieses Argument ist nur verfügbar, wenn der Listener für Ereignisse ausgelöst wird, die eine channel_id enthalten (am häufigsten sind message ). say akzeptiert einfache Zeichenfolgen (für Klartextnachrichten) und Wörterbücher (für Nachrichten, die Blöcke enthalten). |
client | Web-API-Client, der das mit dem Ereignis verknüpfte Token verwendet. Bei Installationen mit nur einem Arbeitsbereich wird das Token dem Konstruktor bereitgestellt. Bei Installationen mit mehreren Arbeitsbereichen wird das Token mithilfe der OAuth-Bibliothek oder manuell mithilfe der authorize zurückgegeben. |
logger | Die integrierte logging.Logger Instanz, die Sie in Middleware/Listenern verwenden können. |
complete | Hilfsfunktion, die verwendet wird, um den erfolgreichen Abschluss einer benutzerdefinierten Schrittausführung zu signalisieren. Dadurch wird Slack angewiesen, mit den nächsten Schritten im Workflow fortzufahren. Dieses Argument ist nur mit dem .function und .action Listener verfügbar, wenn benutzerdefinierte Workflow-Schrittausführungen verarbeitet werden. |
fail | Dienstprogrammfunktion, die verwendet wird, um zu signalisieren, dass ein benutzerdefinierter Schritt nicht abgeschlossen werden konnte. Dadurch wird Slack angewiesen, die Workflow-Ausführung zu stoppen. Dieses Argument ist nur mit dem .function und .action Listener verfügbar, wenn benutzerdefinierte Workflow-Schrittausführungen verarbeitet werden. |
Wenn Sie Ihre App lieber mit Asyncio erstellen möchten, können Sie die AIOHTTP-Bibliothek importieren und den AsyncApp
Konstruktor aufrufen. Innerhalb asynchroner Apps können Sie das Async/Await-Muster verwenden.
# Python 3.6+ required
python -m venv .venv
source .venv/bin/activate
pip install -U pip
# aiohttp is required
pip install slack_bolt aiohttp
In asynchronen Apps müssen alle Middleware/Listener asynchrone Funktionen sein. Beim Aufrufen von Hilfsmethoden (wie ack
und say
) innerhalb dieser Funktionen ist die Verwendung des Schlüsselworts await
erforderlich.
# 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 )
Wenn Sie ein anderes asynchrones Web-Framework (z. B. Sanic, FastAPI, Starlette) verwenden möchten, werfen Sie einen Blick auf die integrierten Adapter und ihre Beispiele.
Die Dokumentation enthält weitere Informationen zu grundlegenden und erweiterten Konzepten für Bolt für Python. Außerdem sind alle Python-Moduldokumente dieser Bibliothek hier verfügbar.
Wenn Sie sonst nicht weiterkommen, sind wir für Sie da. Im Folgenden finden Sie die besten Möglichkeiten, Hilfe bei der Lösung Ihres Problems zu erhalten:
[email protected]