Termine zu Fokuszeit, Abwesenheit und Arbeitsort verwalten

Auf dieser Seite wird erläutert, wie Sie mit der Google Calendar API Termine erstellen, in denen Status von Google Kalender-Nutzern angezeigt. Statusereignisse beschreiben, wo sich Nutzer gerade was sie tun, z. B. ob sie in Fokuszeit, abwesend oder die von einem bestimmten Standort aus arbeiten.

In Google Kalender können Nutzer Fokuszeit, Abwesenheit und Standortereignisse verwenden, 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 verwenden Kalender und Arbeitsort aktivieren oder deaktivieren für verwenden.

Kalenderstatusereignisse lesen und auflisten

In der Events-Ressource des Calendar API

Verwenden Sie zum Lesen eines Statusereignisses den events.get-Methode unter Angabe der eventId des Termins.

Verwenden Sie zum Auflisten von Statusereignissen die Methode events.list, wobei eine angegeben wird oder mehrere der folgenden Werte im eventTypes-Feld:

  • 'focusTime'
  • 'outOfOffice'
  • 'workingLocation'

Prüfen Sie dann in den zurückgegebenen Event-Objekten, ob die Das Feld eventType enthält den angefragten Wert aus. Im entsprechenden Feld finden Sie Details zum Status, der vom Nutzer in Google Kalender erstellt wurde:

Änderungen an Statusereignissen abonnieren

Sie können Änderungen an Statusereignissen in der Events-Ressource des Calendar API

Verwenden Sie die Methode events.watch-Methode unter Angabe der calendarId von Kalender, den Sie abonnieren möchten, und einen oder mehrere der folgenden Werte im eventTypes:

  • 'focusTime'
  • 'outOfOffice'
  • 'workingLocation'

Kalender-Statusereignisse erstellen und aktualisieren

Um ein Statusereignis zu erstellen, erstellen Sie eine Instanz des Events-Ressource mithilfe des events.insert, indem Sie die Pflichtfelder für den Ereignistyp.

Wenn Sie das Statusereignis mit events.update, das Ereignis müssen die Pflichtfelder beibehalten.

Fokuszeit erstellen

So erstellen Sie einen Fokuszeit-Termin:

  • eventType festlegen auf 'focusTime'.
  • Fügen Sie die focusTimeProperties ein.
  • Legen Sie die transparency fest. auf 'opaque'.
  • start und end-Feldern in ein zeitgesteuertes Ereignis (mit Start- und Endzeit).
    Fokuszeiten können keine ganztägigen Termine sein.

Weitere Informationen zu den Funktionen finden Sie unter Fokuszeit in Google verwenden Kalender

Abwesenheitsnotiz erstellen

So erstellen Sie einen Außer-Haus-Termin:

  • eventType festlegen auf 'outOfOffice'.
  • Fügen Sie die outOfOfficeProperties ein.
  • Legen Sie die transparency fest. auf 'opaque'.
  • start und end-Feldern in ein zeitgesteuertes Ereignis (mit Start- und Endzeit).
    Außer-Haus-Termine können keine ganztägigen Termine sein.

Weitere Informationen zu dieser Funktion finden Sie unter Anzeigen, wenn keine Büro

Arbeitsort erstellen

So erstellen Sie einen Termin am Arbeitsort:

  • eventType festlegen auf 'workingLocation'.
  • Fügen Sie die workingLocationProperties ein.
  • Legen Sie das Feld visibility fest. an 'public'.
  • Legen Sie die transparency fest. auf 'transparent'.
  • start und end-Feldern:

    • Ein zeitgesteuertes Ereignis (mit angegebenem Beginn und Ende)
    • Ein ganztägiger Termin (mit Start- und Enddatum), der folgende Tage umfasst: genau einem Tag.

    Ganztägige Termine am Arbeitsort können nicht mehrere Tage umfassen, aber zeitlich festgelegte Termine können.

Die folgenden Felder sind optional, werden aber für eine optimale Nutzererfahrung empfohlen beim Einfügen eines officeLocation:

Das Erstellen und Aktualisieren von Arbeitsort-Ereignissen über die Batch-Endpunkte unterstützt.

