我们正在开发一个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"
}
问题:
为什么它对User1有效,但对User2不有效?我们可以想象的唯一一件事是User1在Slack工作区中部署了Slack应用程序。但这不应该影响这种行为吗?
是否有另一种方法可以基于直接消息通道的channel_id获取直接消息通道的目标用户的用户ID?
答案 0 :(得分:2)
该方法在用户2和用户3之间的直接消息通道中不起作用的原因是,您的应用无法访问该通道,因此您在该通道上调用channel not found
时会得到conversations.info
渠道。
并且它无权访问,因为它已由用户1安装,因此该应用只能看到用户1有权访问的频道。这是由于Slack中的安全体系结构如何工作。
据我所知,不可能通过斜杠命令获取直接消息通道其他成员的用户ID。