Auf dieser Seite wird erläutert, wie Sie mit der Google Calendar API Ereignisse erstellen, in denen der Status von Google Kalender-Nutzern angezeigt wird. Statusereignisse beschreiben, wo sich Nutzer befinden oder was sie tun, z. B. ob sie sich in einer Fokuszeit befinden, abwesend sind oder von einem bestimmten Ort aus arbeiten.
In Google Kalender können Nutzer Termine für Fokuszeit, Abwesenheit und Arbeitsort erstellen, um ihren benutzerdefinierten Status und Standort anzugeben. Diese Funktionen sind nur in primären Kalendern und für einige Google Kalender-Nutzer verfügbar.
Weitere Informationen finden Sie unter Fokuszeit in Google Kalender verwenden und Arbeitsort für Nutzer aktivieren oder deaktivieren.
Kalenderstatusereignisse lesen und auflisten
Sie können Kalenderstatusereignisse in der Events-Ressource der Calendar API lesen und auflisten.
Verwenden Sie zum Lesen eines Statusereignisses die Methode events.get und geben Sie die eventId des Ereignisses an.
Verwenden Sie zum Auflisten von Statusereignissen die Methode events.list und geben Sie im Feld eventTypes einen oder mehrere der folgenden Werte an:
'focusTime''outOfOffice''workingLocation'
Prüfen Sie dann in den zurückgegebenen Event-Objekten, ob das Feld eventType den angeforderten Wert hat, und sehen Sie im entsprechenden Feld nach, um Details zum Status zu erhalten, der vom Nutzer in Google Kalender erstellt wurde:
Änderungen an Statusereignissen abonnieren
Sie können Änderungen an Statusereignissen in der Events-Ressource der Calendar API abonnieren.
Verwenden Sie die Methode events.watch und geben Sie die calendarId des Kalenders an, den Sie abonnieren möchten, sowie einen oder mehrere der folgenden Werte im Feld eventTypes an:
'focusTime''outOfOffice''workingLocation'
Kalenderstatusereignisse erstellen und aktualisieren
Zum Erstellen eines Statusereignisses erstellen Sie mit der Methode events.insert eine Instanz der Ressource Events und legen die erforderlichen Felder für den Ereignistyp fest.
Wenn Sie das Statusereignis mit der Methode events.update aktualisieren, müssen die erforderlichen Felder beibehalten werden.
Fokuszeit erstellen
So erstellen Sie einen Fokuszeit-Termin:
- Setzen Sie
eventTypeauf'focusTime'. - Fügen Sie das Feld
focusTimePropertiesein. - Setzen Sie das Feld
transparencyauf'opaque'. - Legen Sie für die Felder
startundenddes Ereignisses ein zeitlich begrenztes Ereignis fest (mit Angabe von Start- und Endzeit).
Fokuszeiten können nicht ganztägig sein.
Weitere Informationen zu den Funktionen finden Sie unter Fokuszeit in Google Kalender verwenden.
Abwesenheitsnotiz erstellen
So erstellen Sie ein Abwesenheitsereignis:
- Setzen Sie
eventTypeauf'outOfOffice'. - Fügen Sie das Feld
outOfOfficePropertiesein. - Setzen Sie das Feld
transparencyauf'opaque'. - Legen Sie für die Felder
startundenddes Ereignisses ein zeitlich begrenztes Ereignis fest (mit Angabe von Start- und Endzeit).
Außer-Haus-Termine können nicht ganztägig sein.
Weitere Informationen finden Sie unter Zeigen, wenn Sie nicht im Büro sind.
Arbeitsort erstellen
So erstellen Sie ein Arbeitsort-Ereignis:
- Setzen Sie
eventTypeauf'workingLocation'. - Fügen Sie das Feld
workingLocationPropertiesein. - Setzen Sie das Feld
visibilityauf'public'. - Setzen Sie das Feld
transparencyauf'transparent'. Legen Sie für die Felder
startundenddes Ereignisses einen der folgenden Werte fest:- Ein zeitlich begrenztes Ereignis (mit Angabe von Start- und Endzeit);
- Ein ganztägiges Ereignis (mit angegebenem Start- und Enddatum), das genau einen Tag umfasst.
Ganztägige Termine an einem Arbeitsort können sich nicht über mehrere Tage erstrecken, Termine mit Uhrzeitangabe schon.
Die folgenden Felder sind optional, werden aber für eine optimale Nutzererfahrung beim Einfügen eines officeLocation empfohlen:
workingLocationProperties.officeLocation.buildingId: Dies muss mit einembuildingIdin der Ressourcendatenbank der Organisation übereinstimmen. So können Nutzer alle Kalender-Funktionen nutzen, z. B. Raumvorschläge.workingLocationProperties.officeLocation.label: Das ist das Label, das in der Web- und Mobilversion von Google Kalender angezeigt wird. Sie können Gebäude-IDs und ‑Labels mit der Methoderesources.buildings.listabrufen.
Das Erstellen und Aktualisieren von Arbeitsort-Ereignissen über die Batch-Endpunkte wird nicht unterstützt.
Weitere Informationen zu den Funktionen finden Sie unter Arbeitszeit und -ort festlegen und Arbeitsort für Nutzer aktivieren oder deaktivieren.
Überlappende Arbeitsort-Ereignisse anzeigen
Ein Nutzer kann mehrere Arbeitsorttermine in seinem Kalender haben, die sich überschneiden. Das bedeutet, dass für einen bestimmten Zeitpunkt mehrere Arbeitsorte festgelegt sein können. Wenn dem Nutzer nur ein einziger Standort angezeigt werden kann, sollte dieser Standort in mehreren Anwendungen einheitlich angezeigt werden. Beachten Sie dabei die folgenden Richtlinien, um das richtige Ereignis auszuwählen:
- Termine mit Uhrzeit haben Vorrang vor ganztägigen Terminen.
- Einzelne Termine haben Vorrang vor wiederkehrenden Terminen und ihren Ausnahmen.
- Termine, die später beginnen, haben Vorrang vor Terminen, die früher beginnen.
- Ereignisse mit kürzeren Zeiträumen haben Vorrang vor Ereignissen mit längeren Zeiträumen.
- Vor Kurzem erstellte Ereignisse haben Vorrang vor Ereignissen, die früher erstellt wurden.
- Teilweise überschneidende Termine sollten als zwei verschiedene Termine mit jeweils eigenem Arbeitsort angezeigt werden.
Statusereignisse in Google Apps Script erstellen
Google Apps Script ist eine JavaScript-basierte Cloud-Scriptsprache, mit der Sie Geschäftsanwendungen erstellen können, die in Google Workspace eingebunden werden. Scripts werden in einem browserbasierten Code-Editor entwickelt und auf den Servern von Google gespeichert und ausgeführt. Google Apps Script-Schnellstart
In der folgenden Anleitung wird beschrieben, wie Sie Statusereignisse mit der Google Calendar API als erweiterten Dienst in Google Apps Script verwalten. Eine vollständige Liste der Google Calendar API-Ressourcen und -Methoden finden Sie in der Referenzdokumentation.
Skript erstellen und einrichten
- Rufen Sie script.google.com/create auf, um ein Skript zu erstellen.
- Klicken Sie im linken Bereich neben Dienste auf „Dienst hinzufügen“ .
- Wählen Sie Google Calendar API aus und klicken Sie auf Hinzufügen.
- Nach der Aktivierung wird die API im linken Bereich angezeigt. Verfügbare Methoden und Klassen in der API können mit dem Keyword Calendar im Editor aufgerufen werden.
(Optional) Google Cloud-Projekt aktualisieren
Jedes Google Apps Script-Projekt ist mit einem Google Cloud-Projekt verknüpft. Ihr Skript kann das Standardprojekt verwenden, das von Google Apps Script automatisch erstellt wird. Wenn Sie ein benutzerdefiniertes Google Cloud-Projekt verwenden möchten, gehen Sie so vor, um das mit Ihrem Script verknüpfte Projekt zu aktualisieren.
- Klicken Sie links im Editor auf „Projekteinstellungen“ .
- Klicken Sie unter Google Cloud Platform-Projekt (GCP-Projekt) auf Projekt ändern.
- Geben Sie die Projektnummer des Google Cloud-Projekts ein, das am Developer Preview-Programm teilnimmt, und klicken Sie auf Projekt festlegen.
- Wählen Sie links „Editor“ aus, um zum Code-Editor zurückzukehren.
Code zum Skript hinzufügen
Das folgende Codebeispiel zeigt, wie Sie Statusereignisse in Ihrem primären Kalender erstellen, lesen und auflisten.
Fügen Sie Folgendes in den Codeeditor ein.
/** Creates a focus time event. */ function createFocusTime() { const event = { start: { dateTime: '2023-11-14T10:00:00+01:00' }, end: { dateTime: '2023-11-14T12:00:00+01:00' }, eventType: 'focusTime', focusTimeProperties: { chatStatus: 'doNotDisturb', autoDeclineMode: 'declineOnlyNewConflictingInvitations', declineMessage: 'Declined because I am in focus time.', } } createEvent(event); } /** Creates an out of office event. */ function createOutOfOffice() { const event = { start: { dateTime: '2023-11-15T10:00:00+01:00' }, end: { dateTime: '2023-11-15T18:00:00+01:00' }, eventType: 'outOfOffice', outOfOfficeProperties: { autoDeclineMode: 'declineOnlyNewConflictingInvitations', declineMessage: 'Declined because I am on vacation.', } } createEvent(event); } /** Creates a working location event. */ function createWorkingLocation() { const event = { start: { date: "2023-06-01" }, end: { date: "2023-06-02" }, eventType: "workingLocation", visibility: "public", transparency: "transparent", workingLocationProperties: { type: 'customLocation', customLocation: { label: "a custom location" }, } } createEvent(event); } /** * Creates a Calendar event. * See https://developers.google.com/workspace/calendar/api/v3/reference/events/insert */ function createEvent(event) { const calendarId = 'primary'; try { var response = Calendar.Events.insert(event, calendarId); var event = (response.eventType === 'workingLocation') ? parseWorkingLocation(response) : response; console.log(event); } catch (exception) { console.log(exception.message); } } /** * Reads the event with the given eventId. * See https://developers.google.com/workspace/calendar/api/v3/reference/events/get */ function readEvent() { const calendarId = 'primary'; // Replace with a valid eventId. const eventId = "sample-event-id"; try { var response = Calendar.Events.get(calendarId, eventId); var event = (response.eventType === 'workingLocation') ? parseWorkingLocation(response) : response; console.log(event); } catch (exception) { console.log(exception.message); } } /** Lists focus time events. */ function listFocusTimes() { listEvents('focusTime'); } /** Lists out of office events. */ function listOutOfOffices() { listEvents('outOfOffice'); } /** Lists working location events. */ function listWorkingLocations() { listEvents('workingLocation'); } /** * Lists events with the given event type. * See https://developers.google.com/workspace/calendar/api/v3/reference/events/list */ function listEvents(eventType = 'default') { const calendarId = 'primary' // Query parameters for the list request. const optionalArgs = { eventTypes: [eventType], showDeleted: false, singleEvents: true, timeMax: '2023-04-01T00:00:00+01:00', timeMin: '2023-03-27T00:00:00+01:00', } try { var response = Calendar.Events.list(calendarId, optionalArgs); response.items.forEach(event => console.log(eventType === 'workingLocation' ? parseWorkingLocation(event) : event)); } catch (exception) { console.log(exception.message); } } /** * Parses working location properties of an event into a string. * See https://developers.google.com/workspace/calendar/api/v3/reference/events#resource */ function parseWorkingLocation(event) { if (event.eventType != "workingLocation") { throw new Error("'" + event.summary + "' is not a working location event."); } var location = 'No Location'; const workingLocation = event.workingLocationProperties; if (workingLocation) { if (workingLocation.type === 'homeOffice') { location = 'Home'; } if (workingLocation.type === 'officeLocation') { location = workingLocation.officeLocation.label; } if (workingLocation.type === 'customLocation') { location = workingLocation.customLocation.label; } } return `${event.start.date}: ${location}`; }
Codebeispiel ausführen
- Wählen Sie über dem Code-Editor die auszuführende Funktion aus dem Drop-down-Menü aus und klicken Sie auf Ausführen.
- Bei der ersten Ausführung werden Sie aufgefordert, den Zugriff zu autorisieren. Apps Script den Zugriff auf Ihren Kalender erlauben
- Die Ergebnisse der Scriptausführung können Sie im Ausführungslog unten im Fenster ansehen.