【问题标题】:Slack api: files.upload to user channel and display as bot-user?Slack api:files.upload 到用户频道并显示为机器人用户?
【发布时间】:2019-01-17 09:53:35
【问题描述】:

我正在尝试创建一个 slack 命令,该命令接受参数、生成图像并返回并将图像返回给用户,并且图像上传应该显示为机器人用户。

我关注这个帖子:Can you upload a file to the Slack API using files.upload as a different user?

我尝试创建slack app,根据它创建一个bot用户,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 中。

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

【问题讨论】:

    标签: slack slack-api


    【解决方案1】:

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

    这个问题有 3 种解决方法:

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

    2. 您可以要求每个用户“安装”一次您的 Slack 应用程序。从而为您的应用提供用户特定的 Slack 令牌,然后您的应用可以使用该令牌访问私有频道。

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

    【讨论】:

    • 感谢您的澄清!我最终没有调用 file.uploads,而是将图像托管在 azure blob 上,检索 url 并使用 chat.postMessage 显示图像。
    • 不错的选择。我主要使用Imgur,它也很适合这个目的。
    猜你喜欢
    • 2017-03-18
    • 2016-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-31
    • 2021-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多