谷歌上的DialogFlow操作:跟进如何将expectUserInput设置为false



当我想回到我的"欢迎";事件,助理要求我";尝试再次赋予品牌";而不是去参加活动。在我再次给出这个品牌后,它切换到了欢迎的意图。

我想我需要将expectUserInput设置为false,但我似乎找不到可以在哪里设置此属性。在响应选项卡下的模拟器中,可以找到设置为trueexpectUserInput。但我不想这样,因为这是一个不必要和令人讨厌的步骤。我试过设置conv.expectUserInput = false;,但没有成功。

app.intent("PickBrand", (conv, parameters) => {
if (isAskedToStop(parameters.StopSigns)) {
conv.followup("welcome");
} else {
item.brand = parameters.Brands;
conv.ask(
`<speak>Which appliance do you need from ${item.brand}?</speak>`
);
}
});
const isAskedToStop = (userInput) => {
if (userInput.includes("stop") || userInput.includes("back") || userInput.includes("break") || userInput.includes("begin")) return true;
}

响应选项卡中的ExpectUserInput

我认为您的方法存在许多问题,可能会给您带来问题。

首先,请记住,Intent代表用户所说的而不是您试图做的事情。Intent不是一个函数。因此,说你"想回到欢迎意图"是不清楚的——欢迎意图是一个表明用户已经开始你的操作的事件。你如何回应取决于你。

类似地,如何对用户所做的任何事情做出响应取决于您。如果用户表示他们想重新开始(以某种方式(,您可以再次询问最初的问题作为回应。

通常,这是通过一个捕获短语的Intent来完成的,例如"我想重新开始"或"让我们重新开始"。这导致了您尝试执行的第二个问题——在Intent Handler中解析用户的文本。

你没有展示你在"选择品牌"意图中使用的短语,但它们听起来相当宽泛。通常情况下,我预计PickBrand意向会由以下短语触发:

  • 品牌名称听起来不错
  • 让我们使用品牌名称
  • 品牌名称

如果您希望用户进一步询问有关品牌的问题,您可能会有不同的意向捕获短语,如

  • 这与
  • 价格是多少

或者你可以把它们分成更多不同的意愿。不管怎样,你可能会有一个完全不同的意图,比如

  • 我们可以重新开始吗
  • 现在让我看看设备类型
  • 其他的呢

试图通过在代码中的短语中搜索单词来捕捉这些信息可能会导致许多问题-最好让Dialogflow等自然语言处理系统来处理它们,并将它们归结为Intent。

当然,一旦你得到了意向,你就可以随心所欲地处理它们。如果他们要求重新开始——你可能希望确认这一点,或者你可能希望通过清除他们之前看到的所有状态来重新开始。(你可能希望保存它,以防他们说"这与其他设备类型相比如何?"之类的话。(但这一切都取决于你。

最新更新