我正在使用Azure LUIS创建一个简单的机器人,这是我的第一个。在做了一些研究后我取得了一些不错的进展,现在也与Slack集成了测试它的渠道。
机器人功能正常,但我希望识别用户。这样我就可以个性化机器人对话,并从他的个人资料表中提取用户特定信息。
无论如何,我可以获得松弛用户的UID或任何参考ID,因此我可以将其与用户配置文件一起存储在我的用户表中?
所以下次,当用户问候机器人时,机器人可以说“你好,约翰。”而不只是说“你好”。
谢谢!
是。您可以使用channelData对象来获取ApiToken
和user
值。例如,在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。在这种情况下,它在对话框中,但又一次;你会/可能只是在转弯环境中做(使用逻辑来获取,如果没有,则设置)。
我通过引用整个会话对象找到了解决方案,该对象具有所有必需的信息。这可能与Dana上面提到的相同,但在调试之后,这个后续操作变得简单而不做任何更改。
var slackID = session.message.address.user.id
通过以上,我能够识别用户。
谢谢。