Я пытаюсь научиться использовать Alexa для чтения данных из моей таблицы DynamoDB, используя функцию сканирования или запроса (или и то, и другое).
Столбцы в моей таблице - это дата, время и название фильма.
Я новичок в этом, но мне удалось связать мою функцию Lambda с Alexa. Я также создал отдельную лямбда-функцию, которая будет вызывать данные из моей таблицы при настройке тестовых событий, поэтому, когда я ввожу конкретную дату, она будет вспоминать соответствующий фильм и время. Однако теперь я хочу реализовать это в 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;
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 === "IntentRequest") {
let options = {};
if (request.intent.name === "cinema") {
} else if (request.intent.name === "AMAZON.StopIntent" || request.intent.name === "AMAZON.CancelIntent") {
options.speechText = "ok, good bye.";
options.endSession = true;
context.succeed(buildResponse(options));
}
else if (request.intent.name === "AMAZON.HelpIntent") {
options.speechText = "My skill will read your table depending on what is asked. For example, you can ask what about a specific date. Please refer to skill description for all possible utterences.";
options.repromptText = "What is the data sign you want to know about today? If you want to exit from my skill please say stop or cancel.";
options.endSession = false;
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;
}
function readDynamoItem(params, callback) {
var AWS = require('aws-sdk');
AWS.config.update({region: AWSregion});
var dynamodb = new AWS.DynamoDB();
console.log('reading item from DynamoDB table');
dynamodb.scan(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else{
console.log(data); // successful response
callback(JSON.stringify(data));
}
});
var docClient = new AWS.DynamoDB.DocumentClient();
//Get item by key
docClient.get(params, (err, data) => {
if (err) {
console.error("Unable to read item. Error JSON:", JSON.stringify(err, null, 2));
} else {
console.log("GetItem succeeded:", JSON.stringify(data, null, 2));
callback(data.Item.message); // this particular row has an attribute called message
}
});
}
///////////////////////////////////////////////////////////////////////////////
А вот и мой DBHandler
var AWS = require('aws-sdk');
AWS.config.update({
region: "'us-east-1'"
});
let docClient = new AWS.DynamoDB.DocumentClient();
var table = "Cinema";
let getItems = (Id,callback) => {
var params = {
TableName: "cinema",
Key: {
"date": "2018-01-04",
"filmname": "rugrats"
}
};
docClient.get(params, function (err, data) {
callback(err, data);
});
};
module.exports = {
getItems
};
Я могу запустить приложение, и у меня есть функция Lambda, которая работает сама по себе, когда я настраиваю тестовое событие для поиска фильма с определенной даты, но я не могу заставить его работать с Alexa.
Может ли кто-нибудь помочь мне или указать, где я ошибаюсь
ОБНОВИТЬ*************
Вот как настраивается моя схема намерений
{
"intents": [
{
"slots": [
{
"name": "sincedate",
"type": "AMAZON.DATE"
}
],
"intent": "date"
},
{
"intent": "AMAZON.CancelIntent"
},
{
"intent": "AMAZON.HelpIntent"
},
{
"intent": "AMAZON.StopIntent"
},
{
"slots": [
{
"name": "sincedate",
"type": "AMAZON.DATE"
}
],
"intent": "cinema"
},
{
"intent": "MyIntent"
}
]
}