You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Amazon Lex未向Lambda函数发送正确事件,遇sessionstate键错误求助

解决Amazon Lex集成Lambda时的'sessionstate' KeyError问题

核心问题分析

你遇到的问题有两个关键诱因:

  1. 测试事件不匹配:当前使用的Lambda测试事件是默认的{'key1': 'value1', ...},完全不符合Amazon Lex V2发送的事件格式,导致代码找不到sessionState字段。
  2. 字段大小写错误:Lex V2的事件字段是sessionState(首字母大写),但代码中写的是小写的sessionstate,这会直接触发KeyError。

分步解决方案

1. 修正Lambda代码中的字段名

将代码中的event['sessionstate']改为event['sessionState'],正确的代码片段示例:

def lambda_handler(event, context):
    # 修正字段大小写
    slots = event['sessionState']['intent']['slots']
    # 后续业务逻辑...

2. 使用Lex V2标准测试事件

在Lambda控制台替换默认测试事件为Lex V2的格式,示例如下(替换为你机器人的实际意图和槽位):

{
  "sessionId": "test-session-123",
  "sessionState": {
    "intent": {
      "name": "YourTargetIntent",
      "slots": {
        "YourSlotName": {
          "value": {
            "interpretedValue": "sample-value"
          }
        }
      },
      "state": "FulfillmentInProgress"
    },
    "sessionAttributes": {}
  },
  "inputTranscript": "user test input",
  "invocationSource": "FulfillmentCodeHook"
}

3. 验证Lex与Lambda的关联配置

  • 打开Amazon Lex控制台,进入你的机器人,找到目标意图,在Fulfillment模块中确认已选择你的Lambda函数作为代码钩子。
  • 检查Lambda的权限:在Lambda的配置 > 权限页面,确保执行角色包含AmazonLexBotExecutionRole权限,或添加信任策略允许lexv2.amazonaws.com调用该Lambda。

4. 确认机器人版本已发布

Lex机器人只有发布后才能正常调用Lambda,进入机器人的Deploy页面,选择一个别名发布当前版本。

额外排查点

如果以上步骤仍未解决,查看Lex的CloudWatch日志,确认Lex实际发送给Lambda的事件格式:

  • 若日志中显示事件确实缺少sessionState,检查意图是否启用了Fulfillment Code Hook,或是否在Lex控制台的测试窗口中触发了正确的意图。

内容的提问来源于stack exchange,提问作者Serge_M

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 13:15:12