【问题标题】:403 IAM permission 'dialogflow.sessions.detectIntent' error in flask烧瓶中的 403 IAM 权限“dialogflow.sessions.detectIntent”错误
【发布时间】:2021-01-20 16:22:49
【问题描述】:

我正在尝试在我的 Flask 应用程序中使用 Dialogflow,但我收到了 403 IAM permission 'dialogflow.sessions.detectIntent' 我已经检查了两次我的角色是云控制台中的项目所有者。我正在关注this 教程。

这是我的 app.py

from flask import Flask
from flask import request, jsonify
import os
import dialogflow
from google.api_core.exceptions import InvalidArgument
import requests

os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = 'service_key.json'

DIALOGFLOW_PROJECT_ID = 'whatsappbotagent-gmsl'
DIALOGFLOW_LANGUAGE_CODE = 'en'
SESSION_ID = 'me'

app = Flask(__name__)
app.config["DEBUG"] = True

@app.route('/')
def root():
    return "Hello World"

@app.route('/api/getMessage', methods = ['POST'])
def home():
    message = request.form.get('Body')
    mobnu = request.form.get('From')
    session_client = dialogflow.SessionsClient()
    session = session_client.session_path(DIALOGFLOW_PROJECT_ID, SESSION_ID)
    text_input = dialogflow.types.TextInput(text = message, language_code = DIALOGFLOW_LANGUAGE_CODE)
    query_input = dialogflow.types.QueryInput(text = text_input)
    try:
        response = session_client.detect_intent(session = session, query_input = query_input)
    except InvalidArgument:
        raise

    print("Query text: ", response.query_result.query_text)
    # sendMessage()
    return response.query_result.fullfilment_text

if __name__ == '__main__':
    app.run()

【问题讨论】:

  • 尝试将 GOOGLE_APPLICATION_CREDENTIALS 作为 JSON 文件导入到代码中,而不是使用环境变量(使用 environ 是一种更好的做法,这是您最终应该做的,但可能会导致如果没有正确设置会出错)。我的猜测是导致错误,因为我没有看到其余代码有任何问题。

标签: python flask dialogflow-es


【解决方案1】:

好的,经过大量搜索和反复试验,我发现了问题。

实际上,在创建服务帐户时,用户会收到一封服务电子邮件,该电子邮件将有权使用该项目,但我没有在项目许可电子邮件中添加该电子邮件。在IAM & Admin > IAM > +ADD 中添加该电子邮件将使其正常工作。

也许有更好的解决方案,但这对我有用,如果有类似的问题,希望能解决其他问题。

【讨论】:

    猜你喜欢
    • 2018-12-27
    • 2019-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多