DefaultCredentialsError: Не удалось автоматически определить учетные данные |Колба |Dialogflow API - PullRequest
0 голосов
/ 28 июня 2019

Я работал над следующим учебником по созданию простого флеш-чата.

https://pusher.com/tutorials/chatbot-flask-dialogflow

Мои учетные данные Google хранятся в .env:

DIALOGFLOW_PROJECT_ID = фильм-бот-twersf GOOGLE_APPLICATION_CREDENTIALS = фильм-бот -. * * 1008 JSON *

Однако, когда я запускаю приложение локально (на Mac), я получаю следующую ошибку:

DefaultCredentialsError: Could not automatically determine credentials. Please set GOOGLE_APPLICATION_CREDENTIALS or explicitly create credentials and re-run the application.

Код

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


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 = Flask(__name__)

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

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


@app.route('/get_movie_detail', methods=['POST'])
def get_movie_detail():
    data = request.get_json(silent=True)
    movie = data['queryResult']['parameters']['movie']
    api_key = os.getenv('OMDB_API_KEY')

    movie_detail = requests.get('http://www.omdbapi.com/?t={0}&apikey={1}'.format(movie, api_key)).content
    movie_detail = json.loads(movie_detail)
    response =  """
            Title : {0}
            Released: {1}
            Actors: {2}
            Plot: {3}
        """.format(movie_detail['Title'], movie_detail['Released'], movie_detail['Actors'], movie_detail['Plot'])

    reply = {
            "fulfillmentText": response,
        }

    return jsonify(reply)

@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)

Сначала я запустил приложение из IDE Spyder, и после исследования других потоков по переполнению стека я подумал, что проблема может заключаться в IDE, поскольку очевидно, что терминалы, которые запускаются из IDE, иногда теряют переменные env.

Так что вместо этого я бежал из командной строки, но снова я получил ту же ошибку.

Может кто-нибудь помочь?

...