Alexa 技能集 - context.succeed 未从 AWS lambda(nodejs) 执行
Alexa Skill Set - context.succeed not getting executed from AWS lambda(nodejs)
我已经从 lambda 函数发出了一个 "http.get" 请求,并且正在使用响应来构建对 ASK 的回复。
在下面的代码中 - 在 switch case 中 "GetName" context.succeed 从未被调用,而在 switch case 中 "GetNameParameter" context.succeed 被成功执行。某些问题是由于 "GetName" 的 "http.get" 请求造成的吗?如何解决这个问题。
每当我添加 "http.get" 请求时,context.succeed 方法不起作用,因此我无法让 alexa 工作。
任何人都可以帮助解决问题。
以下是我的代码:
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
};
};
我明白了,回调导致了问题。
发表评论 "callback(null, 'Hello from Lambda');",问题已解决。
我已经从 lambda 函数发出了一个 "http.get" 请求,并且正在使用响应来构建对 ASK 的回复。
在下面的代码中 - 在 switch case 中 "GetName" context.succeed 从未被调用,而在 switch case 中 "GetNameParameter" context.succeed 被成功执行。某些问题是由于 "GetName" 的 "http.get" 请求造成的吗?如何解决这个问题。
每当我添加 "http.get" 请求时,context.succeed 方法不起作用,因此我无法让 alexa 工作。
任何人都可以帮助解决问题。
以下是我的代码:
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
};
};
我明白了,回调导致了问题。
发表评论 "callback(null, 'Hello from Lambda');",问题已解决。