首页 > 解决方案 > Slack 的 files.delete API 总是返回 cant_delete_file 错误

问题描述

我正在尝试编写一个脚本来从我的 Slack 工作区中删除旧文件。

按照 Slack API 文档,我创建了一个应用程序,为其提供channels:joinchannels:managechannels:readfiles:readfiles:write范围,并将其安装在目标工作区中。

我的应用程序可以列出频道、加入频道和列出该频道中的文件,但每当我尝试删除文件时,我都会收到如下所示的响应:

DELETE https://slack.com/api/files.delete?token=xoxb-xxxxxxxxxxxx-xxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxx&file=Fxxxxxxxxxx
User-Agent: PostmanRuntime/7.24.1
Accept: */*
Cache-Control: no-cache
Postman-Token: 8f6854b4-794c-4685-892c-c9fafc03827e
Host: slack.com
Accept-Encoding: gzip, deflate, br
Connection: keep-alive

HTTP/1.1 200 OK
date: Sat, 09 Jan 2021 19:23:28 GMT
server: Apache
x-xss-protection: 0
pragma: no-cache
cache-control: private, no-cache, no-store, must-revalidate
access-control-allow-origin: *
strict-transport-security: max-age=31536000; includeSubDomains; preload
x-slack-req-id: 227ef4f9bb4c85c42d6f1c7fb33ddac0
x-content-type-options: nosniff
referrer-policy: no-referrer
access-control-expose-headers: x-slack-req-id, retry-after
x-slack-backend: r
x-oauth-scopes: files:read,files:write,users:read,channels:read,channels:join,channels:manage,remote_files:write
x-accepted-oauth-scopes: files:write
expires: Mon, 26 Jul 1997 05:00:00 GMT
access-control-allow-headers: slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, x-b3-sampled, x-b3-flags
vary: Accept-Encoding
content-encoding: gzip
content-length: 59
content-type: application/json; charset=utf-8
x-envoy-upstream-service-time: 26
x-backend: files_normal files_canary_with_overflow files_control_with_overflow
x-server: 10.128.70.109:80
x-via: envoy-www-iad-kyvf, haproxy-edge-iad-2ql3
x-slack-shared-secret-outcome: shared-secret
via: envoy-www-iad-kyvf
{
  "ok": false,
  "error": "cant_delete_file"
}

根据files.delete端点的 API 文档,cant_delete_file意味着:

经过身份验证的用户无权删除此文件。

我只能假设这是因为我的用户是机器人,而不是最初上传文件的用户。

因为我是工作区管理员,所以如果我要使用我的用户凭据进行身份验证,我希望能够列出和删除所有文件,但是基本应用程序设置文档没有说明如何使用用户凭据进行身份验证,即使他们包含暗示某些操作可能需要用户令牌的语言:

如果您需要充当特定用户(例如,代表用户发布消息或设置用户状态),则需要用户令牌。

是否有人知道如何:

  1. 使用 App Token 进行身份验证时删除文件;或者
  2. 从应用程序中获取用户令牌?

标签: slackslack-api

解决方案


虽然没有明确记录,但 App Token 不允许删除其他用户上传的文件。

为此,需要通过 OAuth 将应用程序安装到工作区,授予应用程序一个用户令牌,该用户令牌继承安装它的用户的权限。

如果该用户是工作区管理员,则应用程序将能够删除任何文件,无论是谁上传的。有关详细信息,请参阅https://api.slack.com/legacy/oauth


推荐阅读