我有一个节点服务,使用 @slack/client
来自 @slack/client
.
我使用机器人的访问令牌使用 web.files.upload
API方法上传图像 . 然后,我想将上传的图像作为私人消息的附件(即以 D
开头的 Channels )发送给用户 . 我希望访问此图像仅限于此团队中的Slack用户(非常类似于共享文档或其他文件时) .
我尝试使用 files.upload
函数的响应来执行此操作,但似乎没有 res.file
的任何属性为我提供了一个可供本Slack团队的所有成员访问的URL:
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开始,听起来这个文件对机器人来说是私有的,直到它被发送到公共 Channels .
我考虑的另一种方法是将文件上传到用户和机器人之间的私人消息通道,但这会给我以下错误:
{ 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' ] } }
难道没有办法实现我追求的目标吗?
2 回答
要在邮件附件中使用图片网址,该图片必须包含公共网址,否则将无法使用 . 上传的文件具有访问限制,默认情况下不公开(例如,您需要提供身份验证以及您的URL) .
如果要在附件中使用该图像,则需要先获取公共URL . 但是,分享它"in a public channel"是不够的 . 您需要使用API方法files.sharedPublicUrl公开文件 .
或者,您可以使用外部图片服务上传图片文件并获取公共网址,例如imgur有一个用于上传和共享图像文件的API .
我的错误来自误读the docs -
files.upload
API期望channel属性的逗号分隔字符串,我正在传递一个数组 .一旦我纠正了这个,我就可以成功上传文件并私下与用户共享( Channels ID以'D'开头)和公共 Channels (以'C'开头的 Channels ID) .
复制图像URL并将其粘贴到浏览器中会将我带到登录页面,因此默认情况下它们是Slack团队的私有URL,正如我所希望的那样 .