Javascript 在使用内联编辑器实现的DialogFlow Messenger中,setContext()正在干扰setFollowupEvent()
我打算在DialogFlow中使用一次性密码重置密码。你告诉DF你想重置你的密码,它要求你的LAN ID,它向你的记录电子邮件发送一封带有短代码的电子邮件,你输入代码,如果正确,你可以重置你的密码 给出LAN ID后,它会设置上下文并触发后续事件“verifyCode”,提示您输入代码,然后将其与存储值进行比较。如果正确,则设置上下文并触发另一个后续事件 它在web集成和“立即试用”框中都能很好地工作,但在DialogFlow Messenger集成中却不行,在DialogFlow Messenger集成中,设置上下文似乎会干扰setFollowupEvent函数,尽管它确实会发送电子邮件。我已经对它进行了测试,如果禁用了上下文设置,则会触发后续事件,但这没有帮助 以下是相关代码和控制台值Javascript 在使用内联编辑器实现的DialogFlow Messenger中,setContext()正在干扰setFollowupEvent(),javascript,node.js,google-cloud-platform,dialogflow-es,chatbot,Javascript,Node.js,Google Cloud Platform,Dialogflow Es,Chatbot,我打算在DialogFlow中使用一次性密码重置密码。你告诉DF你想重置你的密码,它要求你的LAN ID,它向你的记录电子邮件发送一封带有短代码的电子邮件,你输入代码,如果正确,你可以重置你的密码 给出LAN ID后,它会设置上下文并触发后续事件“verifyCode”,提示您输入代码,然后将其与存储值进行比较。如果正确,则设置上下文并触发另一个后续事件 它在web集成和“立即试用”框中都能很好地工作,但在DialogFlow Messenger集成中却不行,在DialogFlow Messen
function sendOneTimePassword(agent){
var lanIdParam = request.body.queryResult.outputContexts[0].parameters.lanId;
var lanId = lanIdParam.toLowerCase();
var user = userList[lanId];
if (user == null){
agent.add("We could not find a user with that lan ID. Please try again.");
} else {
var emailAddress = user.email;
var code = generateOneTimePassword();
var deadline = generateExpirationTime();
sendResetMail(emailAddress, code);
agent.add("Just a moment, please...");
console.log("code = "+code);
agent.setContext({
"name": 'projects/BOTNAME/agent/sessions/STRINGOFTEXT/contexts/verify',
"lifespan": 5,
"parameters":{"code": code, "deadline": deadline, "lanId": lanId}
});
agent.setFollowupEvent("validateCode");
}
}
如果删除上面的setContext方法,则会触发后续事件,但我没有上下文
我可以看到您正试图触发验证事件[1],但有时会失败 这可能是由于“setFollowupEvent”的工作方式造成的。正如您在这里[2]所看到的,“setFollowupEvent”导致“agent.add”被跳过的类似问题,因此它可能不会像您预期的那样触发 事件可能需要设置事件参数,而不是设置上下文[3] 有关如何正确使用事件的示例Node.js代码可在此处查看[4] [1] [2] [3]
[4] 谢谢。通过参数而不是上下文进行处理使其工作。很高兴听到这一点^^