Платформа 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 для 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
Приложения обычно реагируют на набор входящих событий, которые могут соответствовать событиям Events 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 . Словарь payload также доступен через псевдоним, соответствующий прослушивателю ( message , event , action , shortcut , view , command или options ). Например, если вы создавали прослушиватель message() , вы могли бы использовать аргументы payload и message взаимозаменяемо. Самый простой способ понять, что находится в полезной нагрузке, — это зарегистрировать ее . |
context | Контекст события. Этот словарь содержит данные о событии и приложении, например botId . Промежуточное ПО может добавить дополнительный контекст перед передачей события прослушивателям. |
ack | Функция, которую необходимо вызвать, чтобы подтвердить, что ваше приложение получило входящее событие. ack существует для всех действий, ярлыков, просмотра представленных материалов, косой черты и запросов параметров. ack возвращает обещание, которое разрешается после завершения. Подробнее читайте в разделе «Признание событий». |
respond | Служебная функция, которая реагирует на входящие события , если она содержит response_url (ярлыки, действия и команды с косой чертой). |
say | Служебная функция для отправки сообщения на канал, связанный с входящим событием. Этот аргумент доступен только в том случае, если прослушиватель срабатывает для событий, содержащих channel_id (наиболее распространенными являются события message ). say принимает простые строки (для текстовых сообщений) и словари (для сообщений, содержащих блоки). |
client | Клиент веб-API, использующий токен, связанный с событием. Для установок с одним рабочим пространством токен предоставляется конструктору. Для установок с несколькими рабочими пространствами токен возвращается с помощью библиотеки OAuth или вручную с помощью функции authorize . |
logger | Встроенный экземпляр logging.Logger который вы можете использовать в промежуточном программном обеспечении/прослушивателях. |
complete | Служебная функция, используемая для сигнализации об успешном завершении выполнения пользовательского шага. Это говорит Slack перейти к следующим шагам рабочего процесса. Этот аргумент доступен только с прослушивателями .function и .action при обработке выполнения пользовательских шагов рабочего процесса. |
fail | Служебная функция, используемая для сигнализации о том, что пользовательский шаг не удалось завершить. Это говорит Slack остановить выполнение рабочего процесса. Этот аргумент доступен только с прослушивателями .function и .action при обработке выполнения пользовательских шагов рабочего процесса. |
Если вы предпочитаете создавать свое приложение с помощью asyncio, вы можете импортировать библиотеку AIOHTTP и вызвать конструктор AsyncApp
. В асинхронных приложениях вы можете использовать шаблон async/await.
# 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 )
Если вы хотите использовать другую асинхронную веб-инфраструктуру (например, Sanic, FastAPI, Starlette), ознакомьтесь со встроенными адаптерами и их примерами.
В документации содержится дополнительная информация об основных и расширенных концепциях Bolt для Python. Кроме того, здесь доступны все документы модуля Python этой библиотеки.
Если в противном случае вы застрянете, мы здесь, чтобы помочь. Ниже приведены лучшие способы получить помощь в решении вашей проблемы:
[email protected]