Yüklenebilir Tetikleyiciler

Basit tetikleyiciler gibi yüklenebilir tetikleyiciler de Apps Komut Dosyası, belirli bir etkinlik veya etkinlik olduğunda işlemler gerçekleştirilir. Ancak yüklenebilir tetikleyiciler daha esnek olmasını sağlar: Tetikleyiciler hizmetler gerektiren yetkilendirme zaman odaklı (saat) ve çeşitli ek etkinlikler sunar. ve programatik olarak kontrol edilebilir. Hem basit hem de Apps Komut Dosyası, tetiklenen işlevi etkinlik nesnesi olayın gerçekleştiği bağlam hakkında.

Kısıtlamalar

Yüklenebilir tetikleyiciler, basit tetikleyicilerden daha fazla esneklik sunsa da çeşitli kısıtlamalara tabi olmaya devam ederler:

  • Bir dosya salt okuma (görüntüleme veya yorum yapma) modunda açılırsa çalıştırılmazlar. Örneğin, komut dosyalarını indirmek için, kullanıcıların en azından komut dosyası için düzgün çalışmasını sağlamalısınız.
  • Komut dosyası yürütme ve API istekleri, tetikleyicilerin çalıştırılmasına neden olmaz. Örneğin, arama FormResponse.submit() yeni bir form yanıtı göndermek, formun gönderme tetikleyicisinin çalıştırılmasına neden olmaz.

  • Yüklenebilir tetikleyiciler her zaman, uygulamanızı oluşturan kullanıcının hesabı altında çalışır oluşturabilirsiniz. Örneğin, yüklenebilir bir açık tetikleyici oluşturursanız bu tetikleyiciyi çalıştırır İş arkadaşınız dokümanı açtığında (iş arkadaşınızın düzenleme erişimi varsa), ancak sizin hesabınız olarak çalışır. Bu, dönüşüm işlemi için bir tetikleyici oluşturursanız doküman açıldığında e-posta gönder; e-posta her zaman (belgeyi açan hesap her zaman açık değildir). Ancak, her hesap için yüklenebilir bir tetikleyici oluşturabilirsiniz. Bu da tek bir e-postayla gönderin.

  • Belirli bir hesap, ikinci bir hesaptan yüklenen tetikleyicileri göremez, hatta ancak ilk hesap bu tetikleyicileri etkinleştirmeye devam edebilir.

  • Yüklenebilir tetikleyiciler, Apps Komut Dosyası tetikleyicisine tabidir. kota sınırlarını kaldırın.

Zamana dayalı tetikleyiciler

Zaman odaklı tetikleyici (saat tetikleyici olarak da adlandırılır) cron işi hakkında daha fazla bilgi edinin. Zamana dayalı tetikleyiciler, komut dosyaları belirli bir zamanda veya yinelenen bir arada, daha sık aralıklarla gibi seyrek şekilde ekleyebilirsiniz. ( eklenti zamana dayalı bir tetikleyici kullanabilir saatte en fazla bir kez kullanmayın.) Zaman biraz farklı olabilir rastgele yapılır. Örneğin, 09:00'da yinelenen bir tetikleyici oluşturursanız Apps Komut Dosyası, 09:00 ile 10:00 arası bir saat seçer ve sonra o zamanlamanın günden güne tutarlı olmasını, yani etkinleşir.

Aşağıda bir Google Chat uygulaması uygulamanın bulunduğu her alana dakikada bir mesaj gönderen:

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

Etkinliğe dayalı tetikleyiciler

Yüklenebilir etkinliğe dayalı tetikleyiciler kavram olarak basit tetikleyiciler onOpen() örneğine benzer, ancak ek etkinliklere yanıt verebilir ve değiştirebilirsiniz.

Örneğin, Google E-Tablolar için yüklenebilir açık tetikleyici e-tablo düzenleme erişimine sahip herhangi bir kullanıcı tarafından açıldığında etkinleştirilir. Tıpkı basit onOpen() tetikleyicisi gibi. Ancak yüklenebilir sürüm, gerektiren hizmetleri yetkilendirme. Yüklenebilir sürümü, tetikleyiciyi oluşturan kullanıcının yetkilendirmesiyle çalışır; e-tabloyu düzenleme erişimine sahip başka bir kullanıcı açarsa.

