【问题标题】:Amazon Lex with Lambda function - error 424 Failed Dependency (Python)带有 Lambda 函数的 Amazon Lex - 错误 424 失败的依赖项 (Python)
【发布时间】:2018-09-28 09:42:23
【问题描述】:

我复制并编辑了 OrderFlowers Amazon Lex 蓝图以询问某人的名字和姓氏。在测试 Lambda 函数时,我得到了正确的响应,但是当我尝试在 Lex 中调用我的意图时,我在我的浏览器控制台中收到 424 错误依赖失败,并且我的测试机器人报告 “发生错误:无效的 Lambda 响应:收到来自 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)

【问题讨论】:

  • 您查看过 Cloud Watch 上的日志吗?

标签: amazon-web-services aws-lambda amazon-lex


【解决方案1】:

我试图重现您的错误,并且在我的案例中发生错误的唯一情况是我有一些语法错误,例如不正确的缩进。转到函数日志(或者:转到https://console.aws.amazon.com/cloudwatch,单击左侧窗格上的Logs,选择与您的lambda函数对应的日志组,选择您看到错误时的日志流并查找一些消息或打开您的 lambda 函数代码,转到 Monitoring 选项卡并单击 View logs in CloudWatch)

我看到你在这里分享的代码有错误的缩进(函数体应该多一个标签)。您在 lambda 函数编辑器中的代码是否看起来相同或在此处粘贴代码时缩进消失了?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-28
    • 2018-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多