使用Slack Bolt.JS上传文件至Block消息时遇not_allowed_token_type错误
Slack机器人上传图片嵌入Block消息遇权限错误的问题解决
问题原因
files.sharedPublicURL接口不支持用Bot Token调用,这个接口只允许使用User Token(xoxp-开头的令牌),这是Slack API的权限限制,Bot Token没有共享文件为公开的权限,所以触发了not_allowed_token_type错误。
解决办法
办法一:换用User Token调用公开接口
- 先获取一个带有
files:write:user和files:share权限的User Token(注意不是Bot Token)。 - 修改代码里的令牌参数:
const results2 = await app.client.files.sharedPublicURL({ token: SLACK_USER_TOKEN, // 替换成你的User Token file: result.file.id });
- 之后就能正常拿到
permalink_public,用来作为Block消息里的图片链接。
办法二:不用公开文件,直接用内部私有链接
Bot上传的文件在同工作区内,发送消息时可以直接用文件的内部私有链接,不用额外公开操作,更省事:
修改chat.postMessage的代码,把图片链接换成上传返回的url_private:
await app.client.chat.postMessage({ token: SLACK_BOT_TOKEN, channel: linus.slackId, text: 'Hello world!', blocks: [ { type: 'image', image_url: result.file.url_private, // 改用私有链接 alt_text: 'Linus' } ] });
这样工作区内的成员都能正常看到图片,不会触发权限错误,也不用换令牌。
内容的提问来源于stack exchange,提问作者Linus Romland
相关产品推荐
相关产品推荐

