一個 Python 框架,用於使用最新的平台功能快速建立 Slack 應用程式。閱讀入門指南並查看我們的程式碼範例,以了解如何使用 Bolt 建立應用程式。 Python 模組文件可在此處取得。
# Python 3.6+ required
python -m venv .venv
source .venv/bin/activate
pip install -U pip
pip install slack_bolt
透過呼叫建構函數來建立 Bolt for Python 應用程序,這是頂級導出。如果您願意,可以建立非同步應用程式。
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
如果您使用套接字模式來運行應用程序,則可以使用SocketModeHandler
。
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 ()
以這種方式運行應用程式:
export SLACK_APP_TOKEN=xapp- ***
export SLACK_BOT_TOKEN=xoxb- ***
python app.py
# SLACK_SIGNING_SECRET is not required
# Running ngrok is not required
應用程式通常會對傳入事件的集合做出反應,這些事件可以對應於事件 API 事件、操作、捷徑、斜線命令或選項請求。對於每種類型的請求,都有一種建立偵聽器函數的方法。
# 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 )
使用這些方法的建議方式是裝飾器:
@ app . event ( event_type )
def handle_event ( event ):
pass
應用程式的大部分功能將位於偵聽器函數(上面的fn
參數)內。這些函數使用一組參數進行調用,每個參數都可以以任意順序使用。如果您想要存取單一物件的參數,可以使用args
,它是一個slack_bolt.kwargs_injection.Args
實例,其中包含該事件的所有可用參數。
爭論 | 描述 |
---|---|
body | 包含整個請求內文的字典(有效payload 的超集)。某些附件資料僅在有效負載之外可用(例如trigger_id 和authorizations )。 |
payload | 傳入事件的內容。有效負載結構取決於偵聽器。例如,對於 Events API 事件, payload 將是事件類型結構。對於區塊操作,它將是actions 清單中的操作。也可以透過與偵聽器對應的別名( message 、 event 、 action 、 shortcut 、 view 、 command 或options )存取payload 字典。例如,如果您正在建構message() 偵聽器,則可以互換使用payload 和message 參數。了解有效負載中內容的簡單方法是記錄它。 |
context | 事件背景。該字典包含有關事件和應用程式的數據,例如botId 。中間件可以在事件傳遞給偵聽器之前添加額外的上下文。 |
ack | 必須呼叫函數來確認您的應用程式收到了傳入事件。所有操作、快捷方式、視圖提交、斜線命令和選項請求都存在ack 。 ack 回傳一個在完成時解析的承諾。請閱讀確認事件以了解更多資訊。 |
respond | 如果包含response_url (快捷方式、操作和斜線命令),則回應傳入事件的實用程式函數。 |
say | 用於將訊息傳送到與傳入事件關聯的通道的實用函數。只有當針對包含channel_id 的事件(最常見的是message 事件)觸發偵聽器時,此參數才可用。 say 接受簡單字串(對於純文字訊息)和字典(對於包含區塊的訊息)。 |
client | 使用與事件關聯的令牌的 Web API 用戶端。對於單一工作區安裝,令牌將提供給建構函式。對於多工作空間安裝,透過使用 OAuth 函式庫或手動使用authorize 函數傳回令牌。 |
logger | 您可以在中介軟體/偵聽器中使用內建的logging.Logger 實例。 |
complete | 用於指示自訂步驟執行成功完成的實用函數。這告訴 Slack 繼續工作流程中的後續步驟。在處理自訂工作流程步驟執行時,此參數僅適用於.function 和.action 偵聽器。 |
fail | 用於指示自訂步驟未能完成的實用函數。這告訴 Slack 停止工作流程執行。在處理自訂工作流程步驟執行時,此參數僅適用於.function 和.action 偵聽器。 |
如果您希望使用 asyncio 建立應用程序,則可以匯入 AIOHTTP 庫並呼叫AsyncApp
建構子。在非同步應用程式中,您可以使用非同步/等待模式。
# Python 3.6+ required
python -m venv .venv
source .venv/bin/activate
pip install -U pip
# aiohttp is required
pip install slack_bolt aiohttp
在非同步應用程式中,所有中間件/偵聽器都必須是非同步函數。在這些函數中呼叫實用方法(例如ack
和say
)時,需要使用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 )
如果您想使用其他非同步 Web 框架(例如 Sanic、FastAPI、Starlette),請查看內建適配器及其範例。
該文件提供了有關 Bolt for Python 的基本和高級概念的更多資訊。此外,該庫的所有 Python 模組文件都可以在這裡找到。
如果您遇到困難,我們隨時為您提供協助。以下是獲得幫助解決問題的最佳方法:
[email protected]