cal*_*iph 5 python dialogflow-es
在阅读了数小时的文档和资源后,我请求您的帮助。
我在 API V2 项目“xxx1”上有一个对话流代理
我为“xxx1”创建了一个服务帐户并附加了角色“Dialogflow API Client”
我下载了带有凭据的 JSON 文件。
我在 python 中创建会话:
session = dialogflow.SessionsClient(
{
'credentials': {
'client_email': 'serviceaccountemail...',
'private_key': '-----BEGIN PRIVATE KEY----- ...',
},
'project_id': 'xxx1',
}
)
Run Code Online (Sandbox Code Playgroud)
这里没有问题。
如果我在运行时调用 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}"
Run Code Online (Sandbox Code Playgroud)
对我来说,这听起来好像权限不够。但是我对其他代理使用相同的角色,并且工作正常。
我在将 Dialogflow 与外部客户端集成时遇到了同样的问题。
我的案例的根本原因是,即使我为外部客户端创建了服务帐户,我也忘记添加服务帐户并赋予“Dialogflow API 管理员”角色。
我的解决方法:在 GCP 项目中,转到 IAM > 单击顶部的“+ADD”按钮并搜索要授予访问权限的服务帐户,选择角色类型“Dialogflow API Admin”(或编辑角色以赋予 Dialogflow API 管理员(如果您之前已将服务帐户添加为客户端角色)