用于web api和rtm api的slack api客户端

slackclient的Python项目详细描述


python slackclient

python slackclient是一个开发工具包,用于在python 3.6及更高版本上与slack web api和实时消息(rtm)api交互。

pypi package构建状态构建状态python versioncodecoovcontact

无论您是为您的团队构建自定义应用程序,还是将第三方服务集成到Slack工作流中,Slack Developer Kit for Python都允许您利用Python的灵活性使您的项目尽快启动和运行。

python slackclient允许与以下对象交互:

  • 可在我们的api文档网站上找到slack web api方法
  • 与我们的rtm api进行交互

如果您想使用我们的事件API,请检查用于python的slack事件API适配器

有关令牌和身份验证的详细信息,请参见我们的《身份验证指南》。

目录

要求


此库需要Python3.6及更高版本。如果您需要Python2,请使用我们的slackclient-v1.x。如果您不确定如何检查所使用的python版本,可以使用以下方法进行检查:

< Buff行情>

注意:您可能需要在命令之前使用python3,以确保使用正确的python路径。例如,python3--版本

python --version

-- or --

python3 --version

安装

我们建议使用pypi安装slack developer kit for python。

$ pip3 install slackclient

入门教程


我们创建了这个教程,以便在10分钟内构建一个基本的Slack应用程序。它需要一些通用编程知识和python基础知识。它关注与slack的web和rtm api的交互。使用它可以让您了解如何使用此sdk。

阅读教程开始!

Web客户端的基本用法


slack提供了一个web api,使您能够构建以各种方式与slack交互的应用程序。这个开发工具包是一个基于模块的包装器,它使与api的交互变得更容易。我们这里有一个基本的示例,其中包含一些更常见的用法,但是这里有可用方法的完整列表。更详细的示例可以在我们的基本用法指南中找到。

向slack发送消息

最常见的用例之一是向slack发送消息。如果要以应用程序或用户身份发送消息,此方法可以同时执行这两项操作。在我们的示例中,我们指定频道名称,但是建议尽可能使用频道id

importosimportslackclient=slack.WebClient(token=os.environ['SLACK_API_TOKEN'])response=client.chat_postMessage(channel='#random',text="Hello world!")assertresponse["ok"]assertresponse["message"]["text"]=="Hello world!"

在此,我们还确保slack返回的响应是成功的,并且消息是我们使用assert语句发送的消息。

将文件上载到Slack

我们已经将上载文件的过程更改为slack,使之更加简单和直接。现在只需在api调用中直接包含文件的路径,然后以这种方式上传。您可以在这里找到有关此API调用的详细信息

importosimportslackclient=slack.WebClient(token=os.environ['SLACK_API_TOKEN'])response=client.files_upload(channels='#random',file="my_file.pdf")assertresponse["ok"]

rtm客户端的基本用法


实时消息(RTM)API是一个基于WebSocket的API,它允许您实时接收来自Slack的事件并以用户身份发送消息。

如果您希望将事件推送到您的手中,我们建议您改用基于http的事件api。rtm api支持的大多数事件类型在events api中也可用。如果您想改用这个api,可以查看我们的python slackapi适配器。

rtmclient允许应用程序与slack平台的rtm api通信。

这个客户机的事件驱动架构允许您简单地 将回调链接到相应的事件。当事件发生时 此客户端在传递任何 它收到的信息。我们还允许您从回调内部调用我们的Web客户端。

在下面的示例中,我们将观察包含"hello"的消息事件,如果它被接收,我们将调用函数。然后,我们向web客户机发出一个调用,将其发回channel对用户说"嗨"。

importosimportslack@slack.RTMClient.run_on(event='message')defsay_hello(**payload):data=payload['data']web_client=payload['web_client']rtm_client=payload['rtm_client']if'Hello'indata['text']:channel_id=data['channel']thread_ts=data['ts']user=data['user']web_client.chat_postMessage(channel=channel_id,text=f"Hi <@{user}>!",thread_ts=thread_ts)slack_token=os.environ["SLACK_API_TOKEN"]rtm_client=slack.RTMClient(token=slack_token)rtm_client.start()

异步使用

slackclient v2及更高版本使用aiohttp和asyncio来启用异步功能。

库的正常使用不会以异步方式运行它,因此需要一个run_async=true的函数。

在异步模式下,重要的是记住等待或运行/运行直到完成呼叫。

将slackclient作为脚本
importosimportslackimportasyncioloop=asyncio.get_event_loop()client=slack.WebClient(token=os.environ['SLACK_API_TOKEN'],run_async=True)response=loop.run_until_complete(client.chat_postMessage(channel='#random',text="Hello world!"))assertresponse["ok"]assertresponse["message"]["text"]=="Hello world!"

在框架中松弛客户端

如果您使用的是调用异步事件循环的框架,如:sanic/jupyter notebook/etc。

importosimportslackclient=slack.WebClient(token=os.environ['SLACK_API_TOKEN'],run_async=True)asyncdefsend_async_message(channel='#random',text='')response=awaitclient.chat_postMessage(channel=channel,text=text)assertresponse["ok"]assertresponse["message"]["text"]=="Hello world!"

高级选项

python slackclient v2现在在引擎盖下面使用aiohttp

寻找性能提升?安装可选依赖项(aiodns)可能有助于加快客户端解析dns的速度。我们将其作为一个额外的称为"可选":

$ pip3 install slackclient[optional]

对ssl或代理支持感兴趣吗?只需使用其内置的代理参数。您可以将这些选项直接传递到RTM和Web客户端。

importosimportslackclient=slack.WebClient(token=os.environ['SLACK_API_TOKEN'],ssl=sslcert,proxy=proxyinfo)

对于这些代理和ssl设置,我们将始终遵循aiohttp中的标准过程,因此有关更多信息,请查看链接在此处的文档页

从v1迁移


如果您正在从SlackClient的v1.x版迁移到v2.x版,请按照我们的迁移指南进行操作,以确保您的应用程序在更新后继续工作。

查看迁移指南!

支持


如果你被困住了,我们是来帮忙的。以下是帮助您解决问题的最佳方法:

使用我们的github issue tracker来报告错误或请求功能。 访问bot developer hangout以获取使用python的slack developer kit的帮助,或者只是与其他slack开发人员建立联系。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Jmeter无法每秒运行1000个并发用户   java可以强制泛型类型接受其参数化类型,将其作为类型的唯一具体子类,而不是该类型本身吗   java如何防止“本地事务已经有1个非XA资源”异常?   java使用Apache FileUpload API上传文件是否有最大限制?   泛型Java在匿名类定义中引用枚举类型   java ProgressDialog:显示后不解除   Java在一行中读取文件中的数字(ID),以逗号分隔   IllegalAnnotationExceptions包$Class的java xx计数是一个非静态内部类,JAXB无法处理这些   java未能应用插件[class'com.github.jengelman.gradle.plugins.shadow.ShadowBasePlugin']   spring boot应用程序中的java Autowired字段为空   java安卓:从特定线程执行方法   java数组。newInstance抛出ClassCastException,为什么?   java如果当前浏览器url包含一个单词,请执行以下操作   vim无法使用Java将拉丁文大写字母A写入文件