Dialogflow:根据值和其他条件响应进行响应
Dialogflow: Respond based on values and other conditional responses
我有 $dinetype
从用户那里获得的变量。
但我想根据 $dinetype
变量中设置的值给出响应。除了给出回应,我还需要设置相关的上下文。我如何在 DialogFlow 中执行此操作?
if($Dinetype=='dineout')
ask ('which restaurant would you like to go to?')
set_context ('awaiting-restaurant')
if($Dinetype=='takeaway')
ask ('When would you like to take away?')
set_context ('awaiting-takeaway-time')
它完全可编程吗?或者是否有可能在 UI?
中实现与上述相同的东西
您不能直接在响应部分执行此操作。 Response 部分适用于不需要大量逻辑来处理的相当简单的响应。虽然您可以在响应中使用参数,但您不能根据参数的值给出不同的响应。因此,您可以设置对
之类的响应
I think $Dinetype is great food.
但不是
{{#if $Dinetype == "Thai"}}I think Thai food is too hot{{/if}}
或类似的东西
但是,您可以通过实施 Fulfillment 网络钩子来添加发送条件响应和上下文的代码。虽然您不能将每个 Intent 作为 Intent 编辑器屏幕的一部分执行此操作,但 Fulfillment 屏幕包含一个内置代码编辑器。
Edit: A much easier way has been added to handle this issue directly in Dialogflow
(更新解决方案)后续意图:
创建意图后,您现在可以添加后续意图。
意图 -> 创建意图 >
[响应=提示条件响应]
意图 -> 添加后续意图 -> Custom/Yes/No
然后将训练好评设置为你要有条件回复的匹配实体
老掉牙的解决方案:
Late reply, but maybe someone will find this useful.
If the conditional response only needs to reference a single parameter
value, then I figured out what you can do is utilize the Entity's
"Reference Value" as the response you want to give for a particular
set of Synonyms.
So you'd have an entity that looked like this:
然后,像这样设置您的意图,响应 $Dinetype
:
那么最终的结果将是这样的:
您可以从那里制定您需要的任何后续意图。
缺点是 Dinetype
不能重复使用。但我还是觉得
每次你需要一个简单的时候都写一个 fulfillment webhook
条件响应。
我找到了使用复合实体解决我的类似问题的方法,这对您的代理来说可能会或可能不会过度杀伤力。如果该实体中的同义词匹配,则分配给与(复合)实体关联的参数的值将包含 JSON 结构。
使用“点”符号,您可以将匹配的 sub-entity 的 属性(类似于普通实体的引用值)分配给操作和参数部分中的另一个参数。您可以为每个 sub-entity 设置一个参数,因此,您可以在响应部分评估这些参数以 select 每个响应变体:
$Parameter_A 响应A
$Parameter_B 反响B
....
等等
笨拙但有效。只需要小心地引用 属性 ,就像它在复合实体中定义的那样。
我有 $dinetype
从用户那里获得的变量。
但我想根据 $dinetype
变量中设置的值给出响应。除了给出回应,我还需要设置相关的上下文。我如何在 DialogFlow 中执行此操作?
if($Dinetype=='dineout')
ask ('which restaurant would you like to go to?')
set_context ('awaiting-restaurant')
if($Dinetype=='takeaway')
ask ('When would you like to take away?')
set_context ('awaiting-takeaway-time')
它完全可编程吗?或者是否有可能在 UI?
中实现与上述相同的东西您不能直接在响应部分执行此操作。 Response 部分适用于不需要大量逻辑来处理的相当简单的响应。虽然您可以在响应中使用参数,但您不能根据参数的值给出不同的响应。因此,您可以设置对
之类的响应I think $Dinetype is great food.
但不是
{{#if $Dinetype == "Thai"}}I think Thai food is too hot{{/if}}
或类似的东西
但是,您可以通过实施 Fulfillment 网络钩子来添加发送条件响应和上下文的代码。虽然您不能将每个 Intent 作为 Intent 编辑器屏幕的一部分执行此操作,但 Fulfillment 屏幕包含一个内置代码编辑器。
Edit: A much easier way has been added to handle this issue directly in Dialogflow
(更新解决方案)后续意图:
创建意图后,您现在可以添加后续意图。
意图 -> 创建意图 >
[响应=提示条件响应]
意图 -> 添加后续意图 -> Custom/Yes/No
然后将训练好评设置为你要有条件回复的匹配实体
老掉牙的解决方案:
Late reply, but maybe someone will find this useful.
If the conditional response only needs to reference a single parameter value, then I figured out what you can do is utilize the Entity's "Reference Value" as the response you want to give for a particular set of Synonyms.
So you'd have an entity that looked like this:
然后,像这样设置您的意图,响应
$Dinetype
:那么最终的结果将是这样的:
您可以从那里制定您需要的任何后续意图。
缺点是
Dinetype
不能重复使用。但我还是觉得 每次你需要一个简单的时候都写一个 fulfillment webhook 条件响应。
我找到了使用复合实体解决我的类似问题的方法,这对您的代理来说可能会或可能不会过度杀伤力。如果该实体中的同义词匹配,则分配给与(复合)实体关联的参数的值将包含 JSON 结构。 使用“点”符号,您可以将匹配的 sub-entity 的 属性(类似于普通实体的引用值)分配给操作和参数部分中的另一个参数。您可以为每个 sub-entity 设置一个参数,因此,您可以在响应部分评估这些参数以 select 每个响应变体:
$Parameter_A 响应A
$Parameter_B 反响B
....
等等
笨拙但有效。只需要小心地引用 属性 ,就像它在复合实体中定义的那样。