我想用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'
在Google文档中为"Checking requirements with your own payment method"指定时,我在上面返回的json . 根据Google文档,这必须在下一步完成:
接收需求检查的结果在Assistant完成意图后,它会向您的履行发送一个请求,其中包含actions.intent.TRANSACTION_REQUIREMENTS_CHECK意图以及检查结果 . 要正确处理此请求,请声明由actions_intent_TRANSACTION_REQUIREMENTS_CHECK事件触发的Dialogflow意图 .
出于这个原因,我定义 Int2
并将其作为 actions_intent_TRANSACTION_REQUIREMENTS_CHECK
事件 .
However, I do not receive anything at my back-end like a result of the check and therefore I do not know if the action actions.intent.TRANSACTION_REQUIREMENTS_CHECK is really triggered. Why is this happening?
In general, how can I trigger one actions.intent.INTENT_NAME intent from my webhook/back-end?
当我使用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 Assistant模拟器上的webhook的以下信息/消息:
"responseMetadata": {
"status": {
"code": 14,
"message": "Webhook error (206)"
}
最后,让我提一下,我正在本地计算机上用 Python
和 ngrok
测试所有这些,所以这可能会产生问题,因为在Google文档的开头提到了以下内容:
警告:不应使用Actions Web Simulator来测试具有事务的应用程序 . 请使用启用助理的Android或iOS设备在开发过程中准确测试您的应用 .
2 回答
我终于解决了这个问题 .
当我用
Int1
键触发Int1
时,我不得不替换json中的密钥"data"
. 换句话说,我必须调整对Dialogflow
的v2 version
的履行回复 .因此,现在我在后端发出第二个帖子请求,因为
actions.intent.TRANSACTION_REQUIREMENTS_CHECK
和Int2
的触发器而发送 .具体来说,我得到以下内容:
我认为您的回复对象不正确 . intent 属性应该在 systemIntent 对象中