Постконтентная ошибка Amazon Lex «Не удалось декодировать атрибуты сеанса». - PullRequest
0 голосов
/ 01 июня 2018

Я пытаюсь подключить свою веб-страницу к своему боту Lex с помощью postContent из AWS SDK для PHP.

Я устанавливаю учетные данные и аргументы, а затем пытаюсь выполнить 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' => "{}",
    'sessionAttributes' => "{}",
    'userId' => 'XXXXXXXXXXXX',
]);

Это ошибки с:

'Ошибка выполнения «PostContent» на «https://runtime.lex.us -east-1.amazonaws.com/ бут / ХХХХ / псевдоним / ХХХХ / пользователь / XXXXXXXXXX / содержание";

Ошибка HTTP AWS: ошибка клиента: POST https://runtime.lex.us-east-1.amazonaws.com/bot/XXXX/alias/XXXX/user/XXXXXXXXXX/content привел к ответу 400 Bad Request: {"message": "Недопустимый запрос: не удалось декодировать атрибуты сеанса. Атрибуты сеанса должны быть в кодировке Baseson json map of Stringto String "} '(length = 142)

Я пытался использовать все виды строк JSON, строк в кодировке JSON и строк в кодировке Base64 в атрибутах sessionAttributes, но я продолжаю получать эту же ошибку.

1 Ответ

0 голосов
/ 08 июня 2018

LexRuntimeService в AWS SDK автоматически JSON кодирует , а Base64 кодирует массив postContent.Передав ей строку JSON, кодировка json в SDK поместит двойные кавычки вокруг {}, что делает его "{}", и это приведет к ошибке.

Так что просто передайте sessionAttributes и requestAttributesкак массивы PHP.

$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(),            // <---- PHP Array not JSON
    'userId' => 'XXXXXXXXXXXX',
]);
...