Kalenderaktionen

Mit Action-Objekten können Sie ein interaktives Verhalten in Google Workspace-Add-ons einbinden. Sie definieren, was passiert, wenn ein Nutzer mit einem Widget (z. B. einer Schaltfläche) auf der Add-on-UI interagiert.

Mithilfe einer Widget-Handler-Funktion, die auch die Bedingung definiert, durch die die Aktion ausgelöst wird, wird eine Aktion an ein bestimmtes Widget angehängt. Wenn die Aktion ausgelöst wird, führt sie eine dafür vorgesehene Callback-Funktion aus. An die Callback-Funktion wird ein Ereignisobjekt übergeben, das Informationen über die clientseitigen Interaktionen des Nutzers enthält. Sie müssen die Callback-Funktion implementieren, die ein bestimmtes Antwortobjekt zurückgibt.

Angenommen, Sie möchten eine Schaltfläche, mit der beim Anklicken eine neue Karte erstellt und angezeigt wird. Dazu müssen Sie ein neues Schaltflächen-Widget erstellen und mit der Schaltflächen-Widget-Handler-Funktion setOnClickAction(action) eine Action zum Erstellen von Karten festlegen. Die von Ihnen definierte Action gibt eine Apps Script-Callback-Funktion an, die ausgeführt wird, wenn auf die Schaltfläche geklickt wird. In diesem Fall implementierst du die Callback-Funktion, um die gewünschte Karte zu erstellen und ein ActionResponse-Objekt zurückzugeben. Das Antwortobjekt weist das Add-on an, die von der Callback-Funktion erstellte Karte anzuzeigen.

Auf dieser Seite werden spezifische Kalender-Widgetaktionen beschrieben, die Sie in Ihr Add-on einbinden können.

Kalenderinteraktionen

Google Workspace-Add-ons, die Google Kalender erweitern, können einige zusätzliche Kalender-spezifische Widgetaktionen enthalten. Für diese Aktionen ist die zugehörige Aktions-Callback-Funktion erforderlich, um spezielle Antwortobjekte zurückzugeben:

Aktion versucht Die Callback-Funktion sollte Folgendes zurückgeben:
Teilnehmer hinzufügen CalendarEventActionResponse
Konferenzdaten festlegen CalendarEventActionResponse
Anhänge hinzufügen CalendarEventActionResponse

Damit Sie diese Widgetaktionen und Antwortobjekte verwenden können, müssen alle folgenden Bedingungen erfüllt sein:

  • Die Aktion wird ausgelöst, während der Nutzer einen Kalendertermin geöffnet hat.
  • Das Manifestfeld addOns.calendar.currentEventAccess des Add-ons ist auf WRITE oder READ_WRITE festgelegt.
  • Das Add-on enthält den Bereich „Kalender“ https://www.googleapis.com/auth/calendar.addons.current.event.write.

Außerdem werden alle über die Aktionsrückruffunktion vorgenommenen Änderungen erst gespeichert, wenn der Nutzer den Kalendertermin gespeichert hat.

Teilnehmer mit einer Rückruffunktion hinzufügen

Das folgende Beispiel zeigt, wie Sie eine Schaltfläche erstellen, mit der einem bearbeiteten Kalendertermin ein bestimmter Teilnehmer hinzugefügt wird:

  /**
   * Build a simple card with a button that sends a notification.
   * This function is called as part of the eventOpenTrigger that builds
   * a UI when the user opens an event.
   *
   * @param e The event object passed to eventOpenTrigger function.
   * @return {Card}
   */
  function buildSimpleCard(e) {
    var buttonAction = CardService.newAction()
        .setFunctionName('onAddAttendeesButtonClicked');
    var button = CardService.newTextButton()
        .setText('Add new attendee')
        .setOnClickAction(buttonAction);

    // Check the event object to determine if the user can add
    // attendees and disable the button if not.
    if (!e.calendar.capabilities.canAddAttendees) {
      button.setDisabled(true);
    }

    // ...continue creating card sections and widgets, then create a Card
    // object to add them to. Return the built Card object.
  }

  /**
   * Callback function for a button action. Adds attendees to the
   * Calendar event being edited.
   *
   * @param {Object} e The action event object.
   * @return {CalendarEventActionResponse}
   */
  function onAddAttendeesButtonClicked (e) {
    return CardService.newCalendarEventActionResponseBuilder()
        .addAttendees(["aiko@example.com", "malcom@example.com"])
        .build();
  }

