Я новичок в Alexa Skill Developer, у которого проблемы с миграцией с v1 - v2.Мой навык - заставить Алексу вспомнить, где я хранил личные вещи, используя DynamoDB.Это в основном как инвентарь.
Я использую стандартный пакет ask-sdk и узел js 8.10
Я использовал .withTableName ('PlacesandThings') и .withAutoCreateTable (true) для создания таблицы.Это правильный метод?Я вставляю свой лямбда-обработчик ниже
const skillBuilder = Alexa.SkillBuilders.standard();
exports.handler = skillBuilder
.addRequestHandlers(LaunchRequestHandler,
AddThingsIntentHandler,
TellIntentHandler,
HelpIntentHandler,
CancelAndStopIntentHandler,
SessionEndedRequestHandler,
)
.addErrorHandlers(ErrorHandler)
.withTableName('PlacesandThings')
.withAutoCreateTable(true)
.lambda();
Я не могу даже запустить умение.Я получаю следующую ошибку:
{
"errorMessage": "skillBuilder.addRequestHandlers(...).addErrorHandlers(...).withTableName is not a function",
"errorType": "TypeError",
"stackTrace": [
"Module._compile (module.js:652:30)",
"Object.Module._extensions..js (module.js:663:10)",
"Module.load (module.js:565:32)",
"tryModuleLoad (module.js:505:12)",
"Function.Module._load (module.js:497:3)",
"Module.require (module.js:596:17)",
"require (internal/module.js:11:18)"
]
}
Я настроил два намерения: AddThingsIntent, который добавляет значения в таблицу, и TellIntent, который напоминает пользователю, где хранятся элементы.Обработчики намерений приведены ниже:
const AddThingsIntentHandler = {
canHandle(handlerInput) {
return handlerInput.requestEnvelope.request.type === 'IntentRequest'
&& handlerInput.requestEnvelope.request.intent.name === 'AddThingsIntent';
},
handle(handlerInput) {
var ThingName = handlerInput.requestEnvelope.request.intent.slots.ThingName.value;
var PlaceName = handlerInput.requestEnvelope.request.intent.slots.PlaceName.value;
const attributes = handlerInput.attributesManager.getSessionAttributes();
if(attributes.Place === undefined){
attributes.Place = {};
}
attributes.Place[ThingName] = PlaceName;
const speechText = "I will remember that your " + ThingName + "is/are in/on your " +PlaceName;
return handlerInput.responseBuilder
.speak(speechText)
.reprompt(speechText)
.withSimpleCard('Reminder Skill', speechText)
.getResponse();
}
};
const TellIntentHandler = {
canHandle(handlerInput) {
return handlerInput.requestEnvelope.request.type === 'IntentRequest'
&& handlerInput.requestEnvelope.request.intent.name === 'TellIntent';
},
handle(handlerInput) {
var speechText = "";
var ThingName = handlerInput.requestEnvelope.request.intent.slot.ThingName.value;
const attributes = handlerInput.attributesManager.getSessionAttributes();
if(attributes.Place[ThingName]) {
speechText = 'Your' + ThingName + 'is/are in/on ' +attributes.Place[ThingName];
}
else {
speechText = "I don't know where your " +ThingName + "is/are";
}
return handlerInput.responseBuilder
.speak(speechText)
.reprompt(speechText)
.withSimpleCard('Reminder Skill', speechText)
.getResponse();
}
};
Я добавил таблицу в DynamoDB вручную и тоже попробовал.Должен ли я использовать адаптер персистентности DynamoDB?Что мне теперь делать?Любая помощь приветствуется.