一个 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]