【问题标题】:Is there a native way to re-handle a response to a prompt?是否有本地方法来重新处理对提示的响应?
【发布时间】:2020-06-23 06:02:14
【问题描述】:

我们的聊天机器人(用 .NET core 3.1 编写)有多个提示,以按钮的形式提供选择。在用户通过聊天发送轮次后(通过单击按钮或键入任何内容),我们隐藏按钮,因为单击它们只会将按钮文本作为轮次发送。然后,我们的提示会获取用户的响应并将其与选择字典进行比较,以产生更适合后端的结果,以在对话步骤中使用。

用户向我们提供了有关我们如何处理他们的反馈。一个经常被要求的功能是向上滚动到上一个提示并对问题给出不同的回答。这是一个例子:

“您想了解更多关于哪种超声波的信息?

  • 定位超声
  • 术语超声
  • 结构超声检查"

用户通常只寻找其中之一,但提示本身会激发好奇心。他们将选择他们最初寻找的选项,然后希望看到其他响应之一。目前,我们的用户必须重新输入触发超声意图的短语,将他们引导到触发提示的超声对话框。理想情况下,他们会向上滚动到提示并单击不同的按钮,可能还有一个中间步骤,即他们在提示的问题上单击“选择不同的选项”按钮。

我们已经简要研究了如何实现此功能,并正在考虑在整个对话中存储提示的选择字典。然后我们会添加很多自定义逻辑来处理话语,可能通过在前端使用特殊标签。或者我们会让中间步骤将对话倒回到提示并从那里处理他们的进一步行动。

在我们继续做任何这些之前,我们对自己说“微软一定已经想到了这一点”,但我们找不到任何关于提示重复使用的文档。

Bot Framework 是否有本地方式允许用户从前端重新激活已在后端处理的提示?

【问题讨论】:

  • 欢迎来到 Stack Overflow。您使用的是什么渠道/客户端?是网络聊天吗?
  • 我们目前正在使用网络聊天频道,但正在寻求更改为 Direct Line。
  • 这不太合理。 Web Chat 是 Direct Line 客户端。您是说要从网络聊天切换到您自己的自定义客户端吗?
  • 我们正在使用网络聊天 v3 客户端并将其更新到 v4。在 Azure Web App Bot 服务中,我们使用网络聊天频道,而在 v4 中,我们将使用 Direct Line 频道。
  • 这里似乎仍然有些混乱。从 Web Chat v3 升级到 Web Chat v4 并不意味着更改为 Direct Line。两个版本的网络聊天都使用 Direct Line 作为他们的频道。在这两种情况下,Direct Line 都是您的渠道。网络聊天可能会出现在 Azure 的频道刀片中,但从技术上讲,它不是频道。 Web Chat v3 和 Web Chat v4 都是 Direct Line 客户端。不过,我不想太偏离你的问题。由于您使用的是 Direct Line 和 Web Chat,因此主要的一点是,如果您需要,您可以对客户端进行一些控制。

标签: .net-core botframework


【解决方案1】:

不,没有本地方法可以按照您的意思重新处理对提示的响应。为了正确design您的机器人,您需要了解有关 Bot 框架的一些事项。

什么是提示?

提示是dialog 的一种类型,可以认为是机器人向用户提问。如果用户的答案第一次可以接受,它可能会在一个回合结束,或者如果机器人没有立即获得它需要的信息,它可能需要多个回合。在选择提示的情况下,只有当用户的回答可以被识别为可用选择之一时,它才会被接受。由于您提到了选择,我假设您使用的是选择提示。

选择提示可以以五种可能的方式呈现其选择,称为列表样式。有两种方法可以将选项显示为按钮,两种方法可以将选项显示为文本,还有一种方法可以完全不显示任何选项。如果您查看enum,您会看到第六个选项:“自动”。这是默认设置,它将根据您的选择和频道的功能选择最佳选项。在您的情况下,它必须将选择呈现为建议的操作。

建议的操作是什么?

建议的操作是当用户单击其中一个按钮时会消失的按钮。与所有 UI 元素一样,它们非常特定于通道,Azure 机器人服务将尝试将它们转换为给定通道的适当格式。例如,在 Facebook Messenger 中,建议的操作将变为“快速回复”。网络聊天是 Bot Framework 的一部分,因此您无需进行任何转换。

您会在docs 中看到建议的操作旨在防止您的机器人不必担心处理旧卡片上的点击:

与显示在丰富卡片中的按钮(即使在被点按后仍对用户保持可见和可访问性)不同,显示在建议操作窗格中的按钮将在用户做出选择后消失。这可以防止用户在对话中点击过时的按钮并简化机器人开发(因为您不需要考虑这种情况)。

听起来您的用户希望能够返回并点击按钮,因此您需要使用卡片而不是建议的操作。

什么是卡片?

目前,Bot Framework 官方支持的cards 大约有九种类型。 Adaptive Cards 非常适合更高级的场景,但由于您只需要几个按钮,因此您可以使用最简单的选项:英雄卡。

您之前可能已经注意到“英雄卡”是列表样式的另一个按钮选项。因此,您只需将提示设置为使用英雄卡片列表样式,您的选择将显示为卡片而不是建议的操作。

这些信息可能足以帮助您解决问题,但我想确保您走在正确的轨道上。我一开始说“不”的原因是因为您不应该尝试将对话倒回到特定的提示。这不是对话框或提示应该如何工作的方式。如果您希望机器人能够在对话框中的任何时候响应这些选择,您需要将这些选择作为中断处理。

什么是中断?

Interruptions 是当机器人以不遵循当前对话流程的方式响应用户话语或操作时。您可以在core bot sample 中查看中断示例。在该示例中,您可以看到仅在对话范围内处理的中断,这使您可以决定何时允许中断。或者,您可以通过将该逻辑置于任何对话框之外来全局处理中断。

您可以设置中断,以便机器人始终在您的所有选择提示中侦听您的所有选择中的确切文本。文本将是一个关键短语,就像示例中的“帮助”或“取消”一样。请注意,如果您走这条路线,用户可能会在发送卡片之前通过键入关键短语来访问该功能。另一种方法是让按钮发送postBack 操作而不是默认的imBack 操作。这将发送用户键入无法模拟的不可见消息,并且您的机器人更容易将其识别为中断。

如果您将按钮作为中断响应,则根本没有提示也是有意义的。当对话框到达开始选择提示的位置时,它可以发送卡片并结束对话框,因为它知道机器人将能够响应用户选择的任何内容。请注意,这意味着您将无法使用选择提示提供的所有选择识别选项,因此用户将无法执行诸如键入数字 2 之类的操作。

【讨论】:

  • 是的,它列出了我们实现此功能的所有选项。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多