输入无效后重新提示用户

时间:2019-03-25 06:51:28

标签: dialogflow

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

我试图使用一个事件再次触发意图,但是它似乎没有用。我也尝试过设置相同的输入上下文来再次触发意图,但是似乎都不起作用。

因此,我在意图中创建了2个参数,并通过提示进行填充,然后执行验证。这是代码:

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);
    });
  }
}

机器人会正确输出文本,但未按预期触发事件。

我想念什么吗?

2 个答案:

答案 0 :(得分:0)

请记住,意图代表用户的行为 ,而不是 您的操作试图做到的。通常,您不会“触发”意图,而用户会“触发”。

因此,如果您正在“提示”用户,请在回复中将该提示发送给他们。然后确保已设置“意图”以捕获其答复。这可能涉及您设置“输出上下文”以缩小评估要考虑答复的Intent的范围。

您不能同时发送回信 和触发带有事件的Intent。几乎不需要发送满足条件的事件,完成后,它会丢弃您可能已经为响应设置的任何内容。它所做的所有事情都会导致触发已注册事件的Intent。 (您的代码在这方面有两个问题-您都尝试发送响应,并且尝试发送错误的后续事件。)

答案 1 :(得分:0)

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

  • 在您询问并确认密码并存储的地方设置密码
  • 在您的网络挂钩中进行验证

这是伪代码:

data_iter = stream_from_s3_utf8(s3_stream)
csv_iter = csv.DictReader(data_iter,quoting=csv.QUOTE_NONE)

正如@Prisoner所说,用户不会触发意图。一旦意图触发,我们就进行处理并发送响应。
希望对您有所帮助。