从DynamoDB读取数据并与Alexa一起召回

时间:2018-02-20 10:08:18

标签: amazon-web-services aws-lambda amazon-dynamodb alexa alexa-skills-kit

我尝试使用Alexa创建一项技能,使用扫描或查询功能(或两者)从DynamoDB表中读取数据。

我表格中的列是日期,时间和电影名称。

我是新手,但我设法将我的Lambda功能链接到Alexa。我还创建了一个单独的Lambda函数,当我配置测试事件时,它将从我的表中调用数据,因此当我输入特定日期时,它将调用相应的电影和时间。但是现在我想把它实现到Alexa中并且不确定如何。

这是我目前的代码



console.log('Loading function');

var AWSregion = 'us-east-1';  // us-east-1
var AWS = require('aws-sdk');
var dclient = new AWS.DynamoDB.DocumentClient();

var getItems = (event, context, callback)=>{
    
    dclient.get(event.params,(error,data)=>{
        if(error){
            callback(null,"error occurerd");
        }
        else{
            callback(null,data);
        }
    });
};

exports.handler = getItems;




我需要在alexa中启动技能的代码是



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

        var request = event.request;

        if (request.type === "LaunchRequest") {
            context.succeed(buildResponse({
                speechText: "Welcome to H.S.S.M.I skill, what would you like to find",
                repromptText: "I repeat, Welcome to my skill, what would you like to find",
                endSession: false
            }));
        }


        else if (request.type === "SessionEndedRequest") {
            options.endSession = true;
            context.succeed();
        }
        else {
            context.fail("Unknown Intent type");
        }
        
        



    } catch (e) {

    }


};

function buildResponse(options) {
    var response = {
        version: "1.0",
        response: {
            outputSpeech: {
                "type": "SSML",
                "ssml": `<speak><prosody rate="slow">${options.speechText}</prosody></speak>`
            },

            shouldEndSession: options.endSession
        }
    };

    if (options.repromptText) {
        response.response.reprompt = {
            outputSpeech: {
                "type": "SSML",
                "ssml": `<speak><prosody rate="slow">${options.repromptText}</prosody></speak>`
            }
        };
    }

    return response;
}
&#13;
&#13;
&#13;

我不介意将我的桌子从DynamoDB改为其他东西,只要我能记住这些数据。

1 个答案:

答案 0 :(得分:1)

请尝试以下代码,

&#13;
&#13;
var DBHandler = require("./DBHandler")

var DBHandler = require("./DBHandler")
exports.handler = (event, context, callback) => {
    try {
        
        var request = event.request;

        if (request.type === "LaunchRequest") {
            context.succeed(buildResponse({
                speechText: "Welcome to home remedy. Please tell me what is the problem you want remedy for?",
                repromptText: "You can say for example, home remedy for headache",
                endSession: false
            }));
        }
        else if (request.type === "IntentRequest") {
            let options = {};

            if (request.intent.name === "Cinema") {



                DBHandler.getItems(ID, function (err, data) {
                    if (err) {
                        context.fail(err);

                    } else {

                        if (data.Item !== undefined) {



                            options.speechText = data.Item.YOURFIELDHERE
                            options.endSession = true;
                            context.succeed(buildResponse(options));


                        } else {
                            options.speechText = `I am Sorry, I couldn't find any data! `
                            options.endSession = true;
                            context.succeed(buildResponse(options));
                        }
                    }

                    callback(null, data)
                });



            } else if (request.intent.name === "AMAZON.StopIntent" || request.intent.name === "AMAZON.CancelIntent") {
                options.speechText = "ok, thanks for using my skill.";
                options.endSession = true;
                context.succeed(buildResponse(options));
            }

            else {
                context.fail("Unknown Intent")
            }
        }

        else if (request.type === "SessionEndedRequest") {
            options.endSession = true;
            context.succeed();
        }
        else {
            context.fail("Unknown Intent type")
        }



    } catch (e) {

    }


};


function buildResponse(options) {
    var response = {
        version: "1.0",
        response: {
            outputSpeech: {
                "type": "SSML",
                "ssml": `<speak><prosody rate="slow">${options.speechText}</prosody></speak>`
            },

            shouldEndSession: options.endSession
        }
    };

    if (options.repromptText) {
        response.response.reprompt = {
            outputSpeech: {
                "type": "SSML",
                "ssml": `<speak><prosody rate="slow">${options.repromptText}</prosody></speak>`
            }
        };
    }
    
    return response;
}
&#13;
&#13;
&#13;

和DBHandler将是,

&#13;
&#13;
const AWS = require('aws-sdk');
AWS.config.update({
    region: "Location"
});

var docClient = new AWS.DynamoDB.DocumentClient()

var table = "TableName";

var getItems = (Id,callback) => {   
  
    var params = {
        TableName: table,
        Key: {
            "Id": Id
        }
    };

    docClient.get(params, function (err, data) {
        callback(err, data);
    });

};

module.exports = {
    getItems
};
&#13;
&#13;
&#13;