刚开始使用DialogFlow构建应用程序 . 我在 Cloud 上托管了Java服务(不使用firebase) . 基本上,我从代理接收数据并将响应作为Json发回 . 对于简单查询,它按预期工作 . 就像我说“我的名字是X”一样,该服务将作为“Hello X”响应,它将在响应中播放 . JSON响应发送为
{speech: "Hello X", type:"0"}
现在,我想获取用户位置,因此我想要求用户访问该位置的权限 . 我有一个单独的意图,没有任何training_Phrases . 它有一个事件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 Bad request . 我在这里做错了什么或者我错过了什么?
1 回答
有三个问题 .
第一个是响应权限请求发送
actions_intent_PERMISSION
事件 . 所以这不应该是触发请求的意图 .其次,您要求的是用户名,而不是他们的位置 . 你想要
DEVICE_COARSE_LOCATION
或DEVICE_PRECISE_LOCATION
.第三个也是更大的问题是你使用Dialogflow的JSON,你将使用different response format这是基本的Dialogflow response,以及
data.google
JSON属性中Google特定内容的动作 .您的回复应该看起来像这样:
Dialogflow还有some other examples的请求和回复,这些请求和回复应该有助于对话的其他部分 .