如何从Google Cloud外部调用Dialogflow CX Analytics API及相关配置?
问题描述
我正在使用Dialogflow CX,需要从Google Cloud外部(如Postman或后端服务)访问分析数据。通过查看Dialogflow CX控制台的网络请求,发现了以下请求:
https://europe-west3-dialogflow.clients6.google.com/v3alpha1/projects/{projectId}/locations/{location}/agents/{agentId}/analytics?endTime=2025-05-18T07%3A00%3A00.000Z&pageSize=1680&startTime=2025-05-06T07%3A00%3A00.000Z&trimOutputFields=true&key={key}
尝试通过生成服务账号并使用其凭证获取访问令牌来复制该请求,但在请求中包含API key时收到以下错误:
{ "error": { "code": 400, "message": "The API key and the authentication credential are from different projects" } }
看起来问题与key参数有关,该端点可能仅限Dialogflow CX控制台使用。我的问题如下:
- 是否有受支持的方式从Google Cloud外部以编程方式访问Dialogflow CX Analytics(例如使用服务账号凭证)?
- 能否从BigQuery获取相同的分析数据?如果可以,该如何配置?
- 需要调整哪些配置(如权限)才能实现这一需求?
解答
1. 受支持的外部编程访问方式
有官方支持的方式,无需使用API Key,直接通过Dialogflow CX的v3 REST API的projects.locations.agents.analytics.reports.list端点访问,用服务账号的OAuth2访问令牌做身份认证:
- 正确调用端点:
https://dialogflow.googleapis.com/v3/projects/{projectId}/locations/{location}/agents/{agentId}/analytics/reports:list - 请求方式为POST,请求体中需指定时间范围、所需指标(如会话数、意图触发数)、维度(如时间、意图名称)等参数
- 身份认证:在请求头添加
Authorization: Bearer {access-token},其中access-token可通过服务账号凭证生成(比如用gcloud auth application-default print-access-token命令快速获取,或通过各语言SDK生成)
2. 从BigQuery获取分析数据的配置方法
可以通过导出Dialogflow CX会话日志到BigQuery,再用SQL查询生成等价分析数据,步骤如下:
- 进入Dialogflow CX控制台,打开目标代理的监控 > 日志页面
- 点击设置导出,选择创建新导出
- 配置导出目标:选择现有BigQuery数据集或新建一个;指定导出日志类型为会话日志(可覆盖大部分分析所需数据)
- 保存配置后,新会话数据会自动同步到BigQuery对应表中,表结构包含会话ID、触发意图、对话时长、会话结束原因、参数值等字段
- 编写SQL查询即可统计类似CX Analytics的指标,比如每日会话总数、各意图触发次数等
3. 所需的权限配置
服务账号访问API的权限
给用于访问Analytics API的服务账号分配Dialogflow Analytics Reader(roles/dialogflow.analyticsReader)角色,该角色允许只读访问分析数据;若需创建自定义报告,可分配Dialogflow Analytics Writer(roles/dialogflow.analyticsWriter)角色。
BigQuery导出及查询的权限
- 给Dialogflow CX内置服务账号(格式为
service-{project-number}@gcp-sa-dialogflow.iam.gserviceaccount.com)分配BigQuery数据集的BigQuery Data Editor角色,确保它能将日志写入BigQuery - 给需要查询BigQuery日志表的账号分配
BigQuery Data Viewer角色,允许读取日志数据进行分析
内容的提问来源于stack exchange,提问作者EagleCode
相关产品推荐
相关产品推荐

