Я работал над следующим учебником: https://pusher.com/tutorials/chatbot-flask-dialogflow
Это простое приложение чата с флягой, в котором пользователь запрашивает сведения о фильме.
Запрос пользователязатем отправляется в Dialogflow API.DialogFlow расшифровывает намерения пользователя, а затем отправляет запрос JSON-сообщения в /get_movie_detail.
Здесь колба подключается к API IMDB и получает сведения о фильме, который интересует пользователя.
Фильмдетали должны быть возвращены пользователю.
Приложение работает до тех пор, пока детали фильма не должны быть возвращены пользователю, но по какой-то причине эта часть не работает:
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
credential_path = "/Users/will/Documents/Laura/movie_bot/movie-bot-twrobf-6efd82e3249a7.json"
os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = credential_path
app = Flask(__name__)
@app.route('/')
def index():
return render_template('index.html')
@app.route('/get_movie_detail', methods=['POST'])
def get_movie_detail():
data = request.get_json(silent=True)
movie = data['queryResult']['parameters']['movie']
api_key = 'ac95c504'
movie_detail = requests.get('http://www.omdbapi.com/?t={0}&apikey={1}'.format(movie, api_key)).content
movie_detail = json.loads(movie_detail.decode('utf-8'))
response = """
Title : {0}
Released: {1}
Actors: {2}
Plot: {3}
""".format(movie_detail['Title'], movie_detail['Released'], movie_detail['Actors'], movie_detail['Plot'])
reply = {
"message": response
}
return jsonify(reply)
@app.route('/send_message', methods=['POST'])
def send_message():
message = request.form['message']
project_id='movie-bot-twekbf'
# project_id = os.getenv('DIALOGFLOW_PROJECT_ID')
fulfillment_text = detect_intent_texts(project_id, "unique", message, 'en')
if fulfillment_text:
response_text = { "message": fulfillment_text }
return jsonify(response_text)
else:
return jsonify({"message": "bear with me..."})
# run Flask app
if __name__ == "__main__":
app.run()
Кроме того, вот код jquery, который обрабатывает ответы json и отображает их в браузере
function submit_message(message) {
$.post( "/send_message", {message: message}, handle_response);
function handle_response(data) {
// append the bot repsonse to the div
$('.chat-container').append(`
<div class="chat-message col-md-5 offset-md-7 bot-message">
${data.message}
</div>
`)
// remove the loading indicator
$( "#loading" ).remove();
}
}
// /static/custom.js
$('#target').on('submit', function(e){
e.preventDefault();
const input_message = $('#input_message').val()
// return if the user does not enter any text
if (!input_message) {
return
}
$('.chat-container').append(`
<div class="chat-message col-md-5 human-message">
${input_message}
</div>
`)
// loading
$('.chat-container').append(`
<div class="chat-message text-center col-md-2 offset-md-10 bot-message" id="loading">
<b>...</b>
</div>
`)
// clear the text input
$('#input_message').val('')
// send the message
submit_message(input_message)
});
Я знаю, что колба успешно извлекаетсядетали фильма из IMDB, потому что, если я добавлю в код детали печати фильма, как показано ниже:
movie_detail = json.loads(movie_detail.decode('utf-8'))
response = """
Title : {0}
Released: {1}
Actors: {2}
Plot: {3}
""".format(movie_detail['Title'], movie_detail['Released'], movie_detail['Actors'], movie_detail['Plot'])
reply = {
"message": response
}
print(response)
return jsonify(reply)
... Ожидаемая информация о фильме отображается в моей IDE.
Однако по какой-либо причине детали фильма не возвращаются в браузер с
return jsonify(reply)
Кроме того, я проверяю приложение локально, когда проверяюПохоже, что инструменты разработчика Chrome / get_movie_detail ничего не возвращают в браузер:
Кто-нибудь может помочь?Большое спасибо заранее.