Ошибка AWS SDK LexRuntimeService: исключение JSON ParserException

Это для 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», «спасибо», «помощь»
(все другие намерения вызывают 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.

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …