Tự Động Gửi Email Chúc Mừng Sinh Nhật Khách Hàng Với Google Apps Script
Tại Sao Email Chúc Mừng Sinh Nhật Quan Trọng?
Email chúc mừng sinh nhật có tỷ lệ mở (open rate) cao hơn 481% so với email marketing thông thường. Đây là cơ hội vàng để tăng tương tác và giữ chân khách hàng với chi phí gần như bằng 0 khi dùng Google Apps Script.
Chuẩn Bị Dữ Liệu Khách Hàng
Cấu trúc sheet "Khách Hàng"
Sheet cần có các cột: Họ tên | Email | Ngày sinh (DD/MM/YYYY) | Đã gửi năm nay (TRUE/FALSE) | Lần gửi cuối
Viết Apps Script Gửi Email Tự Động
Script chính
function sendBirthdayEmails() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getSheetByName('KhachHang');
const data = sheet.getDataRange().getValues();
const today = new Date();
const todayMonth = today.getMonth() + 1;
const todayDay = today.getDate();
const currentYear = today.getFullYear();
let sentCount = 0;
for (let i = 1; i < data.length; i++) {
const row = data[i];
const name = row[0];
const email = row[1];
const birthdayRaw = row[2];
const alreadySentThisYear = row[3];
if (!email || !birthdayRaw) continue;
const birthday = new Date(birthdayRaw);
const bMonth = birthday.getMonth() + 1;
const bDay = birthday.getDate();
// Kiểm tra sinh nhật hôm nay và chưa gửi năm nay
if (bMonth === todayMonth && bDay === todayDay && !alreadySentThisYear) {
const subject = '🎂 Chúc mừng sinh nhật ' + name + '! Quà tặng đặc biệt dành cho bạn';
const body = createBirthdayEmailBody(name);
try {
GmailApp.sendEmail(email, subject, '', { htmlBody: body });
// Đánh dấu đã gửi
sheet.getRange(i + 1, 4).setValue(true);
sheet.getRange(i + 1, 5).setValue(new Date());
sentCount++;
console.log(`Sent birthday email to: ${name} (${email})`);
} catch (err) {
console.error(`Failed to send to ${email}: ${err}`);
}
}
}
console.log(`Birthday emails sent today: ${sentCount}`);
}
function createBirthdayEmailBody(name) {
return `
🎂 Chúc Mừng Sinh Nhật!
Kính gửi ${name},
Nhân dịp sinh nhật của bạn, chúng tôi gửi đến bạn lời chúc mừng chân thành nhất!
Như một món quà đặc biệt, chúng tôi tặng bạn voucher giảm 20% cho đơn hàng tiếp theo.
BDAY20
Mã có hiệu lực trong 30 ngày kể từ ngày sinh nhật của bạn.
`;
}
Reset trạng thái đầu năm mới
function resetYearlyBirthdayFlags() {
const sheet = SpreadsheetApp.getActiveSpreadsheet()
.getSheetByName('KhachHang');
const lastRow = sheet.getLastRow();
// Xóa cột "Đã gửi năm nay" (cột D)
sheet.getRange(2, 4, lastRow - 1).clearContent();
console.log('Reset birthday flags for new year');
}
Cài Đặt Trigger Tự Động
Vào Extensions → Apps Script → Triggers → Add Trigger:
- Function: sendBirthdayEmails
- Trigger type: Time-driven → Day timer → 7am–8am
Script sẽ tự động chạy mỗi sáng, kiểm tra và gửi email cho khách có sinh nhật hôm đó.
Câu Hỏi Thường Gặp (FAQ)
Gmail có giới hạn số email gửi mỗi ngày không?
Gmail cá nhân giới hạn 500 email/ngày, Google Workspace là 2000/ngày. Đủ dùng cho hầu hết doanh nghiệp nhỏ và vừa.
Có thể gửi SMS thay vì email không?
Có thể tích hợp với Twilio hoặc ESMS.vn thông qua HTTP request trong Apps Script để gửi SMS sinh nhật.
Script có chạy được khi đóng trình duyệt không?
Có. Trigger chạy trên server của Google, không phụ thuộc vào trình duyệt của bạn có đang mở hay không.
Chia sẻ bài viết:
Tuân Hoang
Đội ngũ SheetStore
Bạn thấy bài viết hữu ích?
Đăng ký nhận thông báo khi có bài viết mới.