首页 > 解决方案 > Dialogflow 在三个交互后返回“抱歉,我无能为力”消息

问题描述

这个问题从今天早上(2019 年 6 月 21 日)开始,影响了我们所有的对话流代理。以前它们工作正常,尽管我们在过去一个月中偶尔观察到这种行为,但发现很难重现。

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

我们的 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.)

这与我们一直使用默认的回退意图非常相似,但我们不是。

交互都是由事件触发的意图。

如果我们碰巧触发了一个后备意图或帮助文本,计数器会重置,我们可以继续前进,直到我们下一次点击它。

我们的很多工作流程都涉及超过 2 次交互。所以这是一个很大的问题。任何建议表示赞赏。我花了一两天的时间试图找出一个场景,在这个场景中,我们完全没有运气就不会发生这种情况。

标签: dialogflow-esactions-on-googlegoogle-homedialogflow-es-fulfillment

解决方案


所以,我们已经找出了造成这种情况的原因,并设法解决了这个问题。

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

agent.setFollowupEvent('message');

其中“消息”是与您的意图相关联的事件的名称。

似乎通过将工作流从 dialogFlow 核心手中夺走,我们以某种方式触发它认为它无法匹配任何意图,即使我们的代码有效地告诉它要将对话发送到哪个意图。

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

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

稍后添加 - 来自 Google 的回复

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


推荐阅读