Чтение данных из Dynamodb с использованием Alexa с функцией лямбда - PullRequest
1 голос
/ 07 февраля 2020

Я пытаюсь прочитать данные из моей таблицы динамо-базы данных с использованием alexa, но кажется, что моя лямбда-функция не может получить доступ к моей таблице. Вот код для получения данных из Dynamodb:

# Gets the data from dynamodb based on userid

def GetData(session):
    userId = session['user']['userId'].split('.')
    userId = userId[3]
    try:
        response = table.query(
            KeyConditionExpression=Key('guid').eq(str(userId))
        )

        # print ("Got data: " + str(len(response)))
        print(response)
        for item in response['Items']:
            final_response = item["command"]
            tstamp = item["tstamp"]

        if (response['Count'] == 0):
            final_response = "No Data with this userid. You can ask to get the userid"

        else:
            now = datetime.datetime.utcnow()
            timestamp = int(round((now - datetime.datetime(2016, 1, 1)).total_seconds()))
            if ((timestamp - int(tstamp)) > 60):
                final_response = "No Data received from device in past 1 minute"

        return final_response
    except ClientError as e:
        print(e.response['Error']['Message'])

Когда я задаю Алексею свой пользовательский вопрос, я получаю только один ответ: «Нет данных» с этим идентификатором пользователя. Вы можете попросить получить идентификатор пользователя. Когда я тестирую запуск своей лямбда-функции, она запускается успешно. Но это не запрос к базе данных.

1 Ответ

1 голос
/ 08 февраля 2020

Если вы хотите сохранять и извлекать данные на основе userId, вы можете использовать интерфейс persistenceAdapter, предоставленный в ASK SDK. Похоже, что вы в настоящее время не используете это. Я определенно рекомендую его, так как он значительно упрощает управление обработчиками для различных Intents (и предоставляет полезные абстракции, подобные этой). ASK SDK документы https://developer.amazon.com/en-US/docs/alexa/alexa-skills-kit-sdk-for-python/overview.html

Абстракция позволит вам использовать S3 или Dynamo в качестве разработчика. Вот библиотека DynamoDB. https://github.com/alexa/alexa-skills-kit-sdk-for-python/tree/master/ask-sdk-dynamodb-persistence-adapter

Создайте и зарегистрируйте адаптер Dynamo с помощью конструктора SkillBuilder (ex): https://github.com/alexa/skill-sample-python-highlowgame/blob/master/lambda/py/lambda_function.py#L16

Используйте свой адаптер (ex) : https://github.com/alexa/skill-sample-python-highlowgame/blob/master/lambda/py/lambda_function.py#L130

При использовании адаптера помните, что динамический вызов записи не происходит до тех пор, пока вы не сохраните его, поэтому вы можете изменить объект по своему желанию, пока не вызовете функцию сохранения. Все объекты handler_input имеют ссылку на persistent_attributes через attribute_manager (это также позволяет вам легко работать с session_attributes)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...