我似乎无法在我的alexa技能中获取HTTP请求,这里是相关的示例代码:
var https = require('https');
...
function getTreeFact(callbackFunction){
var url = 'https://alexa.phl.chs.network/treefacts/index.php';
https.get(url, function(res){
var body = '';
res.on('data', function(chunk){
body += chunk;
});
res.on('end', function(){
var gameResponse = JSON.parse(body);
callbackFunction(gameResponse);
});
}).on('error', function(e){
// Handle error
});
}
...
this.getTreeFact(function (responseMessage){
this.emit(':tell', responseMessage.message);
});
我不知道我做错了什么,我想我正在正确地发出HTTP请求。我知道这个技能没有这个(简单地评论最后三行,只用this.emit替换(':tell','hello')工作正常)。
答案 0 :(得分:1)
让我解释一下下面的代码...这里我在“ LaunchRequest”中使用了https请求 反过来又给了我一个回应,有了这个回应,我让我的Alexa说话
注意:jsonplaceholder.typicode.com对于测试您的https请求和响应非常有用
在您的aws在线编辑器控制台中仅使用此代码,确保输入正确的意图名称和调用名称。
exports.handler = (event, context, callback) => {
var speechResult;
switch (event.request.type) {
case "LaunchRequest":
var resultis;
const querystring = require('querystring');
const https = require('https');
var postData = querystring.stringify({
'msg' : 'Hello World!'
});
var options = {
hostname: 'jsonplaceholder.typicode.com',
path: '/posts',
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'Content-Length': postData.length
}
};
var req = https.request(options, (res) => {
//console.log('statusCode:', res.statusCode);
//console.log('headers:', res.headers);
res.on('data', (d) => {
//console.log("my data is "+d);
var obj = JSON.parse(d);
var resul = obj.msg;
resultis = JSON.stringify(resul);
context.succeed(generateResponse(buildSpeechletResponse(resultis, true)));
});
});
req.on('error', (e) => {
console.error(e);
});
req.write(postData);
req.end();
break;
case "IntentRequest":
switch (event.request.intent.name) {
case "MyIntent":
var a = "are you ready";
context.succeed(generateResponse(buildSpeechletResponse(a, true)))
break;
}
break;
}
}
//Alexa Speech function
buildSpeechletResponse = (outputText, shouldEndSession) => {
return {
outputSpeech: {
type: "PlainText",
text: outputText
},
shouldEndSession: shouldEndSession
}
}
generateResponse = (speechletResponse) => {
return {
version: "1.0",
response: speechletResponse
}
}
答案 1 :(得分:0)
Alexa的官方github页面有关于api调用的非常详尽的文档。查看他们的烹饪列表技能文档,其中包含所有获取和发布请求https://github.com/alexa/alexa-cookbook
其他样本的答案 2 :(得分:0)
您最好使用承诺版本,例如
答案 3 :(得分:0)
对我看起来像
this.emit(':tell', responseMessage.message);
应该是
this.emit(':tell', responseMessage);
我无法在此
中看到任何.message
var gameResponse = JSON.parse(body);
callbackFunction(gameResponse);