최신 플랫폼 기능을 사용하여 순식간에 Slack 앱을 구축하기 위한 Python 프레임워크입니다. 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
매개변수) 내에 있습니다. 이러한 함수는 일련의 인수와 함께 호출되며 각 인수는 순서에 관계없이 사용될 수 있습니다. 단일 객체의 인수에 액세스하려는 경우 해당 이벤트에 사용 가능한 모든 인수가 포함된 slack_bolt.kwargs_injection.Args
인스턴스인 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 완료되면 해결되는 Promise를 반환합니다. 이벤트 확인에서 자세한 내용을 읽어보세요. |
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 for Python의 기본 및 고급 개념에 대한 자세한 정보가 있습니다. 또한 이 라이브러리의 모든 Python 모듈 문서는 여기에서 확인할 수 있습니다.
다른 방법으로 문제가 발생하면 저희가 도와드리겠습니다. 다음은 문제 해결을 위해 도움을 받을 수 있는 가장 좋은 방법입니다.
[email protected]