如何使用 Lex 在另一个 Lambda 函数中调用一个 Lambda 函数?

How to call a Lambda function within a another Lambda function using Lex?

我正在使用 AWS Lambda 和 Twilio。我有一个将 Lex 与 Twilio 集成的 Lambda 函数。我还有另一个 Lambda 函数可以为我的 LexBot 进行验证。两者都可以单独工作。但是,我正在尝试将它们放在一起,以便每当我的 LexBot 与 Twilio 集成时,它也会在同一个 Lambda 函数中调用我的验证。

有什么想法吗?谢谢。

这是将 Lex 与 Twilio 集成的 Lambda:

var twilio = require('twilio');
var qs = require('qs');
var AWS = require('aws-sdk');

exports.handler = (event, context, callback) => {
    try {
        var twilioSMS = qs.parse(event["body-json"]);
        //  ************************
        //  validate and filter bad/empty messages
        //  ************************
        if(!twilioSMS.hasOwnProperty('Body')){
            var error = new Error("Cannot process message without a Body.");
        callback(error);
    }
    else {
            //  Message is valid so now we prepare to pass it along to the Lex API.
            AWS.config.region = 'us-east-1';
            var lexruntime = new AWS.LexRuntime();
            var userNumber = twilioSMS.From.replace('+', '');
            var params = {
              botAlias: process.env.BOT_ALIAS,
              botName: process.env.BOT_NAME,
              inputText: twilioSMS.Body,
              userId: userNumber,
              sessionAttributes: {
              }
            };
            lexruntime.postText(params, function(err, data) {
                var twimlResponse = new twilio.TwimlResponse();
              if (err) {
                    console.log(err, err.stack); // an error occurred
              twimlResponse.message('Sorry, we ran into a problem at our end.');
              callback(err, twimlResponse.toString());
                } else {
                    console.log(data);           // got something back from Amazon Lex
                    twimlResponse.message(data.message);
            callback(null, twimlResponse.toString());
                }
            });
    }
} catch(e) {
    console.log(e);
    callback(e);
}
};

这是我的 Lambda 验证:

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

var numberType =event.currentIntent.slots.number,
    response = "is not valid. Try 'One' or 'Two'." ;

if(numberType === "one" ) {
    response = "Call: 111 111 1111 "
}
else if(numberType === "two") {
    response = "Call: 222 222 2222"
}
callback(null, {
    "dialogAction": {
        "type": "Close",
        "fulfillmentState": "Fulfilled",
        "message": {
            "contentType": "PlainText",
            "content": "Your option: " + event.currentIntent.slots.number + ": " + response
        }
    }
});
};

Step 函数将是您的朋友。请查看以下链接,

https://aws.amazon.com/step-functions/

https://cloudacademy.com/blog/aws-step-functions-a-serverless-orchestrator/

我意识到不需要编写 Lambda 函数来连接 Lex 和 Twilio。我所要做的就是转到我的 LexBot 控制台下的 'Channels' 并手动将我的机器人与我的 Twilio 帐户集成。