Weitere Informationen zu den Funktionen finden Sie unter Arbeitszeit festlegen und Standort und Arbeitsort aktivieren oder deaktivieren für Nutzer

Sich überschneidende Termine am Arbeitsort anzeigen

Nutzer können in ihrem Kalender mehrere Termine am Arbeitsort gleichzeitig haben die sich überschneiden, d. h. eine bestimmte Zeit kann mehrere die für die Kampagne festgelegt wurden. Wenn nur ein einzelner Standort angezeigt werden kann sollte der Standort dem Nutzer über mehrere Anwendungen. Beachten Sie dabei die folgenden Richtlinien, um auszuwählen, welche anzuzeigendes Ereignis:

  • Zeitgesteuerte Ereignisse dauern Vorrang vor ganztägigen Terminen.
  • Einzelne Termine haben Vorrang vor wiederkehrenden Terminen und den Ausnahmen.
  • Ereignisse, die später beginnen, haben Vorrang vor Ereignissen, die früher beginnen.
  • Ereignisse mit kürzerer Dauer haben Vorrang vor Ereignissen mit einer längeren Dauer Dauer.
  • Neuere Ereignisse haben Vorrang vor neu erstellten Ereignissen. zuvor.
  • Teilweise überschneidende Ereignisse sollten jeweils als zwei verschiedene Ereignisse angezeigt werden mit einem eigenen Arbeitsort.

Statusereignisse in Google Apps Script erstellen

Google Apps Script ist eine JavaScript-basierte Cloud Scripting-Sprache, mit der Sie Geschäftsanwendungen erstellen können, die sich Google Workspace Skripts werden in einem browserbasierten Code-Editor entwickelt. werden sie auf den Servern von Google gespeichert und ausgeführt. Siehe auch Google Apps Script Apps Script, um Anfragen an die Google Calendar API zu senden

In der folgenden Anleitung wird beschrieben, wie Sie Statusereignisse mithilfe der Google Calendar API als erweiterter Dienst in Google Apps Script. Eine vollständige Liste der Ressourcen und Methoden der Google Calendar API finden Sie in der Referenzdokumentation.

Skript erstellen und einrichten

  1. Erstellen Sie ein Skript, indem Sie script.google.com/create.
  2. Klicken Sie im linken Bereich neben Dienste auf „Dienst hinzufügen“.
  3. Wählen Sie Google Calendar API aus und klicken Sie auf Hinzufügen.
  4. Nach der Aktivierung wird die API im linken Bereich angezeigt. Verfügbare Methoden und Klassen in der API können mit dem Schlüsselwort Kalender im Editor aufgelistet 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 Google Apps Script automatisch erstellt. Wenn Sie ein benutzerdefiniertes Google Cloud-Projekt verwenden möchten, führen Sie die folgenden Schritte aus um das mit Ihrem Skript verknüpfte Projekt zu aktualisieren.

  1. Klicken Sie links im Editor auf „Project Settings“ (Projekteinstellungen)
  2. Klicken Sie unter Google Cloud Platform-Projekt (GCP-Projekt) auf Projekt ändern.
  3. Geben Sie die Projektnummer des Google Cloud-Projekts ein, das sich im Entwicklerbereich befindet Vorschauprogramm aus und klicken Sie auf Projekt festlegen.
  4. Wählen Sie links „Editor “ aus, zurück zum Code-Editor.

Code in das Skript einfügen

Das folgende Codebeispiel zeigt, wie Statusereignisse erstellt, gelesen und aufgelistet werden in Ihrem Hauptkalender.

  1. Fügen Sie Folgendes in den Code-Editor ein.

    <ph type="x-smartling-placeholder">
    /** 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/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/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/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/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

  1. Wählen Sie über dem Code-Editor die auszuführende Funktion aus dem Dropdown-Menü aus. und klicken Sie auf Ausführen.
  2. Bei der ersten Ausführung werden Sie aufgefordert, den Zugriff zu autorisieren. Prüfen und erlauben Apps Script, um auf Ihren Kalender zuzugreifen.
  3. Die Ergebnisse der Skriptausführung können Sie in der Ausführungsprotokoll, das unten im Fenster angezeigt wird.