0

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”,一切都会顺利进行。

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

提前致谢!

4

1 回答 1

1

你有很多问题,所以让我们来看看每个问题。

input.params.original存在吗?

简而言之,是的。您可以查看请求 Intent 对象的文档,您会看到有intent.params.*name*.original. 您的问题似乎表明这也可以。

intent.params.*name*.resolved考虑到类型别名后,还有一个包含值。

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

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

如何搭配

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

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

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

例如,如果您创建一个名为“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']
       }
    ]
  }
}];

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

添加可视化界面

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

于 2021-02-15T02:52:51.253 回答