Конечная точка Alexa Skill DynamoDB не может быть достигнута

Я борюсь с простым навыком 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
}

}

person Jason    schedule 24.10.2016    source источник
comment
Вам удалось решить эту проблему?   -  person Kevin Wu    schedule 06.06.2017


Ответы (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),
            {}
            );
        );
    });
person Octavio    schedule 26.10.2016
comment
Спасибо. К сожалению, я все еще не могу заставить работать удаленную конечную точку. Это странно. - person Jason; 11.11.2016