Alexaスキルから実行するLambda 内で外部APIを利用したい。
APIの呼び出しを非同期で行ったところ、うまくいかなかった、、、
var options = {
uri: "https://xxxxxxx",
headers: {
"Content-type": "application/json",
},
json: {
"data1": "xxxx",
"data2": "yyyy"
}
};
request.post(options, function(error, response, body){
// this.emit(':tell', "外部API呼び出し"); // ← ここでemitを実行するとAPIコールするが、Alexaへの応答が空になる
});
// this.emit(':tell', "外部API呼び出し"); // ← ここでemitを実行するとAPIコールされず、Alexaへの応答は正常にされる
本来あるべき姿ではないと思うが、APIコールを同期的に行うことで一旦解決。
npm install sync-request
呼び出しはこんな感じ
var response = request(
'POST',
"https://xxxxxx",
{
json: {
"data1": "xxxxx",
"data2": "yyyy"
}
}
);
this.emit(':tell', "外部API呼び出し");
一応GETの場合はこんな感じ
var response = request(
'GET',
"https://xxxxxxx"
);
var data = JSON.parse(response.getBody('utf8'));
this.emit(':tell', "データ1は" + data.data1 + "です");