【问题标题】:MS Bot framework, associate user id from auth0 with conversation stateMS Bot 框架,将来自 auth0 的用户 ID 与对话状态相关联
【发布时间】:2019-04-18 00:28:41
【问题描述】:

我希望将 auth0 id 与 MS Bot 中的对话状态相关联,但我不知道如何执行此操作。这甚至可能吗?

const userState = new UserState(storage);
const conversationState = new ConversationState(storage);
const botInstance = new bot(conversationState, userState);

旅程应该是这样的:

  • 用户到达机器人,受到欢迎,并被提示注册
  • 一旦用户注册,他们就会被重定向回来,对话步骤就是他们离开的地方
  • 如果用户在任何时候离开对话,然后返回,我们希望他们继续离开的地方

理想的方式是将对话 ID 与用户以及 auth0 用户 ID 相关联。

【问题讨论】:

  • 您能否提供更多详细信息来说明您要完成的工作?您是否只想存储 id 并在对话期间在整个机器人中使用它?您是否还需要检索用户 ID?
  • 感谢您查看此内容。我们需要某种方式来存储用户的对话 ID,以及用户的 auth0 唯一 ID。我在上面的问题中添加了更多信息。谢谢!

标签: node.js botframework


【解决方案1】:

当您使用 Auth0 时,我假设您使用 Web Chat(它使用 Direct Line 频道)来显示聊天窗口,因此此答案将围绕该问题展开。如果您使用其他频道,请告诉我,我会更新答案。

将 Auth0 用户 ID 发送到机器人,由您的站点处理身份验证

网络聊天 REAMDE 显示您可以为机器人 specify a userId。只需将其设置为 Auth0 用户 ID。

让 Bot 处理身份验证

没有明确显示如何使用 Auth0 进行身份验证的教程/示例,但由于 Auth0 是 OAuth2 提供程序,您应该能够做到这一点。这些链接应该会有所帮助:

对话 ID

大多数情况下,Conversation ID 将是相同的,只要 userId 相同并且用户在很长一段时间内都没有与机器人处于非活动状态。每个频道的管理方式不同。

Conversation messages are only stored for 24 hours in DirectLine. Conversation metadata (such as conversation id and couple other housekeeping data) are removed after a period of inactivity (between 15 to 20 days)

一般来说,只要用户在 24 小时内恢复对话并且用户 ID 保持不变,机器人就会保持他们的对话状态。

您可以使用几种不同的方法来解决此问题,并确保用户可以随时恢复对话(这两种方法都假定您传入相同的 userId)。

  1. Use TranscriptLoggerMiddleware to store the whole conversation

  2. Save user data 并在开始新对话时检查 userId 的数据是否已存在。如果是这样,请跳过不必要的对话框并以编程方式尝试恢复。 Basic Bot(即将成为Core Bot)在其对话框中执行此操作,如果用户数据已经存在,则使用context.next() 跳过对话框步骤。我推荐这种方法,因为如果用户几天没有与机器人聊天,他们可能会在某种程度上“重新开始”,而机器人也不必再次获取他们的所有数据。

【讨论】:

  • 非常感谢您的全面回答!我会消化并申请!
猜你喜欢
  • 2017-12-07
  • 1970-01-01
  • 2017-12-17
  • 1970-01-01
  • 2016-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-27
相关资源
最近更新 更多