当前位置: 首页 > 知识库问答 >
问题:

Amazon Lex postContent错误“解码会话属性失败”。

凌远
2023-03-14

我试图将我的网页连接到我的Lex机器人使用来自AWS SDK for 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',
]);

‘在“https://runtime.lex.us-east-1.amazonaws.com/bot/xxxx/alias/xxx/user/xxxxxxxx/content”上执行“postContent”时出错;

AWS HTTP错误:客户端错误:post https://runtime.lex.us-east-1.amazonaws.com/bot/xxxx/alias/xxxx/user/xxxxxxx/content导致400错误请求响应:{“消息”:“无效请求:未能解码会话属性。会话属性应该是Base64编码的字符串到字符串的json映射”}‘(长度=142)

我尝试在sessionAttributes中使用各种JSON字符串、JSON编码的字符串和Base64编码的字符串,但仍然出现同样的错误。

共有1个答案

方谦
2023-03-14

AWS SDK中的LexRuntimeService自动对postContent数组进行JSON编码和Base64编码。通过传递一个JSON字符串,SDK中的JSON编码将在{}周围加上双引号,使其成为“{}”,从而导致错误。

因此,只需将SessionAttributesRequestAttributes作为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',
]);
 类似资料:
  • 使用WicketTester时,访问会话的属性会引发NullPointerException错误。 wicket 9之前也有类似的问题:单元测试mockito httpSession 讨论建议使用 测试员。getRequest()。getSession()。setAttribute(“用户名”、“测试用户1”); 而不是 测试员。getHttpSession()。setAttribute(“用户名

  • servlet 可以按名称绑定对象属性到 HttpSession 实现,任何绑定到会话的对象可用于任意其他的 servlet,其属于同一个 ServletContext 且处理属于相同会话中的请求。 一些对象可能需要在它们被放进会话或从会话中移除时得到通知。这些信息可以从 HttpSessionBindingListener 接口实现的对象中获取。这个接口定义了以下方法,用于标识一个对象被绑定到会

  • 问题内容: 我正在使用SSH2。当我尝试通过设置属性时,这是正确的。但是,当我尝试使用获得相同的属性时,我什么也没有。 为什么?他们不一样吗? 当我使用时,我得到了这些: 似乎在休眠状态下进行会话。为什么? 问题答案: 是的,它们是不同的,在scriptlet中,您使用http会话隐式对象;在struts标签属性中,您引用通过OGNL检索的struts会话映射对象。您一无所获,只是因为它们与众不同

  • 我有一个使用servlet会话属性显示div的问题 我有一个“result.jsp”页面。在jsp中,我有一个“生成URL”链接、一个空的输入文本字段和一个“addThis”div。链接“生成URL”调用jquery ajax方法“utilComp()”,它调用一个设置会话属性“saveLink”、返回一个值并填充空文本字段的servlet。 如果属性会话“saveLink”为空(因为尚未单击生成

  • 我正在开发一个定制的discord机器人,主要是为了好玩。我从另一台名为Kurisu的服务器上发现了另一个discord bot,它是完全定制和开源的。这里是github:https://github.com/nh-server/Kurisu.在国防部。派克(https://github.com/nh-server/Kurisu/blob/port/cogs/mod.py),在第432行,有一个函

  • 我目前完全无法解决Hibernate的问题,我得到的消息是: 在以下方法中: 但是我在SQL中没有看到任何错误,它在阿帕奇德比中运行得很好。 我已经在 StackOverflow 和其他地方尝试了一些方法,但没有什么可以解决这个问题。 一个简单的应用程序中有两个类: 和书: 每个映射到数据库表: 而书是: 谁能告诉我哪里出了问题? 如果SQL最终起作用,如果我使用正确的方法将输出转换为Person