Python Alexa Lambda KeyError:&x27;意图';

Python Alexa Lambda KeyError:&x27;意图';,python,amazon-web-services,aws-lambda,alexa,Python,Amazon Web Services,Aws Lambda,Alexa,我对编程了解不多,但已经和raspberry Pi合作了几年。我想在Pi中使用Alexa并运行脚本来打开和关闭GPIO。在尝试了一些教程之后,我将AWS Lambda与Alexa技能联系起来。问题是我在测试技能时出错了。 “技能反应被标记为失败 卢斯 请求标识符:amzn1.echo-api.Request.49687858-4c4f-482f-b82d-dd0ffedc9841 目标Lambda应用程序返回失败响应“ 我检查了AWS云上的日志,这就是我得到的 'intent': KeyErro

我对编程了解不多,但已经和raspberry Pi合作了几年。我想在Pi中使用Alexa并运行脚本来打开和关闭GPIO。在尝试了一些教程之后,我将AWS Lambda与Alexa技能联系起来。问题是我在测试技能时出错了。 “技能反应被标记为失败 卢斯 请求标识符:amzn1.echo-api.Request.49687858-4c4f-482f-b82d-dd0ffedc9841

目标Lambda应用程序返回失败响应“

我检查了AWS云上的日志,这就是我得到的

'intent': KeyError
Traceback (most recent call last):
  File "/var/task/lambda_function.py", line 40, in lambda_handler
    intent_name = event['request']['intent']['name']
KeyError: 'intent 
我不知道该怎么办。我改编了hackster.io教程中的代码。我使用python 2.7编写的Lambda代码是:

import boto3

access_key = 
access_secret = 
region =
queue_url = 

def build_speechlet_response(title, output, reprompt_text, should_end_session):
    return {
        'outputSpeech': {
            'type': 'PlainText',
            'text': output
        },
        'card': {
            'type': 'Simple',
            'title': "SessionSpeechlet - " + title,
            'content': "SessionSpeechlet - " + output
        },
        'reprompt': {
            'outputSpeech': {
                'type': 'PlainText',
                'text': reprompt_text
            }
        },
        'shouldEndSession': should_end_session
    }

def build_response(session_attributes, speechlet_response):
    return {
        'version': '1.0',
        'sessionAttributes': session_attributes,
        'response': speechlet_response
    }

def post_message(client, message_body, url):
    response = client.send_message(QueueUrl = url, MessageBody= message_body)
    
def lambda_handler(event, context):
    client = boto3.client('sqs', aws_access_key_id = access_key, aws_secret_access_key = access_secret, region_name = region)
    intent_name = event['request']['intent']['name']
    if intent_name == "LightOn":
        post_message(client, 'on', queue_url)
        message = "on"
    elif intent_name == "LightOff":
        post_message(client, 'off', queue_url)
        message = "off"
    else:
        message = "Unknown"
        
    speechlet = build_speechlet_response("Mirror Status", message, "", "true")
    return build_response({}, speechlet)
我只想打开然后关闭led,但我不知道我是否需要所有的代码。如果有一个简单的方法来编码这个在lamba请告诉我


非常感谢您的帮助

有几种不同的请求类型,“标准类型”是:
可以完成EntryQuest
启动请求
IntentRequest
,和
SessionEndRequest

首先打开技能,将发送一个
LaunchRequest
,它不包含
intent
参数。这可能就是为什么会出现
KeyError

一个好的方法是在处理请求之前检查请求类型

if event['request']['type'] == "LaunchRequest":
    print("I'm a launch request.")
elif event['request']['type'] == "IntentRequest":
    print("I'm an intent request.")

可以在中找到各种请求类型及其可以保存的参数。

So,
LaunchRequest
这就像声明变量一样?所以我需要从导入boto3 LaunchRequest==intent开始!我设法做到了你的建议。它打印了“我是一个启动请求”,并且在请求中得到了相同的错误。因此,我需要将其改为“意向请求”?@PablinhoRiveiro如果你正在努力了解Alexa技能如何工作以及它们如何与lambda函数交互-一个好主意可能是看看有大量基本技能功能示例的地方,这些示例在开始时很有用。