ทริกเกอร์ที่ติดตั้งได้

เช่นเดียวกับทริกเกอร์ทั่วไป ทริกเกอร์ที่ติดตั้งได้จะ Apps Script จะเรียกใช้ฟังก์ชันโดยอัตโนมัติเมื่อเกิดเหตุการณ์บางอย่าง เช่น การเปิดเอกสาร อย่างไรก็ตาม ทริกเกอร์ที่ติดตั้งได้จะให้ประโยชน์มากกว่า ความยืดหยุ่นที่มากกว่าตัวกระตุ้นง่ายๆ: พวกเขาสามารถเรียกใช้ บริการ ที่ต้องใช้ การให้สิทธิ์ จะมีการจัดกิจกรรมเพิ่มเติมหลายประเภท รวมทั้งกิจกรรมแบบจับเวลา (นาฬิกา) ทั้งยังควบคุมได้แบบเป็นโปรแกรม สำหรับทั้งแบบง่ายและ ทริกเกอร์ที่ติดตั้งได้ Apps Script จะส่งฟังก์ชันที่ทริกเกอร์ CANNOT TRANSLATE event object ที่มีข้อมูล เกี่ยวกับบริบทที่เหตุการณ์เกิดขึ้น

ข้อจำกัด

แม้ว่าทริกเกอร์ที่ติดตั้งได้จะให้ความยืดหยุ่นมากกว่าทริกเกอร์ทั่วไป แต่จะยังคงมีข้อจำกัดหลายประการ ดังนี้

  • โดยจะไม่ทำงานหากเปิดไฟล์ในโหมดอ่านอย่างเดียว (ดูหรือแสดงความคิดเห็น) สำหรับ สคริปต์แบบสแตนด์อโลน ผู้ใช้ต้องมีสิทธิ์ดูไฟล์สคริปต์ใน เพื่อให้ทริกเกอร์ทำงานอย่างถูกต้อง
  • การเรียกใช้สคริปต์และคำขอ API จะไม่ทำให้ทริกเกอร์ทำงาน ตัวอย่างเช่น การโทร FormResponse.submit() การส่งแบบฟอร์มตอบกลับใหม่จะไม่ทำให้ทริกเกอร์การส่งแบบฟอร์มทำงาน

  • ทริกเกอร์ที่ติดตั้งได้จะทำงานในบัญชีของผู้ที่สร้าง ให้พวกเขา ตัวอย่างเช่น หากคุณสร้างทริกเกอร์เปิดที่ติดตั้งได้ ทริกเกอร์นี้จะเรียกใช้ เมื่อเพื่อนร่วมงานของคุณเปิดเอกสาร (หากเพื่อนร่วมงานของคุณมีสิทธิ์ในการแก้ไข) แต่ทำงานเป็นบัญชีของคุณ หมายความว่าหากคุณสร้างทริกเกอร์เพื่อ ส่งอีเมลเมื่อมีการเปิดเอกสาร อีเมลจะส่งจาก บัญชีของคุณ ไม่จำเป็นต้องเป็นบัญชีที่เปิดเอกสาร อย่างไรก็ตาม คุณสามารถสร้างทริกเกอร์ที่ติดตั้งได้สำหรับแต่ละบัญชี ซึ่งจะส่งผลให้ ในอีเมลที่ส่งจากแต่ละบัญชี

  • บัญชีหนึ่งๆ จะไม่เห็นทริกเกอร์ที่ติดตั้งจากบัญชีที่ 2 แม้แต่ แม้ว่าบัญชีแรกจะยังคงเปิดใช้งานทริกเกอร์เหล่านั้นได้

  • ทริกเกอร์ที่ติดตั้งได้จะขึ้นอยู่กับทริกเกอร์ Apps Script ขีดจำกัดโควต้า

ทริกเกอร์ที่ขึ้นอยู่กับเวลา

