Amazon Lex с лямбда-функцией - ошибка 424 Failed Dependency (Python) - PullRequest
0 голосов
/ 28 сентября 2018

Я скопировал и отредактировал план OrderFlowers Amazon Lex, чтобы запросить имя и фамилию человека.При тестировании функции Lambda я получаю правильный ответ, но при попытке вызвать свое намерение в Lex я получаю ошибку 424 Failed Dependency в моей консоли broswer, и мой тестовый бот сообщает "Произошла ошибка: недопустимый Lambda Response:Получен ответ от Lambda: Unhandled ".Я просмотрел код несколько раз и не могу понять, является ли это проблемой с разрешением или что-то не так с выполнением.Мой код ниже и спасибо заранее.

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)

1 Ответ

0 голосов
/ 18 января 2019

Я пытался воспроизвести вашу ошибку, и единственные ситуации, когда ошибка произошла в моем случае, были, когда у меня были некоторые синтаксические ошибки, такие как неправильный отступ.Перейдите к журналам функций (либо: перейдите к https://console.aws.amazon.com/cloudwatch,, нажмите Logs на левой панели, выберите группу журналов, соответствующую вашей лямбда-функции, выберите поток журналов, в котором было время, когда вы увидели ошибку, и найдите некоторые сообщения.или откройте код лямбда-функции, перейдите на вкладку Monitoring и нажмите View logs in CloudWatch)

Я увидел, что код, которым вы поделились, имеет неправильный отступ (в теле функции должна быть еще одна вкладка).Ваш код в редакторе лямбда-функций выглядит так же, или отступы исчезли при вставке кода здесь?

...