Javascript 在使用内联编辑器实现的DialogFlow Messenger中,setContext()正在干扰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

我打算在DialogFlow中使用一次性密码重置密码。你告诉DF你想重置你的密码,它要求你的LAN ID,它向你的记录电子邮件发送一封带有短代码的电子邮件,你输入代码,如果正确,你可以重置你的密码

给出LAN ID后,它会设置上下文并触发后续事件“verifyCode”,提示您输入代码,然后将其与存储值进行比较。如果正确,则设置上下文并触发另一个后续事件

它在web集成和“立即试用”框中都能很好地工作,但在DialogFlow Messenger集成中却不行,在DialogFlow Messenger集成中,设置上下文似乎会干扰setFollowupEvent函数,尽管它确实会发送电子邮件。我已经对它进行了测试,如果禁用了上下文设置,则会触发后续事件,但这没有帮助

以下是相关代码和控制台值

  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]

谢谢。通过参数而不是上下文进行处理使其工作。很高兴听到这一点^^