首页 文章

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

提问于
浏览
2

我想用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 被触发时,我正在使用webhook将Google智能助理连接到以下python脚本(后端):

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 不同 .

Therefore, my question is: In which cases am I going to receive a result from actions.intent.TRANSACTION_REQUIREMENTS_CHECK which is different than OK?

If I am going to get an OK result for anything that I am writing then what is the point of using actions.intent.TRANSACTION_REQUIREMENTS_CHECK?

附:我想到以下关于来自Google文档的 actions.intent.TRANSACTION_REQUIREMENTS_CHECK

注意:actions.intent.TRANSACTION_REQUIREMENTS_CHECK意图目前正在开发中,无论用户的付款设置和区域设置如何,都将返回成功状态 . 要测试故障状态方案,请在语音激活扬声器上请求意图 .

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

1 回答

  • 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帐户的付款详细信息进行交叉检查 .

    总之,如果结果未指定( RESULT_TYPE_UNSPECIFIED )或者预期用户采取行动( USER_ACTION_REQUIRED )或者当前设备/表面( ASSISTANT_SURFACE_NOT_SUPPORTED )不支持交易,或者交易情况如此,则 actions.intent.TRANSACTION_REQUIREMENTS_CHECK 可能仅返回非 OK 状态当前地区/国家/地区不支持( REGION_NOT_SUPPORTED ) .

相关问题