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

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

ข้อจำกัด

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

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

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

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

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

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

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

ทริกเกอร์ที่ขึ้นอยู่กับเหตุการณ์

ทริกเกอร์ที่ขึ้นอยู่กับเหตุการณ์ซึ่งติดตั้งได้มีแนวคิดคล้ายกับทริกเกอร์แบบง่าย เช่น 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 น. (ในเขตเวลาที่สคริปต์ตั้งค่าไว้)

trigger/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)

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

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

trigger/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: 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. หากต้องการลบทริกเกอร์ ทางด้านขวาของทริกเกอร์ ให้คลิกเพิ่มเติม > ลบทริกเกอร์

ทริกเกอร์ที่ติดตั้งได้ในส่วนเสริม

ดูข้อมูลเพิ่มเติมเกี่ยวกับการใช้ทริกเกอร์ที่ติดตั้งได้ในส่วนเสริมในทริกเกอร์ส่วนเสริม