2017-01-26 5 views
0

Ich habe eine "http.get" Anfrage von Lambda-Funktion gemacht und verwende die Antwort für den Aufbau der Antwort zurück zu ASK.Alexa Skill Set - context.succeed wird nicht von AWS Lambda ausgeführt (nodejs)

In der folgenden Code - in Switch-Fall "GetName" context.succeed wird nie aufgerufen, während in Switch-Fall "GetNameParameter" context.succeed erfolgreich ausgeführt wird. Ist das ein Problem wegen "http.get" Anfrage von "GetName"? Wie man das löst.

Immer wenn ich die Anfrage "http.get" hinzufüge, funktioniert die context.succeed-Methode nicht und daher kann ich alexa nicht zum Laufen bringen.

Kann jemand helfen, das Problem zu lösen.

Im Anschluss ist mein Code:

var http = require('http'); 
exports.handler = (event, context, callback) => { 
    // TODO implement 
    if(event.session.new){ 
     console.log("NEW SESSION"); 
    } 
    switch(event.request.type){ 
     case "LaunchRequest": 
     console.log("LAUNCH REQUEST"); 

     context.succeed(
        generateResponse(
        buildSpeechletResponse("Welcome", true), 
        {} 
       ) 
       ); 

     break; 

     case "IntentRequest": 
     console.log("IntentRequest"); 

     switch(event.request.intent.name){ 

      case "GetName": 

       var endpoint = //endpoint 

      var body = "" 
      http.get(endpoint, (response) => { 
       response.on('data', (chunk) => { body += chunk }) 
       response.on('end',() => { 
       var data = JSON.parse(body) 
       var name = data.name 
       console.log("Name: "+name); 

       //Not getting executed 
       context.succeed(
        generateResponse(
        buildSpeechletResponse(`Name is ${data}`, true), 
        {} 
       ) 
       ) 
       }) 
      }) 
      break; 

      case "GetNameParameter": 

      context.succeed(
        generateResponse(
         buildSpeechletResponse("OK, Name is "+event.request.intent.slots.Name.value, true), 
         {} 
        ) 
       ); 
      break; 

     } 

     break; 

     case "SessionEndedRequest": 
     // Session Ended Request 
     console.log(`SESSION ENDED REQUEST`); 
     break; 

     default: 
     context.fail(`INVALID REQUEST TYPE: ${event.request.type}`); 
    } 
    callback(null, 'Hello from Lambda'); 
}; 

buildSpeechletResponse = (outputText, shouldEndSession) => { 

    return { 
    outputSpeech: { 
     type: "PlainText", 
     text: outputText 
    }, 
    shouldEndSession: shouldEndSession 
    }; 

}; 

generateResponse = (speechletResponse, sessionAttributes) => { 

    return { 
    version: "1.0", 
    sessionAttributes: sessionAttributes, 
    response: speechletResponse 
    }; 

}; 

Antwort

0

ich es bekam, wurde Rückruf das Problem verursacht.

Kommentierte "Rückruf (Null, 'Hallo von Lambda');" und das Problem wurde gelöst.

Verwandte Themen