1
votes

I've created an API Gateway that links to my Amazon Lex bot. It has worked in the past, but for some reason it displays this error message now. The bot works when I test it in the 'Test Chatbot' feature in Lex.

The error occurred after I set the new function as a 'Lambda initialization and validation.'

Error Message:

START RequestId: e18b78ef-3177-4e2f-999a-33cd48258a60 Version: $LATEST
2020-01-26T05:37:01.003Z    e18b78ef-3177-4e2f-999a-33cd48258a60    ERROR   Invoke Error    {"errorType":"Error","errorMessage":"handled","stack":["Error: handled","    at _homogeneousError (/var/runtime/CallbackContext.js:13:12)","    at postError (/var/runtime/CallbackContext.js:30:54)","    at done (/var/runtime/CallbackContext.js:57:7)","    at fail (/var/runtime/CallbackContext.js:67:7)","    at /var/runtime/CallbackContext.js:105:16","    at processTicksAndRejections (internal/process/task_queues.js:93:5)"]}END RequestId: e18b78ef-3177-4e2f-999a-33cd48258a60
REPORT RequestId: e18b78ef-3177-4e2f-999a-33cd48258a60  Duration: 579.06 ms Billed Duration: 600 ms Memory Size: 128 MB Max Memory Used: 93 MB  

API:

var AWS = require('aws-sdk');
AWS.config.update({region: 'us-east-1'});

var lexruntime = new AWS.LexRuntime();

function main(event) {
  var params = {
    botAlias: 'myBot',
    botName: 'myBot',
    inputText: event.body.inputText, 
    userId: 'myUserId'

  };
  return new Promise((resolve, reject) => {
    lexruntime.postText(params, function(err, data) {
      if (err) { 
        var err2 = err.errorMessage
        reject(err2)
      }
      else {     
        resolve({data})
      }
    });
  });
}

exports.handler = main;

New function that I created right before the error message showed up:

'use strict';

function close(sessionAttributes, intentName, slots, slotToElicit, message) {
    return {
        sessionAttributes,
        dialogAction: {
            type: 'ElicitSlot',
            intentName: intentName,
            slots,
            slotToElicit,
            message,
        },
    };
}

function delegate(sessionAttributes, slots){
    return { 
        sessionAttributes: sessionAttributes,
        dialogAction: {
            type: "Delegate",
            slots: slots
        }    
    };
}

function dispatch(intentRequest, callback) {
    const sessionAttributes = intentRequest.sessionAttributes;
    if(!sessionAttributes.userStatus){
        var param1 = {
            Email: null
        };
        intentRequest.currentIntent.slots = param1;
        callback(close(sessionAttributes, 'Verify', intentRequest.currentIntent.slots, 'Email', { "contentType": "PlainText", "content": "Please enter your email"}));
    }
    else {
        callback(delegate(sessionAttributes, intentRequest.currentIntent.slots));
    }
}

exports.handler = (event, context, callback) => {
    try {
        dispatch(event,
            (response) => {
                callback(null, response);
            });
    } catch (err) {
        callback(err);
    }
};

What is the meaning of the error?

1

1 Answers

0
votes

I have found the problem:

Fixed:

function dispatch(intentRequest, callback) {
    var sessionAttributes = intentRequest.sessionAttributes;
    if(sessionAttributes){
        if(sessionAttributes.userStatus){
            callback(delegate(sessionAttributes, intentRequest.currentIntent.slots));
        }
    }
    else {
        var param1 = {
            Email: null
        };
        intentRequest.currentIntent.slots = param1;
        callback(close(sessionAttributes, 'Verify', intentRequest.currentIntent.slots, 'Email'));
    }
}