Проверка слота Amazon Lex: Избегайте повторной проверки одного и того же слота

#python #amazon-web-services #aws-lambda #amazon-lex

Вопрос:

Я пытаюсь найти разумный способ избежать проверки уже проверенного слота в Amazon Lex (с использованием Лямбды). Позвольте мне объяснить это более точно: во всех примерах, которые я нашел в документах AWS, каждый раз, когда событие Lex поступает в Lambda для проверки, каждый слот проверяется (слоты просто повторяются), например, Пример бронирования поездки Из AWS. Всякий раз, когда происходит событие, они проверяют все слоты ( location проверяются 4 раза…):

 def validate_hotel(slots):
    location = try_ex(lambda: slots['Location'])
    checkin_date = try_ex(lambda: slots['CheckInDate'])
    nights = safe_int(try_ex(lambda: slots['Nights']))
    room_type = try_ex(lambda: slots['RoomType'])

    if location and not isvalid_city(location):
        return build_validation_result(
            False,
            'Location',
            'We currently do not support {} as a valid destination.  Can you try a different city?'.format(location)
        )

    if checkin_date:
        if not isvalid_date(checkin_date):
            return build_validation_result(False, 'CheckInDate', 'I did not understand your check in date.  When would you like to check in?')

        if dateutil.parser.parse(checkin_date) < datetime.datetime.today():
            return build_validation_result(False, 'CheckInDate', 'Your check in date is in the past!  Can you try a different date?')

    if nights is not None and (nights < 1 or nights > 30):
        return build_validation_result(
            False,
            'Nights',
            'You can make a reservations for from one to thirty nights.  How many nights would you like to stay for?'
        )

    if room_type and not isvalid_room_type(room_type):
        return build_validation_result(False, 'RoomType', 'I did not recognize that room type.  Would you like to stay in a queen, king, or deluxe room?')

    return {'isValid': True}
 

Что вы рекомендуете в качестве хорошей практики? Я подумал о том, чтобы отслеживать уже проверенные слоты, чтобы sessionAttributes иметь что-то вроде:

 sessionAttrubiutes['slots']['location'] = {
    'value': 'The value we got from lex',
    'validated': bool
}
 

Затем в моей функции проверки я бы сначала проверил атрибуты сеанса, прежде чем проверять значение.
(Теперь это мой фрагмент кода):

 slots = event['sessionState']['intent']['slots']
for slot_name, slot_value in slots.items():
    if event['sessionState']['sessionAttributes']['slots'][slot_name]['validated']:
        continue
    # validate slots and take actions
    action = validate_slot(slot_name, slot_value)  
    ...
 

Теперь, что делать с этими сохраненными атрибутами сеанса, когда намерение выполнено? Убрать их?

Спасибо за помощь.