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
....
等等

笨拙但有效。只需要小心地引用 属性 ,就像它在复合实体中定义的那样。