Slack api : files. 上传到用户 channel 并显示为机器人用户?

标签 slack slack-api

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

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

我尝试创建 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以找出发送者并将其传递到文件上传API的channel_id中。

将其发布到公共(public) channel 效果很好。但将其发回执行该命令的用户失败并出现错误:{"ok":false,"error":"invalid_channel","channel":"DXXXXXXX"}

最佳答案

您收到此错误的原因是您的机器人用户显然不是用户在其中调用斜杠命令的私有(private) channel 的成员。因此您的应用程序无法向其上传任何文件。这是正常行为,也是 Slack 安全架构的一部分。

此问题有 3 种解决方法:

  1. 您可以确保 Slack 应用中的机器人用户被添加为您的斜杠命令需要工作的所有私有(private) channel 的成员

  2. 您可以请求每个用户“安装”您的 Slack 应用一次。从而为您的应用提供用户特定的 Slack token ,然后您的应用可以使用该 token 来访问私有(private) channel 。

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

关于Slack api : files. 上传到用户 channel 并显示为机器人用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51775374/

相关文章:

themes - 如何在桌面应用程序的夜间模式下运行 Slack

javascript - 如何在 Slack App 中将值从 Slack channel 传递到 `Options Load URL`

node.js - 如何将 Slack 机器人扩展到 1000 个团队

node.js - 更改 slack 中对话流机器人的机器人用户名

slack 斜线命令有效,但发送 "failed with the error "operation_timeout""

chat - 如何设置 Slack 提醒仅通知 channel 中的一部分人

java - 如何更正无效协议(protocol): null sending mail and Could not to SMTP host: using javax.邮件?

python - 尝试使用 RTM API 连接到 Slack 时出现 "Failed RTM connect"错误

android - Slack 实时消息传递 websocket

iframe - 如何在 Slack 集成中插入 iframe?