You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 22:50:21