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

Alexa技能Lambda Handler报错:KeyError 'session' 求助

解决Alexa Lambda函数中的KeyError: 'session'问题

看起来你遇到的问题是Lambda函数在尝试访问event['session']时找不到这个键,这通常是因为测试时传入的请求JSON不完整,或者你没有使用符合Alexa技能规范的请求结构。

问题原因分析

你的代码直接假设event对象里一定包含session字段,但如果测试时的输入只是单独的session片段(就像你提供的那样),而不是完整的Alexa请求结构,Lambda自然会抛出KeyError。Alexa发送给Lambda的请求是一个包含version、session、request等顶级字段的完整JSON对象,缺少任何一个都会导致代码报错。

解决方案

1. 使用完整的Alexa请求JSON进行测试

你需要把session部分放到完整的Alexa请求结构中,下面是一个可以直接用于测试的示例:

{
  "version": "1.0",
  "session": {
    "new": true,
    "sessionId": "amzn1.echo-api.session.894e0116-055a-4307-8574-7059a24e8219",
    "application": {
      "applicationId": "amzn1.ask.skill.d01d3328-ce02-4357-9605-bb12d5cafce2"
    },
    "user": {
      "userId": "amzn1.ask.account.AH7BOSFTFR54XGKQ3MYAK2LHCRK4CV5PUIS65HQWC4OY5B6NIBWJJSUJH73PBDZAG3KTPFI4QS7TYCZPRETM267GW3PVBJFSYXBAGTCH5YYKA2MUFAN43PFB4CNQD6M7QX5DWLC5AEGBDRR3SIH7SHJOFBAR3QWCOIYZLZ3D4Q7Z3SPCGVLRF3CCMQAOGUEAAGJMIHWVT6ADKCQ"
    }
  },
  "request": {
    "type": "LaunchRequest",
    "requestId": "amzn1.echo-api.request.12345678-1234-1234-1234-123456789012",
    "timestamp": "2024-05-20T12:00:00Z"
  }
}

把这个完整的JSON放到Lambda控制台的测试事件中,再运行测试应该就能正常访问event['session']了。

2. 给代码增加容错处理

为了避免类似的KeyError,建议在代码中增加判断,或者使用.get()方法来安全访问嵌套字段,同时可以开启print(event)来调试实际传入的请求内容:

def lambda_handler(event, context):
    """ App entry point """
    print(event)  # 开启这个打印,查看实际传入的event结构
    # 安全检查session是否存在
    if event.get('session', {}).get('new'):
        on_session_started()
    # 同样安全处理request字段
    request_type = event.get('request', {}).get('type')
    if request_type == "LaunchRequest":
        return on_launch(event.get('request', {}))
    elif request_type == "IntentRequest":
        return on_intent(event.get('request', {}), event.get('session', {}))
    elif request_type == "SessionEndedRequest":
        return on_session_ended()

这样即使event结构不符合预期,也不会直接抛出KeyError,而是能优雅处理。

3. 使用Lambda的Alexa测试模板

在Lambda控制台创建测试事件时,选择Alexa Skills Kit的模板(比如"Alexa Start Session"),这样会自动生成符合规范的请求结构,你只需要替换对应的applicationId和userId即可,不用手动构造JSON。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:01:46