#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)
...
Теперь, что делать с этими сохраненными атрибутами сеанса, когда намерение выполнено? Убрать их?
Спасибо за помощь.