如何访问 JSON 以鹦鹉学舌地回复用户响应?

How to access JSON to parrot back user response?

我正在尝试制作一个 google 家庭助理,它只会鹦鹉学舌地回应用户对它说的任何话。基本上我需要捕捉用户在说什么,然后将其反馈到响应中。

我想出了一些拼图。

一个正在初始化 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"
}

我正在初始化的模块如下所示: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)

如何让 "resolvedQuery" 从 JSON 中反馈为 "speech" 作为响应?

谢谢。

flask_assistant 库可以很好地将请求解析为 dict 对象。

您可以通过以下方式获得resolvedQuery

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

只需创建一个新的意图(名称无关紧要)和一个带有 sys.any 的模板;在那之后继续你的服务器并使用类似于以下代码的东西

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

然后将 userInput 作为语音响应发回。

你是这样得到初始 JSON 数据的:

@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