我正在使用Azure LUIS创建一个简单的机器人,这是我的第一个机器人。经过研究后,我取得了不错的进步,现在还与Slack集成在一起作为测试它的渠道。
该bot功能正常运行,但我希望识别用户。这样我就可以个性化机器人对话,还可以从他的个人资料表中提取用户特定的信息。
无论如何,我是否可以获得闲置用户的UID或任何参考ID,以便将其与用户个人资料一起存储在我的用户表中?
因此,下一次,当用户向该机器人打招呼时,该机器人可以说“你好, John ”。而不是只说“你好”。
谢谢!
答案 0 :(得分:3)
是的。您可以使用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中正在检索它。在这种情况下,它在对话框中,但再次出现。您将/可能只是在转弯上下文中进行操作(使用逻辑获取,如果没有,则进行设置)。
答案 1 :(得分:0)
我找到了解决方案,方法是对整个会话对象进行调试,该对象具有所有必需的信息。这可能与上面的Dana所提到的相同,但是在调试之后,这种修改变得简单而无需进行任何更改。
var slackID = session.message.address.user.id
通过上面的操作,我可以识别用户。
谢谢。