【问题标题】:Dialogflow not detecting "Exit conversation" intentDialogflow 未检测到“退出对话”意图
【发布时间】:2021-04-04 02:29:10
【问题描述】:

我正在尝试覆盖 Dialogflow provides 的不可删除“退出意图”的默认答案。此意图在我的代理人的意图列表中不可见,但根据文档和经验证据,它就在那里。问题是:

如何覆盖其默认答案?

我的退出意图称为“退出对话”。

  1. 我尝试使用文档提供的事件“actions_intent_CANCEL”,但它似乎不起作用。 Image. Intent name and Events.
  2. 我已在 Dialogflow 控制台中将意图设置为“对话结束”。 Image. Responses.
  3. 我已为该意图启用 webhook 调用,并将 webhook 连接到一个函数,该函数使用我在 Intent 控制台的“响应”字段中设置的相同答案关闭对话。 Image. Function

其他图片:

Image. Training phrases. It's in spanish :) but it basically says "cancel", "i dont want to continue", etc.

Image. Actions and parameters.

问题是,它并不总是能识别我的意图。根据当前的流程情况,它有时会进入默认意图,有时会进入我的意图。当我键入“取消”/“取消”时,它并不总是检测到我的“退出对话”意图,它会停留在当前意图中并使用默认退出 Dialogflow 意图关闭对话:“好的,已取消。”或类似的东西。 虽然它有时会得到我的答案,并给出我的答案,但它似乎以一种不可预测的方式这样做。

我该怎么办?

【问题讨论】:

    标签: javascript node.js dialogflow-es actions-on-google


    【解决方案1】:

    Dialogflow 是否有默认的退出意图?

    不一定。 在使用 Google 上的 Actions 时有一个默认的 Cancel Intent(这是同一件事),但这不会在 Dialogflow 中作为 Intent 显示。它显示为一个事件。

    您引用的页面上的表格显示了 Intent 名称,但这仅在您直接使用 Actions on Google v2 时可用。第三列显示它在 Dialogflow 中显示的事件名称。

    那为什么我说“退出”或“取消”似乎退出了?

    默认情况下,这是由助手在进入 Dialogflow 之前处理的。所以没有处理它的“隐藏”Dialogflow Intent。

    如果需要,您需要专门创建自己的 Intent 来处理它。

    这听起来像是在分裂头发。但是好的,怎么做?

    您可以在 Dialogflow 中opt into cancel events

    1. 创建新意图。 (您可以随意命名,但通常使用“End Conversation”或“quit.event”之类的名称。)
    2. 将事件字段设置为“actions_intent_CANCEL”。
    3. 然后您可以设置响应、设置 webhook 等,就像对其他事件一样。您可能还应该设置“结束对话”复选框,但如果您不这样做,它无论如何都会结束。

    但我做到了!为什么它只是有时有效?

    您的描述表明您在“退出对话”意图中包含了训练短语。

    对于 Dialogflow 中的任何 Intent,您应该提供任一个训练短语一个事件,但不能同时提供两者。如果同时提供两者,您可能会混淆 Dialogflow。

    那么如何添加应该用于退出的其他短语?

    第二个意图与其他训练短语而不是事件。我通常将其称为“退出”,因此它位于另一个 Intent 附近的列表中。

    所以我需要两个 Intent?我如何在我的代码中处理它?这是否意味着我需要两倍的代码?

    请记住,意图代表用户所说或所做的,而不是您如何处理它。

    我通常在 webhook 中处理所有内容,并将 Action 字符串设置为相同的内容。我使用的 webhook 库 multivocal 可以根据该 Action 字符串确定如何处理事情。 (其他库不使用此字段,如果您的库不使用,则无需设置。)

    如果您正在为您的 webhook 使用 Dialogflow 库(看起来确实如此),您可以让两个 Intent 名称调用相同的处理函数。它可能看起来像这样:

    function exitConversation( agent ){
      console.log( "Cancelled" );
      agent.end( "Goodbye" );
    }
    let intentMap = new Map();
    intentMap.set( "quit.event", exitConversation );
    intentMap.set( "quit", exitConversation );
    

    【讨论】:

    • 首先,谢谢。其次,我用训练短语制作了第二个意图,并将训练短语从填充了事件字段的意图中取出。但我不明白您所说的“我通常在 webhook 中处理所有内容并将操作字符串设置为两者的相同内容”是什么意思。我是否必须在 Actions 字段中填写一些内容?在这两种意图中,该字段都是空的。事情不正常,这可能是原因。
    • 只有当你的图书馆使用它时,关于“action”字段的评论才有意义。默认的 Dialogflow 库没有。如果您使用 Dialogflow 中的库,则不需要设置它。
    • 如果您仍然遇到问题,更新您的原始问题以显示包含 Intent 的示例对话可能会很有用,因为您现在已配置它们并说明它不起作用,以及任何日志可能表明它正在在做什么。
    猜你喜欢
    • 2020-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-17
    • 1970-01-01
    • 1970-01-01
    • 2019-10-05
    相关资源
    最近更新 更多