如何将用户ID从Slack获取到bot服务

问题描述 投票:1回答:2

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

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

无论如何,我可以获得松弛用户的UID或任何参考ID,因此我可以将其与用户配置文件一起存储在我的用户表中?

所以下次,当用户问候机器人时,机器人可以说“你好,约翰。”而不只是说“你好”。

谢谢!

node.js slack slack-api luis azure-bot-service
2个回答
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。在这种情况下,它在对话框中,但又一次;你会/可能只是在转弯环境中做(使用逻辑来获取,如果没有,则设置)。


0
投票

我通过引用整个会话对象找到了解决方案,该对象具有所有必需的信息。这可能与Dana上面提到的相同,但在调试之后,这个后续操作变得简单而不做任何更改。

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

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

谢谢。

© www.soinside.com 2019 - 2024. All rights reserved.