我创建了一个名为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作为响应。