Постконтентная ошибка Amazon Lex & quot; Не удалось декодировать атрибуты сеанса. & Quot;

Я пытаюсь подключить свою веб-страницу к своему боту 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/bot/XXXX/alias/XXXX/user/XXXXXXXXXX/content«;

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

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

1

Решение

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',
]);
1

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

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