Ошибка создания таблицы DynamoDB при использовании ASK-SDK v2 - PullRequest
0 голосов
/ 22 февраля 2019

Я новичок в 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?Что мне теперь делать?Любая помощь приветствуется.

...