由于我没有使用模拟器获取accessToken请求我按上述方式执行了上述操作
https://developers.google.com/actions/identity/account-linking#json
请求登录助手
header('Content-Type: application/json');
$askToken = array (
'conversationToken' => '{"state":null,"data":{}}',
'expectUserResponse' => true,
'expectedInputs' =>
array (
0 =>
array (
'inputPrompt' =>
array (
'initialPrompts' =>
array (
0 =>
array (
'textToSpeech' => 'MY AUTHENTICATION END POINT URL',
),
),
'noInputPrompts' =>
array (
),
),
'possibleIntents' =>
array (
0 =>
array (
'intent' => 'actions.intent.SIGN_IN',
'inputValueData' =>
array (
),
),
),
),
),
);
echo json_encode($askToken);
exit();
我收到错误
"
sharedDebugInfo": [
{
"name": "ResponseValidation",
"subDebugEntry": [
{
"name": "UnparseableJsonResponse",
"debugInfo": "API Version 2: Failed to parse JSON response string with 'INVALID_ARGUMENT' error: \"expected_inputs[0].possible_intents[0]: Proto field is not repeating, cannot start list.\"."
}
]
}
]
},
"visualResponse": {}
}
错误
API版本2:无法使用' INVALID_ARGUMENT'解析JSON响应字符串错误:\" expected_inputs [0] .possible_intents [0]:原始字段不重复,无法启动列表。\"。"
答案 0 :(得分:4)
对于初学者来说 - 这是来自模拟器的非常好的错误消息。它告诉您JSON中存在错误的确切路径,因此可以使用the webhook response的文档来跟踪JSON可能看起来不像预期的JSON的原因。
在这种情况下,inputValueData
的值必须是JSON对象,而不是JSON数组。默认情况下,PHP的json_encode()
函数假定空的PHP数组是空的JSON数组(这是noInputPrompts
属性的正确假设。)
你需要强迫它成为一个对象。您无法使用JSON_FORCE_OBJECT设置,因为noInputPrompts
会更改为对象,这也是错误的。
您需要使用
等语法将数组转换为对象(object)array()
所以你的代码看起来像
$askToken = array (
'conversationToken' => '{"state":null,"data":{}}',
'expectUserResponse' => true,
'expectedInputs' =>
array (
0 =>
array (
'inputPrompt' =>
array (
'initialPrompts' =>
array (
0 =>
array (
'textToSpeech' => 'MY AUTHENTICATION END POINT URL',
),
),
'noInputPrompts' =>
array (
),
),
'possibleIntents' =>
array (
0 =>
array (
'intent' => 'actions.intent.SIGN_IN',
'inputValueData' =>
(object)array (
),
),
),
),
),
);
echo json_encode($askToken);