我想用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_CHECK
和 Int2
后我收到的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_CHECK
和 Int2
给出,因为这两个没有被触发,所以我没有得到任何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 回答
我认为您必须返回Google文档才能解决此问题 . 根据Google文档,
actions.intent.TRANSACTION_REQUIREMENTS_CHECK
的可能响应如下:RESULT_TYPE_UNSPECIFIED
,OK
,USER_ACTION_REQUIRED
,ASSISTANT_SURFACE_NOT_SUPPORTED
,REGION_NOT_SUPPORTED
(image) .他们中没有任何东西与此完全相关:
这也是因为你的后端不能(或甚至不允许)直接到达用户的付款细节,所以上面的json只有你知道它们后才能插入你的后端,或者在某种意义上你可以写任何东西你要 . 这仅用于在订单预览中显示,并且不会与用户的Google帐户的付款详细信息进行交叉检查 .
总之,如果结果未指定(
RESULT_TYPE_UNSPECIFIED
)或者预期用户采取行动(USER_ACTION_REQUIRED
)或者当前设备/表面(ASSISTANT_SURFACE_NOT_SUPPORTED
)不支持交易,或者交易情况如此,则actions.intent.TRANSACTION_REQUIREMENTS_CHECK
可能仅返回非OK
状态当前地区/国家/地区不支持(REGION_NOT_SUPPORTED
) .