我正在尝试创建一个 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 种解决方法:
您可以确保 Slack 应用中的机器人用户被添加为您的斜杠命令需要工作的所有私有(private) channel 的成员
您可以请求每个用户“安装”您的 Slack 应用一次。从而为您的应用提供用户特定的 Slack token ,然后您的应用可以使用该 token 来访问私有(private) channel 。
您可以不上传文件,而是回复消息,消息中也可以包含图像。 Slack 应用程序始终可以回复 Slash 命令,无论该命令是在哪种 channel 中发出的。
关于Slack api : files. 上传到用户 channel 并显示为机器人用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51775374/