我想用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)
我在intent = 'Int1'
指定的时候返回的json是Google文档指定的#34;使用您自己的付款方式检查要求"。
根据Google文档,这必须在下一步完成:
收到需求检查的结果
在助理履行意图后,它会发送您的履行a 使用actions.intent.TRANSACTION_REQUIREMENTS_CHECK意图请求 检查结果。
要正确处理此请求,请声明一个Dialogflow意图 由actions_intent_TRANSACTION_REQUIREMENTS_CHECK事件触发。
出于这个原因,我定义了Int2
,并将其定义为actions_intent_TRANSACTION_REQUIREMENTS_CHECK
。
但是,由于检查结果,我在后端没有收到任何内容,因此我不知道动作actions.intent.TRANSACTION_REQUIREMENTS_CHECK
是否真的被触发了。为什么会这样?
一般情况下,如何从我的webhook /后端触发一个actions.intent.INTENT_NAME
意图?
当我使用Dialogflow的v2版本时,我在触发Int1
时收到有关Dialogflow上的webhook的以下信息/消息:
"webhookStatus": {
"code": 3,
"message": "Webhook call failed. Error: Failed to parse webhook JSON response: Cannot find field: data in message google.cloud.dialogflow.v2.WebhookResponse."
}
在相同的情况下,我在触发Int1
时收到有关Google智能助理模拟器上的webhook的以下信息/消息:
"responseMetadata": {
"status": {
"code": 14,
"message": "Webhook error (206)"
}
最后,让我提一下,我正在本地计算机上使用Python
和ngrok
对所有这些进行测试,因此这可能会产生问题,因为在Google文档的开头提到了以下内容:
警告:不应使用Actions Web Simulator来测试应用 与交易。请使用启用助理的Android或iOS 在开发过程中准确测试应用程序的设备。
答案 0 :(得分:2)
我终于解决了这个问题。
我必须使用密钥"data"
替换Int1
触发时jsen中的密钥"payload"
。换句话说,我必须调整对v2 version
的{{1}}的履行回复。
因此,现在我的后端发出第二个帖子请求,因为Dialogflow
和actions.intent.TRANSACTION_REQUIREMENTS_CHECK
的触发而发送。
具体来说,我得到以下内容:
Int2
答案 1 :(得分:-1)
我认为您的回复对象不正确。 intent 属性应位于 systemIntent 对象
中"data": {
"google": {
"expectUserResponse": true,
"isSsml": false,
"noInputPrompts": [],
"systemIntent": {
"intent": "actions.intent.TRANSACTION_REQUIREMENTS_CHECK",
"data": {
"@type": "type.googleapis.com/google.actions.v2.TransactionRequirementsCheckSpec",
"paymentOptions": {
"actionProvidedOptions": {
"displayName": "VISA-1234",
"paymentType": "PAYMENT_CARD"
}
}
}
}
}
}