首页 > 解决方案 > 对话流: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}"

对我来说,这听起来好像权限不够。但我对其他代理使用相同的角色,它工作正常。

标签: pythondialogflow-es

解决方案


在将 Dialogflow 与外部客户端集成时,我遇到了同样的问题。

我的案例的根本原因是,即使我为外部客户端创建了服务帐户,我也忘记添加服务帐户并赋予“Dialogflow API 管理员”角色。

我如何解决:在 GCP 项目中,转到 IAM > 单击顶部的“+ADD”按钮并搜索您要授予权限访问的服务帐户,选择角色类型“Dialogflow API Admin”(或编辑角色以赋予 Dialogflow API 管理员(如果您之前已将服务帐户添加为客户角色)


推荐阅读