Устанавливаемые триггеры

Как и простые триггеры , устанавливаемые триггеры позволяют Apps Script автоматически запускать функцию при наступлении определённого события, например, открытия документа. Однако устанавливаемые триггеры предлагают большую гибкость, чем простые: они могут вызывать службы , требующие авторизации , предлагают несколько дополнительных типов событий, включая триггеры, управляемые по времени (часам), и ими можно управлять программно. Как для простых, так и для устанавливаемых триггеров Apps Script передаёт вызываемой функции объект события , содержащий информацию о контексте, в котором произошло событие.

Ограничения

Несмотря на то, что устанавливаемые триггеры обеспечивают большую гибкость, чем простые триггеры, они все равно имеют ряд ограничений:

  • Они не запускаются, если файл открыт в режиме только для чтения (просмотра или комментирования). Для корректной работы автономных скриптов пользователям требуется как минимум право просмотра файла скрипта.
  • Выполнение скриптов и запросы API не приводят к срабатыванию триггеров. Например, вызов FormResponse.submit() для отправки нового ответа формы не приводит к срабатыванию триггера отправки формы.

  • Устанавливаемые триггеры всегда запускаются под учётной записью того пользователя, который их создал. Например, если вы создаёте устанавливаемый триггер открытия, он срабатывает, когда ваш коллега открывает документ (если у него есть права на редактирование), но запускается от имени вашей учётной записи. Это означает, что если вы создаёте триггер для отправки электронного письма при открытии документа, письмо всегда будет отправлено с вашей учётной записи, а не обязательно с той, которая открыла документ. Однако вы можете создать устанавливаемый триггер для каждой учётной записи, что приведёт к отправке одного электронного письма с каждой учётной записи.

  • Данная учетная запись не может видеть триггеры, установленные из второй учетной записи, даже если первая учетная запись по-прежнему может активировать эти триггеры.

  • Устанавливаемые триггеры подчиняются ограничениям квоты триггеров Apps Script.

Триггеры, управляемые временем

Триггер, управляемый временем (также называемый триггером часов), аналогичен заданию cron в Unix. Триггеры, управляемые временем, позволяют скриптам выполняться в определённое время или с повторяющимся интервалом, например, каждую минуту или не чаще, чем раз в месяц. (Обратите внимание, что надстройка может использовать триггер, управляемый временем, не чаще одного раза в час.) Время может быть слегка случайным — например, если вы создаёте повторяющийся триггер на 9 утра, Apps Script выбирает время между 9 и 10 утра, а затем поддерживает это время постоянным изо дня в день, чтобы до следующего срабатывания триггера прошло 24 часа.

Триггеры, управляемые событиями

Устанавливаемые событийно-управляемые триггеры концептуально похожи на простые триггеры , такие как onOpen() , но они могут реагировать на дополнительные события и ведут себя по-другому.

Например, устанавливаемый триггер открытия для Google Таблиц активируется при каждом открытии таблицы любым пользователем с правами на редактирование, как и простой триггер onOpen() . Однако устанавливаемая версия может вызывать службы , требующие авторизации . Устанавливаемая версия запускается с авторизацией пользователя, создавшего триггер, даже если другой пользователь с правами на редактирование открывает таблицу.

Существует несколько устанавливаемых триггеров дляGoogle Workspace приложения:

  • Устанавливаемый триггер открытия запускается, когда пользователь открывает электронную таблицу, документ или форму, на редактирование которых у него есть разрешение.
  • Устанавливаемый триггер редактирования срабатывает, когда пользователь изменяет значение в электронной таблице.
  • Устанавливаемый триггер изменений срабатывает, когда пользователь изменяет структуру самой электронной таблицы, например, добавляя новый лист или удаляя столбец.
  • Устанавливаемый триггер отправки формы срабатывает, когда пользователь заполняет форму. Существует две версии триггера отправки формы: одна для самих Google Форм, а другая для Таблиц, если форма отправляется в электронную таблицу .
  • Устанавливаемый триггер событий календаря срабатывает при обновлении событий календаря пользователя — их создании, редактировании или удалении.

Устанавливаемые триггеры можно использовать в автономных и связанных скриптах. Например, автономный скрипт может программно создать устанавливаемый триггер для произвольного файла Google Таблиц, вызвав TriggerBuilder.forSpreadsheet(key) и передав идентификатор таблицы.

Управляйте триггерами вручную

Чтобы вручную создать устанавливаемый триггер в редакторе скриптов, выполните следующие действия:

  1. Откройте проект Apps Script.
  2. Слева нажмите тревоги ».
  3. В правом нижнем углу нажмите «Добавить триггер» .
  4. Выберите и настройте тип триггера, который вы хотите создать.
  5. Нажмите «Сохранить» .

Программное управление триггерами

Вы также можете создавать и удалять триггеры программно с помощью сервиса Script . Начните с вызова ScriptApp.newTrigger(functionName) , который возвращает TriggerBuilder .

В следующем примере показано, как создать два триггера, управляемых по времени: один, который срабатывает каждые 6 часов, и один, который срабатывает каждый понедельник в 9 утра (в часовом поясе, на который настроен ваш скрипт).

триггеры/триггеры.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();
}

В следующем примере показано, как создать устанавливаемый триггер открытия для электронной таблицы. Обратите внимание, что, в отличие от простого триггера onOpen() , скрипт устанавливаемого триггера не требуется привязывать к электронной таблице. Чтобы создать этот триггер из отдельного скрипта, просто замените SpreadsheetApp.getActive() вызовом SpreadsheetApp.openById(id) .

триггеры/триггеры.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();
}

Чтобы программно изменить существующий устанавливаемый триггер, необходимо удалить его и создать новый. Если вы ранее сохранили идентификатор триггера, вы можете удалить его, передав его в качестве аргумента функции ниже.

триггеры/триггеры.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;
    }
  }
}

Перед созданием триггера мы рекомендуем вам убедиться, что связанная с ним функция имеет все необходимые разрешения OAuth .

Ошибки в триггерах

Когда срабатывает устанавливаемый триггер, но функция выдаёт исключение или по какой-либо другой причине не выполняется успешно, вы не видите сообщение об ошибке на экране. В конце концов, когда срабатывает триггер с ограничением по времени или другой пользователь активирует ваш триггер отправки формы, вы можете даже не находиться за компьютером.

Вместо этого Apps Script отправит вам электронное письмо следующего содержания:

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.

В письме содержится ссылка для деактивации или перенастройки триггера. Если скрипт привязан к файлу Google Sheets, Docs или Forms, в письме также содержится ссылка на этот файл. Эти ссылки позволяют деактивировать триггер или отредактировать скрипт, чтобы исправить ошибку.

Чтобы просмотреть все триггеры, связанные с вашей учетной записью Google, и отключить те триггеры, которые вам больше не нужны, выполните следующие действия:

  1. Перейдите на script.google.com .
  2. Слева нажмите Мои триггеры .
  3. Чтобы удалить триггер, справа от триггера нажмите Дополнительно > Удалить триггер .

Триггеры в дополнениях

Помимо устанавливаемых триггеров, в дополнениях можно использовать манифестные триггеры. Подробнее см. в статье Триггеры для дополнений Google Workspace .