Hôm nay chúng ta sẽ đi cùng nhau từng bước tìm hiểu cách hẹn giờ gửi thư sử dụng Google Sheets kết hợp với một ít code Google Apps Script. Với kiến thức trong bài viết này, bạn có thể áp dụng cho rất nhiều trường hợp khác nhau, từ gửi thư chúc mừng sinh nhật khách hàng khi đến hẹn, gửi thư giới thiệu với khách hàng về sản phẩm, dịch vụ mới của mình, hoặc đơn giản là bạn có thể thiết lập việc gửi thư này như một cơ chế để nhắc việc cho bạn khỏi quên. Chúng ta sẽ sử dụng những kiến thức sau để có thể giải quyết vấn đề gửi thư có hẹn giờ là: sử dụng trigger trong Google Apps Script và kiến thức về làm việc với mảng trong Google Apps Script:
Cách sử dụng mảng dữ liệu trong Google Apps Script
Để hiểu rõ và ứng dụng linh hoạt các kiến thức này cho trường hợp của bạn, hãy tham khảo khóa học Google Apps Script cơ bản của Thanh
Tuy tiêu đề của đề bài là gửi thư, nhưng sau khi theo dõi bài viết này, bạn sẽ hiểu rằng, bạn có thể thực hiện cả những hành động khác, không chỉ riêng gửi thư. Hãy mở Google Sheets để chuẩn bị sẵn cho bài viết này.
Xem nhanh
Trong bảng dữ liệu đơn giản này, mình chỉ để cột A – là địa chỉ email, cột B – là ngày tháng chúng ta sẽ cần gửi thư đi. Sau đó chúng ta sẽ thêm công thức để lấy ra giá trị ngày tháng ở cột C và cột D lần lượt là:
= MONTH(B2)
= DAY(B2)
Bởi vì chúng ta gửi mail tự động theo ngày, nên chúng ta sẽ bỏ qua dữ liệu về năm trong trường hợp này.
Cách chúng ta sẽ giải quyết vấn đề này như sau:
Như vậy trigger sẽ đảm bảo Code của chúng ta chạy hàng ngày hoặc hàng giờ, … còn chạy đoạn code nào thì hoàn toàn là do chúng ta quyết định. Ở đây, chúng ta sẽ bắt đầu bằng việc so sánh ngày tháng của thời điểm code được chạy với số liệu trên bảng tính ở cột C và D. Đoạn code để thực hiện việc này như sau:
new Date()
sẽ lấy dữ liệu về thời gian khi code được chạy, từ dữ liệu này, chúng ta sẽ lấy ra giá trị tháng bằng cách sử dụng hàm getMonth()
và tài sao lại là + 1 ở hàm này? Bởi vì trong Google Apps Script, hàm này sẽ cho giá trị 0 tương ứng với tháng 1, 1 tương ứng với tháng 2, …getDate()
sẽ lấy dữ liệu về ngày trong tháng đó.Để tạo ra những đoạn code chạy nhanh và hiệu quả, một trong những cách làm là chúng ta sẽ hạn chế số lần trao đổi dữ liệu giữa Google Sheets và Google Apps Script. Trong trường hợp này, chúng ta sẽ áp dụng chính xác suy nghĩ này để đọc dữ liệu từ Google Sheets sau đó lưu vào một mảng trong Google Apps Script với đoạn code sau đây:
data
Sau khi đã load được toàn bộ dữ liệu và lưu vào biến data
, chúng ta sẽ tiến hành lọc dữ liệu ở cột C và cột D xem có trùng với ngày tháng code chạy hay không, nếu trùng với ngày tháng code chạy, chúng ta sẽ ghi những dòng dữ liệu này vào một biến tên list
filter
để lọc theo cột, bởi vì cột Month và Date của bảng dữ liệu là cột thứ 3 và cột thứ 4, vậy nên chúng ta so sánh record[2]
với giá trị tháng và so sánh record[3]
với giá trị ngày.&&
là toán tử “và” trong Google Apps Script, câu lệnh này có thể được hiểu như sau, list là danh sách mà mỗi dòng trong đó có cột thứ 3 và cột thứ 4 lần lượt bằng giá trị tháng và giá trị ngày.Thực sự cách gửi mail trong Google Apps Script rất đơn giản với công cụ có sẵn là MailApp, để gửi mail, bạn cần 3 thông tin là email người nhận, tiêu đề email và nội dung mail. Bạn có thể dễ dàng viết ra hàm gửi mail của riêng mình như sau:
// Author: Nguyễn Đức Thanh
// Web: https://blog.hocexcel.online
// Elearning: https://hocexcel.online
// Elearning for business: https://dtnguyen.business
// YouTube: https://youtube.com/hocexcelonline
function sendMailOnBirthday() {
const today = new Date()
const month = today.getMonth() + 1
const date = today.getDate()
const data = SpreadsheetApp
.getActive()
.getSheetByName('data')
.getDataRange()
.getValues()
const list = data.filter(record => record[2] === month && record[3] === date)
if(list.length > 0) {
list.forEach(record => {
let mailTo = record[0]
let subject = "Mail được gửi tự động"
let body = "Body"
mySendMail(mailTo, subject, body)
SpreadsheetApp
.getActive()
.getSheetByName('log')
.appendRow([ `Đã gửi mail tới ${mailTo} vào lúc ${new Date()}` ])
})
}
}
function mySendMail(mailTo, subject, body) {
MailApp.sendEmail(mailTo, subject, body)
}
Sau khi đã viết được đoạn code khá đơn giản để thực hiện hành động gửi mail, chúng ta cần thiết lập trigger để Google có thể thực hiện hành động này khi chúng ta cần.
Bước 1: Trong màn hình Google Apps Script, bấm vào logo Triggers
Bước 2: bấm nút Add trigger ở góc dưới bên phải của màn hình
Bước 3: ở màn hình thiết lập các tùy chỉnh liên quan đến trigger này, chúng ta sẽ thiết lập như hình, sau đó mình sẽ giải thích từng điểm cho các bạn hiểu:
Sau khi đã thiết lập xong trigger, bạn hãy bấm nút Save ở góc dưới của cửa sổ thiết lập này.
Bởi vì trigger theo ngày khá là khó để kiểm tra có hoạt động hay không, mình đã làm videos này để hướng dẫn và test cùng các bạn chức năng của chức năng trigger này, các bạn có thể theo dõi và làm theo.
Như vậy, qua bài viết này, các bạn đã có thể hẹn giờ gửi Email qua Google Apps Script và Google Sheets. Đừng quên tham khảo và đăng ký khóa học Google Apps Script của Thanh