Etiketleme için Google Analytics 4'e Google Workspace uygulamalar:

  • Kullanıcı bir e-tabloyu açtığında yüklenebilir bir open tetikleyicisi çalışır. izin verilen doküman veya form olabilir.
  • Kullanıcı reklam öğesindeki bir değeri değiştirdiğinde, e-tablo kullanarak yapabilirsiniz.
  • Kullanıcı bir öğenin yapısını değiştirdiğinde, yüklenebilir bir değişiklik tetikleyicisi (örneğin, yeni bir sayfa ekleyerek veya bir sayfayı kaldırarak) sütununa girin.
  • Kullanıcı bir forma yanıt verdiğinde yüklenebilir bir form gönderme tetikleyicisi çalışır. Form gönderme tetikleyicisinin iki sürümü vardır. Google Formlar'ın kendisi için bir web ve form e-tabloya gönderilirse E-Tablolar için bir tane.
  • Bir kullanıcının takvim etkinlikleri olduğunda yüklenebilir bir takvim etkinliği tetikleyicisi çalıştırılır oluşturulmaları, düzenlenmeleri veya silinmelerini sağlar.

Yüklenebilir tetikleyicileri bağımsız ve bağlı komut dosyalarında kullanabilirsiniz. Örneğin, tek başına bir komut dosyası, tek başına bir komut dosyası için rastgele bir Google E-Tablolar dosyası için TriggerBuilder.forSpreadsheet(key) ve e-tablonun kimliğini iletmeniz gerekir.

Tetikleyicileri manuel olarak yönetme

Komut dosyası düzenleyicide manuel olarak yüklenebilir bir tetikleyici oluşturmak için şu adımları uygulayın:

  1. Apps Komut Dosyası projenizi açın.
  2. Solda Tetikleyiciler'i tıklayın.
  3. Sağ altta Tetikleyici Ekle'yi tıklayın.
  4. Oluşturmak istediğiniz tetikleyici türünü seçip yapılandırın.
  5. Kaydet'i tıklayın.

Tetikleyicileri programatik olarak yönetme

Ayrıca, aşağıdakileri kullanarak tetikleyicileri programatik olarak oluşturabilir ve silebilirsiniz: Komut dosyası hizmeti. Şu numarayı arayarak başlayın: ScriptApp.newTrigger(functionName) Bu, TriggerBuilder.

Aşağıdaki örnekte, biri her 6 saatte bir ve her pazartesi sabah 9'da (saat diliminde) etkinleşen bir emin olun.

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

Aşağıdaki örnekte, bir e-tablo kullanarak yapabilirsiniz. Basit bir onOpen() tetikleyicisinin aksine, Yüklenebilir tetikleyicinin e-tabloya bağlı olması gerekmez. Oluşturmak için tek başına bir komut dosyasından bu tetikleyiciyi SpreadsheetApp.getActive() adlı kişiye çağrı: 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();
}

Mevcut bir yüklenebilir tetikleyiciyi programatik olarak değiştirmek için onu silmeniz gerekir ve yeni bir hesap oluşturun. Daha önce bir tetikleyicinin kimliğini sakladıysanız şunu yapabilirsiniz: kimliği aşağıdaki işleve bağımsız değişken olarak ileterek silebilirsiniz.

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

Tetikleyicilerdeki hatalar

Yüklenebilir bir tetikleyici etkinleştiğinde, ancak işlev bir istisna oluşturduğunda veya başarılı bir şekilde çalışmazsa tıklayın. Sonuçta, zamana dayalı bir tetikleyici çalıştığında veya başka bir kullanıcı etkinleştiğinde form gönderme tetikleyicisinin olmadığı durumlarda bile bilgisayar başında olmayabilirsiniz.

Bunun yerine Apps Komut Dosyası size aşağıdakine benzer bir e-posta gönderir:

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-posta, tetikleyiciyi devre dışı bırakmak veya yeniden yapılandırmak için bir bağlantı içerir. Öğe komut dosyası bağ Google E-Tablolar, Dokümanlar veya Formlar'a dosyası, e-postada söz konusu dosyanın bağlantısı da bulunur. Bu bağlantılar şunları yapmanıza olanak tanır: tetikleyiciyi devre dışı bırakın veya hatayı düzeltmek için komut dosyasını düzenleyin.

Google Hesabınızla ilişkilendirilmiş tüm tetikleyicileri incelemek ve artık ihtiyacınız olmayan tetikleyicileri devre dışı bırakmak için aşağıdaki adımları uygulayın:

  1. script.google.com adresine gidin.
  2. Solda Tetikleyicilerim'i tıklayın.
  3. Bir tetikleyiciyi silmek için tetikleyicinin sağındaki Diğer'i tıklayın. Tetikleyiciyi sil.

Eklentilerdeki tetikleyiciler

Yüklenebilir tetikleyicilere ek olarak manifest tetikleyicilerini şurada kullanabilirsiniz: kullanılabilir. Daha fazla bilgi için bkz. Google Workspace eklentilerini tetikleyen tetikleyiciler.