Konferenzdaten mit einer Callback-Funktion festlegen

Dadurch werden die Konferenzdaten für den offenen Termin festgelegt. Für diese Konferenzdaten muss die ID der Konferenzlösung angegeben werden, da die Aktion nicht durch den Nutzer ausgelöst wurde, der die gewünschte Lösung auswählte.

Das folgende Beispiel zeigt, wie Sie eine Schaltfläche erstellen, die Konferenzdaten für ein bearbeitetes Ereignis festlegt:

  /**
   * Build a simple card with a button that sends a notification.
   * This function is called as part of the eventOpenTrigger that builds
   * a UI when the user opens a Calendar event.
   *
   * @param e The event object passed to eventOpenTrigger function.
   * @return {Card}
   */
  function buildSimpleCard(e) {
    var buttonAction = CardService.newAction()
        .setFunctionName('onSaveConferenceOptionsButtonClicked')
        .setParameters(
          {'phone': "1555123467", 'adminEmail': "joyce@example.com"});
    var button = CardService.newTextButton()
        .setText('Add new attendee')
        .setOnClickAction(buttonAction);

    // Check the event object to determine if the user can set
    // conference data and disable the button if not.
    if (!e.calendar.capabilities.canSetConferenceData) {
      button.setDisabled(true);
    }

    // ...continue creating card sections and widgets, then create a Card
    // object to add them to. Return the built Card object.
  }

  /**
   * Callback function for a button action. Sets conference data for the
   * Calendar event being edited.
   *
   * @param {Object} e The action event object.
   * @return {CalendarEventActionResponse}
   */
  function onSaveConferenceOptionsButtonClicked(e) {
    var parameters = e.commonEventObject.parameters;

    // Create an entry point and a conference parameter.
    var phoneEntryPoint = ConferenceDataService.newEntryPoint()
      .setEntryPointType(ConferenceDataService.EntryPointType.PHONE)
      .setUri('tel:' + parameters['phone']);

    var adminEmailParameter = ConferenceDataService.newConferenceParameter()
        .setKey('adminEmail')
        .setValue(parameters['adminEmail']);

    // Create a conference data object to set to this Calendar event.
    var conferenceData = ConferenceDataService.newConferenceDataBuilder()
        .addEntryPoint(phoneEntryPoint)
        .addConferenceParameter(adminEmailParameter)
        .setConferenceSolutionId('myWebScheduledMeeting')
        .build();

    return CardService.newCalendarEventActionResponseBuilder()
        .setConferenceData(conferenceData)
        .build();
  }

Anhänge mit einer Callback-Funktion hinzufügen

Das folgende Beispiel zeigt, wie Sie eine Schaltfläche erstellen, mit der einem bearbeiteten Kalendertermin ein Anhang hinzugefügt wird:

  /**
   * Build a simple card with a button that creates a new attachment.
   * This function is called as part of the eventAttachmentTrigger that
   * builds a UI when the user goes through the add-attachments flow.
   *
   * @param e The event object passed to eventAttachmentTrigger function.
   * @return {Card}
   */
  function buildSimpleCard(e) {
    var buttonAction = CardService.newAction()
        .setFunctionName('onAddAttachmentButtonClicked');
    var button = CardService.newTextButton()
        .setText('Add a custom attachment')
        .setOnClickAction(buttonAction);

    // Check the event object to determine if the user can add
    // attachments and disable the button if not.
    if (!e.calendar.capabilities.canAddAttachments) {
      button.setDisabled(true);
    }

    // ...continue creating card sections and widgets, then create a Card
    // object to add them to. Return the built Card object.
  }

  /**
   * Callback function for a button action. Adds attachments to the Calendar
   * event being edited.
   *
   * @param {Object} e The action event object.
   * @return {CalendarEventActionResponse}
   */
  function onAddAttachmentButtonClicked(e) {
    return CardService.newCalendarEventActionResponseBuilder()
             .addAttachments([
               CardService.newAttachment()
                 .setResourceUrl("https://example.com/test")
                 .setTitle("Custom attachment")
                 .setMimeType("text/html")
                 .setIconUrl("https://example.com/test.png")
             ])
        .build();
  }

Festlegen des Anhangssymbols

Das Symbol für Anhänge muss in der Infrastruktur von Google gehostet werden. Weitere Informationen finden Sie unter Symbole für Anhänge bereitstellen.