我正在尝试构建 Alexa 技能,该技能在启动时必须通过 Node JS 请求模块发出发布请求来获取数据。
实际发出请求的代码摘录有效,因为我已经对其进行了测试。但是,当我尝试将其包含在 AWS Lambda 函数中时,它不会被执行。
由于我是 JS 和 AWS 的初学者,调试这对我来说非常困难,我什至无法远程弄清楚它。任何帮助它真的很感激。
exports.handler = (event, context) => {
try {
// New session
if (event.session.new) {
// New Session
console.log("NEW SESSION");
}
// Launch Request
switch (event.request.type) {
case "LaunchRequest":
var url = "https://api.random.org/json-rpc/1/invoke";
var myRequest = {
"jsonrpc": "2.0",
"method": "generateStrings",
"params": {
"apiKey": "my-api-key",
"n": "1",
"length": "3",
"characters": "abcdefghijklmnopqrstuvwxyz0123456789"
},
"id": 96
}
var pin;
request.post(
url,
{json: myRequest},
function (error, response, body) {
if (!error && response.statusCode == 200) {
pin = body.result.random.data[0];
console.log(pin);
}
else {
console.log(error);
}
}
);
console.log("LAUNCH REQUEST");
var welcome = "Welcome. ";
var pinStatement = "Your 3 letter or number pin is: " + pin
context.succeed(
generateResponse(
buildSpeechletReponse(welcome + pinStatement, true),
{}
)
);
break;
// Intent Request
case "IntentRequest":
console.log("INTENT REQUEST");
break;
// Session Ended Request
case "SessionEndedRequest":
console.log("SESSION ENDED REQUEST");
break;
default:
context.fail(`INVALID REQUEST TYPE: ${event.request.type}`);
}
}
catch (error) {
context.fail(`Exception: ${error}`);
}
}
//Here are the helper functions:
buildSpeechletReponse = (outputText, shouldEndSession) => {
return {
outputSpeech : {
type: "PlainText",
text: outputText
},
shouldEndSession: shouldEndSession
};
}
generateResponse = (sessionAttributes, speechletResponse) => {
return {
version: "1.0",
sessionAttributes: sessionAttributes,
response: speechletResponse
};
}
最佳答案
您在请求收到响应之前调用 context.succeed()
。
case "LaunchRequest":
var url = "https://api.random.org/json-rpc/1/invoke";
var myRequest = {
"jsonrpc": "2.0",
"method": "generateStrings",
"params": {
"apiKey": "my-api-key",
"n": "1",
"length": "3",
"characters": "abcdefghijklmnopqrstuvwxyz0123456789"
},
"id": 96
}
var pin;
request.post(
url,
{json: myRequest},
function (error, response, body) {
if (!error && response.statusCode == 200) {
pin = body.result.random.data[0];
console.log(pin);
var response = buildSpeechletReponse("Welcome. Your 3 letter or number pin is: " + pin, true)
context.succeed(generateResponse(response, {}));
}
else {
context.fail(error || body);
}
}
);
console.log("LAUNCH REQUEST");
break;
关于javascript - Node JS request.post 在 AWS Lambda 中未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41577371/