【问题标题】:How to troubleshoot this AWS lambda error - An error has occurred: Received error response from Lambda: Unhandled?如何解决此 AWS lambda 错误 - 发生错误:收到来自 Lambda 的错误响应:未处理?
【发布时间】:2017-10-10 08:53:19
【问题描述】:

我是 AWS 新手。我正在使用 aws lex 和 aws lambda c# 构建聊天机器人。我正在使用示例 aws lambda C# 程序

namespace AWSLambda4
{
    public class Function
    {

        /// <summary>
        /// A simple function that takes a string and does a ToUpper
        /// </summary>
        /// <param name="input"></param>
        /// <param name="context"></param>
        /// <returns></returns>
        public string FunctionHandler(string input, ILambdaContext context)
        {
            try
            {
                return input?.ToUpper();
            }
            catch (Exception e)
            {

                return "sorry i could not process your request due to " + e.Message;
            }
        }
    }
}

我在 aws lex 中创建了一个插槽来映射第一个参数 input 。但我总是收到此错误发生错误:收到来自 Lambda 的错误响应:未处理

在 Chrome 网络选项卡中,我可以看到与身份验证有关的 Error- 424 Failed Dependency

请帮助如何解决 aws lex 使用的 AWS lambda C# 错误。我遇到了 cloudwatch,但我不确定。

谢谢!

【问题讨论】:

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


    【解决方案1】:

    Lex 和 Lambda 之间的通信不像普通函数那样直接。 Amazon Lex 期望 Lambda 以特定的 JSON 格式输出,并且槽详细信息等数据也以类似的 JSON 发送到 Lambda。你可以在这里找到它们的蓝图:Lambda Function Input Event and Response Format。确保您的 C# 代码也以类似的方式返回 JSON,以便 Lex 可以理解并进行进一步处理。

    希望对你有帮助!

    【讨论】:

    • Lambda 有处理和未处理的错误。因为它是未处理的错误,所以我猜 lambda 方法本身没有被调用。而 lex 控制台状态 Error- 424 Failed Dependency 这与身份验证有关。所以我认为它更多与配置相关的错误有关,而不是与编码相关的错误。
    • @ManirajSS 我有一个错误,上面写着Received invalid response from Lambda,在网络选项卡中它似乎是 424。你知道可能的路由原因吗?
    • @yashhy 我已经解决了我的问题。请查看我的回答,如果您有任何疑问,请告诉我。
    【解决方案2】:

    这对我有用:

    Lex 以LexEvent 类类型发送请求,并期望以LexResponse 类类型响应。所以我将参数从string 更改为LexEvent,并将返回类型从string 更改为LexResponse

    public LexResponse FunctionHandler(LexEvent lexEvent, ILambdaContext context)
        {
            //Your logic goes here.
            IIntentProcessor process;
    
            switch (lexEvent.CurrentIntent.Name)
            {
                case "BookHotel":
                    process = new BookHotelIntentProcessor();
                    break;
                case "BookCar":
                    process = new BookCarIntentProcessor();
                    break;                
                case "Greetings":
                    process = new GreetingIntentProcessor();
                    break;
                case "Help":
                    process = new HelpIntentProcessor();
                    break;
                default:
                    throw new Exception($"Intent with name {lexEvent.CurrentIntent.Name} not supported");
            }
    
    
            return process.Process(lexEvent, context);// This is my custom logic to return LexResponse
        }
    

    但我不确定问题的根本原因。

    【讨论】:

    • @Repakula 提到 424 错误响应似乎是 Lex 返回类型问题?在我的情况下,我使用 nodejs 并遵循here 中所述的示例结构
    • 我按照@Repakula的建议解决了这个问题,看详细答案here
    猜你喜欢
    • 2017-10-23
    • 1970-01-01
    • 1970-01-01
    • 2018-02-28
    • 2017-09-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多