Installierbare Trigger

Wie bei einfachen Triggern können auch installierbare Trigger Apps Script führt automatisch eine Funktion aus, wie das Öffnen eines Dokuments. Installierbare Trigger bieten jedoch mehr Flexibilität als einfache Trigger: Sie können Dienste die erfordern Autorisierung, werden verschiedene zusätzliche Ereignistypen angeboten, z. B. zeitgesteuerte Ereignisse Trigger und können programmatisch gesteuert werden. Für einfache und installierbare Trigger, übergibt Apps Script die ausgelöste Funktion eine Ereignisobjekt, das Informationen enthält in dem das Ereignis aufgetreten ist.

Einschränkungen

Installierbare Trigger bieten mehr Flexibilität als einfache Trigger, unterliegen immer noch einigen Einschränkungen:

  • Sie werden nicht ausgeführt, wenn eine Datei im Lesemodus (Anzeigen oder Kommentieren) geöffnet wird. Bei eigenständigen Scripts benötigen Nutzer mindestens Lesezugriff auf die Scriptdatei, damit Trigger ordnungsgemäß ausgeführt werden können.
  • Skriptausführungen und API-Anfragen führen nicht zum Ausführen von Triggern. Beispiel: Anrufen FormResponse.submit() zum Senden einer neuen Formularantwort führt nicht dazu, dass der Sendeauslöser des Formulars ausgeführt wird.

  • Installierbare Trigger werden immer unter dem Konto der Person ausgeführt, die den Trigger erstellt hat . Wenn Sie beispielsweise einen installierbaren offenen Trigger erstellen, wird dieser ausgeführt, wenn ein Kollege das Dokument öffnet (falls er Bearbeitungszugriff hat), aber es läuft unter Ihrem Konto. Wenn Sie also einen Trigger E-Mail senden, wenn ein Dokument geöffnet wird, wird die E-Mail immer über Ihr Konto und nicht unbedingt das Konto, in dem das Dokument geöffnet wurde. Sie können jedoch können Sie für jedes Konto einen installierbaren Trigger erstellen, in einer E-Mail, die von jedem Konto gesendet wird.

  • Ein Konto kann keine Trigger sehen, die von einem zweiten Konto installiert wurden, können diese Trigger aber dennoch im ersten Konto aktivieren.

  • Installierbare Trigger unterliegen dem Apps Script-Trigger die Kontingentlimits.

Zeitgesteuerte Trigger

