首页 文章

如何使用DialogFlow触发意图?

提问于
浏览
1

我与对话框流程进行了对话,以选择喜欢的饮料类型,然后根据饮品的类别,有后续问题(即跟进意图) .

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

  • 默认欢迎意图

  • 最喜欢的饮料意图

  • 咖啡意图

  • 跟进

  • 软饮料意图

  • 跟进

  • 果汁意图

  • 跟进

我在Favorite Drink Intent中使用训练短语并询问:

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

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

但我不知道如何触发意图“软饮料”,“果汁”或“咖啡”意图取决于用户的反应 . 如果我正在编写代码,我会使用switch语句或if / else但是这个概率不适用于此处 .

我不确定是否必须使用实现内联编辑器,或者我可以在Intent UI中执行此操作 .

谢谢

1 回答

  • 1

    通常 - 将Intent视为捕获用户可能会说的内容 . 虽然Intents也有回复,但这不是他们的主要目的 .

    根据您正在尝试做的事情,有一些方法 . 所有这三个都需要履行代码,您可以使用内置编辑器执行,或者(更好)使用更多在您控制下的webhook

    If you want to use Intents to determine how to reply

    这不是_1034155的选择 . 基于此,您将从您的履行中触发followup event . 您的其他意图将使用可能的事件填充事件部分,系统将选择触发哪一个并用于实现/响应 .

    这可能是你想要的东西的一点点 .

    根据评论中的问题进行更新以澄清 . 直接发送事件会触发不同的Intent . 有时候这就是你想要的,但它有点特殊 . 大多数时候你想使用下面的方法之一 . 特别是,你应该记住,Intents主要是为了表示用户正在尝试做什么(他们要做什么),这主要是由他们所说的代表 . 意图很好地捕捉人们谈话的复杂方式,而不是强迫他们进入电话树状的"conversation" .

    If you just want to reply to each possible user response differently

    您可以使用履行webhook代码来确定应将哪些响应发送给用户 . 你没有使用,但通常你会编写代码来确定应该根据所选的饮品类型向用户发送什么消息,并将其作为语音和/或显示文本包含在_1034161中 .

    在这些情况下,你不会使用另一种,特定饮料,意图 . 没有必要 . 除非...

    You want to reply to each user response differently, and the followup conversation might be different

    记住 - 意图非常适合指定用户所期望的内容 . 不是你期望回复的 . 因此,根据他们选择咖啡(您可能会询问他们想要多少糖)或果汁(您可能会问他们是否需要吸管),您可能会有不同的对话 .

    在这种情况下,您仍然可以像以前的情况一样(使用您的履行在您的回复中包含定制的消息,可能提示他们获取该信息)并在回复中包含Output Context,表明他们的选择 . 您应该将此作为响应的一部分,而不是在Intent中设置,因为您需要为每种饮料类型命名不同 .

    然后,您可以根据您今天的用户创建特定于每种饮料类型的Intent . 对于特定于Coffee的那些,您可以将输入上下文设置为要求已设置咖啡上下文 . 苏打水的情况,如果他们指定苏打水,等等 .

    更新,因为您在评论中指出这听起来像您感兴趣的大道 .

    在这种情况下,你会按照你所描述的那样(差不多):

    • 使用类似的代码获取 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
    
    • 然后你会根据两件事的组合触发Intents:

    • 上下文是什么

    • 用户说了什么

    例如,如果 order_coffee 上下文处于活动状态且用户使用"No"或"Just black"或其他有效组合回答了您的问题,您将需要一个上下文(让我们称之为"coffee.black") .

    但是如果 order_juice 上下文处于活动状态并且用户回复"No",则您需要不同的上下文(例如,"juice.nostraw") .

    如果用户在 order_soda 上下文处于活动状态时说"No",那么根本没有多大意义,所以你想尝试将它们引回到手头的主题 .

    请记住,意图是用户所说的 . 不是你的配音代理所说的 . 您的代理通常不会_T34176_意图 - 用户根据他们所说的内容触发它 .

    在我给出的示例中,可能还有其他Intent对每个Intent都有效那些背景 . 例如,您可能拥有一个对 order_coffee 上下文有效的"coffee.sugar" Intent,并响应它们说"Yes" . 另一个他们可能会说"Just cream" . 他们可能会说很多其他的事情,但是对于你的经纪人而言,他们给你的指示与订购咖啡有关 .

    As for your original question...

    (要回答您原来的,现在已编辑的问题:是的,您可以在履行中创建意图 . 但是,您几乎肯定不想这样做 . )

相关问题