【问题标题】:AWS lambda function- 'An error has occurred: Received error response from Lambda: Handled'AWS lambda 函数-“发生错误:收到来自 Lambda 的错误响应:已处理”
【发布时间】:2017-10-23 07:39:41
【问题描述】:

使用AWS Lex 创建聊天机器人并在AWS Lambda 中使用Node.js。

错误:发生错误:收到来自 Lambda 的错误响应: 已处理

Lambda 函数:

var aws = require('aws-sdk');
var ses = new aws.SES({region: 'us-east-1'});

    exports.handler = function(event, context, callback) {

        var eParams = {
            Destination: {
                ToAddresses: [event.currentIntent.slots.Email]
            },
            Message: {
                Body: {
                    Text: {
                        Data: "Hi, How are you?"
                    }
                },
                Subject: {
                    Data: "Title"
                }
            },

            Source: "abc@gmail.com"
        };
        var email = ses.sendEmail(eParams, function(err, data){
            if(err) 
            else {

                context.succeed(event);

            }
        });
    };

成功执行后如何从 Lambda 获得对 Lex 的正确响应(电子邮件服务正常工作)。我试过context.done();,但没有成功。

编辑 1: 尝试从AWS Documentation for LEX 添加下面的响应测试仍然得到相同的错误响应。

exports.handler = (event, context, callback) => { 

callback(null, { 
"dialogAction": { 
"type": "ConfirmIntent", 
"message": { 
"contentType": "PlainText or SSML", 
"content": "message to convey to the user, i.e. Are you sure you want a large pizza?" 
} 

} 


});

【问题讨论】:

  • 您是否收到类似Received invalid response from Lambda 的错误,但这似乎是来自此处的 424 DependencyFailedException -> docs.aws.amazon.com/lex/latest/dg/API_runtime_PostText.html
  • @yashhy 是的,我得到了错误,是的,它是 424 DependencyFailedException
  • 知道你是如何解决这个错误的424?
  • @yashhy 尚未解决,我认为需要使用 IAM 角色授予 lex 权限
  • @yashhy 在 IAM 角色中已经获得了 Post Text '{ "Version": "2012-10-17", "Statement": [ { "Action": [ "lex:PostText" ], "效果": "允许", "资源": "*" } ] }'

标签: node.js amazon-web-services lambda


【解决方案1】:

如 lambda-input-response-format 文档中所述,响应中需要 here fulfillmentState 属性。

另一件事是您必须在响应中传递PlainText 或SSML 以获取contentType。在您的情况下,它只是 PlainText。

    exports.handler = (event, context, callback) => {
      callback(null, {
        "dialogAction": {
          "type": "ConfirmIntent",
          "fulfillmentState": "Fulfilled", // <-- Required
          "message": {
            "contentType": "PlainText",
            "content": "message to convey to the user, i.e. Are you sure you want a large pizza?"
          }
        }
    });

上面的代码应该可以解决你的问题。

但是,如果您在网络选项卡中看到 req-res,您会收到 HTTP 错误 424,上面写着 DependencyFailedException,上面写着 “Amazon Lex 没有足够的权限来调用 Lambda 函数” em> 非常具有误导性。

【讨论】:

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