对话流程的履行响应
Fulfillment response for Dialog flow
刚开始使用 DialogFlow 构建应用程序。我在云端 Java 中托管了一项服务(不使用 firebase)。基本上,我从代理接收数据并将响应发送回 Json。对于简单查询,它按预期工作。就像我说 "My name is X" 一样,服务将响应为 "Hello X" 并将在 Response 上播放。 JSON 响应发送为
{speech: "Hello X", type:"0"}
现在,我想获取用户位置,所以我想询问用户访问该位置的权限。我有一个单独的意图,没有任何 training_Phrases。它有一个 Event actions_intent_PERMISSION。
我发送以下回复
{
"conversationToken": "[\"_actions_on_google_\"]",
"expectUserResponse": true,
"expectedInputs": [
{
"inputPrompt": {
"richInitialPrompt": {
"items": [
{
"simpleResponse": {
"textToSpeech": "PLACEHOLDER_FOR_PERMISSION"
}
}
]
}
},
"possibleIntents": [
{
"intent": "actions.intent.PERMISSION",
"inputValueData": {
"@type": "type.googleapis.com/google.actions.v2.PermissionValueSpec",
"optContext": "To locate you",
"permissions": [
"NAME"
]
}
}
],
"speechBiasingHints": [
"$geo_city",
"$event_category",
"$event_date"
]
}
],
"responseMetadata": {
"status": {},
"queryMatchInfo": {
"queryMatched": true,
"intent": "1ec64dc5-a6f4-44f6-8483-633b8638c729"
}
}
}
但是我得到的响应是 400 错误请求。我在这里做错了什么或者我遗漏了什么吗?
存在三个问题。
首先是 actions_intent_PERMISSION
事件被发送 以响应 权限请求。所以这不应该是触发请求的意图。
其次,您要求的是用户名,而不是他们的位置。您想要 DEVICE_COARSE_LOCATION
或 DEVICE_PRECISE_LOCATION
.
第三个也是更大的问题是您发送的 JSON 是 Action SDK 使用的格式。由于您使用的是 Dialogflow,因此您将使用 different response format which is the basic Dialogflow response,以及对 Google 特定内容的操作 data.google
JSON 属性.
您的回复应该更像这样:
{
"data": {
"google": {
"expectUserResponse": true,
"systemIntent": {
"intent": "actions.intent.PERMISSION",
"data": {
"@type": "type.googleapis.com/google.actions.v2.PermissionValueSpec",
"optContext": "To locate you",
"permissions": [
"NAME",
"DEVICE_PRECISE_LOCATION"
]
}
}
}
}
}
Dialogflow 也有 some other examples 的请求和回复,应该有助于您对话的其他部分。
刚开始使用 DialogFlow 构建应用程序。我在云端 Java 中托管了一项服务(不使用 firebase)。基本上,我从代理接收数据并将响应发送回 Json。对于简单查询,它按预期工作。就像我说 "My name is X" 一样,服务将响应为 "Hello X" 并将在 Response 上播放。 JSON 响应发送为
{speech: "Hello X", type:"0"}
现在,我想获取用户位置,所以我想询问用户访问该位置的权限。我有一个单独的意图,没有任何 training_Phrases。它有一个 Event actions_intent_PERMISSION。
我发送以下回复
{
"conversationToken": "[\"_actions_on_google_\"]",
"expectUserResponse": true,
"expectedInputs": [
{
"inputPrompt": {
"richInitialPrompt": {
"items": [
{
"simpleResponse": {
"textToSpeech": "PLACEHOLDER_FOR_PERMISSION"
}
}
]
}
},
"possibleIntents": [
{
"intent": "actions.intent.PERMISSION",
"inputValueData": {
"@type": "type.googleapis.com/google.actions.v2.PermissionValueSpec",
"optContext": "To locate you",
"permissions": [
"NAME"
]
}
}
],
"speechBiasingHints": [
"$geo_city",
"$event_category",
"$event_date"
]
}
],
"responseMetadata": {
"status": {},
"queryMatchInfo": {
"queryMatched": true,
"intent": "1ec64dc5-a6f4-44f6-8483-633b8638c729"
}
}
}
但是我得到的响应是 400 错误请求。我在这里做错了什么或者我遗漏了什么吗?
存在三个问题。
首先是 actions_intent_PERMISSION
事件被发送 以响应 权限请求。所以这不应该是触发请求的意图。
其次,您要求的是用户名,而不是他们的位置。您想要 DEVICE_COARSE_LOCATION
或 DEVICE_PRECISE_LOCATION
.
第三个也是更大的问题是您发送的 JSON 是 Action SDK 使用的格式。由于您使用的是 Dialogflow,因此您将使用 different response format which is the basic Dialogflow response,以及对 Google 特定内容的操作 data.google
JSON 属性.
您的回复应该更像这样:
{
"data": {
"google": {
"expectUserResponse": true,
"systemIntent": {
"intent": "actions.intent.PERMISSION",
"data": {
"@type": "type.googleapis.com/google.actions.v2.PermissionValueSpec",
"optContext": "To locate you",
"permissions": [
"NAME",
"DEVICE_PRECISE_LOCATION"
]
}
}
}
}
}
Dialogflow 也有 some other examples 的请求和回复,应该有助于您对话的其他部分。