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结合使用。
我们欢迎大家的捐款!请查看我们的撰稿人指南,了解如何以有益和协作的方式贡献。