Node.js中MongoDB查询结果无法通过agent.add返回Dialogflow的问题求助
问题分析与解决方案
你的代码存在三个核心问题,导致无法正确返回数据给Dialogflow:
1. 异步逻辑顺序错误
contactodepartamento.find()是异步操作,你把agent.add()写在异步回调外面,此时数据库查询还没完成,res根本没拿到值,Dialogflow自然返回NOT AVAILABLE。必须把返回结果的逻辑放到exec()的回调函数内部。
2. 查询条件的变量引用错误
你写的查询条件是{departament : 'departament', cargo : 'cargo'},这里的'departament'和'cargo'是字符串常量,不是你定义的变量,应该直接用变量名(注意MongoDB字段是department,要和数据库字段名对应)。
3. 结果提取与拼接错误
agent.add()里的字符串末尾多了个无效的+,且没有正确提取res数组里的字段值。
修正后的完整代码
function ConsultarDepartament(agent) { const department = agent.parameters.departamentos; const cargo = agent.parameters.cargodepartamento; contactodepartamento.find({ department, cargo }) .exec((err, res) => { if (err) { console.log('Error ' + err); return agent.add('查询时出现错误,请稍后重试'); } if (res.length === 0) { return agent.add('未找到符合该部门和职位的人员信息'); } // 取第一条结果返回,若需多条可循环拼接 const person = res[0]; agent.add(`你要找的人员信息:姓名 ${person.name},邮箱 ${person.mail}`); }); }
额外说明
- 如果查询结果可能有多个,可以用循环拼接结果文本:
let resultText = '找到以下符合条件的人员:\n'; res.forEach(person => { resultText += `- 姓名:${person.name},邮箱:${person.mail}\n`; }); agent.add(resultText); - 不需要额外转换器,只要确保在异步回调内部调用
agent.add(),并正确提取数组中的字段即可。
内容的提问来源于stack exchange,提问作者Usuario12345
相关产品推荐
相关产品推荐

