作者:ifx0448363 | 来源:互联网 | 2022-12-18 19:54
我正在玩亚马逊提供的ASK SDK v2,以便为Alexa制作技能,但我遇到了一个架构问题:
首先,HTTP请求就像魅力一样,但是当我和我的HTTP请求完成时我想要返回语音响应但是我甚至不知道是否可能因为"句柄"功能应该返回一些东西(看评论):
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();
},
};
有没有想过要处理这件事?
1> Ashbay..:
我找到了正式的方法:
1)创建一个管理http请求并返回承诺的新功能:
function httpGet(options) {
return new Promise(((resolve, reject) => {
const request = http.request(options, (response) => {
response.setEncoding('utf8');
let returnData = '';
if (response.statusCode <200 || response.statusCode >= 300) {
return reject(new Error(`${response.statusCode}: ${response.req.getHeader('host')} ${response.req.path}`));
}
response.on('data', (chunk) => {
returnData += chunk;
});
response.on('end', () => {
resolve(JSON.parse(returnData));
});
response.on('error', (error) => {
reject(error);
});
});
request.on('error', function (error) {
reject(error);
});
request.end();
}));
}