是什么可能导致aws-lamba函数中的输出“ Response:null”?

时间:2019-09-13 13:10:32

标签: aws-lambda alexa-skill

我创建了一个名为QouteIntent的意图,该意图应该使用实现某些api的函数来渲染随机qoute,但在Lambda函数中会得到“ Response:null”。我不确定这里是什么问题。我应该提到其他意图(即HelloIntent)也能很好地工作。

我是Alexa Skill的新手。请检查我的代码。预先感谢。

'use strict';
var http = require('http');
exports.handler = function(event,context){
try{
var request = event.request;
var session = event.session;

if (!event.session.attributes){
  event.session.attributes={};
}
//request type
 if (request.type==="LaunchRequest"){
          handleLaunchRequest(context);
     }
    else if(request.type==="IntentRequest"){
            if(request.intent.name==="HelloIntent"){
             handleHelloIntent(request,context);    
            } else if(request.intent.name==="QuoteIntent"){
              handleQuoteIntent(request,context,session);    
             }  else if(request.intent.name==="NextQuoteIntent"){
              handleNextQuoteIntent(request,context,session);    
             }else if(request.intent.name==="AMAZON.StopIntent"){
               context.succeed(buildResponse({
                  SpeechText : "Goodbye.",
                  endSession : true
               }));
              }
    }
    else if(request.type==="SessionEndedRequest"){

    }
    else{
            throw "Unknown intent type";
    }  
}
catch(e){
context.fail("Exception" + e);
}
};

function getQuote(callback) {
    var url = "http://api.forismatic.com/api/1.0/json?method=getQuote&lang=en&format=json";
    var req = http.get(url, function(res) {
      var body = "";

      res.on('data', function(chunk) {
        body += chunk;
      });

      res.on('end', function() {
        body = body.replace(/\\/g,'');
        var quote = JSON.parse(body);
        callback(quote.quoteText);
      });

    });

    req.on('error', function(err) {
      callback('',err);
    });

  }  
function getWish(callback){
    var myDate = new Date();
    var hours = myDate.getUTCHours-5;
    if(hours<0){
        hours = hours+24;
    }
    if (hours<12){
        return "Good Morning";
    }
    else if (hours<18){
        return "Good Afernoon";
    }
    else {
        return "Good Evening";
    }
}
function buildResponse(options){
var response = {
version: "1.0",
  response: {
    outputSpeech: {
      type: "SSML",
      ssml:"<speak>"+options.SpeechText+"</speak>"
    },
    shouldEndSession: options.endSession
  }
};
if(options.repromptText){
    response.response.reprompt= {
        outputSpeech: {
            type: "SSML",
             ssml:"<speak>"+options.repromptText+"</speak>" 
          },
    };
}
if(options.session && options.session.attributes){
  response.sessionAttributes = options.session.attributes;  
}
return response; 
}

function handleLaunchRequest(context){
  let options = {};
            options.SpeechText= "Welcome to Greeting skill.Whom you want to greet?";
            options.repromptText= "You can say for example, say hello to Freedom. Now, whom you want to greet? ";
            options.endSession= false;
        context.succeed(buildResponse(
            /*{SpeechText: "Welcome to Greeting skill. Using our skill you can greet your guests",
           repromptText: "Whom you want to greet? You can say for example, say hello to Freedom",
            endSession: false,}*/
        options));
    }

function handleHelloIntent(request,context){
  let options = {};
  let name = request.intent.slots.FirstName.value;
                options.SpeechText=getWish()+",";
                options.SpeechText+=`Hello <say-as interpret-as="spell-out">${name}</say-as> ${name}.`;
                getQuote(function(qoute,err){
                    if(err){
                        context.fail(err);
                    } else {
                        options.SpeechText+=qoute+".";
                        options.endSession=true;
                        context.succeed(buildResponse(options));
                    }
                });

}
function handleQuoteIntent(request,context,session){
  let options = {};
   options.session=session;
     getQuote(function(qoute,err){
        if(err){
          context.fail(err);
          } else {
       options.SpeechText=qoute;
       options.SpeechText +="Do you want to listen to one more qoute?";
       options.repromptText ="You can say yes or one more.";
       options.session.attributes.qouteIntent=true;
       options.endSession=false;
       context.succeed(buildResponse(options));
        }
       });
}
function handleNextQuoteIntent(request,context,session){
  let options = {};
  options.session=session;
if (session.attributes.qouteIntent){
    getQuote(function(qoute,err){
      if(err){
         context.fail(err);
          } else {
       options.SpeechText=qoute;
       options.SpeechText +="Do you want to listen to one more qoute?";
       options.repromptText ="You can say yes or one more.";
       options.session.session.attributes.qouteIntent=true;
       options.endSession=false;
       context.succeed(buildResponse(options));
        }
       });
} else{options.SpeechText = "Wrong invocation of this intent";
       options.endSession=true;
       context.succeed(buildResponse(options));
      }

}

//I'm using the following code to run my test event


{
  "session": {
    "new": false,
    "sessionId": "session1234",
    "attributes": {},
    "user": {
      "userId": "usr123"
    },
    "application": {
      "applicationId": "amzn1.echo-sdk-ams.app.5acba9b5-6d09-4444-aaa8-618c56eb0335"
    }
  },
  "version": "1.0",
  "request": {
    "intent": {

      "name": "QouteIntent"
    },
    "type": "IntentRequest",
    "requestId": "request5678"
  }
}

我希望有一个随机的qoute作为响应。

0 个答案:

没有答案