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

时间:2019-03-19 01:30:05

标签: node.js slack slack-api luis azure-bot-service

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

该bot功能正常运行,但我希望识别用户。这样我就可以个性化机器人对话,还可以从他的个人资料表中提取用户特定的信息。

无论如何,我是否可以获得闲置用户的UID或任何参考ID,以便将其与用户个人资料一起存储在我的用户表中?

因此,下一次,当用户向该机器人打招呼时,该机器人可以说“你好, John ”。而不是只说“你好”。

谢谢!

2 个答案:

答案 0 :(得分:3)

是的。您可以使用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,而只需从状态存储中提取即可。


基本上,您可以/应该在onTurn事件中执行此操作。首先,创建您的用户状态存储区,例如here

然后,您可以检查该值并在未填充的情况下写入该值。在简单的提示上This example可能会有所帮助。您无需像本示例一样提示输入用户名,但是会从状态读取/写入用户名。您仍然可以使用对话框,但是在动态进行操作时,不需要它们来提示名称。

您会看到here在其中设置了用户名,在here中正在检索它。在这种情况下,它在对话框中,但再次出现。您将/可能只是在转弯上下文中进行操作(使用逻辑获取,如果没有,则进行设置)。

答案 1 :(得分:0)

我找到了解决方案,方法是对整个会话对象进行调试,该对象具有所有必需的信息。这可能与上面的Dana所提到的相同,但是在调试之后,这种修改变得简单而无需进行任何更改。

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

通过上面的操作,我可以识别用户。

谢谢。