2016-10-24 5 views
0

Ich habe Probleme mit einem einfachen Alexa Skill, der einen Wert in meiner DynamoDB ändert. Ich stütze meinen Code von dem von Amazon bereitgestellten ScoreKeeper-Beispiel ab. Wenn ich den Dienst-Simulator verwende oder sogar mit meinem Echo teste, bekomme ich "Der entfernte Endpunkt konnte nicht aufgerufen werden, oder die Antwort, die zurückgegeben wurde, war ungültig."Alexa Skill DynamoDB Endpunkt konnte nicht erreicht werden

Dies ist mein Inline-Code. Ich habe sichergestellt, dass meine Lambda-Rolle Zugriff auf DynamoDB hat. Nicht sicher, was ich vermisse. Jede Hilfe wird geschätzt!

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 
} 

} 
+0

haben es geschafft, dieses Problem zu lösen? –

Antwort

1

Sie sollten Ihren Code auf diese Weise Refactoring:

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), 
      {} 
      ); 
     ); 
    }); 
+0

Danke. Leider kann ich den entfernten Endpunkt immer noch nicht zum Laufen bringen. Es ist seltsam. – Jason

Verwandte Themen