使用 Python 向 Slack 发送带有附件的消息

Send messages to Slack with attachments using Python

我正在尝试使用 Python 向 Slack 发送消息。它适用于普通邮件,但我需要附加文件。

在此示例中,我尝试发送位于我本地设备上的图像。在以下代码中:

import os
import slack
from slack_sdk import WebClient
from pathlib import Path
from dotenv import load_dotenv
from slack_sdk.errors import SlackApiError

env_path = Path('.') / '.env'
load_dotenv(dotenv_path=env_path)
client = slack.WebClient(token=os.environ['SLACK_TOKEN'])

try:
    filepath = "./ccc.jpg"
    response = client.files_upload(channels='#test', file=filepath)
    assert response["file"]  # the uploaded file
except SlackApiError as e:
    assert e.response["ok"] is False
    assert e.response["error"]
    print(f"Got an error: {e.response['error']}")

当我尝试 运行 代码时,它显示了这种类型的 error/warning:

C:\ProgramData\Anaconda3\envs\practice\lib\site-packages\slack\deprecation.py:16: UserWarning: slack package is deprecated. Please use slack_sdk.web/webhook/rtm package instead. For more info, go to https://slack.dev/python-slack-sdk/v3-migration/
  warnings.warn(message)
Got an error: missing_scope

有什么办法可以解决这种问题吗?

错误missing_scope表示具有此令牌的应用程序没有足够的权限,意思是'scope'是Slack中权限的术语。

要解决此问题,请在此处查看所需范围部分 https://api.slack.com/methods/files.upload

您会发现您需要为您的应用程序授予以下权限 'files:write',您可以转到 https://api.slack.com -> 右上角的应用程序 -> 选择您的应用程序并开始到 'OAuth & Permissions' 选项卡,向下滚动,您会找到范围部分,您可以从那里添加所需的范围。

您将在页面顶部收到一条通知(横幅),告知您需要重新安装您的应用,然后邀请您的 bot/application 加入您的频道并再次 运行 您的代码。

请确保使用最新的 slack_sdk,而不是已弃用的。

此脚本应该 运行 没有错误:

import os
from slack_sdk import WebClient
from pathlib import Path
from dotenv import load_dotenv
from slack_sdk.errors import SlackApiError

env_path = Path('.') / '.env'
load_dotenv(dotenv_path=env_path)
client = WebClient(token=os.environ['SLACK_TOKEN'])

try:
    filepath = "./ccc.jpg"
    response = client.files_upload(channels='#test', file=filepath)
    assert response["file"]  # the uploaded file
except SlackApiError as e:
    assert e.response["ok"] is False
    assert e.response["error"]
    print(f"Got an error: {e.response['error']}")