ทริกเกอร์ที่ขึ้นอยู่กับเวลา (เรียกอีกอย่างว่าทริกเกอร์นาฬิกา) คล้ายกับ งาน cron ใน Unix ทริกเกอร์ที่ขึ้นอยู่กับเวลาทำให้ จะทำงานในเวลาที่กำหนดหรือในช่วงเวลาที่เกิดซ้ำ ตาม ทุกนาที หรือไม่บ่อยแค่เดือนละครั้ง (โปรดทราบว่า ส่วนเสริม สามารถใช้ทริกเกอร์ที่ขึ้นอยู่กับเวลา ไม่เกิน 1 ครั้งต่อชั่วโมง) เวลาอาจเล็กน้อย แบบสุ่ม เช่น หากคุณสร้างทริกเกอร์ เวลา 9:00 น. ตามรอบ Apps Script เลือกเวลาระหว่าง 9.00 น. - 10.00 น. จากนั้นจะคง ช่วงเวลาดังกล่าวควรสอดคล้องกันแบบวันต่อวันเพื่อให้เวลา 24 ชั่วโมงก่อนเกิด ทริกเกอร์เริ่มทำงานอีกครั้ง

ต่อไปนี้คือตัวอย่างของ แอป Google Chat ที่โพสต์ข้อความทุกๆ นาทีไปยังทุกพื้นที่ทำงานที่มีแอปอยู่:

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

ทริกเกอร์ที่ขับเคลื่อนด้วยเหตุการณ์

ทริกเกอร์ที่ขับเคลื่อนด้วยเหตุการณ์ที่ติดตั้งได้นั้นมีแนวคิดคล้ายกับ ทริกเกอร์ที่เรียบง่าย เช่น onOpen() แต่ตอบสนองต่อเหตุการณ์เพิ่มเติมและทำงานได้ แตกต่างกัน

เช่น ทริกเกอร์เปิดที่ติดตั้งได้สำหรับ Google ชีต เปิดใช้งานเมื่อใดก็ตามที่ผู้ใช้ที่มีสิทธิ์แก้ไขเปิดสเปรดชีต เหมือนกับทริกเกอร์ onOpen() แบบง่าย แต่เวอร์ชันที่ติดตั้งได้จะทำสิ่งต่อไปนี้ได้ เรียกใช้บริการที่ต้องใช้ การให้สิทธิ์ โปรแกรมที่ติดตั้ง จะทำงานด้วยการให้สิทธิ์ของผู้ใช้ที่สร้างทริกเกอร์ แม้ หากผู้ใช้รายอื่นที่มีสิทธิ์แก้ไขเปิดสเปรดชีต

มีทริกเกอร์ที่ติดตั้งได้หลายรายการ Google Workspace แอปพลิเคชัน:

  • ทริกเกอร์เปิดที่ติดตั้งได้จะทำงานเมื่อผู้ใช้เปิดสเปรดชีต เอกสาร หรือแบบฟอร์มที่บุคคลเหล่านั้นมีสิทธิ์แก้ไข
  • ทริกเกอร์แก้ไขที่ติดตั้งได้จะทำงานเมื่อผู้ใช้แก้ไขค่าใน สเปรดชีต
  • ทริกเกอร์การเปลี่ยนแปลงที่ติดตั้งได้จะทำงานเมื่อผู้ใช้แก้ไขโครงสร้างของ สเปรดชีตนั้น เช่น การเพิ่มชีตใหม่หรือนำ
  • ทริกเกอร์การส่งแบบฟอร์มที่ติดตั้งได้จะทำงานเมื่อผู้ใช้ตอบกลับแบบฟอร์ม ทริกเกอร์การส่งแบบฟอร์มมี 2 เวอร์ชัน ระบบหนึ่งสำหรับ Google ฟอร์มเอง และอีกลิงก์หนึ่งสำหรับชีตหากส่งแบบฟอร์มไปยังสเปรดชีต
  • ทริกเกอร์กิจกรรมในปฏิทินที่ติดตั้งได้จะทำงานเมื่อกิจกรรมในปฏิทินของผู้ใช้ มีการอัปเดต เช่น สร้าง แก้ไข หรือลบ

คุณสามารถใช้ทริกเกอร์ที่ติดตั้งได้ในสคริปต์แบบสแตนด์อโลนและสคริปต์ที่เชื่อมโยง ตัวอย่างเช่น สคริปต์แบบสแตนด์อโลนสามารถสร้างทริกเกอร์ที่ติดตั้งได้แบบเป็นโปรแกรมสำหรับ ไฟล์ Google ชีตที่กำหนดเองโดยการโทร TriggerBuilder.forSpreadsheet(key) และส่งผ่านรหัสสเปรดชีต

จัดการทริกเกอร์ด้วยตนเอง

