В настоящее время я разрабатываю навык Amazon Alexa, который запрашивает у пользователя цвет.Пользователь вводит цвет голосом, и Alexa проверяет, находится ли цвет в определенном массиве значений.Если это так, он возвращает имя цвета с идентификатором.Теперь это работает как задумано, но теперь я хотел бы поместить это значение в AWS DynamoDB.Я прочитал несколько руководств по подключению и записи в DynamoDB с использованием AWS Lambda (Runtime Node.js 8.10). Итак, в следующем коде вы можете увидеть мой AnswerIntentHandler моего Alexa Skill.Я включил экспорт.дескриптор функции для записи значения идентификатора цвета и названия цвета в таблице с именем «alexa_farbe».Но когда я симулирую Skill с разработчиком Alexa Skill, код выдает только «speechText» и, похоже, не запускает код для записи в DynamoDB.Возможно, невозможно запустить файл export.handle в AnswerIntentHanlder или это так?Я очень новичок в этой теме, поэтому я не совсем уверен, где ошибка в этом коде.Я предоставляю код моего AnswerIntentHandler, но я также могу предоставить весь код Alexa Skill.Я надеюсь, что кто-нибудь может дать мне подсказку, что делать.
const AnswerIntentHandler = {
canHandle(handlerInput) {
return handlerInput.requestEnvelope.request.type === 'IntentRequest'
&& handlerInput.requestEnvelope.request.intent.name === 'AnswerIntent';
},
handle(handlerInput) {
const slots = handlerInput.requestEnvelope.request.intent.slots;
const number = slots['FarbAuswahl'].value;
var numberid = slots['FarbAuswahl'].resolutions.resolutionsPerAuthority[0].values[0].value.id; /* ID der Farbe auslesen */
var speechText = 0;
speechText = `Prima, ich stelle die Farbe ${number} mit der ID ${numberid} ein!`;
/* Ab hier Versuch in die Datenbank DynamoDB zu schreiben */
exports.handle = function(e, etx, callback) {
var params = {
Item: {
ID: '${numberid}',
Farbname: '${number}'
},
TableName: 'alexa_farbe'
};
docClient.put(params, function(err, data) {
if(err) {
callback(err, null);
} else {
callback(null, data);
}
});
};
return handlerInput.responseBuilder
.speak(speechText)
.withSimpleCard('Ausgewählte Farbe:', speechText)
.getResponse();
},
};