【问题标题】:403 IAM permission despite giving admin permissions to the agent to give permissions to list intent403 IAM 权限,尽管授予代理管理员权限以授予列出意图的权限
【发布时间】:2020-09-04 11:37:16
【问题描述】:

我想使用我使用 Dialogflow 创建的聊天机器人作为我网站的主页。然而它告诉我google.api_core.exceptions.PermissionDenied: 403 IAM permission 'dialogflow.sessions.detectIntent' on 'projects/pollingagent-jnscpa/agent' denied. 尝试与他交谈时。

我关注了this tutorial,它告诉了如何使用 Flask 进行操作,但我已准备好转向最简单的解决方案。 我从a similar question的答案中尝试了以下内容:

  • 在 Dialogflow 的控制台中,转到设置 ⚙ > 在常规选项卡下,有项目 ID 部分,其中包含用于打开 Google Cloud 控制台 > 打开 Google Cloud 的 Google Cloud 链接。
  • 在谷歌云中,转到 IAM 管理员 > IAM 选项卡下的成员。找到我的代理人的姓名,然后点击编辑。
  • 向代理授予管理员权限以授予列出意图的权限。

所以我不知道,也许问题出在我的 index.py 上?

from flask import Flask, request, jsonify, render_template
import os
import dialogflow

app = Flask(__name__)


@app.route('/')
def index():
    return render_template('index.html')

def detect_intent_texts(project_id, session_id, text, language_code):
    session_client = dialogflow.SessionsClient()
    session = session_client.session_path(project_id, session_id)

    if text:
        text_input = dialogflow.types.TextInput(
            text=text, language_code=language_code)
        query_input = dialogflow.types.QueryInput(text=text_input)
        response = session_client.detect_intent(
            session=session, query_input=query_input)

        return response.query_result.fulfillment_text

@app.route('/send_message', methods=['POST'])
def send_message():
    message = request.form['message']
    project_id = os.getenv('DIALOGFLOW_PROJECT_ID')
    fulfillment_text = detect_intent_texts(project_id, "unique", message, 'en')
    response_text = { "message":  fulfillment_text }

    return jsonify(response_text)

# run Flask app
if __name__ == "__main__":
    app.run()

【问题讨论】:

    标签: javascript python-3.x permissions dialogflow-es


    【解决方案1】:

    您可能会遇到以下两个问题之一:

    1. 您可能没有正确设置 json 凭证文件的路径。您可以将其设置为环境变量或执行os.environ['GOOGLE_APPLICATION_CREDENTIALS']="/path/to/project_name-xxxxxxxx.json"
    2. 转到对话流主页,然后单击显示的位置

    然后点击 PROJECT_ID 链接转到您的谷歌云控制台

    进入谷歌云控制台后,打开显示的侧面菜单面板,然后转到 IAM & Admin > IAM

    您应该看到所有成员,如果角色未设置为所有者,则单击编辑图标并将角色更改为所有者

    通过以下步骤,我能够运行以下 sn-p

    from google.cloud import dialogflow 
    import random 
    import string 
    import os
    
    os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = "\path\to\<project_name>-xxxxxx.json"
    
    x = ''.join(random.choice(string.ascii_uppercase + string.ascii_lowercase + string.digits) for _ in range(16))
    
    client_session = dialogflow.SessionsClient()
    
    session = client_session.session_path("<project_name>", x)
    
    print(session)
    
    text = input("Please enter a text : ")
    
    text_input = dialogflow.TextInput(text=text, language_code='en') 
    query_input = dialogflow.QueryInput(text=text_input) 
    response = client_session.detect_intent(
            request={'session': session, 'query_input': query_input}) 
    print('=' * 20) 
    print('Query text: {}'.format(response.query_result.query_text)) 
    print('Detected intent: {} (confidence: {})\n'.format(
                response.query_result.intent.display_name,
                response.query_result.intent_detection_confidence)) 
    print('Fulfillment text: {}\n'.format(response.query_result.fulfillment_text))
    

    【讨论】:

      【解决方案2】:

      您还没有在代码中设置凭据,您是否为凭据设置了环境变量?

      GOOGLE_APPLICATION_CREDENTIALS 变量是执行此操作的最简单方法,其中该变量的值设置为您下载的服务帐户密钥的路径。

      如果需要,您也可以在代码中执行此操作,因此它不会影响您环境的其余部分,例如:

      os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = 'path/to/private_key.json'

      【讨论】:

      • 是的,我在我的.env 文件中做到了:GOOGLE_APPLICATION_CREDENTIALS=privatekey*.json
      • 就像他们在教程中所做的那样
      • 啊,明白了。可能是您没有加载 dotenv 文件(本教程对它进行了掩饰,因为 Flask 在某些启动情况下会为您加载它)。 JUUUUST 作为测试,尝试将from dotenv import load_dotenv load_dotenv('.env') #the path to your .env file (or any other file of environment variable 添加到您的代码中。
      • 或者,只需执行print(os.environ('GOOGLE_APPLICATION_CREDENTIALS')) 以确保已设置。
      猜你喜欢
      • 1970-01-01
      • 2015-06-19
      • 2018-11-12
      • 2020-12-11
      • 2012-07-12
      • 2013-09-22
      • 1970-01-01
      • 2019-09-17
      • 2015-11-14
      相关资源
      最近更新 更多