Amazon Lex с лямбда-функцией - ошибка 424 Failed Dependency (Python)
Я скопировал и отредактировал план OrderFlowers Amazon Lex, чтобы узнать его имя и фамилию. При тестировании функции Lambda я получаю правильный ответ, но при попытке вызвать свое намерение в Lex я получаю ошибку 424 Failed Dependency в моей консоли broswer, и мой тестовый бот сообщает: "Произошла ошибка: недопустимый Lambda-ответ: получен ответ об ошибке" из лямбды: необработанный ". Я просмотрел код несколько раз и не могу понять, является ли это вопросом разрешения или что-то не так с выполнением. Мой код ниже и спасибо заранее.
import math
import dateutil.parser
import datetime
import time
import os
import logging
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
def get_slots(intent_request):
return intent_request['currentIntent']['slots']
def elicit_slot(session_attributes, intent_name, slots, slot_to_elicit, message):
return {
'sessionAttributes': session_attributes,
'dialogAction': {
'type': 'ElicitSlot',
'intentName': intent_name,
'slots': slots,
'slotToElicit': slot_to_elicit,
'message': message
}
}
def close(session_attributes, fulfillment_state, message):
response = {
'sessionAttributes': session_attributes,
'dialogAction': {
'type': 'Close',
'fulfillmentState': fulfillment_state,
'message': message
}
}
return response
def delegate(session_attributes, slots):
return {
'sessionAttributes': session_attributes,
'dialogAction': {
'type': 'Delegate',
'slots': slots
}
}
def parse_int(n):
try:
return int(n)
except ValueError:
return float('nan')
def build_validation_result(is_valid, violated_slot, message_content):
if message_content is None:
return {
"isValid": is_valid,
"violatedSlot": violated_slot,
}
return {
'isValid': is_valid,
'violatedSlot': violated_slot,
'message': {'contentType': 'PlainText', 'content': message_content}
}
def validate_get_name(first_name, last_name):
first_name = ['john', 'ben']
if first_name is None and first_name not in first_name:
return build_validation_result(False,
'FirstName',
'Sorry please state your first name. ')
last_name = ['smith', 'doran']
if last_name is None and last_name not in last_name:
return build_validation_result (False,
'LastName',
'Sorry please state your last name. ')
return build_validation_result(True, None, None)
def get_name(intent_request):
first_name = get_slots(intent_request)["FirstName"]
last_name = get_slots(intent_request)["LastName"]
source = intent_request['invocationSource']
if source == 'DialogCodeHook':
slots = get_slots(intent_request)
validation_result = validate_get_name(first_name, last_name)
if not validation_result['isValid']:
slots[validation_result['violatedSlot']] = None
return elicit_slot(intent_request['sessionAttributes'],
intent_request['currentIntent']['name'],
slots,
validation_result['violatedSlot'],
validation_result['message'])
output_session_attributes = intent_request['sessionAttributes'] if intent_request['sessionAttributes'] is not None else {}
if get_name is not None:
return delegate(output_session_attributes, get_slots(intent_request))
return close(intent_request['sessionAttributes'],
'Fulfilled',
{'contentType': 'PlainText',
'content': 'Thanks, we have now preformed your intent'})
def dispatch(intent_request):
logger.debug('dispatch userId={}, intentName={}'.format(intent_request['userId'], intent_request['currentIntent']['name']))
intent_name = intent_request['currentIntent']['name']
if intent_name == 'GetName':
return get_name(intent_request)
raise Exception('Intent with name ' + intent_name + ' not supported')
def lambda_handler(event, context):
os.environ['TZ'] = 'America/New_York'
time.tzset()
logger.debug('event.bot.name={}'.format(event['bot']['name']))
return dispatch(event)
0 ответов
Я пытался воспроизвести вашу ошибку, и единственные ситуации, когда ошибка произошла в моем случае, были, когда у меня были некоторые синтаксические ошибки, такие как неправильный отступ. Перейти к журналам функций (либо: перейдите на https://console.aws.amazon.com/cloudwatch, нажмите Logs
на левой панели выберите группу журналов, соответствующую вашей лямбда-функции, выберите поток журналов, имеющий время, когда вы увидели ошибку, и найдите некоторые сообщения или откройте код лямбда-функции, перейдите к Monitoring
вкладка и нажмите View logs in CloudWatch
)
Я видел, что код, которым вы поделились здесь, имеет неправильный отступ (у тела функций должна быть еще одна вкладка). Ваш код в редакторе лямбда-функций выглядит так же, или отступы исчезли при вставке кода здесь?