我从这里获取代码:https://developers.google.com/google-apps/calendar/quickstart/nodejs并使其在本地工作并返回日历事件的JSON对象。
我把它变成了一个名为GoogleCalendarAPI.js的模块,并且仍然在本地工作。
我尝试了这个StackOverflow答案的方法:How to oAuth Google API from Lambda AWS?。我是否使用令牌获得相同的结果,如此处所述进行检索;或者我是否使用client_secret.json文件。
exports.getCalendarJSONEvents =
function getCalendarJSONEvents(callback) {
console.log("started getCalendarJSONEvents");
listEvents(TOKEN, function(jsonResult) {
console.log("Json Callback Events=");
console.log(jsonResult);
callback(jsonResult);
});
}
function listEvents(auth, callback) {... etc...
调用Lambda index.js执行此操作:
console.log("log: WhenIntent");
var GoogleCalendarAPI = require('./GoogleCalendarAPI.js');
GoogleCalendarAPI.getCalendarJSONEvents(
function callback(calEvents){
console.log("WRAPPER: calendarResults=" +
JSON.stringify(calEvents));
// chunk misc code here
this.emit(':tell', speechText);
});
我在日志中看到的最后一件事是" log:WhenIntent"。它是一个Alexa应用程序,我使用我的用户帐户访问一个公共日历。我不知道它之后做了什么,并且不确定如何进一步调试它。我不知道为什么我没有看到"开始getCalendarJSONEvents"在超时之前(默认为3秒,也尝试5秒)。
更新1:
好的,CloudWatch Log确实显示" API返回错误:错误:错误请求",我认为这是Lambda错误,但它来自listEvents。我添加了下面提到的行,至少现在逻辑流回来了,我将找到" Bad Request"后来。
function listEvents(auth, callback) {
console.log("log: start listEvents");
var calendar = google.calendar('v3');
console.log("log: listEvents got calendar var");
var jsonOut = "{";
calendar.events.list({
auth: auth,
calendarId: 'somename@group.calendar.google.com',
timeMin: (new Date()).toISOString(),
maxResults: 10,
singleEvents: true,
orderBy: 'startTime'
}, function(err, response) {
if (err) {
// made this error more clear!
console.log('The Google Calendar API returned an error: ' + err);
callback(err); // added this line
return;
}
var events = response.items;
if (events.length == 0) {
console.log('No upcoming events found.');
} else {
console.log('Upcoming 10 events:');
var jsonLine = "";
for (var i = 0; i < events.length; i++) {
var event = events[i];
var start = event.start.dateTime || event.start.date;
console.log('%s - %s', start, event.summary);
jsonLine =
[{ 'date': event.start.date,
'summary': event.summary
}];
console.log("jsonline=")
jsonOut = jsonOut + JSON.stringify(jsonLine) + ",";
}
jsonOut = jsonOut + "}";
}
console.log("End of listEvents: jsonOut = " +
JSON.stringify(jsonOut));
callback(jsonOut);
});