我正在尝试创建一个松弛命令,该命令接受参数,生成图像并返回并将图像返回给用户,并且图像上载也应显示为机器人用户。
我关注这篇文章:Can you upload a file to the Slack API using files.upload as a different user?
我尝试创建slack应用程序(根据该应用程序是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"}
答案 0 :(得分:1)
出现此错误的原因是您的bot用户显然不是该用户在其中调用了slash命令的专用通道的成员。因此,您的应用无法将任何文件上传到该应用。这是正常行为,是Slack安全体系结构的一部分。
此问题有3种解决方法:
您可以确保将Slack应用程序中的bot用户作为成员添加到需要使用slash命令的所有私有渠道中
您可以请求每个用户一次“安装”您的Slack应用。从而为您的应用提供用户特定的Slack令牌,然后您的应用可以使用该令牌访问私有频道。
您可以避免上传文件,而是回复一条消息,其中也可以包含图像。 Slack应用程序始终可以响应Slash命令,无论它以哪种渠道发出。