ทริกเกอร์ที่ติดตั้งได้ช่วยให้ Apps Script เรียกใช้ฟังก์ชันโดยอัตโนมัติเมื่อเกิดเหตุการณ์บางอย่าง เช่น การเปิดเอกสาร เช่นเดียวกับทริกเกอร์แบบง่าย อย่างไรก็ตาม ทริกเกอร์ที่ติดตั้งได้มีความยืดหยุ่นมากกว่าทริกเกอร์แบบง่าย เนื่องจากสามารถเรียกบริการที่ต้องใช้การให้สิทธิ์ รวมถึงมีเหตุการณ์เพิ่มเติมอีกหลายประเภท รวมถึงทริกเกอร์ที่ทำงานตามเวลา (นาฬิกา) และควบคุมแบบเป็นโปรแกรมได้ สําหรับทั้งทริกเกอร์แบบง่ายและแบบติดตั้งได้ Apps Script จะส่งฟังก์ชันที่ทริกเกอร์ไปให้กับออบเจ็กต์เหตุการณ์ซึ่งมีข้อมูลเกี่ยวกับบริบทที่เหตุการณ์เกิดขึ้น
ข้อจำกัด
แม้ว่าทริกเกอร์ที่ติดตั้งได้จะมีความยืดหยุ่นมากกว่าทริกเกอร์แบบง่าย แต่ก็ยังมีข้อจํากัดหลายประการ ดังนี้
- ไฟล์จะไม่ทำงานหากเปิดไฟล์ในโหมดอ่านอย่างเดียว (ดูหรือแสดงความคิดเห็น) สําหรับสคริปต์แบบสแตนด์อโลน ผู้ใช้ต้องมีสิทธิ์ดูเป็นอย่างน้อยสําหรับไฟล์สคริปต์เพื่อให้ทริกเกอร์ทํางานอย่างถูกต้อง
การดำเนินการสคริปต์และคำขอ API จะไม่ทริกเกอร์ให้ทริกเกอร์ทำงาน ตัวอย่างเช่น การเรียกใช้
FormResponse.submit()
เพื่อส่งคำตอบแบบฟอร์มใหม่จะไม่ทริกเกอร์การส่งของแบบฟอร์มทริกเกอร์ที่ติดตั้งได้จะทํางานภายใต้บัญชีของบุคคลที่สร้างเสมอ ตัวอย่างเช่น หากคุณสร้างทริกเกอร์เปิดที่ติดตั้งได้ การดำเนินการนี้จะทำงานเมื่อเพื่อนร่วมงานเปิดเอกสาร (หากเพื่อนร่วมงานมีสิทธิ์แก้ไข) แต่ทริกเกอร์จะทำงานในบัญชีของคุณ ซึ่งหมายความว่าหากคุณสร้างทริกเกอร์เพื่อส่งอีเมลเมื่อเปิดเอกสาร ระบบจะส่งอีเมลจากบัญชีของคุณเสมอ ไม่จำเป็นต้องเป็นบัญชีที่เปิดเอกสาร อย่างไรก็ตาม คุณสามารถสร้างทริกเกอร์ที่ติดตั้งได้สําหรับแต่ละบัญชี ซึ่งจะส่งผลให้มีการส่งอีเมล 1 ฉบับจากแต่ละบัญชี
บัญชีหนึ่งๆ จะไม่เห็นทริกเกอร์ที่ติดตั้งจากบัญชีที่ 2 แม้ว่าบัญชีแรกจะยังคงเปิดใช้งานทริกเกอร์เหล่านั้นได้ก็ตาม
ทริกเกอร์ที่ติดตั้งได้อยู่ภายใต้ขีดจํากัดโควต้าของทริกเกอร์ Apps Script
ทริกเกอร์ที่ทำงานตามเวลา
ทริกเกอร์ที่ทำงานตามเวลา (หรือที่เรียกว่าทริกเกอร์นาฬิกา) จะคล้ายกับงาน cron ใน Unix ทริกเกอร์ที่ทำงานตามเวลาช่วยให้สคริปต์ทำงานในเวลาที่เจาะจงหรือในช่วงเวลาที่ซ้ำกัน ไม่ว่าจะเป็นทุกนาทีหรือเดือนละครั้ง (โปรดทราบว่าส่วนเสริมสามารถใช้ทริกเกอร์ที่ทำงานตามเวลาได้สูงสุด 1 ครั้งต่อชั่วโมง) ระบบอาจสุ่มเวลาเล็กน้อย เช่น หากคุณสร้างทริกเกอร์ที่เกิดซ้ำเวลา 09:00 น. Apps Script จะเลือกเวลาระหว่าง 09: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)
และส่งรหัสของสเปรดชีต
จัดการทริกเกอร์ด้วยตนเอง
หากต้องการสร้างทริกเกอร์ที่ติดตั้งได้ด้วยตนเองในเครื่องมือแก้ไขสคริปต์ ให้ทําตามขั้นตอนต่อไปนี้
- เปิดโปรเจ็กต์ Apps Script
- คลิกทริกเกอร์ ทางด้านซ้าย
- คลิกเพิ่มทริกเกอร์ที่ด้านขวาล่าง
- เลือกและกําหนดค่าประเภททริกเกอร์ที่ต้องการสร้าง
- คลิกบันทึก
จัดการทริกเกอร์แบบเป็นโปรแกรม
นอกจากนี้ คุณยังสร้างและลบทริกเกอร์แบบเป็นโปรแกรมได้ด้วยบริการสคริปต์ เริ่มต้นด้วยการเรียกใช้ ScriptApp.newTrigger(functionName)
ซึ่งจะแสดงผลเป็น TriggerBuilder
ตัวอย่างต่อไปนี้แสดงวิธีสร้างทริกเกอร์ที่ทำงานตามเวลา 2 รายการ ได้แก่ 1 รายการที่ทำงานทุก 6 ชั่วโมง และอีก 1 รายการที่ทำงานทุกวันจันทร์เวลา 9:00 น. (ในเขตเวลาที่สคริปต์ตั้งค่าไว้)
ตัวอย่างถัดไปนี้แสดงวิธีสร้างทริกเกอร์แบบเปิดที่ติดตั้งได้สําหรับสเปรดชีต โปรดทราบว่าสคริปต์ของทริกเกอร์ที่ติดตั้งได้ไม่จำเป็นต้องเชื่อมโยงกับสเปรดชีต ต่างจากทริกเกอร์ onOpen()
ธรรมดา หากต้องการสร้างทริกเกอร์นี้จากสคริปต์แบบสแตนด์อโลน ให้แทนที่ SpreadsheetApp.getActive()
ด้วยคําเรียกใช้ SpreadsheetApp.openById(id)
หากต้องการแก้ไขทริกเกอร์ที่ติดตั้งได้ที่มีอยู่แบบเป็นโปรแกรม คุณต้องลบทริกเกอร์นั้นแล้วสร้างใหม่ หากก่อนหน้านี้คุณได้จัดเก็บรหัสทริกเกอร์ไว้ คุณจะลบได้โดยส่งรหัสเป็นอาร์กิวเมนต์ไปยังฟังก์ชันด้านล่าง
ข้อผิดพลาดในทริกเกอร์
เมื่อทริกเกอร์ที่ติดตั้งได้เริ่มทํางาน แต่ฟังก์ชันแสดงข้อยกเว้นหรือทํางานไม่สําเร็จ คุณจะไม่พบข้อความแสดงข้อผิดพลาดบนหน้าจอ ท้ายที่สุดแล้ว เมื่อทริกเกอร์ที่ทำงานตามเวลาทำงานหรือผู้ใช้รายอื่นเปิดใช้งานทริกเกอร์การส่งแบบฟอร์ม คุณอาจไม่ได้อยู่ที่คอมพิวเตอร์ด้วยซ้ำ
แต่ 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 และปิดใช้งานทริกเกอร์ที่ไม่จําเป็นแล้ว ให้ทําตามขั้นตอนต่อไปนี้
- ไปที่
script.google.com
- คลิกทริกเกอร์ของฉันทางด้านซ้าย
หากต้องการลบทริกเกอร์ ให้คลิกเพิ่มเติม
> ลบทริกเกอร์ ทางด้านขวาของทริกเกอร์
ทริกเกอร์ในส่วนเสริม
นอกจากทริกเกอร์ที่ติดตั้งได้แล้ว คุณยังใช้ทริกเกอร์ไฟล์ Manifest ในส่วนเสริมได้ด้วย โปรดดูข้อมูลเพิ่มเติมที่หัวข้อทริกเกอร์สําหรับส่วนเสริม Google Workspace