Sarthak Srivastava
Sarthak Srivastava

Reputation: 1518

AWS lambda function- 'An error has occurred: Received error response from Lambda: Handled'

Working on AWS Lex for creating a ChatBot and using the Node.js in AWS Lambda.

Error: An error has occurred: Received error response from Lambda: Handled

Lambda function:

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: "[email protected]"
        };
        var email = ses.sendEmail(eParams, function(err, data){
            if(err) 
            else {

                context.succeed(event);

            }
        });
    };

How to get a proper response from Lambda to Lex after successful execution (Email Service works properly). I have tried context.done(); but it did not worked out.

Edit 1: Tried adding below response test from AWS Documentation for LEX still getting the same error response.

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?" 
} 

} 


});

Upvotes: 2

Views: 5649

Answers (1)

yashhy
yashhy

Reputation: 3086

As mentioned in the lambda-input-response-format docs here fulfillmentState property is required in the response.

Other thing is you have to pass either PlainText OR SSML for the contentType in the response. In your case its just 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?"
          }
        }
    });

The above code should solve your problem.

However if you see the req-res in the network tab you would receive HTTP Error 424 which says DependencyFailedException which says "Amazon Lex does not have sufficient permissions to call a Lambda function" very misleading.

Upvotes: 3

Related Questions