Ein zeitgesteuerter Trigger (auch als Uhren-Trigger bezeichnet) ähnelt einem Cronjob unter Unix. Zeitgesteuerte Trigger Skripte werden zu einer bestimmten Zeit oder in wiederkehrenden Intervallen ausgeführt, oder so selten wie einmal im Monat. (Beachten Sie, dass ein Add-on können Sie einen zeitgesteuerten Trigger höchstens einmal pro Stunde. Es kann etwas dauern zufällig angeordnet, z. B. wenn Sie einen wiederkehrenden Trigger für 9:00 Uhr Apps Script wählt eine Zeit zwischen 9:00 und 10:00 Uhr aus und Dieses Timing von Tag zu Tag einheitlich, sodass 24 Stunden verstreichen, bevor der wieder ausgelöst.

Im Folgenden finden Sie ein Beispiel für eine Google Chat App veröffentlicht, in dem jede Minute eine Nachricht in jedem Gruppenbereich gepostet wird, in dem sich die App befindet:

// Example app for Google Chat that demonstrates app-initiated messages
// by spamming the user every minute.
//
// This app makes use of the Apps Script OAuth2 library at:
//     https://github.com/googlesamples/apps-script-oauth2
//
// Follow the instructions there to add the library to your script.

// When added to a space, we store the space's ID in ScriptProperties.
function onAddToSpace(e) {
  PropertiesService.getScriptProperties()
      .setProperty(e.space.name, '');
  return {
    'text': 'Hi! I\'ll post a message here every minute. ' +
            'Please remove me after testing or I\'ll keep spamming you!'
  };
}

// When removed from a space, we remove the space's ID from ScriptProperties.
function onRemoveFromSpace(e) {
  PropertiesService.getScriptProperties()
      .deleteProperty(e.space.name);
}

// Add a trigger that invokes this function every minute in the
// "Edit > Current Project's Triggers" menu. When it runs, it
// posts in each space the app was added to.
function onTrigger() {
  var spaceIds = PropertiesService.getScriptProperties()
      .getKeys();
  var message = { 'text': 'Hi! It\'s now ' + (new Date()) };
  for (var i = 0; i < spaceIds.length; ++i) {
    postMessage(spaceIds[i], message);
  }
}
var SCOPE = 'https://www.googleapis.com/auth/chat.bot';
// The values below are copied from the JSON file downloaded upon
// service account creation.
// For SERVICE_ACCOUNT_PRIVATE_KEY, remember to include the BEGIN and END lines
// of the private key
var SERVICE_ACCOUNT_PRIVATE_KEY = '...';
var SERVICE_ACCOUNT_EMAIL = 'service-account@project-id.iam.gserviceaccount.com';

// Posts a message into the given space ID via the API, using
// service account authentication.
function postMessage(spaceId, message) {
  var service = OAuth2.createService('chat')
      .setTokenUrl('https://accounts.google.com/o/oauth2/token')
      .setPrivateKey(SERVICE_ACCOUNT_PRIVATE_KEY)
      .setClientId(SERVICE_ACCOUNT_EMAIL)
      .setPropertyStore(PropertiesService.getUserProperties())
      .setScope(SCOPE);
  if (!service.hasAccess()) {
    Logger.log('Authentication error: %s', service.getLastError());
    return;
  }
  var url = 'https://chat.googleapis.com/v1/' + spaceId + '/messages';
  UrlFetchApp.fetch(url, {
    method: 'post',
    headers: { 'Authorization': 'Bearer ' + service.getAccessToken() },
    contentType: 'application/json',
    payload: JSON.stringify(message),
  });
}

Ereignisgesteuerte Trigger

Installierbare ereignisgesteuerte Trigger ähneln konzeptionell einfachen Triggern wie onOpen(), können aber auf zusätzliche Ereignisse reagieren und verhalten sich anders.

Beispiel: Der installierbare offene Trigger für Google Tabellen wird immer dann aktiviert, wenn die Tabelle von einem Nutzer mit Bearbeitungszugriff geöffnet wird, genau wie der einfache onOpen()-Trigger. Die installierbare Version kann jedoch rufen Sie Dienste an, Autorisierung. Die installierbare wird mit der Autorisierung des Nutzers ausgeführt, der den Trigger erstellt hat, auch wenn Ein anderer Nutzer mit Bearbeitungszugriff öffnet die Tabelle.

Es gibt mehrere installierbare Trigger für Google Workspace Anwendungen:

  • Ein installierbarer open-Trigger wird ausgeführt, wenn ein Nutzer eine Tabelle, ein Dokument oder ein Formular öffnet, das er bearbeiten darf.
  • Ein installierbarer edit-Trigger wird ausgeführt, wenn ein Nutzer einen Wert in einem Tabelle.
  • Ein installierbarer Änderungstrigger wird ausgeführt, wenn ein Nutzer die Struktur eines der Tabelle selbst, indem Sie z. B. ein neues Tabellenblatt hinzufügen oder ein Spalte.
  • Ein installierbarer Trigger vom Typ Formular einreichen wird ausgeführt, wenn ein Nutzer ein Formular ausfüllt. Es gibt zwei Versionen des Triggers eine für Google Formulare selbst und eine für Tabellen, wenn das Formular an eine Tabelle gesendet wird.
  • Ein installierbarer Kalendertermin-Trigger wird ausgeführt, wenn die Kalendertermine eines Nutzers erstellt, bearbeitet oder gelöscht werden.

Installierbare Trigger können in eigenständigen und gebundenen Skripts verwendet werden. Beispiel: kann ein eigenständiges Skript programmatisch einen installierbaren Trigger für einen Google Tabellen-Datei durch Aufrufen von TriggerBuilder.forSpreadsheet(key) und die Tabellen-ID übergeben.

Trigger manuell verwalten

So erstellen Sie manuell einen installierbaren Trigger im Skripteditor: führen Sie folgende Schritte aus:

  1. Öffnen Sie Ihr Apps Script-Projekt.
  2. Klicken Sie links auf Trigger .
  3. Klicken Sie rechts unten auf Trigger hinzufügen.
  4. Wählen Sie den Triggertyp aus, den Sie erstellen möchten, und konfigurieren Sie ihn.
  5. Klicken Sie auf Speichern.

Trigger programmatisch verwalten

Sie können Trigger auch programmatisch erstellen und löschen. Verwenden Sie dazu die Skriptdienst. Anruf starten ScriptApp.newTrigger(functionName), Es wird ein TriggerBuilder

Im folgenden Beispiel wird gezeigt, wie Sie zwei zeitgesteuerte Trigger erstellen: einen, der alle sechs Stunden ausgelöst wird, und einen, der jeden Montag um 9:00 Uhr (in der Zeitzone, für die Ihr Script festgelegt ist) ausgelöst wird.

triggers/triggers.gs
/**
 * Creates two time-driven triggers.
 * @see https://developers.google.com/apps-script/guides/triggers/installable#time-driven_triggers
 */
function createTimeDrivenTriggers() {
  // Trigger every 6 hours.
  ScriptApp.newTrigger('myFunction')
      .timeBased()
      .everyHours(6)
      .create();
  // Trigger every Monday at 09:00.
  ScriptApp.newTrigger('myFunction')
      .timeBased()
      .onWeekDay(ScriptApp.WeekDay.MONDAY)
      .atHour(9)
      .create();
}

Im nächsten Beispiel wird gezeigt, wie Sie einen installierbaren offenen Trigger für eine Tabelle. Im Gegensatz zu einem einfachen onOpen()-Trigger wird das Skript für muss der installierbare Trigger nicht an die Tabelle gebunden sein. Zum Erstellen dieses Triggers von einem eigenständigen Skript aus, ersetzen Sie SpreadsheetApp.getActive() mit einem Anruf bei SpreadsheetApp.openById(id)

triggers/triggers.gs
/**
 * Creates a trigger for when a spreadsheet opens.
 * @see https://developers.google.com/apps-script/guides/triggers/installable
 */
function createSpreadsheetOpenTrigger() {
  const ss = SpreadsheetApp.getActive();
  ScriptApp.newTrigger('myFunction')
      .forSpreadsheet(ss)
      .onOpen()
      .create();
}

Wenn Sie einen vorhandenen installierbaren Trigger programmatisch ändern möchten, müssen Sie ihn löschen und einen neuen erstellen. Wenn Sie die ID eines Triggers bereits gespeichert haben, Löschen Sie sie, indem Sie die ID als Argument an die Funktion unten übergeben.

triggers/triggers.gs
/**
 * Deletes a trigger.
 * @param {string} triggerId The Trigger ID.
 * @see https://developers.google.com/apps-script/guides/triggers/installable
 */
function deleteTrigger(triggerId) {
  // Loop over all triggers.
  const allTriggers = ScriptApp.getProjectTriggers();
  for (let index = 0; index < allTriggers.length; index++) {
    // If the current trigger is the correct one, delete it.
    if (allTriggers[index].getUniqueId() === triggerId) {
      ScriptApp.deleteTrigger(allTriggers[index]);
      break;
    }
  }
}

Fehler in Triggern

Wenn ein installierbarer Trigger ausgelöst wird, die Funktion aber eine Ausnahme oder nicht erfolgreich ausgeführt wird, wird in diesem Fall keine Fehlermeldung Bildschirm. Denn wenn ein zeitgesteuerter Trigger ausgeführt wird oder ein anderer Nutzer wenn Sie nicht einmal am Computer sind.

Stattdessen erhalten Sie von Apps Script eine E-Mail wie die folgende:

From: noreply-apps-scripts-notifications@google.com
Subject: Summary of failures for Google Apps Script
Your script has recently failed to finish successfully.
A summary of the failure(s) is shown below.

Die E-Mail enthält einen Link, über den Sie den Trigger deaktivieren oder neu konfigurieren können. Wenn die Skript ist gebunden in Google Tabellen, Google Docs oder Datei enthält, enthält die E-Mail auch einen Link zu dieser Datei. Über diese Links können Sie Deaktivieren Sie den Trigger oder bearbeiten Sie das Skript, um den Fehler zu beheben.

Um alle Trigger zu überprüfen, die mit Ihrem Google-Konto verknüpft sind, und Deaktivieren Sie die Trigger, die Sie nicht mehr benötigen, so:

  1. Rufen Sie script.google.com auf.
  2. Klicken Sie links auf My Triggers (Meine Trigger).
  3. Wenn Sie einen Trigger löschen möchten, klicken Sie rechts daneben auf das Dreipunkt-Menü > Trigger löschen.

Trigger in Add-ons

Neben installierbaren Triggern können Sie in Add-ons auch Manifesttrigger verwenden. Weitere Informationen finden Sie unter Trigger für Google Workspace-Add-ons.