Ошибка AWS SDK LexRuntimeService: исключение JSON ParserException - PullRequest
0 голосов
/ 13 июня 2018

Это для 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.

...