我正在使用dialogflow创建一个天气聊天机器人,使用NodeJS和ngrok。我需要创建一种新的对话,如下所示:
为了实现它,我需要一个函数来搜索名称是否已在上下文中注册。名称存储在上下文名称内存
中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的调用被视为失败。
我该如何解决这个问题?
谢谢!
答案 0 :(得分:0)
如果您致电chercherContexte(req.body.queryResult.outputContexts,'memory')
,
"projects/botname/agent/sessions/id_sessions/" + name
会导致
projects/botname/agent/sessions/id_sessions/memory
但是在设置上下文时,请使用
projects/agent_name/agent/sessions/sessions_id/contexts/memory
所以之后你永远找不到合适的背景。