Dialogflow es 输入无效后重新提示用户

Dialogflow es 输入无效后重新提示用户,dialogflow-es,Dialogflow Es,我正在使用Dialogflow设置重置密码意图,通过webhooks执行一些验证。不幸的是,我不知道如何在验证失败的情况下重新提示用户 我曾尝试使用事件再次触发意图,但它似乎不起作用。我也尝试过设置相同的输入上下文来再次触发意图,但这两种方法似乎都不起作用 因此,我在intent中创建了两个参数,通过提示填充,然后执行验证。代码如下: function getPasscode(agent) { console.log(agent.parameters); if(/^\d{6}$/.tes

我正在使用Dialogflow设置重置密码意图,通过webhooks执行一些验证。不幸的是,我不知道如何在验证失败的情况下重新提示用户

我曾尝试使用事件再次触发意图,但它似乎不起作用。我也尝试过设置相同的输入上下文来再次触发意图,但这两种方法似乎都不起作用

因此,我在intent中创建了两个参数,通过提示填充,然后执行验证。代码如下:

function getPasscode(agent) {
  console.log(agent.parameters);
  if(/^\d{6}$/.test(agent.parameters.code1) && agent.parameters.code1 == agent.parameters.code2) {
    // Reset passcode call
  } else {
    return new Promise((resolve, reject) => {
      agent.add("Your codes don't match. Please try again.");
      var output = JSON.stringify({"followupEvent": {"name": "GetPasscode", "data": {}}})
      resolve(output);
    });
  }
}
bot正确输出文本,但没有按预期触发事件

我遗漏了什么吗?

请记住,意图代表的是用户的行为,而不是您的行为。一般来说,你不会“触发”一个意图——用户会

因此,如果您正在“重新编程”用户,请在回复中发送该提示。然后确保设置的目的是捕获他们的回复。这可能涉及在设置输出上下文以缩小哪些意图被评估以考虑答复。


您不能既发送回响应,又用事件触发意图。从履行中发送事件几乎是不必要的,完成后,将丢弃您可能已经为响应设置的任何内容。它所做的只是触发注册事件的意图。(您的代码在这方面有两个问题-您都试图发送响应,并且您试图错误地发送后续事件。)

在您的用例中,根据我的理解,您不需要调用事件。更好的方法是:

  • 在询问、确认密码并存储密码的位置设置意图
  • 在webhook中验证这一点
以下是伪代码:

if validationPassed {
    call your api to reset password
    send reset password confirmation output to user
} 
if validationFailed {
    setup output context to ask-password intent again
    send output to user to re-enter the password
}
正如@capture所说,你不会触发意图,用户会触发。一旦触发意图,我们将进行处理并发送响应。

希望有帮助。

我理解,但事件是用来触发意图的,有必要的参数,对吗?所以我不能调用事件本身来重新提示吗?意图不会“提示”-它们会响应。理论上,您可以触发一个事件,该事件将发送一个意图所做的回复,但这并不意味着“等待用户说些什么”。我澄清了一下我的答案。