在测验中,我怎样才能让用户使用三个响应词之一而不是 "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 的视觉别名。但是,当您收到回复时,就好像他们说的是条目名称一样。
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 的视觉别名。但是,当您收到回复时,就好像他们说的是条目名称一样。