我想用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_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
。
因此,我的问题是:在哪种情况下,我会收到actions.intent.TRANSACTION_REQUIREMENTS_CHECK
与[{1}}不同的结果?
如果我要为我正在撰写的任何内容获得OK
结果,那么使用OK
的重点是什么?
P.S。
我想到了以下关于来自Google文档的actions.intent.TRANSACTION_REQUIREMENTS_CHECK
:
注意:actions.intent.TRANSACTION_REQUIREMENTS_CHECK意图是 目前正在开发中,无论如何都会回归成功状态 用户的付款设置和区域设置。测试失败 状态场景,请求声控扬声器的意图。
但是当我在手机上用我的语音在Google智能助理上使用此应用时,我仍然没有看到任何差异。
答案 0 :(得分:2)
我认为您必须返回Google文档才能解决此问题。根据Google文档,actions.intent.TRANSACTION_REQUIREMENTS_CHECK
的可能回复如下:RESULT_TYPE_UNSPECIFIED
,OK
,USER_ACTION_REQUIRED
,ASSISTANT_SURFACE_NOT_SUPPORTED
,REGION_NOT_SUPPORTED
(image)。
他们中没有任何事情与此完全相同:
"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
)不支持交易。