我编写了一段代码来检查员工的谷歌日历,并为请求的时间提供可用的开始日期和结束日期/时间。 但当我这样做时,它并没有显示 100% 正确的结果。在大多数情况下(我尝试了不同的事情)它会在另一个事件期间显示一个插槽。或者例如我尝试整合工作时间,以便它从上午 8 点到下午 5 点进行检查...然后它总是说,没有可用的活动...
这是我的代码的最后一个版本。 你能看一下并帮我提建议吗?
function getAvailability(email, minutes) {
if (!email) {
throw new Error('Die E-Mail-Adresse ist erforderlich.');
}
if (!minutes) {
throw new Error('Die Dauer in Minuten ist erforderlich.');
}
var calendar;
try {
calendar = CalendarApp.getCalendarById(email);
if (!calendar) {
throw new Error('Kalender nicht gefunden oder Zugriff verweigert für: ' + email);
}
} catch (e) {
console.error('Fehler beim Abrufen des Kalenders: ' + e.message);
throw e;
}
var now = new Date();
var twoWeeksFromNow = new Date(now.getTime() + (14 * 24 * 60 * 60 * 1000));
var events = calendar.getEvents(now, twoWeeksFromNow);
for (var i = 0; i < events.length - 1; i++) {
var currentEvent = events[i];
var nextEvent = events[i + 1];
if (currentEvent.isAllDayEvent()) {
continue;
}
var currentEventEnd = currentEvent.getEndTime();
var nextEventStart = nextEvent.getStartTime();
if ((nextEventStart - currentEventEnd) >= (minutes * 60 * 1000)) {
return {
'start': currentEventEnd,
'end': new Date(currentEventEnd.getTime() + (minutes * 60 * 1000))
};
}
}
var lastEventEnd = events[events.length - 1].getEndTime();
if ((twoWeeksFromNow - lastEventEnd) >= (minutes * 60 * 1000)) {
return {
'start': lastEventEnd,
'end': new Date(lastEventEnd.getTime() + (minutes * 60 * 1000))
};
}
return null;
}
function doGet(e) {
// Logge die eingehenden Parameter für die Anfrage
console.log("Received parameters:", e.parameters);
try {
var email = e.parameter['Bearbeiter-Mail'];
var minutes = parseInt(e.parameter['Dauer-Minuten'], 10);
// Überprüfe, ob die Parameter vorhanden und gültig sind
if (!email) {
throw new Error('Die E-Mail-Adresse ist erforderlich.');
}
if (isNaN(minutes)) {
throw new Error('Die Dauer in Minuten muss eine gültige Zahl sein.');
}
// Führe die Hauptfunktionalität aus
var availability = getAvailability(email, minutes);
// Logge die ermittelte Verfügbarkeit
if (availability) {
console.log("Verfügbarkeit gefunden:", availability);
return ContentService.createTextOutput(JSON.stringify(availability))
.setMimeType(ContentService.MimeType.JSON);
} else {
console.log("Keine Verfügbarkeit gefunden.");
return ContentService.createTextOutput('Keine Verfügbarkeit gefunden')
.setMimeType(ContentService.MimeType.TEXT);
}
} catch (error) {
// Logge und gebe Fehler zurück
console.error("Error:", error);
return ContentService.createTextOutput(JSON.stringify({ 'error': error.message }))
.setMimeType(ContentService.MimeType.JSON);
}
}```
The goal is to send the calender email adress + meeting time in meetings to the api and then receive a feedback, when the person is available. (The api process works).. The problem I have is just in the way how the calendar is checkt. It does not work correctly.
根据提供的代码,有几件事可能会导致不正确的可用性结果:
代码假设连续事件没有间隙。因此,如果两个 1 小时的会议之间有 30 分钟的间隔,则可能会显示该时段不可用。您需要检查差距是否大于请求的会议持续时间。 该代码没有考虑日历工作时间限制等因素。因此,它可能会显示正常工作时间之外的可用性。您需要添加逻辑以遵守日历操作时间。 重复事件或全天事件可能无法正确处理,并且可能会错误地显示为可用。需要额外的逻辑来正确处理这些。 要解决这些问题:
检查活动与会议持续时间之间的差距 添加日历营业时间限制 正确处理重复发生的和全天的事件 此外,您可以使用 FreeBusy API
,而不是通过扫描所有事件来获取可用性