Dialogflow es Dialogflow返回一个";对不起,我不能';“不要帮忙”;三次互动后的信息

Dialogflow es Dialogflow返回一个";对不起,我不能';“不要帮忙”;三次互动后的信息,dialogflow-es,actions-on-google,google-home,dialogflow-es-fulfillment,Dialogflow Es,Actions On Google,Google Home,Dialogflow Es Fulfillment,该问题于今天上午(2019年6月21日)开始,影响到我们所有的dialogflow代理。此前,它们一直运行良好,尽管我们在过去一个月偶尔观察到这种行为,但发现很难复制 现在我们可以可靠地复制它,它已经敲打了我们所有的语音工作 我们的webhook返回一段json,如下所示,以触发一个事件,将用户移动到下一个目的: "followupEventInput": { "name": "Textbox", "languageCode": "en-AU" } 问题是,如果我们在初始触发后

该问题于今天上午(2019年6月21日)开始,影响到我们所有的dialogflow代理。此前,它们一直运行良好,尽管我们在过去一个月偶尔观察到这种行为,但发现很难复制

现在我们可以可靠地复制它,它已经敲打了我们所有的语音工作

我们的webhook返回一段json,如下所示,以触发一个事件,将用户移动到下一个目的:

"followupEventInput": {
    "name": "Textbox",
    "languageCode": "en-AU"
}
问题是,如果我们在初始触发后使用事件超过两次,用户只会收到一条消息“对不起,我帮不了你”,代理就会被强制关闭

Example conversation:
"Talk to Foobar Toys"
  "Welcome to Foobar Toys. How can I help you?" (Start app)
"I'd like to know about Lego"
  "Do you want to know about Technic, or Star Wars lego?" (Invocation started)
"Technic"
  "Are you interested in sets or minifigs?" (Interaction 1)
"sets"
  "What kind of sets?" (Interaction 2)
"cars"
  "Sorry, I can't help." (Failure after interaction 2.)
这与我们一直在使用默认的回退意图非常相似,但事实并非如此

这些互动都是由事件触发的意图

如果我们碰巧触发了回退意图或帮助文本,计数器将重置,我们可以继续运行,直到下一次遇到它为止


我们的许多工作流程涉及两种以上的交互。所以这是一个相当大的问题。谢谢你的建议。我花了一两天的时间试图找出一个我们根本没有运气的情况下不会发生这种情况的情景。

因此,我们已经找出了造成这种情况的原因,并设法解决了它

我们的代理由几个意图组成,每个意图都有一个称为“input”的必需输入参数。通过我们的webhook触发意图(有时)是通过使用后续事件完成的。在FireBase中,这是通过使用以下语句实现的:

agent.setFollowupEvent('message');
其中“消息”是与您的意图相关联的事件的名称

看起来,通过将工作流从dialogFlow核心中解放出来,我们不知何故触发了它的想法,认为它无法匹配任何意图,即使我们的代码实际上告诉它要将对话发送到哪个意图

我们现在的解决方法是在sys.any上有一个匹配的单一意图,而不再传回后续事件

如果有人感兴趣,我有一个非常简单的工作流+firebase来重现这个问题

稍后添加-来自谷歌的回复


“问题的原因似乎是使用@sys.any作为一个实体填充插槽。请不要在插槽填充时使用@sys.any,因为这不是使用@sys.any的标准做法。”

因此,我们已经找到了导致这一问题的原因,并设法解决了这一问题

我们的代理由几个意图组成,每个意图都有一个称为“input”的必需输入参数。通过我们的webhook触发意图(有时)是通过使用后续事件完成的。在FireBase中,这是通过使用以下语句实现的:

agent.setFollowupEvent('message');
其中“消息”是与您的意图相关联的事件的名称

看起来,通过将工作流从dialogFlow核心中解放出来,我们不知何故触发了它的想法,认为它无法匹配任何意图,即使我们的代码实际上告诉它要将对话发送到哪个意图

我们现在的解决方法是在sys.any上有一个匹配的单一意图,而不再传回后续事件

如果有人感兴趣,我有一个非常简单的工作流+firebase来重现这个问题

稍后添加-来自谷歌的回复


“问题的原因似乎是使用@sys.any作为实体填充插槽。请不要在插槽填充时使用@sys.any,因为这不是使用@sys.any的标准做法。”

这是我的设置和我的黑客补丁:

intent1,由事件“eventIntent1”触发,参数“value”类型为@sys.number。Intent获取一个数字,并将其存储在对话上下文中。它还没有四个号码,它通过followup(“eventIntent1”)调用自己来获取另一个号码

想要的对话:

assistant: "give me a number"
user: "1"
assistant: "give me a number"
user: "2"
assistant: "give me a number"
user: "3"
assistant: "give me a number"
user: "4"
assistant: "You gave me 1 2 3 4"
assistant: "give me a number"
user: "1"
assistant: "give me a number"
user: "2"
assistant: "give me a number"
user: "3"
assistant: "Sorry, I can't help"
实际对话:

assistant: "give me a number"
user: "1"
assistant: "give me a number"
user: "2"
assistant: "give me a number"
user: "3"
assistant: "give me a number"
user: "4"
assistant: "You gave me 1 2 3 4"
assistant: "give me a number"
user: "1"
assistant: "give me a number"
user: "2"
assistant: "give me a number"
user: "3"
assistant: "Sorry, I can't help"
修正:


修复方法是设置另一个由事件“eventIntent2”触发的名为“intent2”的意图。它们的插槽填充是相同的(上面的逻辑),除了intent1为后续调用“eventIntent2”,而“intent2”为后续调用“eventIntent1”。这会欺骗它,使其在一行中不具有称为times的相同意图。它允许我记录无限数量的值。

这是我的设置和我的黑客补丁:

intent1,由事件“eventIntent1”触发,参数“value”类型为@sys.number。Intent获取一个数字,并将其存储在对话上下文中。它还没有四个号码,它通过followup(“eventIntent1”)调用自己来获取另一个号码

想要的对话:

assistant: "give me a number"
user: "1"
assistant: "give me a number"
user: "2"
assistant: "give me a number"
user: "3"
assistant: "give me a number"
user: "4"
assistant: "You gave me 1 2 3 4"
assistant: "give me a number"
user: "1"
assistant: "give me a number"
user: "2"
assistant: "give me a number"
user: "3"
assistant: "Sorry, I can't help"
实际对话:

assistant: "give me a number"
user: "1"
assistant: "give me a number"
user: "2"
assistant: "give me a number"
user: "3"
assistant: "give me a number"
user: "4"
assistant: "You gave me 1 2 3 4"
assistant: "give me a number"
user: "1"
assistant: "give me a number"
user: "2"
assistant: "give me a number"
user: "3"
assistant: "Sorry, I can't help"
修正:


修复方法是设置另一个由事件“eventIntent2”触发的名为“intent2”的意图。它们的插槽填充是相同的(上面的逻辑),除了intent1为后续调用“eventIntent2”,而“intent2”为后续调用“eventIntent1”。这会欺骗它,使其在一行中不具有称为times的相同意图。它允许我记录无限数量的值。

在Dialogflow控制台中,您是否能够验证您是否达到了回退目的?@NickFelker否我们没有达到回退目的。我们已经找出了问题所在,并制定了解决办法。我将适时在此处发布更新。在Dialogflow控制台中,您是否能够验证您是否达到了回退目的?@NickFelker不,我们没有达到回退目的。我们已经找出了问题所在,并制定了解决办法。我将在适当的时候在这里发布更新。