I am playing with ASK SDK v2 provided by Amazon in order to make Skill for Alexa but I face an architectural problem :
First of all, the HTTP request works like a charm but I would like to return speach response if and only if my HTTP request is complete but I don't even know if it's possible because of the "handle" function that should return something (look at comments) :
const MyIntentHandler = {
canHandle(handlerInput) {
const request = handlerInput.requestEnvelope.request;
return request.type === 'LaunchRequest' || (request.type === 'IntentRequest' && request.intent.name === 'MyIntent');
},
handle(handlerInput) {
var options = {
host: 'http://foo.com',
port: 80,
path: '/mypath',
method: 'GET'
};
var req = http.request(options, function(result){
result.on("end", function(){
//I would like to return speak here like that :
//return handlerInput.responseBuilder.speak("It works").withSimpleCard("MyTestApp", "It works").getResponse()
})
});
req.end();
//And I would like to remove this line to manage response in result.on("end", function(){}) above
return handlerInput.responseBuilder.speak("It works").withSimpleCard("MyTestApp", "It works").getResponse();
},
};
Any idea to deal with this ?
Also we can use request module to call API as follows
I found the official way to make it :
1) Create a new funtion that manage http request and return a promise :
2) In the Intent, return a promise in which you call your httpGet function :
This is the way to do it properly. My example is base on alexa petmatch sample.
An Async/Await Example
handle
to an async function.Example: