Aktywatory do zainstalowania

Podobnie jak w przypadku prostych aktywatorów, aktywatory instalacyjne pozwalają Apps Script uruchamiać funkcję automatycznie po wystąpieniu określonego zdarzenia, takiego jak otwarcie dokumentu. Aktywatory do zainstalowania są jednak bardziej elastyczne niż proste – mogą wywoływać usługi wymagające autoryzacji, a także kilka dodatkowych typów zdarzeń, m.in. reguły oparte na czasie (zegara). Można nimi sterować automatycznie. Zarówno w przypadku aktywatorów prostych, jak i możliwych do zainstalowania, Apps Script przekazuje aktywowanej funkcji obiekt zdarzenia zawierający informacje o kontekście, w którym wystąpiło zdarzenie.

Ograniczenia

Reguły do zainstalowania są bardziej elastyczne niż proste, ale nadal podlegają kilku ograniczeniom:

  • Nie działają, jeśli plik jest otwarty w trybie tylko do odczytu (wyświetlania lub komentowania). W przypadku samodzielnych skryptów użytkownicy muszą mieć co najmniej uprawnienia do wyświetlania pliku skryptu, aby umożliwić prawidłowe działanie aktywatorów.
  • Wykonanie skryptów i żądania interfejsu API nie powodują uruchamiania aktywatorów. Na przykład wywołanie FormResponse.submit() w celu przesłania nowej odpowiedzi z formularza nie powoduje uruchomienia reguły przesyłania formularza.

  • Aktywatory do zainstalowania są zawsze uruchamiane na koncie osoby, która je utworzyła. Jeśli na przykład utworzysz instalowany aktywator otwarcia, będzie on uruchamiany, gdy Twój współpracownik otworzy dokument (jeśli Twój współpracownik ma uprawnienia do edycji), ale będzie uruchamiany na Twoim koncie. Oznacza to, że jeśli utworzysz regułę wysyłania e-maila po otwarciu dokumentu, będzie on zawsze wysyłany z Twojego konta, niekoniecznie z konta, za pomocą którego dokument został otwarty. Można jednak utworzyć dla każdego konta regułę możliwą do zainstalowania, co spowoduje wysłanie jednego e-maila z każdego konta.

  • Dane konto nie ma dostępu do reguł zainstalowanych z drugiego konta, chociaż może je aktywować na pierwszym koncie.

  • Te aktywatory podlegają limitom aktywatorów Apps Script.

Reguły działające na podstawie czasu

Aktywator zależny od czasu (nazywany też wyzwalaczem zegara) jest podobny do zadania cron w systemie Unix. Czynniki oparte na czasie pozwalają na wykonywanie skryptów o określonej godzinie lub cyklicznie – tak często, jak co minutę lub rzadziej niż raz w miesiącu. Pamiętaj, że dodatek może korzystać maksymalnie raz na godzinę z reguły zależnej od czasu. Czas może być nieco losowy. Jeśli na przykład utworzysz cykliczną regułę dotyczącą godziny 9:00, Apps Script wybiera godzinę między 9:00 a 10:00 i zachowuje tę samą godzinę z dnia na dzień, tak aby upływały 24 godziny przed ponownym uruchomieniem reguły.

Oto przykład aplikacji Google Chat, która co minutę publikuje wiadomość w każdym pokoju, w którym znajduje się aplikacja:

// 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),
  });
}

Reguły oparte na zdarzeniach

Zainstalowane aktywatory oparte na zdarzeniach są koncepcyjnie podobne do prostych aktywatorów, np. onOpen(), ale mogą reagować na dodatkowe zdarzenia i zachowują się inaczej.

Na przykład instalowany wyzwalacz otwarcia w Arkuszach Google aktywuje się za każdym razem, gdy użytkownik otworzy arkusz kalkulacyjny przez użytkownika z uprawnieniami do edycji, tak samo jak w przypadku prostej reguły onOpen(). Wersja do zainstalowania może jednak wywoływać usługi, które wymagają autoryzacji. Wersja do zainstalowania jest uruchamiana z autoryzacją użytkownika, który utworzył aktywator, nawet wtedy, gdy inny użytkownik z uprawnieniami do edycji otworzy arkusz kalkulacyjny.

