我将一个node.js后端连接到dialogflow上,以创建一个聊天机器人,并且我可以发送答案,读取用户的输入。有时我需要验证一些参数作为IDCARD号。好吧,我可以检索到一条消息,告诉用户ID号不正确,但是我需要留在相同的dialogflow上下文中,而不是转到下一个上下文,以便能够将新值保留在相同的参数中。有谁知道这是怎么做到的吗?发送快速响应时,添加上一个按钮也很有用,以返回上一个问题。
我把代码留给您,在其中读取上下文参数并对其进行验证:
case "ingresar-telefono":
let filteredContexts = contexts.filter(function (el)
{
return el.name.includes('recibirinfo')
});
if (filteredContexts.length > 0 && contexts[0].parameters) {
numerotelefonico = (isDefined(contexts[0].parameters.fields['Telefono.original']) && contexts[0].parameters.fields['Telefono.original'] !== '') ? contexts[0].parameters.fields['Telefono.original'].stringValue: '';
console.log("Numero telefonico: "+numerotelefonico);
if (isNaN(numerotelefonico)){
console.log("Entro is not a number.");
sendTextMessage(sender, "¡Parece que tu numero de telefono tiene caracteres no permitidos!");
sendTextMessage(sender, "¡Vuelvelo a ingresar!");
}
else if(!numerotelefonico.startsWith("9")){
console.log("Entro no empieza en 9.");
sendTextMessage(sender, "¡Vuelvelo a ingresar!");
}
else{
handleMessages(messages, sender);
}
}
break;
谢谢,
乔纳森·普列托
我建议您通过从Dialogflow UI的意图中删除输出上下文来解决此问题。一旦检测到提供的ID号正确,就可以将输出上下文设置为您删除的上下文。如果提供的ID号不正确,则将输出上下文设置为该意图的输入上下文,并回答“请提供有效的ID”。这将确保再次提示用户提供有效的ID。
然后,您可以在具有相同输入上下文的情况下,通过一些训练短语“我不知道”,“我没有一个”来创建另一个意图'forgottenID',...然后在其中向用户说明如何获取有效的ID或忘记ID后该怎么做。
可以这样设置上下文:
agent.context.set({
'name':'context-name',
'lifespan': 5,
'parameters':{
'parameter-name':'parameter-value'
}
});
希望这很有道理!