python - 对话流:403 IAM 权限“dialogflow.sessions.detectIntent”
问题描述
经过数小时阅读文档和资源后,我正在寻求您的帮助。
我在 API V2 项目“xxx1”上有一个对话流代理
我为“xxx1”创建了一个服务帐户并附加了角色“Dialogflow API Client”
我下载了带有凭据的 JSON 文件。
我在 python 中创建会话:
session = dialogflow.SessionsClient(
{
'credentials': {
'client_email': 'serviceaccountemail...',
'private_key': '-----BEGIN PRIVATE KEY----- ...',
},
'project_id': 'xxx1',
}
)
这里没有问题。
如果我在运行时调用 Dialogflow API,我会收到:
grpc._channel._Rendezvous: <_Rendezvous of RPC that terminated with:
status = StatusCode.PERMISSION_DENIED
details = "IAM permission 'dialogflow.sessions.detectIntent' on 'projects/xxx1/agent' denied."
debug_error_string = "{"created":"@1534320091.581347198","description":"Error received from peer","file":"src/core/lib/surface/call.cc","file_line":1095,"grpc_message":"IAM permission 'dialogflow.sessions.detectIntent' on 'projects/xxx1/agent' denied.","grpc_status":7}"
对我来说,这听起来好像权限不够。但我对其他代理使用相同的角色,它工作正常。
解决方案
在将 Dialogflow 与外部客户端集成时,我遇到了同样的问题。
我的案例的根本原因是,即使我为外部客户端创建了服务帐户,我也忘记添加服务帐户并赋予“Dialogflow API 管理员”角色。
我如何解决:在 GCP 项目中,转到 IAM > 单击顶部的“+ADD”按钮并搜索您要授予权限访问的服务帐户,选择角色类型“Dialogflow API Admin”(或编辑角色以赋予 Dialogflow API 管理员(如果您之前已将服务帐户添加为客户角色)
推荐阅读
- python - 如何在python中制作作为类属性的列表副本?
- php - Laravel Eloquent SQLSTATE [23000]:完整性约束违规:1052 Column ... in where 子句不明确
- html - 如何使用css精确地制作边框
- ios - 通过 uid 向 Firestore 显示数据
- html - fullcalendar 仅在窗口调整大小后出现 | 有角度的
- javascript - Chartjs条形图在使用ajax时悬停时显示旧数据
- python - 使用pygame在破砖游戏中每次击球时提高速度的任何方法
- arduino - 我想得到很多热传感器的图案,但我不知道该怎么做,该怎么做?
- java - 想知道以下两种解决方案的时间复杂度 [增强 - for 循环解决方案与 for 循环解决方案]
- reactjs - 反应组件道具中的传播运算符