Jest kilka aktywatorów do zainstalowania dla aplikacjiGoogle Workspace :

  • Instalowany aktywator otwarcia jest uruchamiany, gdy użytkownik otworzy arkusz kalkulacyjny, dokument lub formularz, dla których ma uprawnienia do edycji.
  • Zainstalowany aktywator edycji jest uruchamiany, gdy użytkownik zmienia wartość w arkuszu kalkulacyjnym.
  • Zainstalowany aktywator zmiany jest uruchamiany, gdy użytkownik modyfikuje strukturę arkusza kalkulacyjnego, np. dodając nowy arkusz lub usuwając kolumnę.
  • Zainstalowana reguła przesłania formularza uruchamia się, gdy użytkownik odpowiada na formularz. Istnieją 2 wersje reguły przesyłania formularza: jedna dla Formularzy Google i jedna dla Arkuszy, jeśli formularz jest przesyłany do arkusza kalkulacyjnego.
  • Instalowany aktywator wydarzenia w kalendarzu jest uruchamiany, gdy wydarzenia w kalendarzu użytkownika zostaną zaktualizowane – utworzone, edytowane lub usunięte.

Tych aktywatorów można używać w skryptach samodzielnych i powiązanych. Na przykład samodzielny skrypt może automatycznie utworzyć możliwy do zainstalowania aktywator dla dowolnego pliku Arkuszy Google. W tym celu wywołaj metodę TriggerBuilder.forSpreadsheet(key) i przekażesz identyfikator arkusza kalkulacyjnego.

Ręczne zarządzanie aktywatorami

Aby ręcznie utworzyć w edytorze skryptów aktywator możliwy do zainstalowania, wykonaj te czynności:

  1. Otwórz projekt Apps Script.
  2. Po lewej stronie kliknij Reguły .
  3. W prawym dolnym rogu kliknij Dodaj regułę.
  4. Wybierz i skonfiguruj typ aktywatora, który chcesz utworzyć.
  5. Kliknij Zapisz.

Automatyczne zarządzanie aktywatorami

Aktywatory możesz też tworzyć i usuwać automatycznie za pomocą usługi skryptu. Zacznij od wywołania ScriptApp.newTrigger(functionName), które zwraca wartość TriggerBuilder.

Z przykładu poniżej dowiesz się, jak utworzyć 2 reguły zależne od czasu: jeden uruchamiany co 6 godzin, a drugi w każdy poniedziałek o 9:00 rano (w strefie czasowej ustawionej dla Twojego skryptu).

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();
}

Następny przykład pokazuje, jak utworzyć możliwy do zainstalowania aktywator otwarty dla arkusza kalkulacyjnego. Pamiętaj, że w przeciwieństwie do prostego wyzwalacza onOpen() skrypt nie musi być powiązany z arkuszem kalkulacyjnym. Aby utworzyć ten aktywator na podstawie samodzielnego skryptu, po prostu zastąp SpreadsheetApp.getActive() wywołaniem do 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();
}

Aby programowo zmodyfikować istniejący aktywator z możliwością zainstalowania, musisz go usunąć i utworzyć nowy. Jeśli identyfikator aktywatora był wcześniej zapisany, możesz go usunąć, przekazując go jako argument do funkcji poniżej.

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;
    }
  }
}

Błędy w aktywatorach

Gdy uruchamia się aktywator możliwy do zainstalowania, ale funkcja zgłosi wyjątek lub w przeciwnym razie nie zadziała, na ekranie nie pojawi się komunikat o błędzie. W końcu, gdy uruchomi się reguła zależna od czasu lub inny użytkownik aktywuje regułę przesyłania formularza, możesz nie być nawet przy komputerze.

Zamiast tego Apps Script wysyła e-maile podobne do tego:

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.

E-mail zawiera link umożliwiający zdezaktywowanie lub zmianę konfiguracji reguły. Jeśli skrypt jest powiązany z plikiem Arkuszy, Dokumentów lub Formularzy Google, e-mail zawiera też link do tego pliku. Te linki umożliwiają dezaktywowanie aktywatora lub edytowanie skryptu w celu naprawienia błędu.

Aby sprawdzić wszystkie reguły powiązane z Twoim kontem Google i dezaktywować te, których już nie potrzebujesz, wykonaj te czynności:

  1. Wejdź na stronę script.google.com.
  2. Po lewej stronie kliknij Moje reguły.
  3. Aby usunąć regułę, po jej prawej stronie kliknij Więcej > Usuń regułę.

Aktywatory do zainstalowania w dodatkach

Więcej informacji o używaniu w dodatkach aktywatorów do zainstalowania znajdziesz w artykule Reguły dodatków.