Это для 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.
Задача ещё не решена.
Других решений пока нет …