Masalahnya adalah saya harus meletakkan context.succeed saya di dalam panggilan balik saya. Banyak terima kasih kepada sqlbot, karena pembicaraannya tentang panggilan balik membuat saya mempelajari di mana hal-hal yang sebenarnya mengakhiri eksekusi mereka.
Jadi ternyata saat menggunakan AWS Lambda, jika "konteks" berakhir sebelum panggilan balik Anda dipanggil, Anda tidak mendapatkan panggilan balik. Jadi meskipun saya telah menempatkan semua panggilan balik saya seperti ini:connect -> query -> end, panggilan balik pertama dari rantai dari connect tidak pernah dipanggil karena "context.succeed" dipanggil segera setelah itu, yang mengakhiri eksekusi.
Ini kode saya sampai sekarang (mendapatkan kueri yang tepat terjadi sekarang):
var mysql = require('mysql');
var connection = mysql.createConnection({
...
});
exports.handler = (event, context) => {
try {
if (event.session.new) {
// New Session
console.log("NEW SESSION");
}
switch (event.request.type) {
case "LaunchRequest":
// Launch Request
console.log(`LAUNCH REQUEST`);
context.succeed(
generateResponse({},
buildSpeechletResponse("Welcome to an Alexa Skill, this is running on a deployed lamda function", true)
)
);
break;
case "IntentRequest":
// Intent Request
console.log(`Intent Request`);
console.log('Then run MySQL code:');
connection.connect(function(err) {
console.log('Inside connection.connect() callback');
if (!err) {
console.log("Database is connected ... ");
connection.query("INSERT INTO Users (user_id) VALUES ('TESTNAME')",
function(err, result) {
console.log("Inside connection.query() callback")
if (!err) {
console.log("Query Successful! Ending Connection.");
connection.end();
} else {
console.log("Query error!");
}
});
} else {
console.log("Error connecting database ..." + err.message);
}
context.succeed(
generateResponse({},
buildSpeechletResponse("Welcome to the incredible intelligent MySQLable Alexa!", true)
)
);
});
break;
case "SessionEndedRequest":
// Session Ended Request
console.log(`SESSION ENDED REQUEST`);
break;
default:
context.fail(`INVALID REQUEST TYPE: ${event.request.type}`);
}
} catch (error) {
context.fail(`Exceptiodn: ${error}`)
}
};
//Helpers
buildSpeechletResponse = (outputText, shouldEndSession) => {
return {
outputSpeech: {
type: "PlainText",
text: outputText
},
shouldEndSession: shouldEndSession
};
};
generateResponse = (sessionAttributes, speechletResponse) => {
return {
version: "1.0",
sessionAttributes: sessionAttributes,
response: speechletResponse
};
};