在测验中,我怎样才能让用户使用三个响应词之一而不是 "Say A, B or C"?

In a Quiz, how can i instead of "Say A, B or C" let the user use one of the three response words?

VIA Actions Console,不是 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']
       }
    ]
  }
}];

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

添加可视化界面

如果您还决定添加对 visual selection response(例如列表)的支持,则使用运行时类型覆盖特别有用。视觉响应建立在运行时类型覆盖之上,以添加用户可以在适当设备上 select 的视觉别名。但是,当您收到回复时,就好像他们说的是条目名称一样。