Manifeste für Google Workspace-Add-ons

In Apps Script-Projekten werden mithilfe einer Manifestdatei bestimmte Details zum Skript und zu dessen Betrieb konfiguriert. Informationen zum Anzeigen und Bearbeiten eines Manifests finden Sie unter Manifeste.

In dieser Dokumentation wird die Konfiguration eines Manifests für ein Google Workspace-Add-on beschrieben.

Manifeststruktur für Google Workspace-Add-ons

Add-ons für Google Workspace verwenden die Apps Script-Projektmanifestdatei, um verschiedene Aspekte der Darstellung und des Verhaltens des Add-ons zu definieren. Die Manifestattribute für Google Workspace-Add-ons sind im Abschnitt addOns der Manifestobjektstruktur aufgeführt.

Beispielkonfiguration für das Google Workspace-Add-on als Manifestkonfiguration

Das folgende Manifestbeispiel zeigt den Abschnitt einer Manifestdatei, in dem ein Google Workspace-Add-on definiert wird. Dabei werden folgende Aspekte berücksichtigt:

  • Im Abschnitt addOns.common des Manifests werden der Name, die Logo-URL, die Farben und andere allgemeine, hostunabhängige Einstellungen für das Add-on festgelegt.
  • Das Manifest definiert eine gemeinsame Startseite sowie spezifische Startseiten für Google Kalender, Google Drive, Google Docs, Google Tabellen und Google Präsentationen. Gmail verwendet die Standardstartseite.
  • Mit den Einstellungen für das Beispielmanifest wird Folgendes aktiviert:
    • Kalender-eventOpen- und -eventUpdated-Trigger sowie zwei Kalender-Konferenzlösungen.
    • Zwei universelle Aktionen.
    • Ein Drive-onItemsSelectedTrigger.
    • Eine Aktion zum Schreiben einer E-Mail in Gmail und einen kontextabhängigen Trigger.
    • Ein Docs-linkPreviewTrigger. Weitere Informationen zu diesem Trigger finden Sie unter Vorschaulinks mit Smartchips.
    • Dateispezifische Oberflächen für Google Docs, Google Tabellen und Google Präsentationen
  • Mit dem Feld oauthScopes werden Autorisierungsbereiche für das Projekt festgelegt (in der Regel für Add-ons erforderlich).
  • Mit dem Feld urlFetchWhitelist wird dafür gesorgt, dass alle abgerufenen Endpunkte mit einer bestimmten Liste von HTTPS-URL-Präfixen übereinstimmen. Dieses Feld ist für Testbereitstellungen optional, für Bereitstellungen jedoch erforderlich. Weitere Informationen finden Sie unter URLs auf der Zulassungsliste.

Die Links im Beispiel führen zu den Beschreibungen des jeweiligen Feldes in der Manifest-Referenzdokumentation.

