松弛API:files.upload到用户频道并显示为bot-user?

时间:2018-08-09 20:34:44

标签: slack slack-api

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

我关注这篇文章: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"}

1 个答案:

答案 0 :(得分:1)

出现此错误的原因是您的bot用户显然不是该用户在其中调用了slash命令的专用通道的成员。因此,您的应用无法将任何文件上传到该应用。这是正常行为,是Slack安全体系结构的一部分。

此问题有3种解决方法:

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

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

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