我正在为新的亚马逊ECHO工作"技能".该技能将允许用户向Alexa询问有关Enphase太阳系的状态和性能的信息.Alexa将回应从基于JSON的Enphase API中提取的结果.例如,用户可以问,
"Alexa. Ask Enphase how much solar energy I have produced in the last week." ALEXA <"Your array has produced 152kWh in the last week.">
问题是我用JavaScript编程已经多年了,这是我第一次使用AWS Lambda.我没有非常成功地找到有关如何将JSON查询嵌入AWS Lambda函数中的第三方服务器的任何信息.以下是我的Lambda函数中相关的代码部分:
/** * Gets power from Enphase API and prepares speach */ function GetPowerFromEnphase(intent, session, callback) { var Power = 0; var repromptText = null; var sessionAttributes = {}; var shouldEndSession = false; var speechOutput = ""; ////////////////////////////////////////////////////////////////////// // Need code here for sending JSON query to Enphase server to get power // Request: // https://api.enphaseenergy.com/api/v2/systems/67/summary // key=5e01e16f7134519e70e02c80ef61b692&user_id=4d7a45774e6a41320a // Response: // HTTP/1.1 200 OK // Content-Type: application/json; charset=utf-8 // Status: 200 // {"system_id":67,"modules":35,"size_w":6270,"current_power":271, // "energy_today":30030,"energy_lifetime":59847036, // "summary_date":"2015-03 04","source":"microinverters", // "status":"normal","operational_at":1201362300, // "last_report_at":1425517225} ////////////////////////////////////////////////////////////////////// speechOutput = "Your array is producing " + Power + " kW, goodbye"; shouldEndSession = true; // Setting repromptText to null signifies that we do not want to reprompt the user. // If the user does not respond or says something that is not understood, the session // will end. callback(sessionAttributes, buildSpeechletResponse(intent.name, speechOutput, repromptText, shouldEndSession)); }
一些指导将非常感谢.即使有人能指出我正确的方向.谢谢!
Request是一个非常流行的库,用于处理node.js中的http请求.以下是使用您的数据的POST示例:
var request = require('request'); request({ url: 'https://api.enphaseenergy.com/api/v2/systems/67/summary', method: 'POST', headers: { Accept: 'application/json', 'Content-Type': 'application/json' }, body: JSON.stringify({ key: '5e01e16f7134519e70e02c80ef61b692', user_id: '4d7a45774e6a41320a' }) }, function (error, response, body) { if (!error && response.statusCode == 200) { console.log('BODY: ', body); var jsonResponse = JSON.parse(body); // turn response into JSON // do stuff with the response and pass it to the callback... callback(sessionAttributes, buildSpeechletResponse(intent.name, speechOutput, repromptText, shouldEndSession)); } });
我没有ECHO/Alexa的例子,但这里有一个Lambda呼叫获取天气数据发送给Slack的例子