Ở bài trước, mình đã giới thiệu đến các bạn cách gửi email xác nhận điền form bằng cách tạo installable trigger. Tương tự, để hẹn giờ gửi email, các bạn cũng phải tạo installale trigger, bằng cách thủ công hoặc bằng Apps Script đều được.
1 2 3 |
Tạo installable trigger thủ công
Trong Apps Script, các bạn chọn Edit -> Current Project’s Triggers. Cửa sổ Installable trigger mở ra, các bạn chọn tiếp Add Trigger

Tại đây, các bạn chọn tiếp như sau:
Choose which function to run: guiemail (function chứa hàm sendEmail đã viết ở trên)
Select event source: Time-driven. Đây là chìa khóa để hẹn giờ email, Time-driven hay còn gọi là Clock trigger, cho phép bạn hẹn thời gian để chạy function trong apps script
Select type of time based trigger và Select minute interval: Có nhiều lựa chọn cho các bạn ở phần này. Trong ví dụ này, mình chọn Minutes timer và Every minute với ý nghĩa: trigger sẽ được chạy theo phút, và mỗi phút sẽ chạy 1 lần
Bấm Save để lưu lại và khởi tạo trigger

Vậy là chúng ta đã khởi tạo xong 1 installable trigger và cứ sau mỗi phút function guiemail sẽ chạy 1 lần.
Lưu ý: trong mục Select type of time based trigger, các bạn có thể chọn Specific date and time và điền thời gian chạy trigger theo mong muốn (theo format yyyy-mm-dd hh-mm)
Tạo installable trigger bằng Apps Script
Function henGioEmail dưới đây sẽ tạo 1 installable trigger và chạy sau 1 phút
Lưu ý: thời gian trong hàm after() được tính theo mili giây với 1 giây = 1000 mili giây
1 2 3 4 5 6 | function henGioEmail() { ScriptApp.newTrigger('guiemail') .timeBased() .after(60 * 1000) // 1 phút .create(); } |
Giải thích thêm:
.newTrigger() chứa tên function chứa hàm sendEmail
.timeBased() chọn chế độ Time-driven
.create() có chức năng giống nút Save, khởi tạo trigger
Thay vì sử dụng after() để chạy trigger sau một khoảng thời gian. Các bạn có thể sử dụng các hàm dưới đây (nguồn: Google Apps Script) tùy theo nhu cầu:
Hàm | Mô tả ngắn |
after(durationMilliseconds) | Chạy trigger sau một khoảng thời gian (mili giây) |
at(date) | Chạy trigger vào một khoảng thời gian cụ thể |
atDate(year, month,day) | Chạy trigger vào một khoảng thời gian cụ thể theo năm, tháng, ngày |
atHour(hour) | Thời điểm (giờ) mà trigger sẽ chạy mỗi ngày |
everyDays(n) | Chạy trigger mỗi n ngày |
everyHours(n) | Chạy trigger mỗi n giờ |
everyMinutes(n) | Chạy trigger mỗi n phút |
everyWeeks(n) | Chạy trigger mỗi n tuần |
inTimezone(timezone) | Chạy trigger theo Múi giờ (danh sách múi giờ) |
nearMinute(minute) | Thời điểm (phút) mà trigger sẽ chạy mỗi ngày (gần đúng). Sử dụng kết hợp với atHour() |
onMonthDay(day) | Thời điểm (ngày trong tháng) mà trigger sẽ chạy mỗi tháng |
onWeekDay(day) | Thời điểm (ngày trong tuần) mà trigger sẽ chạy mỗi tuần. Ví dụ (chạy vào thứ 6 hàng tuần): .onWeekDay(ScriptApp.WeekDay.FRIDAY) |
Cho một khoảng thời gian cụ thể
Nếu bạn muốn hẹn giờ gửi email vào thời gian tính theo năm, tháng, ngày, giờ, phút thì có thể sử dụng hàm at() theo ví dụ dưới đây
1 2 3 4 5 6 7 | function henGioEmail() { var time = new Date(2019, 6, 15, 2, 15); // 2 giờ 15 phút, ngày 15 tháng 7 năm 2019 ScriptApp.newTrigger('guiemail') .timeBased() .at(time) .create(); } |
Lưu ý quan trọng:
1. Thời gian trong lệnh new Date() phải được sắp xếp theo format năm, tháng, ngày, giờ, phút. Không thể tính theo giây.
2. Riêng tháng thì vì java script tính tháng bắt đầu từ 0 nên nếu các bạn muốn thời gian là tháng 7 thì phải ghi trong new Date() là 6 (giống ví dụ)
Thời gian lấy từ Google Sheet
Giả sử trong file Google Sheet, ở ô D3 mình có thời gian sau: 10/07/2019 22:37:00 (ngày 10 tháng 7 năm 2019, 22 giờ 37 phút), để đưa thời gian này vào hẹn giờ, các bạn làm như sau:
1 2 3 4 5 6 7 | function henGioEmail() { var time = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange('D3').getValue(); ScriptApp.newTrigger('guiemail') .timeBased() .at(time) .create(); } |