如何从 Slack 获取用户 ID 到机器人服务

How to get the user id from Slack to bot service

我正在使用 Azure LUIS 创建一个简单的机器人,这是我的第一个机器人。在做了一些研究后我取得了一些不错的进展,现在还与 Slack 集成作为测试它的渠道。

机器人功能运行良好,但我想要识别用户。这样我就可以个性化机器人对话,还可以从他的个人资料中提取用户特定信息 table。

我是否可以获取 slack 用户的 UID 或任何参考 ID,以便将其与用户配置文件一起存储在我的用户 table 中?

所以下次,当用户问候机器人时,机器人可以说 "Hello, John." 而不是只说 "Hello."

谢谢!

是的。您可以使用 channelData 对象获取 ApiTokenuser 值。例如,在 C# 中,您可以使用 turnContext.Activity.ChannelData 来获取 JSON:

中的那些值
{{
  "SlackMessage": {
    "token": "............",
    "team_id": "<TEAM ID>",
    "event": {
      "type": "message",
      "text": "thanks",
      "user": "<USER WHO MESSAGED>",
      "channel": "............",
      "channel_type": "channel"
    },
    "type": "event_callback",
    "event_id": ""............",
    "event_time": 1553119134,
    "authed_users": [
      "............",
      "<USER WHO MESSAGED>"
    ]
  },
  "ApiToken": "<ACTUAL TOKEN HERE>"
}}

然后,使用这两条信息,您就可以从 Slack 中检索信息。

https://slack.com/api/users.info?token=<ACTUAL TOKEN HERE>&user=<USER WHO MESSAGED>&pretty=1

并获得包含您需要的信息的回复:

{
    "ok": true,
    "user": {
        "id": "<USER WHO MESSAGED>",
        "team_id": "<TEAM ID>",
        "real_name": "Dana V",

理想情况下,您可能希望设置机器人用户状态并首先检查,如果不存在,则对 Slack 进行 API 调用,然后存储在状态中。因此,进一步的请求不需要转到 Slack,而只会从状态存储中提取。


基本上,您 could/should 在 onTurn 事件中执行此操作。首先,创建您的用户状态存储,例如 here.

然后您可以检查该值并在未填充时写入该值。 This example 简单的提示,可能会有帮助。您不需要像本例那样提示您输入用户名,但是 read/write username from state。您仍然可以使用对话框,但是您不需要它们来进行名称提示,因为您正在动态地这样做。

您可以看到 here where username is being set and here 检索的位置。在这种情况下,它在对话框中,但又一次;你 would/could 只需在回合上下文中执行(使用逻辑获取,如果不存在,则设置)。

我通过打印整个会话对象找到了解决方案,该对象具有所有必需的信息。这可能和上面Dana提到的一样,但是经过调试,下面没有做任何更改就变得简单了。

var slackID = session.message.address.user.id

通过以上,我能够识别用户。

谢谢。