Невозможно заставить вспомогательную функцию работать в AWS lambda nodejs

Я новичок в nodejs и учусь, но не могу понять, почему моя вспомогательная функция не работает. По сути, это часть примера лямбда-функции alexa, которая обычно работает. Операция MQTT работает, если я оставляю код MQTT в обработчике намерений, но мне нужно переместить его в основную часть кода, чтобы я мог вызывать операцию MQTT из других функций кода.

В этом фрагменте есть несколько «тестовых» функций, которые не работают, вероятно, потому, что мне не нравится правильный способ переместить код из функции Intent.

Я также не совсем понимаю обработчики … (на самом деле несколько обработчиков) Во фрагменте кода есть два обработчика … это не вызывает проблем, но я надеялся получить два лямбда-триггера (ask-sdk и умный дом) с каждым вызовом своего обработчика — не уверен, возможно ли это.

var APP_ID = «amzn1.ask.skill.xxxxxxxxxxxxxxxxxxxxxxxxxxxxx»; // input the axela skill ID var AWS = require(‘aws-sdk’); var Alexa = require(«alexa-sdk»); AWS.config.region = «us-east-1»; var iotData = new AWS.IotData({endpoint: «xxxxxxxxxxx.iot.us-east-1.amazonaws.com»}); // input the AWS thing end point var topic = «esp32/sub»; //input the topic that the device is subscribed to // Handler for Generic Event handling accepts both SmartHomeand ask-sdk events // But only works when the handler below is removed. exports.handler = async function (event, context) { // Dump the request for logging — check the CloudWatch logs console.log(«index.handler request ——«); console.log(JSON.stringify(event)); if (context !== undefined) { console.log(«index.handler context ——«); console.log(JSON.stringify(context)); } switchon(); // test call of standalone MQTTfunction ( doesn’t work) }; // Remove this function and the Smarthome Test works. // But is needed for the ask-sdk events ( Smarthome events fail ) exports.handler = function(event, context, callback) { var alexa = Alexa.handler(event, context); alexa.appId = APP_ID; alexa.registerHandlers(handlers); alexa.execute(); console.log(«index.handler comment ——«); }; //********************************* // Helper code examples to functionalise the MQTT switch on // NONE OF THESE WORK WHEN CALLED function switchon3(){ var dataObj = { topic: topic, payload: «on», qos:0 }; iotData.publish(dataObj, function (err, data) { if (err) console.log(err, err.stack); // an error occurred else console.log(data); // successful response }); } function switchon (error, data){ var params = { topic: topic, payload: «on», qos:0 }; iotData.publish(params, (error, data)=>{ if (!error){this.emit(‘:tell’, ‘Robert, well done its Switched On’); }else{this.emit(‘:tell’, ‘Oh dear MQTT returned a switch on error’)} }); } // End of helper examples //********************************* //********* THE PROPER CODE ************************ var handlers = { ‘LaunchRequest’: function () { this.emit(‘:tell’, ‘Hello. Skill four here. How may I help you?’); }, ‘SwitchOnIntent’: function () { // None of the example function calls work here // switchon3(); // this.emit(‘:tell’, ‘Test Switch On’); // needs this line to work // The following original example code DOES work var params = { topic: topic, payload: «on», qos:0 }; iotData.publish(params, (error, data)=>{ if (!error){this.emit(‘:tell’, ‘Robert, well done its Switched On’); }else{this.emit(‘:tell’, ‘Oh dear MQTT returned a switch on error’)} }); },

Отредактировано …

Нет, Томми, это не так уж и просто, спасибо за помощь. На самом деле я пытаюсь заставить лямбда принимать входные данные от двух триггеров AWS. 1. ASK-API от пользовательских навыков 2. Триггер Smarthome. Я не уверен, нужны ли этим двум триггерам отдельные функции-обработчики, или, если, как я подозреваю, использование триггера smarthome отменяет использование методов ask-api, которые каким-то образом вызывают зарегистрированные функции Intent, полученный json явно отформатирован иначе, чем оба типа триггеров, и я понимаю, что можно выполнять синтаксический анализ пользовательских навыков alexa вручную в лямбда-выражении. Тогда у меня вопрос … если вы начинаете с пользовательского навыка, регистрация всех вызовов функций с помощью ask-api становится недействительной, если я затем добавляю триггер smarthome, потому что один обработчик, который имел дело с событием ask-api, не может также иметь дело с директива smarthome.

После того, как разобрались с этим, он пытается «активировать» вызов MQTT, который работает в функциях Intent, как это было изначально закодировано, но терпит неудачу, если я попытаюсь поместить их в отдельные вызовы функций. Потерпи меня … Я знаю, что хочу делать … просто еще совсем не знаю этот язык.

Источник: ledsshop.ru

Стиль жизни - Здоровье!