3

我们正在开发一个 Slack 机器人,其中一个斜杠命令(在直接消息通道中使用时)应该能够确定直接消息通道中目标用户的 Slack 用户 ID。例如,假设有 3 个 Slack 用户 User1、User2 和 User3。如果 User1 将/someaction在他的直接消息通道中与 User3 进行操作,则 Slack 服务器会将以下属性发布到我们的/someaction命令实现中:

token
team_id
team_domain
channel_id
channel_name=directmessage
user_id
user_name=User1
command=%2Fsomeaction
text=
response_url=https%3A%2F%2Fhooks.slack.com%2Fcommands%2/........
trigger_id=....

user_id/user_name是来自发出命令的人,所以在这种情况下是 User1。

要获取user_idUser3 的参数,我们使用conversations.infoAPI,我们将channel_id提供给/someaction上面命令的参数传递给该 API。

现在的问题是,当 User1 在 Slack 中发出命令时它确实有效,但是当 User2 发出命令时(在他与 User3 的直接消息通道中),它不起作用。我们确实注意到在调用 User1 和 User2 之间提供的 channel_id 不同,这是有道理的,因为两者都有自己的与 User3 的直接消息通道

来自用户 2 的响应

curl https://slack.com/api/conversations.info?token=TOKEN\&channel=D0123456G&pretty=1
{
    "ok": false,
    "error": "channel_not_found"
}

问题:

  1. 为什么它适用于 User1,但不适用于 User2?我们唯一能想象的是,User1 已经在 Slack 工作区中部署了 Slack 应用程序。但这不应该影响这种行为还是应该?

  2. 是否有另一种方法可以根据该直接消息通道的 channel_id 获取直接消息通道的目标用户的用户 ID?

4

1 回答 1

2

The reason why this approach does not work in the direct message channel between User 2 and User 3 is that your app has no access to that channel and therefore you get channel not found when calling conversations.info on that channel.

And it has no access because it has been installed by User 1 and therefore the app can only see channels that User 1 has access to. This is due to how the security architecture in Slack works.

To my knowledge it is not possible to get the user ID of the other member of a direct message channel from a slash command.

于 2020-03-05T14:56:55.070 回答