Skip to main content

适用于 Python 的 Slack API 平台 SDK

项目描述

Python 松弛 SDK

Slack 平台提供了多种 API 来构建应用程序。每个 Slack API 都提供了平台的部分功能,因此您可以选择适合您需求的功能。该 SDK 为 Slack 的每个 API 提供了相应的包。它们在独立使用时体积小而功能强大,并且在一起使用时也可以无缝工作。

可以在https://slack.dev/python-slack-sdk/找到有关使用 Slack Python 的综合文档

pypi 包 构建状态 蟒蛇版本 编解码器 接触

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

Python Slack SDK允许与以下交互:

如果您想使用我们的事件 API和交互功能,请查看Bolt for Python库。有关令牌和身份验证的详细信息,请参阅我们的身份验证指南

slackclient 处于维护模式

您在寻找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 Kit。

$ pip install slack_sdk

入门教程


我们创建本教程是为了在 10 分钟内构建一个基本的 Slack 应用程序。它需要一些通用的编程知识和 Python 基础知识。它专注于与 Slack 的 Web 和 RTM API 的交互。使用它可以让您了解如何使用此 SDK。

阅读教程以开始使用!

Web客户端的基本用法


Slack 提供了一个 Web API,使您能够构建以各种方式与 Slack 交互的应用程序。该开发工具包是一个基于模块的包装器,可以更轻松地与该 API 进行交互。我们在这里有一个基本示例,其中包含一些更常见的用途,但这里提供了可用方法的完整列表。更详细的示例可以在我们的指南中找到。

向 Slack 发送消息

最常见的用例之一是向 Slack 发送消息。如果您想作为您的应用程序或作为用户发送消息,则此方法可以同时进行。在我们的示例中,我们指定了通道名称,但建议尽可能使用channel_id。此外,如果您的应用程序的机器人用户尚未在频道中,请在运行代码段之前邀请机器人用户(或添加chat:write.public到机器人令牌范围以在任何公共频道中发布)。

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']}")

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

将文件上传到 Slack

我们更改了将文件上传到 Slack 的流程,使其更加简单直接。您现在可以直接在 API 调用中包含文件路径并以这种方式上传。您可以在此处找到有关此 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(channels='#random', 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']}")

异步使用

AsyncWebClient在这个 SDK 中,异步请求需要AIOHttp

脚本中的 AsyncWebClient

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())

框架中的 AsyncWebClient

如果您正在使用调用 asyncio 事件循环的框架,例如:sanic/jupyter notebook/etc。

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)

高级选项

SSL

您可以提供自定义 SSL 上下文或通过传递sslRTM 和 Web 客户端都支持的选项来禁用验证。

对于异步请求,请参阅AIOHttp SSL 文档

对于同步请求,请参阅urllib SSL 文档

代理人

发出异步请求时支持代理,通过proxyRTM 和 Web 客户端都支持的选项。

对于异步请求,请参阅AIOHttp 代理文档

对于同步请求,设置环境HTTPS_PROXY变量或proxy选项有效。

DNS 性能

使用异步客户端并寻求性能提升?安装可选的依赖项 (aiodns) 可能有助于加快客户端的 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)

从 v2 迁移

如果您从 slack_sdk 的 slackclient v2.x 迁移到 v3.x,请按照我们的迁移指南确保您的应用在更新后继续工作。

在此处查看迁移指南!

从 v1 迁移

如果您从 slackclient 的 v1.x 迁移到 v2.x,请按照我们的迁移指南确保您的应用在更新后继续工作。

在此处查看迁移指南!

支持


如果您遇到困难,我们随时为您提供帮助。以下是获得帮助解决您的问题的最佳方式:

使用我们的Github 问题跟踪器报告错误或请求功能。访问Slack 社区以获得使用 Slack Developer Kit for Python 的帮助,或者只是一般地与您的 Slack 开发人员建立联系。

贡献

我们欢迎大家的贡献!请查看我们的 贡献者指南,了解如何以有益和协作的方式进行贡献。

项目详情