Это для AWS LexRuntimeService SDK для PHP.
Это полная ошибка, которую я продолжаю получать, когда Лекс отвечает на SDK любым ответом ElicitIntent:
ParserException: Ошибка синтаксического анализа JSON:Синтаксическая ошибка в ... / Aws / Api / Parser / PayloadParserTrait.php в строке 20
ElicitSlot не вызывает эту ошибку исключения.
Я не могу найти способ точно определить, какой объект или строка JSON анализируется и вызывает ошибку.
Но когда я использую бот тестового чата Lex и запускаю тот же ответ, что должен быть возвращенв SDK я заметил, что разница в JSON между намерением, которое работает, и другими намерениями, которые вызывают эту ошибку, является нулевым в поле IntentName.Однако, когда я пытаюсь предоставить intentName для ElicitIntent, бот-бот Lex при получении intentName выдает ошибку.Поэтому lex выводит null intentName для директив ElicitIntent.
См. Здесь:
Инициируйте намерение BookRide с помощью input = "book a ride".
Lex JSON Response =
{
"dialogState": "ElicitSlot",
"intentName": "BookRide",
"message": "Hi. Where are you going?",
"messageFormat": "PlainText",
"responseCard": null,
"sessionAttributes": {},
"slotToElicit": "address",
"slots": null
}
SDK RESULT = PASS.НЕТ ОШИБКИ.
Запустить другие намерения: Input = "hello", "thanks", "help"
(все другие намерения вызывают ElicitIntent, но с разными сообщениями)
Lex JSON Response=
{
"dialogState": "ElicitIntent",
"intentName": null,
"message": "Hello. I can help you order a ride. Just ask, book me a ride, to get started.",
"messageFormat": "PlainText",
"responseCard": null,
"sessionAttributes": {},
"slotToElicit": null,
"slots": null
}
SDK RESULT = ОШИБКА: ParserException: Error parsing JSON: Syntax error
Этот код передает сообщения моему боту Lex с помощью PostContent.
$credentials = new \Aws\Credentials\Credentials('XXXXXXXX', 'XXXXXXXXXXXXXXXXXXXXXXXXXX');
$args = array(
'region' => 'us-east-1',
'version' => 'latest',
'debug' => true,
'credentials' => $credentials
);
$lex_client = new Aws\LexRuntimeService\LexRuntimeServiceClient($args);
$lex_response = $lex_client->postContent([
'accept' => 'text/plain; charset=utf-8',
'botAlias' => 'XXXX',
'botName' => 'XXXX',
'contentType' => 'text/plain; charset=utf-8',
'inputStream' => $userInput,
'requestAttributes' => array(),
'sessionAttributes' => array(),
'userId' => 'XXXXXXXXXXXX',
]);
Любые идеи, что вызывает ParseException?
Или как я могу просмотреть детали того, что вызывает выброс ParseException?
ОБНОВЛЕНИЕ:
Это не решает проблему, но только что попыталсяиспользование postText
вместо postContent
и ElicitIntent
директивы работают нормально!
Таким образом, эта ошибка ограничена postContent
в SDK.