Я пытаюсь подключить свою веб-страницу к своему боту 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, но продолжаю получать эту же ошибку.
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',
]);
Других решений пока нет …