วิธีสร้างทริกเกอร์ที่ติดตั้งได้ในเครื่องมือแก้ไขสคริปต์ ให้ทำตามขั้นตอนต่อไปนี้

  1. เปิดโปรเจ็กต์ Apps Script
  2. คลิกทริกเกอร์ ทางด้านซ้าย
  3. คลิกเพิ่มทริกเกอร์ที่ด้านขวาล่าง
  4. เลือกและกำหนดค่าประเภททริกเกอร์ที่ต้องการสร้าง
  5. คลิกบันทึก

จัดการทริกเกอร์แบบเป็นโปรแกรม

คุณยังสร้างและลบทริกเกอร์แบบเป็นโปรแกรมได้ด้วย บริการสคริปต์ เริ่มด้วยการโทร ScriptApp.newTrigger(functionName) ซึ่งแสดงผล TriggerBuilder

ตัวอย่างต่อไปนี้จะแสดงวิธีสร้างทริกเกอร์ที่ใช้เวลา 2 ตัว เริ่มทำงานทุก 6 ชั่วโมง และจะเริ่มทำงานทุกวันจันทร์เวลา 9.00 น. (ในเขตเวลา ที่สคริปต์ตั้งค่าไว้)

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

ตัวอย่างต่อไปนี้จะแสดงวิธีสร้างทริกเกอร์เปิดที่ติดตั้งได้สำหรับ สเปรดชีต โปรดทราบว่าสคริปต์สำหรับonOpen() ทริกเกอร์ที่ติดตั้งได้ไม่จำเป็นต้องเชื่อมโยงกับสเปรดชีต วิธีสร้าง ทริกเกอร์นี้จากสคริปต์แบบสแตนด์อโลน เพียงแค่แทนที่ SpreadsheetApp.getActive() ที่โทรหา 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();
}

หากต้องการแก้ไขทริกเกอร์ที่ติดตั้งได้ซึ่งมีอยู่แล้วแบบเป็นโปรแกรม คุณต้องลบทริกเกอร์ดังกล่าว แล้วสร้างใหม่ หากก่อนหน้านี้คุณได้จัดเก็บรหัสของทริกเกอร์ คุณจะทำสิ่งต่อไปนี้ได้ ลบคีย์ได้โดยส่งรหัสเป็นอาร์กิวเมนต์ไปยังฟังก์ชันด้านล่าง

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

ข้อผิดพลาดในตัวทริกเกอร์

เมื่อทริกเกอร์ที่ติดตั้งได้เริ่มทำงาน แต่ฟังก์ชันดังกล่าวแสดงข้อผิดพลาดหรือ ไม่เช่นนั้น คุณจะไม่พบข้อความแสดงข้อผิดพลาดบน บนหน้าจอ เพราะเมื่อทริกเกอร์ตามเวลาทำงานหรือผู้ใช้รายอื่นเปิดใช้งาน ทริกเกอร์การส่งแบบฟอร์มของคุณ คุณอาจไม่ได้อยู่หน้าคอมพิวเตอร์ด้วยซ้ำ

แต่ 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 ชีต, เอกสาร หรือฟอร์ม ไฟล์ อีเมลจะมีลิงก์ไปยังไฟล์นั้นด้วย ลิงก์เหล่านี้ช่วยให้คุณ ปิดใช้งานทริกเกอร์หรือแก้ไขสคริปต์เพื่อแก้ไขข้อบกพร่อง

วิธีตรวจสอบทริกเกอร์ทั้งหมดที่เชื่อมโยงกับบัญชี Google และ ปิดใช้งานทริกเกอร์ที่คุณไม่ต้องการใช้แล้ว ให้ทำตามขั้นตอนต่อไปนี้

  1. ไปที่ script.google.com
  2. คลิกทริกเกอร์ของฉันทางด้านซ้าย
  3. หากต้องการลบทริกเกอร์ ให้คลิกเพิ่มเติมที่ด้านขวาของทริกเกอร์ ลบทริกเกอร์

ทริกเกอร์ในส่วนเสริม

นอกจากทริกเกอร์ที่ติดตั้งได้แล้ว คุณสามารถใช้ทริกเกอร์ไฟล์ Manifest ใน ส่วนเสริม สำหรับข้อมูลเพิ่มเติม ดู ทริกเกอร์สำหรับส่วนเสริม Google Workspace