// Sample configuration of the addOns section in a manifest file:
{
  "addOns": {
    "calendar": {
      "createSettingsUrlFunction": "getConferenceSettingsPageUrl",
      "conferenceSolution": [{
        "id": "my-video-conf",
        "logoUrl": "https://lh3.googleusercontent.com/...",
        "name": "My Video Conference",
        "onCreateFunction": "onCreateMyVideoConference"
      }, {
        "id": "my-streamed-conf",
        "logoUrl": "https://lh3.googleusercontent.com/...",
        "name": "My Streamed Conference",
        "onCreateFunction": "onCreateMyStreamedConference"
      }],
      "currentEventAccess": "READ_WRITE",
      "eventOpenTrigger": {
        "runFunction": "onCalendarEventOpen"
      },
      "eventUpdateTrigger": {
        "runFunction": "onCalendarEventUpdate"
      },
      "eventAttachmentTrigger": {
        "label": "My Event Attachment",
        "runFunction": "onCalendarEventAddAttachment"
      },
      "homepageTrigger": {
        "runFunction": "onCalendarHomePageOpen",
        "enabled": true
      }
    },
    "common": {
      "homepageTrigger": {
        "runFunction": "onDefaultHomePageOpen",
        "enabled": true
      },
      "layoutProperties": {
        "primaryColor": "#ff392b",
        "secondaryColor": "#d68617"
      },
      "logoUrl": "https://ssl.gstatic.com/docs/script/images/logo/script-64.png",
      "name": "Demo Google Workspace Add-on",
      "openLinkUrlPrefixes": [
        "https://mail.google.com/",
        "https://script.google.com/a/google.com/d/",
        "https://drive.google.com/a/google.com/file/d/",
        "https://en.wikipedia.org/wiki/",
        "https://www.example.com/"
      ],
      "universalActions": [{
        "label": "Open settings",
        "runFunction": "getSettingsCard"
      }, {
        "label": "Open Help URL",
        "openLink": "https://www.example.com/help"
      }],
      "useLocaleFromApp": true
    },

    "drive": {
      "homepageTrigger": {
        "runFunction": "onDriveHomePageOpen",
        "enabled": true
      },
      "onItemsSelectedTrigger": {
        "runFunction": "onDriveItemsSelected"
      }
    },

    "gmail": {
      "composeTrigger": {
        "selectActions": [
          {
            "text": "Add images to email",
            "runFunction": "getInsertImageComposeCards"
          }
        ],
        "draftAccess": "METADATA"
      },
      "contextualTriggers": [
        {
          "unconditional": {},
          "onTriggerFunction": "onGmailMessageOpen"
        }
      ]
    },

    "docs": {
      "homepageTrigger": {
        "runFunction": "onEditorsHomepage"
      },
      "onFileScopeGrantedTrigger": {
        "runFunction": "onFileScopeGrantedEditors"
      },
      "linkPreviewTriggers": [
        {
        "runFunction": "onLinkPreview",
        "patterns": [
            {
              "hostPattern": "example.com",
              "pathPrefix": "example-path"
            }
        ],
        "labelText": "Link preview",
        "localizedLabelText": {
          "es": "Link preview localized in Spanish"
        },
        "logoUrl": "https://www.example.com/images/smart-chip-icon.png"
        }
      ]
    },

    "sheets": {
      "homepageTrigger": {
        "runFunction": "onEditorsHomepage"
      },
      "onFileScopeGrantedTrigger": {
        "runFunction": "onFileScopeGrantedEditors"
      }
    },

    "slides": {
      "homepageTrigger": {
        "runFunction": "onEditorsHomepage"
      },
      "onFileScopeGrantedTrigger": {
        "runFunction": "onFileScopeGrantedEditors"
      }
    },
  "oauthScopes": [
    "https://www.googleapis.com/auth/calendar.addons.execute",
    "https://www.googleapis.com/auth/calendar.addons.current.event.read",
    "https://www.googleapis.com/auth/calendar.addons.current.event.write",
    "https://www.googleapis.com/auth/drive.addons.metadata.readonly",
    "https://www.googleapis.com/auth/gmail.addons.current.action.compose",
    "https://www.googleapis.com/auth/gmail.addons.current.message.metadata",
    "https://www.googleapis.com/auth/userinfo.email",
    "https://www.googleapis.com/auth/script.external_request",
    "https://www.googleapis.com/auth/script.locale",
    "https://www.googleapis.com/auth/script.scriptapp",
    "https://www.googleapis.com/auth/drive.file",
    "https://www.googleapis.com/auth/documents.currentonly",
    "https://www.googleapis.com/auth/spreadsheets.currentonly",
    "https://www.googleapis.com/auth/presentations.currentonly",
    "https://www.googleapis.com/auth/workspace.linkpreview"
  ],
  "urlFetchWhitelist": [
    "https://www.example.com/myendpoint/"
  ],
}

URLs auf die Zulassungsliste setzen

Sie verwenden Zulassungslisten, um bestimmte URLs festzulegen, die von Ihrem Skript oder Add-on vorab für den Zugriff zugelassen sind. Zulassungslisten tragen zum Schutz von Nutzerdaten bei. Wenn Sie eine Zulassungsliste definieren, können Skriptprojekte nicht auf URLs zugreifen, die nicht auf der Zulassungsliste stehen.

Sie verwenden Zulassungslisten, wenn Ihr Skript oder Add-on die folgenden Aktionen ausführt:

  • Ruft mit dem Apps Script-Dienst UrlFetch Informationen von einem externen Speicherort (z. B. HTTPS-Endpunkten) ab. Wenn du URLs zum Abrufen auf die Zulassungsliste setzen möchtest, füge deiner Manifestdatei das Feld urlFetchWhitelist hinzu.
  • Öffnet oder zeigt eine URL als Reaktion auf eine Nutzeraktion an (erforderlich für Google Workspace-Add-ons, mit denen URLs außerhalb von Google geöffnet oder angezeigt werden). Wenn du URLs zum Öffnen auf die Zulassungsliste setzen möchtest, füge deiner Manifestdatei das Feld addOns.common.openLinkUrlPrefixes hinzu.

Präfixe zur Zulassungsliste hinzufügen

Wenn Sie in Ihrer Manifestdatei Zulassungslisten angeben (entweder durch Einbinden des Felds addOns.common.openLinkUrlPrefixes oder urlFetchWhitelist), müssen Sie eine Liste mit URL-Präfixen angeben. Die Präfixe, die Sie dem Manifest hinzufügen, müssen die folgenden Anforderungen erfüllen:

  • Jedes Präfix muss eine gültige URL sein.
  • Jedes Präfix muss https:// verwenden, nicht http://.
  • Jedes Präfix muss eine vollständige Domain haben.
  • Jedes Präfix muss einen Pfad enthalten. https://www.google.com/ ist beispielsweise gültig, https://www.google.com jedoch nicht.
  • Sie können Platzhalter verwenden, um URL-Subdomain-Präfixe abzugleichen.
  • Im Feld addOns.common.openLinkUrlPrefixes kann ein einzelner Platzhalter * verwendet werden, um alle Links abzugleichen. Dies wird jedoch nicht empfohlen, da die Daten eines Nutzers dadurch Risiken gefährdet und die Add-on-Überprüfung verlängert werden kann. Verwenden Sie einen Platzhalter nur, wenn dies für Ihre Add-on-Funktionalität erforderlich ist.

Wenn festgestellt wird, ob eine URL mit einem Präfix aus der Zulassungsliste übereinstimmt, gelten die folgenden Regeln:

  • Beim Pfadabgleich wird zwischen Groß- und Kleinschreibung unterschieden.
  • Wenn das Präfix mit der URL identisch ist, gilt eine Übereinstimmung.
  • Wenn die URL mit dem Präfix identisch oder diesem untergeordnet ist, gilt eine Übereinstimmung.

Beispielsweise entspricht das Präfix https://example.com/foo den folgenden URLs:

  • https://example.com/foo
  • https://example.com/foo/
  • https://example.com/foo/bar
  • https://example.com/foo?bar
  • https://example.com/foo#bar

Platzhalter verwenden

Sie können ein einzelnes Platzhalterzeichen (*) verwenden, um eine Subdomain für die Felder urlFetchWhitelist und addOns.common.openLinkUrlPrefixes abzugleichen. Sie können nicht mehr als einen Platzhalter verwenden, um mehrere Subdomains abzugleichen. Der Platzhalter muss das vorangestellte Präfix der URL darstellen.

Das Präfix https://*.example.com/foo stimmt beispielsweise mit folgenden URLs überein:

  • https://subdomain.example.com/foo
  • https://any.number.of.subdomains.example.com/foo

Das Präfix https://*.example.com/foo stimmt nicht mit folgenden URLs überein:

  • https://subdomain.example.com/bar (nicht übereinstimmendes Suffix)
  • https://example.com/foo (mindestens eine Subdomain muss vorhanden sein)

Einige der Präfixregeln werden erzwungen, wenn Sie versuchen, Ihr Manifest zu speichern. Die folgenden Präfixe verursachen beispielsweise einen Fehler, wenn sie beim Speichern in Ihrem Manifest vorhanden sind:

  • https://*.*.example.com/foo (mehrere Platzhalter sind nicht zulässig)
  • https://subdomain.*.example.com/foo (Platzhalter müssen als vorangestelltes Präfix verwendet werden)