函数和if条件之间的无限循环(Javascript,Dialogflow)

时间:2018-06-18 10:37:08

标签: javascript node.js dialogflow

我正在使用dialogflow创建一个天气聊天机器人,使用NodeJS和ngrok。我需要创建一种新的对话,如下所示:

  • 用户:伦敦的天气是什么?
  • Bot:在我回答之前,我想知道你的名字
  • 用户:我的名字是杰克
  • Bot:杰克,伦敦的天气等......

为了实现它,我需要一个函数来搜索名称是否已在上下文中注册。名称存储在上下文名称内存

var memory = chercherContexte(req.body.queryResult.outputContexts,'memory');

这是功能:

function chercherContexte(outputContexts, nom) {


    for (var i=0; i<outputContexts.length; i++) {
          console.log(outputContexts[i])
          if (outputContexts[i].name === "projects/botname/agent/sessions/id_sessions/"+nom ) {
          console.log("Context is found");
          return outputContexts[i]
          }
      }
     return undefined;
    }

然后,我需要检查是否定义了名称。如果我找不到名字,我需要设置新的上下文和事件。

var first_name = '';
if ((memory !== undefined) && (memory.parameters['first_name']!==undefined)) 
   first_name=memory.parameters['first_name'];

if (first_name === '' ) {
    out = construireReponse("");
    out.outputContexts = [{name:'projects/botname/agent/sessions/id_sessions/memory', lifespanCount:5, parameters:{intention:'question', intention_action:'openWeatherMap',parameters_Action:req.body.queryResult.parameters}}];
    out.followupEventInput = {name:'askName'}
    console.log("Done");
    res.json(out);
}

发生的事情是webhook不断搜索上下文,查看if,然后重启。 webhook重做相同的操作三次。在对话框流程控制台中,我注意到由于此循环,对webhook的调用被视为失败。

我该如何解决这个问题?

谢谢!

1 个答案:

答案 0 :(得分:0)

如果您致电chercherContexte(req.body.queryResult.outputContexts,'memory')

if语句中的

"projects/botname/agent/sessions/id_sessions/" + name会导致

projects/botname/agent/sessions/id_sessions/memory

但是在设置上下文时,请使用

projects/agent_name/agent/sessions/sessions_id/contexts/memory

所以之后你永远找不到合适的背景。