- Đăng nhập tài khoản Gmail gửi cảnh báo và tạo một file Google Sheets mới.
- Đặt tiêu đề hàng 1:
Thời gian | Người nhận | Tiêu đề | Trạng thái.
- Vào menu: Tiện ích mở rộng (Extensions) ➡️ Apps Script.
- Xóa toàn bộ mã nguồn cũ trong trình soạn thảo, dán toàn bộ đoạn mã bên dưới vào.
- Bấm nút Triển khai (Deploy) ➡️ Tùy chọn triển khai mới (New deployment):
- Loại (Type): Ứng dụng web (Web app)
- Mô tả (Description): CPC1 Alert Email Webhook
- Thực thi dưới dạng (Execute as): Tôi (Email của bạn)
- Quyền truy cập (Who has access): Bất kỳ ai (Anyone)
- Bấm Triển khai ➡️ Chọn Ủy quyền truy cập (chọn tài khoản Gmail vừa tạo ➡️ Nâng cao ➡️ Tiếp tục/Cho phép).
- Sao chép đường link URL ứng dụng web (đuôi
/exec) và dán vào ô trên.
📄 Mã nguồn Google Apps Script:
function doPost(e) {
try {
if (!e || !e.postData || !e.postData.contents) {
return ContentService.createTextOutput(JSON.stringify({
status: "error",
message: "Không nhận được dữ liệu gửi lên (postData is empty)"
})).setMimeType(ContentService.MimeType.JSON);
}
var data = JSON.parse(e.postData.contents);
var recipients = data.recipients || [];
var subject = data.subject || "[CPC1] Cảnh báo hạn dùng thuốc";
var htmlBody = data.html_body || "Nội dung cảnh báo hạn dùng thuốc.
";
if (recipients.length === 0) {
return ContentService.createTextOutput(JSON.stringify({
status: "error",
message: "Danh sách người nhận (recipients) trống"
})).setMimeType(ContentService.MimeType.JSON);
}
GmailApp.sendEmail(
recipients.join(","),
subject,
"Vui lòng xem nội dung email định dạng HTML trên ứng dụng hỗ trợ.",
{
name: "CPC1 Cảnh Báo Hạn Dùng",
htmlBody: htmlBody
}
);
try {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var nowStr = Utilities.formatDate(new Date(), "Asia/Ho_Chi_Minh", "dd/MM/yyyy HH:mm:ss");
sheet.appendRow([nowStr, recipients.join(", "), subject, "✅ Thành công"]);
} catch (logErr) {
Logger.log("Lỗi ghi log Sheet: " + logErr.toString());
}
return ContentService.createTextOutput(JSON.stringify({
status: "success",
message: "Đã gửi email và ghi log Google Sheet thành công"
})).setMimeType(ContentService.MimeType.JSON);
} catch (error) {
return ContentService.createTextOutput(JSON.stringify({
status: "error",
message: error.toString()
})).setMimeType(ContentService.MimeType.JSON);
}
}
function doGet(e) {
return ContentService.createTextOutput("CPC1 Email Webhook Service is Active & Ready!");
}