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

调用Dialogflow CX API访问Google Cloud Conversational Agent返回空数组,如何解决?

对接Google Cloud Conversational Agent的正确方式

我正在使用Google Cloud Conversational Agent,刚创建了一个新代理,可在控制台的聊天模拟器中测试。查阅到的文档指向旧版Dialogflow CX API,于是尝试用Node.js实现集成,调用listAllAgents方法时返回空数组,推测问题在于Dialogflow CX API仅适配Dialogflow CX代理,而非我创建的Conversational Agent。请问该如何对接Conversational Agent?

核心原因

你创建的Google Cloud Conversational Agent属于**Dialogflow ES(原Dialogflow标准版/企业版)**范畴,而你之前使用的是Dialogflow CX的API客户端,两者属于独立的服务体系,API不兼容,因此无法获取到代理列表。

正确对接步骤

  1. 安装适配的Node.js客户端库
    卸载原CX库(如果已安装),安装Dialogflow ES的官方客户端:

    npm uninstall @google-cloud/dialogflow-cx
    npm install @google-cloud/dialogflow
    
  2. 替换客户端类与配置
    调整代码中的客户端导入与初始化逻辑,Dialogflow ES的资源路径和API端点与CX不同:

    const { AgentsClient, SessionsClient } = require('@google-cloud/dialogflow');
    
    constructor() {
        this.projectId = 'xx';
    
        if (!this.projectId) {
          this.logger.error('Missing Dialogflow ES configuration parameters.');
          throw new Error('Missing Dialogflow ES configuration.');
        }
    
        // Dialogflow ES默认端点为dialogflow.googleapis.com,无需额外配置location
        this.sessionsClient = new SessionsClient();
        this.agentsClient = new AgentsClient();
      }
    
  3. 修改listAllAgents方法的资源路径
    Dialogflow ES的listAgents接口父路径格式为projects/${projectId},无需包含location层级:

    async listAllAgents(): Promise<string[]> {
        try {
          const parent = `projects/${this.projectId}`;
          this.logger.log(`尝试列出父路径下的代理: ${parent}`);
    
          const [response]: any = await this.agentsClient.listAgents({ parent });
          const agentNames = response.map(agent => agent.displayName || agent.name);
    
          this.logger.log(`找到 ${agentNames.length} 个代理: ${agentNames.join(', ')}`);
          return agentNames;
        } catch (error) {
          this.logger.error(`获取代理列表时出错: ${error.message}`, error.stack);
          throw new Error(`无法获取代理列表: ${error.message}`);
        }
      }
    

关键差异说明

  • 资源路径:Dialogflow CX的资源包含locations层级,而Dialogflow ES直接以projects作为根路径。
  • 客户端库:两者使用独立的npm包,CX对应@google-cloud/dialogflow-cx,ES对应@google-cloud/dialogflow。
  • API端点:ES默认使用dialogflow.googleapis.com,CX则需根据location指定如us-central1-dialogflow.googleapis.com这类区域端点。

内容的提问来源于stack exchange,提问作者Nadir Bertolasi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 02:21:12