从 Slack 中的机器人上传图像并将其附加到私人消息

Uploading and attaching images to private messages from bots in Slack

我有一个节点服务正在使用来自 @slack/clientWebClient

我正在使用机器人的访问令牌通过 web.files.upload API 方法上传图像。然后我想将上传的图像作为私人消息的附件发送给用户(即以 D 开头的频道)。我希望仅限该团队中的 Slack 用户访问此图片(就像共享文档或其他文件时一样)。

我尝试使用 files.upload 函数的响应来执行此操作,但 res.file 中似乎没有 属性 给我一个 URL这个 Slack 团队的所有成员都可以访问:

conversationId = 'Dxxxxxxxx'; // ID of private channel between bot and user

web.chat
  .postMessage({
    channel: conversationId,
    text: 'Hello there',
    attachments: [
      {
        fallback: 'Required plain-text summary of the attachment.',
        color: '#36a64f',
        title: 'Slack API Documentation',
        title_link: 'https://api.slack.com/',
        text: 'Optional text that appears within the attachment',
        image_url: res.file.permalink_public,
        ts: 123456789
      }
    ]
  });

the docs 看来,在将此文件发送到 public 频道之前,该文件对机器人来说是私有的。

我考虑过的另一种方法是将文件上传到用户和机器人之间的私人消息通道,但是这给了我以下错误:

{ Error: An API error occurred: invalid_channel
  code: 'slackclient_platform_error',
  data:
  { ok: false,
    error: 'invalid_channel',
    channel: '["Dxxxxxxxx"]',
    scopes: [ 'identify', 'bot:basic' ],
    acceptedScopes: [ 'files:write:user', 'post' ] } }

有没有办法实现我想要的?

要在邮件附件中使用图像 URL,该图像必须具有 public URL,否则将无法使用。上传的文件有访问限制,默认情况下不是 public(例如,您需要在 URL 的同时提供身份验证)。

如果您想在附件中使用该图片,您需要先获取 public URL。但是,分享它 "in a public channel" 是不够的。您需要使用 API 方法 files.sharedPublicUrl 制作文件 public。

或者,您可以使用外部图像服务上传图像文件并获取 public URL,例如imgur 有一个 API 用于上传和共享图像文件。

我的错误来自误读 the docs - files.upload API 期望通道 属性 的逗号分隔字符串,而我正在传递一个数组。

一旦我纠正了这个问题,我就可以成功上传文件并与用户私下共享(频道 ID 以 'D' 开头)和 public 个频道(频道 ID 以 [=19= 开头) ]).

复制图像 URL 并将其粘贴到浏览器中后,我进入了登录页面,因此默认情况下,正如我所希望的那样,它们对 Slack 团队是私有的。