Slack平台提供了幾個用於構建應用程序的API。每個Slack API都可以從平台中提供部分功能,因此您可以選擇適合您需求的功能。該SDK為Slack的每個API提供了相應的軟件包。獨立使用時,它們小巧而有力,並且在一起使用時也無縫工作。
有關使用Slack Python的全面文檔可以在https://tools.slack.dev/python-slack-sdk/上找到
無論您是為團隊構建自定義應用程序,還是將第三方服務集成到Slack Workfrows中,Slack Developer for Python for Python都可以利用Python的靈活性使您的項目盡快啟動並運行。
Python Slack SDK允許與:
slack_sdk.web
:用於調用Web API方法slack_sdk.webhook
:用於利用傳入的webhooks和response_url
s有效載荷slack_sdk.signature
:用於驗證Slack API服務器的傳入請求slack_sdk.socket_mode
:用於接收和通過套接字模式連接發送消息slack_sdk.audit_logs
:用於使用審核日誌APIslack_sdk.scim
:用於利用SCIM APIslack_sdk.oauth
:用於實現Slack Oauth Flowslack_sdk.models
:用於使用易於使用的構建器構建塊套件UI組件slack_sdk.rtm
:用於利用RTM API如果您想使用我們的活動API和交互性功能,請檢查Python庫的螺栓。有關令牌和身份驗證的詳細信息,請參見我們的Auth Guide。
您正在尋找SlackClient嗎?該網站像以前一樣在這裡生活。但是,SlackClient項目現在處於維護模式,此slack_sdk
是繼任者。如果您有時間遷移到Slack_SDK V3,請遵循我們的遷移指南,以確保您的應用程序在更新後繼續工作。
該庫需要Python 3.6及以上。如果您需要Python 2,請使用我們的SlackClient -V1.x。如果您不確定如何檢查您使用的Python版本,則可以使用以下內容進行檢查:
注意:您可能需要在命令之前使用
python3
,以確保使用正確的Python路徑。例如python3 --version
python --version
-- or --
python3 --version
我們建議使用PYPI為Python安裝Slack Developer套件。
$ pip install slack_sdk
我們創建了本教程,以在不到10分鐘的時間內構建一個基本的Slack應用程序。它需要一些一般的編程知識和Python的基礎知識。它著重於與Slack Web API和RTM API的交互。使用它來讓您了解如何使用此SDK。
閱讀教程以開始!
Slack提供了一個Web API,使您能夠以多種方式構建與Slack相互作用的應用程序。該開發套件是一個基於模塊的包裝器,可更輕鬆地與該API進行交互。我們在這裡有一個基本示例,其中有一些更常見的用途,但是可以在此處獲得可用方法的完整列表。在我們的指南中可以找到更多詳細的示例。
最常見的用例之一是向Slack發送消息。如果要將消息作為應用程序或用戶發送,則此方法可以同時完成。在我們的示例中,我們指定頻道名稱,但是建議在可能的情況下使用channel_id
。另外,如果您的應用程序的bot用戶還不在頻道中,請在運行代碼段之前邀請bot用戶(或添加chat:write.public
到bot令牌範圍,以便在任何公共頻道中發布)。
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 } " )
在這裡,我們還確保Slack的回復是成功的回复,並且該消息是我們使用assert
語句發送的消息。
我們已經將上傳文件上傳到Slack的過程更加容易,直截了當。現在,您可以將文件直接包含在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 ())
如果您使用的是調用Asyncio事件循環的框架,例如:Sanic/Jupyter Notebook/等。
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和Web客戶端支持的ssl
選項來提供自定義的SSL上下文或禁用驗證。
有關異步請求,請參見AIOHTTP SSL文檔。
有關同步請求,請參見Urllib SSL文檔。
在製作異步請求時,支持代理,通過RTM和Web客戶端支持的proxy
選項。
有關異步請求,請參見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社區,以使用Slack Developer Kit進行Python獲得幫助,或者通常與您的Slack Developers結合使用。
我們歡迎大家的捐款!請查看我們的撰稿人指南,了解如何以有益和協作的方式貢獻。