我正在使用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);
});
}
}
机器人会正确输出文本,但未按预期触发事件。
我想念什么吗?
答案 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所说,用户不会触发意图。一旦意图触发,我们就进行处理并发送响应。
希望对您有所帮助。