Slack api: files.upload 到用户频道并显示为机器人用户?

Slack api: files.upload to user channel and display as bot-user?

我正在尝试创建一个带有参数、生成图像和 return 并将图像返回给用户的 slack 命令,而且图像上传应该显示为 bot 用户。

我关注这个 post:你可以使用 files.upload 作为不同的用户将文件上传到 Slack API 吗?

我尝试创建 slack 应用程序,根据它创建一个机器人用户,并按如下方式上传 slack 文件 api:

def send_picture(channel_id, graph_details):
     sender_token = "xoxb-..." # bot-user token
     pic = {
        'file' : ('img.png', open('img.png', 'rb'), 'png')
     }
     payload={
         "title" : "Serverless App Report",
         "channels" : [channel_id]
     }
    r = requests.post("https://slack.com/api/files.upload", params=payload, files=pic)

每当用户执行 slack 命令(POST 和参数)时,我可以解析 channel_id 以找出发件人并将其传递到 channel_id 到文件上传api.

将其发布到 public 频道工作正常。但是 post 将它返回给执行命令的用户失败并出现错误:{"ok":false,"error":"invalid_channel","channel":"DXXXXXXX"}

您收到此错误的原因是您的 bot 用户显然不是用户调用您的 slash 命令的私人频道的成员。因此,您的应用无法向其上传任何文件。这是正常行为,也是 Slack 安全架构的一部分。

此问题有 3 种解决方法:

  1. 您可以确保您的 Slack 应用程序中的 bot 用户已作为成员添加到您的 slash 命令需要工作的所有私人频道

  2. 您可以请求每个用户 "install" 您的 Slack 应用程序一次。从而为您的应用程序提供用户特定的 Slack 令牌,然后您的应用程序可以使用该令牌访问私人频道。

  3. 您可以不上传文件,而是回复一条消息,消息中也可以包含图片。 Slack 应用程序始终可以回复 Slash 命令,无论它是在哪种渠道发出的。