微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在测验中,我如何代替“说 A、B 或 C”让用户使用三个响应词之一?

如何解决在测验中,我如何代替“说 A、B 或 C”让用户使用三个响应词之一?

VIA 操作控制台,而不是 Dialogflow!
几天后,我终于完成了一个像这样工作的测验。
Google Mini 说:“法国的首都是哪里?A)罗马,B)柏林还是 C)巴黎?”

在我的场景中,我有两个条件。

scene.slots.status == "FINAL" && intent.params.choosenABC.original == session.params.antwort

AND

!(scene.slots.status == "FINAL" && intent.params.choosenABC.original == session.params.antwort)

所以在这里,这些条件检查用户是否说出了来自会话参数“antwort”的正确字母。 只要用户说“A”、“B”或“C”,一切都会顺利进行。

但是我如何将条件与用户所说的进行比较?
在上面的示例中,我希望用户能够说出“罗马”或“柏林”或“巴黎”以及检查这些条目的条件。

提前致谢!

解决方法

里面有很多问题,让我们来看看每个问题。

input.params.original 是否存在?

简而言之,是的。您可以看到 documentation of the request Intent object 并且您会看到有 intent.params.*name*.original。您的问题似乎表明这也适用。

还有 intent.params.*name*.resolved 包含您考虑类型别名后的值。

我在 Dialogflow 论坛上发现了一些变量...

这些只有在您使用 Dialogflow 时才有效,而在您查看 Action Builder 时没有任何意义。

如何匹配

您没有显示 session.params.antwort 的可能值或您如何设置 antwort。但听起来你在处理程序中设置它是有道理的。因此,您可以做的一件事是将 antwort 设置为城市名称(或任何完整的单词答案)并将 letter 设置为带有有效回复的字母。然后针对 original 测试两者以查看是否匹配。

但是,说实话,这开始变得有些混乱。

您也没有说明 Intent 是如何设置的,或者您是否使用实体类型来捕获答案。然而,处理这个问题的一个好方法是创建一个可以表示答案的类型,并使用 runtime type override 来设置该值的可能值和别名。然后,您可以准确控制要用于比较的有效值是什么。

例如,如果您创建一个名为“Answer”的类型,那么在您提出问题时,您可以使用类似的内容为此设置可能的值

conv.session.typeOverrides = [{
    name: 'Answer',mode: 'TYPE_REPLACE',synonym: {
      entries: [
        {
          name: 'A',synonyms: ['A','Rome']
        },{
          name: 'B',synonyms: ['B','Berlin']
       },{
          name: 'C',synonyms: ['C','Paris']
       }
    ]
  }
}];

如果您有一个带有 Answer 类型参数且名称为 answer 的 Intent,那么您可以测试 intent.parameter.answer.resolved 是否包含预期的字母。

添加可视化界面

如果您还决定添加对 visual selection response(例如列表)的支持,则使用运行时类型覆盖特别有用。视觉响应建立在运行时类型覆盖的基础上,以添加用户可以在适当设备上选择的视觉别名。但是,当您收到回复时,它会被视为他们说出了条目名称。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。