当`actions.intent.TRANSACTION_REQUIREMENTS_CHECK`返回的结果不同于'OK`时?

时间:2018-05-16 13:11:31

标签: actions-on-google dialogflow

我想用Dialogflow和Google智能助理以及Google Transactions API创建一个聊天机器人,以便用户订购巧克力盒。现在我的代理包含以下四个意图:

  • Default Welcome Intent(文字回复:你好,你想买一个巧克力盒吗?)
  • Default Fallback Intent
  • Int1(培训短语:是的,我想要,履行:启用webhook通话)
  • Int2(事件:actions_intent_TRANSACTION_REQUIREMENTS_CHECK)

我使用Dialogflow Json而不是Node.js将我的代理与Transactions API连接起来。我想通过使用Google操作的actions.intent.TRANSACTION_REQUIREMENTS_CHECK操作来测试用户是否符合交易要求(订购巧克力盒时)。出于这个原因,在Google文档之后,当Int1被触发时,我正在使用将Google智能助理连接到以下python脚本(后端)的webhook:

from flask import Flask, render_template, request, jsonify
from flask_cors import CORS
import  requests

app = Flask(__name__)
CORS(app)

@app.route("/",  methods=['POST'])

def index():

    data = request.get_json()    
    intent = data["queryResult"]["intent"]["displayName"]

    if (intent == 'Int1'):

        return jsonify({ "data": {
                "google": {
                "expectUserResponse": True,
                "isSsml": False,
                "noInputPrompts": [],
                "systemIntent": {
                  "data": {
                    "@type": "type.googleapis.com/google.actions.v2.TransactionRequirementsCheckSpec",
                    "paymentOptions": {
                      "actionProvidedOptions": {
                        "displayName": "VISA-1234",
                        "paymentType": "PAYMENT_CARD"
                      }
                    }
                  },
                  "intent": "actions.intent.TRANSACTION_REQUIREMENTS_CHECK"
                                }
                        }
                                        }
                })
    else:
        return jsonify({'message': 'HERE'})

if __name__== "__main__":
    app.run(debug=True)

触发actions.intent.TRANSACTION_REQUIREMENTS_CHECKInt2后我收到的json响应的结果是:

  "arguments": [
                {
                 "extension": {
                                "@type": "type.googleapis.com/google.actions.v2.TransactionRequirementsCheckResult",
                                "resultType": "OK"
                                                   },
                 "name": "TRANSACTION_REQUIREMENTS_CHECK_RESULT"
                }
               ]

令人困惑的事实是,即使我发送:

{
   "displayName": "FALSE",
   "paymentType": "PAYMENT_CARD"
                                 }

响应相同,这意味着它再次返回OK。 当我发送这样的东西时

{
   "displayName": "FALSE",
   "paymentType": "WRONG"
                           }

然后我收到一个错误:

API Version 2: Failed to parse JSON response string with 'INVALID_ARGUMENT' error: "(payment_options.action_provided_options.payment_type): invalid value "WRONG" for type TYPE_ENUM".

actions.intent.TRANSACTION_REQUIREMENTS_CHECKInt2并未完全给出这一点,因为这两个都没有被触发,所以我没有得到任何json响应,结果不同于OK

因此,我的问题是:在哪种情况下,我会收到actions.intent.TRANSACTION_REQUIREMENTS_CHECK与[{1}}不同的结果?

如果我要为我正在撰写的任何内容获得OK结果,那么使用OK的重点是什么?

P.S。 我想到了以下关于来自Google文档的actions.intent.TRANSACTION_REQUIREMENTS_CHECK

  

注意:actions.intent.TRANSACTION_REQUIREMENTS_CHECK意图是   目前正在开发中,无论如何都会回归成功状态   用户的付款设置和区域设置。测试失败   状态场景,请求声控扬声器的意图。

但是当我在手机上用我的语音在Google智能助理上使用此应用时,我仍然没有看到任何差异。

1 个答案:

答案 0 :(得分:2)

我认为您必须返回Google文档才能解决此问题。根据Google文档,actions.intent.TRANSACTION_REQUIREMENTS_CHECK的可能回复如下:RESULT_TYPE_UNSPECIFIEDOKUSER_ACTION_REQUIREDASSISTANT_SURFACE_NOT_SUPPORTEDREGION_NOT_SUPPORTEDimage)。

他们中没有任何事情与此完全相同:

            "paymentOptions": {
              "actionProvidedOptions": {
                "displayName": "VISA-1234",
                "paymentType": "PAYMENT_CARD"
              }
            }

这也是因为你的后端不能(或甚至不允许)直接到达用户的付款细节,所以上面的json只有你知道它们后才能插入你的后端,或者从某种意义上说可以写任何你想要的东西。这仅用于在订单预览中显示,并且不会与用户的Google帐户的付款详细信息进行交叉检查。

总之,如果结果未指定(actions.intent.TRANSACTION_REQUIREMENTS_CHECK)或者预计用户会采取措施(OK),RESULT_TYPE_UNSPECIFIED可能只返回非USER_ACTION_REQUIRED状态或者当前设备/表面(ASSISTANT_SURFACE_NOT_SUPPORTED)不支持交易,或者当前地区/国家(REGION_NOT_SUPPORTED)不支持交易。