2017-07-20 19 views
0

私はGoogleのホームアシスタントを作ろうとしています。基本的に私は、ユーザーが何を言っているのかを把握し、それを応答に戻す必要があります。JSONにアクセスしてユーザーの応答を返す方法は?

私はいくつかのパズルピースを考え出しました。

一つは、クエリを実行するAPIを初期化されます。

api = ApiAi(os.environ['DEV_ACCESS_TOKEN'], os.environ['CLIENT_ACCESS_TOKEN']) 

は、他ではちょうど、ユーザーが言う何でもキャプチャし、それをバック繰り返すように意図されたフォールバックの意図である:

@assist.action('fallback', is_fallback=True) 
def say_response(): 
    """ Setting the fallback to act as a looper """ 
    speech = "test this" # <-- this should be whatever the user just said 
    return ask(speech) 

もう一つは、 API.AIサイトのJSONレスポンスは次のようになります。

{ 
    "id": "XXXX", 
    "timestamp": "2017-07-20T14:10:06.149Z", 
    "lang": "en", 
    "result": { 
    "source": "agent", 
    "resolvedQuery": "ok then", 
    "action": "say_response", 
    "actionIncomplete": false, 
    "parameters": {}, 
    "contexts": [], 
    "metadata": { 
     "intentId": "a452b371-f583-46c6-8efd-16ad9cde24e4", 
     "webhookUsed": "true", 
     "webhookForSlotFillingUsed": "true", 
     "webhookResponseTime": 112, 
     "intentName": "fallback" 
    }, 
    "fulfillment": { 
     "speech": "test this", 
     "source": "webhook", 
     "messages": [ 
     { 
      "speech": "test this", 
      "type": 0 
     } 
     ], 
     "data": { 
     "google": { 
      "expect_user_response": true, 
      "is_ssml": true 
     } 
     } 
    }, 
    "score": 1 
    }, 
    "status": { 
    "code": 200, 
    "errorType": "success" 
    }, 
    "sessionId": "XXXX" 
} 

m私はこのようなルックスからintializingよodule:https://github.com/treethought/flask-assistant/blob/master/api_ai/api.py

完全なプログラムは次のようになります。

import os 
from flask import Flask, current_app, jsonify 
from flask_assistant import Assistant, ask, tell, event, context_manager, request 
from flask_assistant import ApiAi 

app = Flask(__name__) 
assist = Assistant(app, '/') 

api = ApiAi(os.environ['DEV_ACCESS_TOKEN'], os.environ['CLIENT_ACCESS_TOKEN']) 
# api.post_query(query, None) 

@assist.action('fallback', is_fallback=True) 
def say_response(): 
    """ Setting the fallback to act as a looper """ 
    speech = "test this" # <-- this should be whatever the user just said 
    return ask(speech) 

@assist.action('help') 
def help(): 
    speech = "I just parrot things back!" 
    ## a timeout and event trigger would be nice here? 
    return ask(speech) 

@assist.action('quit') 
def quit(): 
    speech = "Leaving program" 
    return tell(speech) 

if __name__ == '__main__': 
    app.run(debug=False, use_reloader=False) 

は、どのように私はJSONのうち「resolvedQueryは」の「スピーチ」としてフィードバックされるために得ることについて行きますレスポンスは?

ありがとうございました。

答えて

0

フラスコアシスタントライブラリは、要求をdictオブジェクトに解析するのに適しています。

あなたはresolvedQuery書き込みによって取得することができます。

speech = request['result']['resolvedQuery'] 
+0

これは私が必要なものである。このような

何かがあなたが最初のJSONデータを取得する方法です。本当にありがとう。 –

0

ただ、新しい意思(名前は関係ありません)とsys.anyでテンプレートを作成します。その後、あなたのサーバーに移動し、次のコードのようなものを使用してください。

userInput = req.get(‘result’).get(‘parameters’).get(‘YOUR_SYS_ANY_PARAMETER_NAME’) 

次に、音声応答としてuserInputを送り返します。

@app.route(’/google_webhook’, methods=[‘POST’]) 
def google_webhook(): 
# Get JSON request 
jsonRequest = request.get_json(silent=True, force=True, cache=False) 

print("Google Request:") 
print(json.dumps(jsonRequest, indent=4)) 

# Get result 
appResult = google_process_request(jsonRequest) 
appResult = json.dumps(appResult, indent=4) 

print("Google Request finished") 

# Make a JSON response 
jsonResponse = make_response(appResult) 
jsonResponse.headers['Content-Type'] = 'application/json' 
return jsonResponse 
関連する問題