Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dialogflow es 如何使用DialogFlow触发意图?_Dialogflow Es - Fatal编程技术网

Dialogflow es 如何使用DialogFlow触发意图?

Dialogflow es 如何使用DialogFlow触发意图?,dialogflow-es,Dialogflow Es,我与dialogflow进行了一次对话,选择了最喜欢的饮料类型,然后根据饮料的类别,会有后续问题(即后续意向) 在“意图”选项卡下,我有以下意图: 默认欢迎意图 喜爱的饮料 咖啡意向 跟进 软饮料意向 跟进 果汁原汁 跟进 我在“最爱的饮料”中使用了培训短语,并询问: “你最喜欢的饮料是什么?” 并将响应存储在实体@drink中 但我不知道如何根据用户的反应触发“软饮料”、“果汁”或“咖啡”的意图。如果我在写代码,我会使用switch语句或If/else,但这个问题在这里不适用

我与dialogflow进行了一次对话,选择了最喜欢的饮料类型,然后根据饮料的类别,会有后续问题(即后续意向)

在“意图”选项卡下,我有以下意图:

  • 默认欢迎意图
  • 喜爱的饮料
  • 咖啡意向
    • 跟进
  • 软饮料意向
    • 跟进
  • 果汁原汁
    • 跟进
我在“最爱的饮料”中使用了培训短语,并询问:

“你最喜欢的饮料是什么?”

并将响应存储在实体@drink中

但我不知道如何根据用户的反应触发“软饮料”、“果汁”或“咖啡”的意图。如果我在写代码,我会使用switch语句或If/else,但这个问题在这里不适用

我不确定我是否必须使用fulfillment内联编辑器,或者我可以在Intent UI中这样做


一般来说,谢谢你——把意图看作是捕捉用户可能说的话。虽然意图也有回复,但这不是它们的主要目的

根据你到底想做什么,有几种方法。这三种方法都需要实现代码,您可以使用内置编辑器来实现,或者(更好)在您的控制下使用webhook

如果您想使用意向确定如何回复

这并不是最好的主意,但它是可能的。在您的实现代码中,您将有一个switch语句,该语句针对用户选择的参数。基于此,您将从您的实现中触发一个事件。您的其他意图将使用可能的事件填充事件部分,系统将选择触发哪个事件并用于实现/响应

对于你想要的东西来说,这可能有点困难

根据评论中的问题进行更新以澄清。直接发送事件会触发不同的意图。有时候这是你想要的,但这有点特殊。大多数情况下,您希望使用以下方法之一。特别是,您应该记住,意图主要是用来表示用户试图做什么(他们“打算”做什么),而这主要是由他们所说的来表示的。意图可以很好地捕捉人们复杂的谈话方式,而不是强迫他们进入电话树式的“对话”

如果您只想以不同方式回复每个可能的用户响应

您可以使用fulfillment webhook代码来确定应该向用户发送什么响应。您不会指明正在使用的库,但通常会编写代码,根据所选饮料类型确定应向用户发送的消息,并将其作为语音和/或显示文本包含在列表中

在这种情况下,你不会使用另一种特定于饮料的意图。不需要它们。除非

您希望以不同的方式回复每个用户的响应,后续对话可能会有所不同

记住——意图确实最适合于指定您期望用户说什么。不是你期望的回答。因此,根据他们是否选择咖啡(你可能会问他们想要多少糖)或果汁(你可能会问他们是否想要吸管),你可能会有不同的对话,这是合理的

在这种情况下,您仍然会像前一种情况一样(使用您的履行在回复中包含一条定制的消息,可能会提示他们提供该信息),并在回复中包含一条指示他们选择的信息。您应该将此作为响应的一部分,而不是将其设置为意图,因为您希望为每种饮料类型命名不同的名称

然后,您可以创建特定于每种饮料类型的意图,以及您今天对用户的期望。对于特定于咖啡的内容,您可以将输入上下文设置为要求已设置咖啡上下文。soda上下文(如果指定了soda)等等

更新,因为你在评论中表示这听起来像是你感兴趣的途径

在这个场景中,您将按照您描述的方式(几乎):

  • 使用如下代码获取
    drink
    参数的值

    const drink = request.body.queryResult.parameters.drink;
    
  • 在此基础上进行切换,并在每个案例的主体中设置我们将回答的内容以及应该记住的上下文。类似这样的伪代码,也许:

    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
    
  • 然后,你会有基于两件事的组合触发的意图:

  • 上下文是什么

  • 用户所说的

  • 例如,您需要一个上下文(我们称之为“coffee.black”),如果
    order\u coffee
    上下文处于活动状态,并且用户用“No”或“Just black”或其他有效组合回答您的问题,则会触发该上下文

    但是如果
    order\u juice
    上下文处于活动状态,并且用户回答“否”,那么您可能需要不同的上下文(比如“juice.nostraw”)

    如果用户在
    order\u soda
    上下文处于活动状态时说“No”,那就没有多大意义了,因此您希望尝试将他们引导回手头的主题

    记住,目的是为了用户所说的。不是因为你的语音代理在说什么。你的代理通常不会“触发”一个意图——用户会根据他们说的话来触发它

    在我给出的示例中,可能还有其他意图对这些上下文中的每一个都有效。例如,您可能有一个“coffee.sugar”意图,该意图对
    order\u coffee
    上下文有效,并回答他们说“是”。还有一个他们可能会说“只是奶油”。他们可能还会说很多其他的话,但对你的经纪人来说,他们给你的指示与点咖啡有关,这一点很重要

    至于