在直接消息松弛通道中获取用户的用户ID

时间:2020-03-05 09:49:36

标签: slack slack-api slack-commands

我们正在开发一个Slack机器人,当在直接消息通道中使用时,其中一个斜杠命令应该能够确定目标用户在直接消息通道中的Slack用户ID。因此,例如,假设有3个Slack用户User1,User2和User3。如果User1在与User3的直接消息通道中执行/someaction,则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。

要获取User3的user_id,我们使用conversations.info API,在其中传递上面提供给channel_id命令的/someaction

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

User2的回复

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?

1 个答案:

答案 0 :(得分:2)

该方法在用户2和用户3之间的直接消息通道中不起作用的原因是,您的应用无法访问该通道,因此您在该通道上调用channel not found时会得到conversations.info渠道。

并且它无权访问,因为它已由用户1安装,因此该应用只能看到用户1有权访问的频道。这是由于Slack中的安全体系结构如何工作。

据我所知,不可能通过斜杠命令获取直接消息通道其他成员的用户ID。

相关问题