#node.js #amazon-dynamodb #aws-lambda #alexa
#node.js #amazon-dynamodb #aws-lambda #alexa
Вопрос:
Я борюсь с простым навыком Alexa, изменяющим одно значение в моем DynamoDB. Я основываю свой код на примере ScoreKeeper, который предоставляет Amazon. Когда я использую симулятор сервиса или даже тестирую с помощью своего Echo, я получаю сообщение «Не удалось вызвать удаленную конечную точку или возвращенный ею ответ был недействительным».
Это мой встроенный код. Я убедился, что моя роль Lambda имеет доступ к DynamoDB. Не уверен, чего мне не хватает. Приветствуется любая помощь!
var https = require('https');
var AWS = require("aws-sdk");
exports.handler = (event, context) => {
try {
if (event.session.new) {
// New Session
console.log("NEW SESSION");
}
switch (event.request.type) {
case "LaunchRequest":
// Launch Request
console.log(`LAUNCH REQUEST`);
context.succeed(
generateResponse(
buildSpeechletResponse("Welcome to an Alexa Skill, this is running on a deployed lambda function", true),
{}
)
)
break;
case "IntentRequest":
// Intent Request
console.log(`INTENT REQUEST`);
var dynamodb = new AWS.DynamoDB({apiVersion: '2012-08-10'});
switch(event.request.intent.name) {
case "IncreaseVolume":
dynamodb.putItem({
TableName: 'VolumeTable',
Item: {
DeviceID: {
S: this._session.user.userId
},
Volume: {
S: "5"
}
}
}, function (err, data) {
if (err) {
console.log(err, err.stack);
}
});
context.succeed(
generateResponse(
buildSpeechletResponse("Volume has been increased", true),
{}
)
)
break;
default:
throw "Invalid intent"
}
break;
case "SessionEndedRequest":
// Session Ended Request
console.log(`SESSION ENDED REQUEST`)
break;
default:
context.fail(`INVALID REQUEST TYPE: ${event.request.type}`)
}
} catch(error) { context.fail(`Exception: ${error}`) }
}
// Helpers
buildSpeechletResponse = (outputText, shouldEndSession) => {
return {
outputSpeech: {
type: "PlainText",
text: outputText
},
shouldEndSession: shouldEndSession
}
}
generateResponse = (speechletResponse, sessionAttributes) => {
return {
version: "1.0",
sessionAttributes: sessionAttributes,
response: speechletResponse
}
}
Комментарии:
1. удалось ли вам решить эту проблему?
Ответ №1:
Вам следует провести рефакторинг вашего кода следующим образом:
dynamodb.putItem({
TableName: 'VolumeTable',
Item: {
DeviceID: {
S: this._session.user.userId
},
Volume: {
S: "5"
}
}
}, function (err, data) {
if (err) {
console.log(err, err.stack);
}
context.succeed(
generateResponse(
buildSpeechletResponse("Volume has been increased", true),
{}
);
);
});
Комментарии:
1. Спасибо. К сожалению, я все еще не могу заставить удаленную конечную точку работать. Это странно.