У меня есть модуль, который включает вызов запроса, который, похоже, не выполняется.Узел JS обратные вызовы с Alexa умение
var request = require('request');
var Alexa = require('alexa-sdk');
var APP_ID = <my alexa app ID>;
var self = module.exports = {
handler : function (event, context, callback) {
var alexa = Alexa.handler(event, context);
alexa.appId = APP_ID;
alexa.registerHandlers(self);
alexa.execute();
},
"TestIntent": function() {
var speechOutput = "Recorded Test";
request("http://www.google.com",
function(error, response,body)
{
return console.log(body);
}
);
this.emit(':tell', speechOutput);
}
}
Я никогда не видел, чтобы тело google отображалось в моей консоли.log на консоли Lambda или где-либо еще. Я пробовал другие вызовы (например, сообщения API для API-интерфейса API приложений) и не вижу, чтобы они отображались на этом сервере.
Кажется, что процесс закрывается до завершения обратного вызова запроса.
В тесте Amazon Lambda «Я получаю действительный ответ. В тесте «Alexa» я возвращаю ответ «Recorded Test». И на Echo (через Alexa) я возвращаю ответ «Recorded Test» с устройства. Таким образом, умение, похоже, отлично работает. Это просто действие «запрос» (в данном случае, просто потянув google.com), который терпит неудачу.
Спасибо!
ОБНОВЛЕНИЕ: Я, по крайней мере, смог получить звонок, но, возможно, не самый чистый способ.
var request = require('request');
var Alexa = require('alexa-sdk');
var APP_ID = <my alexa app ID>;
var self = module.exports = {
handler : function (event, context, callback) {
var alexa = Alexa.handler(event, context);
alexa.appId = APP_ID;
alexa.registerHandlers(self);
alexa.execute();
},
"TestIntent": function() {
var that = this;
var speechOutput = "Recorded Test";
request("http://www.google.com",
function(error, response,body)
{
console.log(body);
that.emit(':tell', speechOutput);
return;
}
);
}
}
Вы используете текущую версию лямбда (4.3)? Интересно, может ли старая версия убить процесс при вызове обратного вызова. Я знаю, что тестовая упряжь, которую я использую (node-lamdba), делает это, и я думаю, это потому, что поведение было разработано для старой лямбды и не обновлялось. – Tom
Кроме того, может быть, вызов терпит неудачу, и тело пусто. Я бы указал на явное сообщение журнала, чтобы убедиться, что он действительно не регистрируется. И несвязанный комментарий, но вы не должны устанавливать alexa.appId в свой APP_ID, вы должны убедиться, что они совпадают. – Tom
Спасибо @Tom, я могу получить явное сообщение «Я получил здесь» внутри функции запроса, чтобы показать, если я делаю это через ошибку перед выполнением «this.emit». Поэтому, если функция TestIntent не завершена, обратный вызов имеет время для запуска и отчета. Поэтому мне нужно как-то заставить this.emit дождаться завершения обратного вызова. – probbins222