我与 dialogflow 进行对话以选择最喜欢的饮料类型,然后根据饮料的类别有跟进问题(即跟进意图)。
在意图选项卡下,我有以下意图:
我使用最喜欢的饮料意图中的训练短语并询问:
“你最喜欢的饮料是什么?”
并将响应存储在实体@drink 中。
但我不知道如何根据用户的反应触发“软饮料”、“果汁”或“咖啡”意图。如果我正在编写代码,我会使用 switch 语句或 if/else,但该概率不适用于此处。
我不确定我是否必须使用执行内联编辑器,或者我可以在 Intent UI 中执行此操作。
谢谢
一般来说 - 将意图视为捕获用户可能说的话。尽管 Intent 也有回复,但这不是它们的主要目的。
有几种方法,具体取决于您要尝试做什么。他们三个都需要执行代码,您可以使用内置编辑器来完成,或者(更好)使用更受您控制的 webhook
如果要使用 Intents 来确定如何回复
这不是最好的主意,但它是可能的。在您的执行代码中,您将有一个针对用户选择的参数的 switch 语句。基于此,您将从您的履行中触发后续事件。您的其他 Intent 将在 Event 部分填充可能的事件,系统将选择要触发的事件并用于实现/响应。
这可能是你想要的东西。
更新以根据评论中的问题进行澄清。发送事件直接触发不同的 Intent。有时这就是您想要的,但这有点特殊。大多数情况下,您想使用以下方法之一。特别是,您应该记住,意图主要是为了表示用户正在尝试做什么(他们“打算”做什么),而这主要是由他们所说的内容来表示的。意图可以很好地捕捉人们谈话的复杂方式,而不是强迫他们进入类似电话树的“对话”。
如果您只想以不同的方式回复每个可能的用户响应
您可以使用fulfillment webhook 代码来确定应该向用户发送什么响应。您没有指明您使用的是哪个库,但通常您会编写代码来根据所选的饮料类型确定应向用户发送什么消息,并将其作为语音和/或显示文本包含在回应。
在这些情况下,您不会使用其他特定的饮料 Intent。不需要他们。除非...
你想以不同的方式回复给每个用户的响应,并在后续的谈话可能会有所不同
请记住 - 意图非常适合指定您期望用户说的话。不是您期望回复的内容。因此,根据他们是选择咖啡(您可能会问他们想要多少糖)或果汁(您可能会问他们是否想要吸管),您可以进行不同的对话是合理的。
在这种情况下,您仍然会像在前一种情况下一样(使用您的履行在您的回复中包含定制的消息,可能会提示他们提供该信息)并在回复中包含一个输出上下文,指示他们的选择是什么。您应该将其作为响应的一部分执行,而不是在 Intent 中设置它,因为您需要为每种饮料类型命名不同的名称。
然后,您可以根据您今天对用户的期望,创建特定于每种饮料类型的 Intent。对于那些特定于 Coffee 的内容,您可以将 Input Context 设置为要求设置 coffee 上下文。如果他们指定了苏打水,则为苏打水上下文,依此类推。
更新,因为您在评论中表示这听起来像是您感兴趣的途径。
在这种情况下,您将按照您的描述(几乎)进行操作:
drink使用类似的代码获取参数的值
const drink = request.body.queryResult.parameters.drink;
Run Code Online (Sandbox Code Playgroud)基于此进行切换,并在每个案例的正文中设置我们将回复的内容以及我们应该记住的上下文。像这样的伪代码,也许:
switch( drink ){
case 'coffee':
context = 'order_coffee';
msg = 'Do you want sugar with that?';
break;
case 'soda':
context = 'order_soda';
msg = 'Do you want a bottle or can?';
break;
case 'juice':
context = 'order_juice';
msg = 'Would you like a straw?';
break;
}
// Format JSON setting the message and context
Run Code Online (Sandbox Code Playgroud)然后,您将拥有基于两件事的组合触发的意图:
上下文是什么
用户所说的
例如,您需要一个上下文(我们称之为“coffee.black”),如果order_coffee上下文处于活动状态并且用户用“No”或“Just black”或其他有效组合回答您的问题,则会触发该上下文。
但是,如果order_juice上下文处于活动状态并且用户回答“否” ,则您需要不同的上下文(例如“juice.nostraw”)。
如果用户在order_soda上下文处于活动状态时说“不”,那根本没有多大意义,因此您需要尝试将他们引回到手头的主题。
请记住,意图是针对用户所说的。不是因为您的语音代理所说的话。您的代理通常不会“触发”意图 - 用户根据他们所说的内容触发它。
在我给出的示例中,可能还有其他对这些上下文有效的 Intent。例如,您可能有一个对order_coffee上下文有效的“coffee.sugar”意图,并回应他们说“是”。另一个他们可能会说“只是奶油”。他们可能还会说很多其他事情,但对您的代理人来说,他们给您的指示与订购咖啡有关,这一点很重要。
至于你原来的问题...
(为了回答您原来的、现在已编辑的问题:是的,您可以从您的实现中创建意图。但是,您几乎肯定不想这样做。)
| 归档时间: |
|
| 查看次数: |
4935 次 |
| 最近记录: |