Slack 플랫폼은 앱을 구축하기위한 여러 API를 제공합니다. 각 슬랙 API는 플랫폼에서 기능의 일부를 제공하므로 필요에 맞는 것을 선택할 수 있습니다. 이 SDK는 Slack의 각 API에 해당하는 패키지를 제공합니다. 그것들은 독립적으로 사용될 때 작고 강력하며 함께 사용될 때 완벽하게 작동합니다.
슬랙 파이썬 사용에 대한 포괄적 인 설명서는 https://tools.slack.dev/python-slack-sdk/에서 찾을 수 있습니다.
팀을위한 맞춤형 앱을 구축하든, 타사 서비스를 슬랙 워크 플로에 통합하든 Python 용 Slack Developer Kit를 사용하면 Python의 유연성을 활용하여 프로젝트를 최대한 빨리 실행할 수 있습니다.
Python Slack SDK는 다음과의 상호 작용을 허용합니다.
slack_sdk.web
: 웹 API 메소드를 호출합니다slack_sdk.webhook
: 페이로드에서 들어오는 Webhooks 및 response_url
을 활용합니다.slack_sdk.signature
: Slack API 서버에서 들어오는 요청 확인slack_sdk.socket_mode
: 소켓 모드 연결을 통해 메시지 수신 및 전송slack_sdk.audit_logs
: 감사 로그 API를 활용합니다slack_sdk.scim
: scim apis를 활용합니다slack_sdk.oauth
: Slack Oauth 흐름을 구현합니다slack_sdk.models
: 사용하기 쉬운 빌더를 사용하여 블록 키트 UI 구성 요소 구성slack_sdk.rtm
: RTM API를 사용합니다이벤트 API 및 상호 작용 기능을 사용하려면 Python 라이브러리의 볼트를 확인하십시오. 토큰 및 인증에 대한 자세한 내용은 인증 안내서에서 찾을 수 있습니다.
SlackClient를 찾고 계십니까? 웹 사이트는 이전과 마찬가지로 여기에 있습니다. 그러나 SlackClient 프로젝트는 현재 유지 보수 모드에 있으며이 slack_sdk
후속 제품입니다. slack_sdk v3으로 마이그레이션 할 시간이 있다면 마이그레이션 안내서를 따라 업데이트 후 앱이 계속 작동하는지 확인하십시오.
이 라이브러리에는 Python 3.6 이상이 필요합니다. Python 2가 필요한 경우 SlackClient -V1.x를 사용하십시오. 어떤 버전의 Python 버전을 확인하는지 확실하지 않은 경우 다음을 사용하여 확인할 수 있습니다.
참고 : 올바른 Python 경로를 사용하기 위해 명령 전에
python3
사용해야 할 수도 있습니다. 예를 들어python3 --version
python --version
-- or --
python3 --version
PYPI를 사용하여 Python 용 Slack Developer Kit를 설치하는 것이 좋습니다.
$ pip install slack_sdk
10 분 이내에 기본 슬랙 앱을 구축하기 위해이 자습서를 만들었습니다. 일반적인 프로그래밍 지식과 파이썬 기본 사항이 필요합니다. Slack Web API 및 RTM API와의 상호 작용에 중점을 둡니다. 이 SDK를 사용하는 방법에 대한 아이디어를 제공하십시오.
시작하려면 자습서를 읽으십시오!
Slack은 웹 API를 제공하여 다양한 방식으로 Slack과 상호 작용하는 응용 프로그램을 구축 할 수 있습니다. 이 개발 키트는 API와 더 쉽게 상호 작용하는 모듈 기반 래퍼입니다. 여기에는 더 일반적인 용도 중 일부가있는 기본 예제가 있지만 사용 가능한 방법의 전체 목록이 여기에서 제공됩니다. 보다 자세한 예는 가이드에서 찾을 수 있습니다.
가장 일반적인 사용 사례 중 하나는 Slack에게 메시지를 보내는 것입니다. 앱 또는 사용자로서 메시지를 보내려면이 방법이 두 가지를 모두 수행 할 수 있습니다. 예에서는 채널 이름을 지정하지만 가능한 경우 channel_id
를 사용하는 것이 좋습니다. 또한 앱의 BOT 사용자가 아직 채널에 있지 않은 경우 코드 스 니펫을 실행하기 전에 봇 사용자를 초대하십시오 (또는 chat:write.public
to Bot Token Scopes를 공개 채널에 게시).
import os
from slack_sdk import WebClient
from slack_sdk . errors import SlackApiError
client = WebClient ( token = os . environ [ 'SLACK_BOT_TOKEN' ])
try :
response = client . chat_postMessage ( channel = '#random' , text = "Hello world!" )
assert response [ "message" ][ "text" ] == "Hello world!"
except SlackApiError as e :
# You will get a SlackApiError if "ok" is False
assert e . response [ "ok" ] is False
assert e . response [ "error" ] # str like 'invalid_auth', 'channel_not_found'
print ( f"Got an error: { e . response [ 'error' ] } " )
# Also receive a corresponding status_code
assert isinstance ( e . response . status_code , int )
print ( f"Received a response status_code: { e . response . status_code } " )
여기서 우리는 또한 슬랙의 응답이 성공적인 응답이며 assert
진술서를 사용하여 우리가 보낸 메시지임을 확인합니다.
파일 업로드 프로세스를 훨씬 쉽고 간단하게 바꾸는 프로세스를 변경했습니다. 이제 API 호출에 직접 파일의 경로를 포함시켜 업로드 할 수 있습니다.
import os
from slack_sdk import WebClient
from slack_sdk . errors import SlackApiError
client = WebClient ( token = os . environ [ 'SLACK_BOT_TOKEN' ])
try :
filepath = "./tmp.txt"
response = client . files_upload_v2 ( channel = 'C0123456789' , file = filepath )
assert response [ "file" ] # the uploaded file
except SlackApiError as e :
# You will get a SlackApiError if "ok" is False
assert e . response [ "ok" ] is False
assert e . response [ "error" ] # str like 'invalid_auth', 'channel_not_found'
print ( f"Got an error: { e . response [ 'error' ] } " )
files_upload_v2
메소드에 대한 자세한 내용은 여기를 참조하십시오.
이 SDK의 AsyncWebClient
비동기 요청을 위해 후드 아래에서 aiohttp가 필요합니다.
import asyncio
import os
from slack_sdk . web . async_client import AsyncWebClient
from slack_sdk . errors import SlackApiError
client = AsyncWebClient ( token = os . environ [ 'SLACK_BOT_TOKEN' ])
async def post_message ():
try :
response = await client . chat_postMessage ( channel = '#random' , text = "Hello world!" )
assert response [ "message" ][ "text" ] == "Hello world!"
except SlackApiError as e :
assert e . response [ "ok" ] is False
assert e . response [ "error" ] # str like 'invalid_auth', 'channel_not_found'
print ( f"Got an error: { e . response [ 'error' ] } " )
asyncio . run ( post_message ())
SANIC/JUPYTER NOOKBOOK/등과 같은 Asyncio 이벤트 루프를 호출하는 프레임 워크를 사용하는 경우.
import os
from slack_sdk . web . async_client import AsyncWebClient
from slack_sdk . errors import SlackApiError
client = AsyncWebClient ( token = os . environ [ 'SLACK_BOT_TOKEN' ])
# Define this as an async function
async def send_to_slack ( channel , text ):
try :
# Don't forget to have await as the client returns asyncio.Future
response = await client . chat_postMessage ( channel = channel , text = text )
assert response [ "message" ][ "text" ] == text
except SlackApiError as e :
assert e . response [ "ok" ] is False
assert e . response [ "error" ] # str like 'invalid_auth', 'channel_not_found'
raise e
from aiohttp import web
async def handle_requests ( request : web . Request ) -> web . Response :
text = 'Hello World!'
if 'text' in request . query :
text = " t " . join ( request . query . getall ( "text" ))
try :
await send_to_slack ( channel = "#random" , text = text )
return web . json_response ( data = { 'message' : 'Done!' })
except SlackApiError as e :
return web . json_response ( data = { 'message' : f"Failed due to { e . response [ 'error' ] } " })
if __name__ == "__main__" :
app = web . Application ()
app . add_routes ([ web . get ( "/" , handle_requests )])
# e.g., http://localhost:3000/?text=foo&text=bar
web . run_app ( app , host = "0.0.0.0" , port = 3000 )
RTM과 웹 클라이언트 모두에서 지원하는 ssl
옵션을 전달하여 사용자 정의 SSL 컨텍스트를 제공하거나 검증을 비활성화 할 수 있습니다.
Async 요청은 AIOHTTP SSL 문서를 참조하십시오.
동기화 요청은 urllib ssl 문서를 참조하십시오.
Async 요청을 할 때 프록시가 지원됩니다. RTM과 웹 클라이언트 모두에서 지원하는 proxy
옵션을 통과합니다.
Async 요청은 AIOHTTP 프록시 문서를 참조하십시오.
동기화 요청의 경우 HTTPS_PROXY
ENV 변수를 설정하거나 proxy
옵션이 작동합니다.
비동기 클라이언트를 사용하고 성능 향상을 찾고 계십니까? 선택적 종속성 (AIODN)을 설치하면 클라이언트가 해결하는 DNS 속도를 높일 수 있습니다. 우리는 그것을 "선택 사항"이라는 추가로 포함 시켰습니다.
$ pip install slack_sdk[optional]
import os
from slack_sdk import WebClient
from ssl import SSLContext
sslcert = SSLContext ()
# pip3 install proxy.py
# proxy --port 9000 --log-level d
proxyinfo = "http://localhost:9000"
client = WebClient (
token = os . environ [ 'SLACK_BOT_TOKEN' ],
ssl = sslcert ,
proxy = proxyinfo
)
response = client . chat_postMessage ( channel = "#random" , text = "Hello World!" )
print ( response )
Slack_SDK의 SlackClient v2.x에서 v3.x로 마이그레이션하는 경우 마이그레이션 안내서를 따라 업데이트 후 앱이 계속 작동하는지 확인하십시오.
여기에서 마이그레이션 가이드를 확인하십시오!
SlackClient의 V1.x에서 V2.x로 마이그레이션하는 경우 마이그레이션 안내서를 따라 업데이트 후 앱이 계속 작동하는지 확인하십시오.
여기에서 마이그레이션 가이드를 확인하십시오!
당신이 붙어 있다면, 우리는 도와 드리기 위해 왔습니다. 다음은 문제를 통해 도움을받는 가장 좋은 방법입니다.
버그를보고하거나 기능을 요청하기 위해 GitHub 문제 추적기를 사용하십시오. Slack Community를 방문하여 Python 용 Slack Developer Kit를 사용하거나 일반적으로 동료 Slack 개발자와 유대 관계를 맺으십시오.
우리는 모두의 기여를 환영합니다! 도움이되고 협력적인 방식으로 기여하는 방법은 기고자 안내서를 확인하십시오.