PRD · Nền tảng · FLYER

Bản đồ báo cáo và thông báo

Kiểm kê mọi báo cáo và thông báo trên exam.flyer.us, teacher.flyer.us và ứng dụng FLYER, theo bốn kênh: trong ứng dụng, email AWS SES, đẩy Firebase, Zalo ZNS.

Phạm vi
exam.flyer.us · teacher.flyer.us · ứng dụng FLYER
Căn cứ
Read-replica và mã nguồn exam, flyer-rs
Số liệu chốt
24/09/2026
Trạng thái
Bản kiểm kê — chưa có quyết định
36 loại thông báo · 20 mẫu email · 4 báo cáo định kỳ · 8,21 triệu bản ghi
Xuất xứ / Prompt / Giới hạn

Tài liệu được viết để trả lời yêu cầu đặt ra ngày 23/09/2026, nguyên văn:

  • 1. check cho anh trên hệ thống, xem đang có những loại report, báo cáo nào vd như cái này nhé. 2. build một trang prd cho anh listing tất cả những loại report đang có, notification đang bắn ở trên tất cả các hệ thống exam.flyer.us, teacher.flyer.us, FLYER App, và bắn bằng aws — check 3 lần trên database hoặc các event cho anh

Do trợ lý AI soạn. Danh mục lấy từ mã nguồn exam và flyer-rs; số liệu đếm trên read-replica 24/09/2026, ba lượt tra độc lập. Mục 11 chưa thống nhất với đội Kỹ thuật.

1Tóm tắt

Bản ghi thông báo trong ứng dụng

8,21 triệu

Từ 2022 đến 24/09/2026

Loại thông báo đang tồn tại

36

33 khai báo, 3 nằm ngoài danh mục

Mẫu email qua AWS SES

15

10 dịch vụ Go, 5 dịch vụ Rust

Báo cáo chạy theo lịch

4

Tuần, tháng và hằng ngày

Hạng mụcSố lượngGhi chú
Bản ghi thông báo trong ứng dụng8.209.154Bảng notifications, từ 2022
Loại thông báo khai báo33exam/ent/schema/notification.go
Loại do dịch vụ khác ghi thêm3Nằm ngoài enum, xem mục 1 của tab Từng kênh
Loại còn bắn trong 30 ngày30Tính đến 24/09/2026
Mẫu email2015 ở dịch vụ Go, 5 ở dịch vụ Rust
Báo cáo chạy theo lịch4Bộ lập lịch flyer-rs
Cấu hình sự kiện vòng đời23Bảng notification_events
Mẫu Zalo ZNS4Phụ huynh, học phí, giáo viên, OTP
Bản Google Sheet để rà soátToàn bộ nội dung trang này có bản bảng tính gồm mười một tab (có một tab “Cách đọc” ghi rõ ngày chốt số của từng tab) — 36 loại thông báo kèm nội dung, 20 mẫu thư, bốn kênh gửi, bốn chân dung người nhận, danh sách cần xử lý, và năm cách xem loại nào có mặt trong kỳ nào (dạng dài để tự xoay bảng, cùng bốn bảng chéo theo ngày, tuần, tháng và năm): FLYER — Bản đồ báo cáo và thông báo (review). Bản bảng tính sinh ra từ đúng trang này, cập nhật 26/09/2026; sửa trực tiếp trên bảng tính sẽ không quay ngược về trang.
Email đi qua AWSCả hai dịch vụ gửi mail đều nối tới email-smtp.ap-southeast-1.amazonaws.com cổng 587, tức AWS SES ở Singapore, bằng SMTP chứ không qua API của SES.

2Trong một kỳ có những thông báo nào

Chọn mức gộp rồi chọn một kỳ: danh sách bên dưới là những loại thông báo thật sự có bản ghi trong kỳ đó, xếp theo tên. Gõ vào ô lọc để tìm nhanh, nhấn vào một tên để xem đúng nội dung người nhận nhìn thấy.

3Bốn kênh gửi

KênhDo đâu gửiĐích đến
Trong ứng dụngGhi vào bảng notificationsChuông thông báo trên cả ba hệ thống
EmailGo exam qua Temporal; Rust flyer-rsAWS SES SMTP, Singapore
Đẩy trên điện thoạisend_learner_fcm.go, hàng chờ notification_schedulesFirebase Cloud Messaging
Zalo ZNSsend_learner_zalo.go và templates/zalo.rsZalo Notification Service

4Bốn chân dung người nhận

Một bản ghi có thể ghi nhiều người nhận cùng lúc qua bốn cột profile_id, teacher_id, parent_id và school_id. Vì vậy tổng của bốn chân dung lớn hơn tổng số bản ghi. Số liệu 30 ngày tính đến 24/09/2026.

Học sinh

exam.flyer.us · ứng dụng FLYER

363.465bản ghi / 30 ngày
47.533người nhận
7,6thông báo mỗi người

Nhận nhiều nhất

  • Bài mới được giao274.196
  • Báo cáo tháng32.419
  • Nhắc buổi học21.310
  • Nhắc thời gian học19.267
  • Trường cập nhật5.968

21 loại. Chân dung duy nhất nhận thông báo đẩy qua Firebase.

Giáo viên

teacher.flyer.us

175.268bản ghi / 30 ngày
2.961người nhận
59,2thông báo mỗi người

Nhận nhiều nhất

  • Học sinh nộp bài144.960
  • Nhắc thời gian học26.526
  • Mời vào trường1.860
  • Có điểm bài Nói856
  • Mời giáo viên580

14 loại. Mỗi lượt nộp bài sinh một thông báo; lớp càng đông thì số thông báo càng lớn.

Phụ huynh

Zalo ZNS · email · ứng dụng

45.653bản ghi / 30 ngày
3.796người nhận
12,0thông báo mỗi người

Nhận nhiều nhất

  • Con được giao bài23.541
  • Con nộp bài16.530
  • Báo cáo tháng3.397
  • Nhắc thời gian học1.332
  • Con được tặng đá739

11 loại. 3.796 phụ huynh nhận trên 47.533 học sinh.

Trường và chủ trường

teacher.flyer.us · vai Admin và Owner

443.258bản ghi / 30 ngày
575trường nhận
771thông báo mỗi trường

Nhận nhiều nhất

  • Bài được giao271.354
  • Học sinh nộp bài144.960
  • Nhắc buổi học21.310
  • Tặng đá tri thức5.129
  • Ghi nhận điểm danh316

11 loại. Trung bình 25 thông báo mỗi ngày, gấp 100 lần mức của học sinh.

3.1 · Chân dung nào nhận qua kênh nào

Chân dungTrong ứng dụngEmailĐẩy điện thoạiZalo ZNS
Học sinhcócócókhông
Giáo viêncócókhôngcó
Phụ huynhcócókhôngcó
Trườngcócókhôngkhông
Ba điều bảng trên chỉ ra

Chủ trường nhận nhiều thông báo nhất. 771 thông báo mỗi tháng, phần lớn là bản sao của thông báo đã gửi cho giáo viên và học sinh. Cần rà lại lý do school_id được ghi vào mọi bản ghi giao bài và nộp bài.

Phụ huynh gần như chưa được tiếp cận. 3.796 trên 47.533 học sinh, tương đương 8%. Số còn lại chưa có điểm chạm nào từ hệ thống.

Thông báo đẩy chỉ tới học sinh. Giáo viên chỉ nhận trên nền web, nên các việc cần xử lý sớm như phúc khảo phải chờ giáo viên truy cập trình duyệt.

5Những điểm cần xử lý

Dữ liệu bất thường từ công cụ dò lỗ hổng289 bản ghi, 144 giá trị type chứa payload dò lỗ hổng: lệnh ngủ Oracle và PostgreSQL, waitfor delay của SQL Server, thẻ <esi:include> trỏ tên miền lạ. Toàn bộ nguồn PARTNER, từ 21/09/2025 đến 13/03/2026. Một tham số từ bên ngoài đã được ghi thẳng vào cột type mà không qua kiểm tra. Cần chặn điểm ghi trước, xử lý dữ liệu sau.
ViệcVì saoNgười quyết
Sửa lỗi không thay giá trị vào khuôn mẫuSUBMIT_ATTEMPT hiển thị {learnerProfileId} cho 90% bản ghi; đây là loại nhiều thứ hai toàn hệ thống. LEAVE_CLASS và REFERRED_USER cùng lỗi.Kỹ thuật
Chặn đường ghi tự do vào cột type289 bản ghi bất thường đã được ghi vào; cùng đường dẫn đó có thể ghi nội dung khác.Kỹ thuật
Đưa ba loại của flyer-rs vào enum chungPARENT_REPORT, EXAM_REMINDER, TUITION_REMINDER ngoài danh mục nên mọi xử lý theo loại đều bỏ sót.Kỹ thuật
Quyết định hướng xử lý báo cáo StudyĐã hoàn thành nhưng chỉ ghi nhận hai tuỳ chọn và năm lượt gửi.Sản phẩm
Loại bỏ bốn loại đã ngừngLOOK_BACK, PARENT_WEEKLY_REPORT, CLASS_REMIND_LATE_LESSON, UPDATE_PHONE_NUMBER không còn bắn.Kỹ thuật
Xem lại hàng chờ đẩy điện thoại2.843 bản ghi ở trạng thái chờ so với 715 bản ghi đã gửi.Kỹ thuật

1Thông báo trong ứng dụng

Cột nguồn: PARTNER là phía giáo viên và trường, FLYER là phía học sinh. Bấm vào một dòng để xem tiêu đề và nội dung thật của thông báo đó.

Ba loại chiếm 91% toàn bộ thông báoTrên tổng 8.209.154 bản ghi.
Giao bài mới 4.657.113 Học sinh nộp bài 2.256.040 Nhắc thời gian học 591.610 33 loại còn lại 704.391

Nguồn: bảng notifications, read-replica 24/09/2026.

Bảy loại kế tiếp, tính trong 30 ngàyKhông tính ba loại ở biểu đồ trên do chênh lệch hàng chục lần. Thang riêng, mốc cao nhất 35.816.
Báo cáo phụ huynhPARENT_REPORT35.816
Nhắc buổi họcCLASS_REMIND_LESSON21.349
Cập nhật trườngUPDATE_SCHOOL5.957
Tặng đá tri thứcWISDOM_STONE_GRANTED5.149
Nhắc kỳ thiEXAM_REMINDER1.982
Mời vào trườngSCHOOL_INVITE1.831
Nhắc học trực tuyếnCLASS_ONLINE_REMIND1.472

Nguồn: bảng notifications, 30 ngày đến 24/09/2026. Đủ 36 loại ở bảng dưới.

MãKhi nào bắnTổng30 ngàyTrạng thái
NEW_MISSIONGiao bài mới4.657.113299.559còn chạy
SUBMIT_ATTEMPTHọc sinh nộp bài2.256.040163.261còn chạy
WEEKLY_STUDY_TIME_REMAININGNhắc thời gian học, thứ Sáu591.61047.125còn chạy
LOOK_BACKNhìn lại năm học279.6200đã dừng 01/2023
UPDATE_SCHOOLTrường cập nhật thông tin154.8585.957còn chạy
PARENT_REPORTBáo cáo phụ huynh, ngày 191.11835.816còn chạy
CLASS_REMIND_LESSONNhắc buổi học72.60721.349còn chạy
PARENT_WEEKLY_REPORTBáo cáo tuần phụ huynh21.3460đã dừng 30/03/2026
CHALLENGE_INVITEMời thách đấu16.394702còn chạy
SCHOOL_INVITEMời vào trường11.7401.831còn chạy
TEACHER_INVITEMời giáo viên11.311628còn chạy
NEW_SCORE_SPEAKINGCó điểm Nói, AI chấm11.016803còn chạy
EXAM_REMINDERNhắc kỳ thi10.7811.982còn chạy
WISDOM_STONE_GRANTEDĐược tặng đá tri thức6.8715.149còn chạy
NEW_SCORE_WRITINGCó điểm Viết, AI chấm4.274150còn chạy
LEAVE_CLASSHọc sinh rời lớp3.539167còn chạy
CLASS_ONLINE_REMINDNhắc buổi học trực tuyến2.6751.472còn chạy
NEW_SCORE_PRACTICECó điểm bài luyện tập1.7919còn chạy
CHECK_POINT_REVIEW_REQUEST_ACCEPTDuyệt thẩm định đề1.36964còn chạy
CLASS_REMIND_LATE_LESSONNhắc buổi học trễ giờ8290đã dừng 24/03/2026
CHECK_POINT_REVIEW_REQUEST_REJECTTừ chối thẩm định đề6426còn chạy
ATTENDANCE_RECORDEDGhi nhận điểm danh316316còn chạy
REFERRED_USERCó người được giới thiệu28112còn chạy
JOIN_SCHOOL_REQUESTYêu cầu tham gia trường23923còn chạy
NEW_FEATURECó tính năng mới935ít dùng
WISDOM_STONE_STORE_REQUESTEDXin đổi quà bằng đá7575còn chạy
WISDOM_STONE_STORE_APPROVEDDuyệt đổi quà6969còn chạy
WISDOM_STONE_REVOKEDThu hồi đá tri thức464ít dùng
ATTENDANCE_UPDATEDSửa điểm danh1919còn chạy
TUITION_REMINDERNhắc học phí91ít dùng
CUSTOM_DOMAIN_APPROVEDDuyệt tên miền riêng88ít dùng
PROGRAM_REVIEW_REQUEST_REJECTTừ chối thẩm định chương trình40ít dùng
WISDOM_STONE_STORE_REJECTEDTừ chối đổi quà22ít dùng
CUSTOM_DOMAIN_REJECTEDTừ chối tên miền riêng11ít dùng
PROGRAM_REVIEW_REQUEST_ACCEPTDuyệt thẩm định chương trình10ít dùng
UPDATE_PHONE_NUMBERĐổi số điện thoại00khai báo, chưa dùng
Hai loại hiển thị nguyên tên biếnSUBMIT_ATTEMPT và LEAVE_CLASS không thay giá trị vào khuôn mẫu: giáo viên đọc được đúng chữ {learnerProfileId} thay vì tên học sinh. Trong ba ngày gần nhất, 11.898 trên 13.210 bản ghi SUBMIT_ATTEMPT mắc lỗi này, tương đương 90%, và 11 trên 13 bản ghi LEAVE_CLASS. Đây là loại thông báo nhiều thứ hai toàn hệ thống với 2.256.040 bản ghi. Loại REFERRED_USER cũng mất tên người giới thiệu, nội dung bắt đầu bằng khoảng trắng.
Ba loại nằm ngoài danh mục khai báoPARENT_REPORT, EXAM_REMINDER và TUITION_REMINDER đang chạy trên production nhưng không có trong enum của kho exam: chúng do dịch vụ flyer-rs ghi thẳng vào bảng. Ứng dụng đọc theo enum nên mọi xử lý riêng theo loại đều bỏ sót ba loại này.

2Email qua AWS SES

Hai dịch vụ cùng gửi qua một điểm ra là SES Singapore, tổng cộng 20 mẫu thư. Bấm vào một dòng để xem nội dung thư đó.

Dịch vụCách gửiSố mẫu
exam (Go)Temporal, hàng đợi SENDER:SEND_MAIL, go-mail15 — 13 trong thư mục templates/, 2 nhúng thẳng vào mã
flyer-rs (Rust)Gửi trực tiếp bằng lettre5 trong api/src/templates/

5.1 · Hai mươi mẫu thư

Tệp mẫuTiêu đề thưGửi khi nàoNgười nhận
active_email.hbsThông tin mã kích hoạt FLYERThanh toán VNPay thành côngHọc sinh
active_account.hbsFLYER Activation Code InformationThanh toán qua PolarHọc sinh
active_account_teacher.hbsThông tin nâng cấp gói giáo viên FLYERGiáo viên nạp kim cươngGiáo viên
teacher_speaking_ai.hbsThông tin nâng cấp gói giáo viên FLYERGiáo viên mua lượt chấm NóiGiáo viên
active_teado_tool.hbsKích hoạt gói giáo viên Teado Tool thành công - FLYERKích hoạt gói Teado ToolGiáo viên
invite_student.hbsTeacher invites you to join the class!Giáo viên mời vào lớpHọc sinh
invite_student_to_school.hbsTeacher invites you to join the class!Giáo viên mời vào trườngHọc sinh
send_info_student.hbsYour FLYER account is ready!Trường tạo tài khoản hàng loạtHọc sinh
remind_parent_homework.hbsPhụ huynh ơi, {tên} vẫn chưa làm bài tập {tên bài} đâu!Giáo viên nhắc bài tậpPhụ huynh
send_result_challenge.hbsKết quả thách đấu của con là???Kết thúc phòng thách đấuPhụ huynh
ai_score.htmlBạn có điểm bài {kỹ năng} mới! | You have a new {skill} score!AI chấm xong bài Nói hoặc ViếtHọc sinh
invite_flyer.htmlLời mời tham gia biệt đội FLYER!Học sinh giới thiệu bạn bèNgười được giới thiệu
invite_teacher.htmlMời Tham Gia: Flyer Teacher – Giải Pháp Chấm Bài Speaking & Writing AIMời giáo viên dùng thửGiáo viên
school_invite_teacher.html{tên người mời} đã mời bạn tham gia vào {tên trường}Trường mời giáo viên vào hệ thốngGiáo viên
email_verification.htmlXác thực tài khoản email trên FLYERNgười dùng đổi hoặc thêm emailHọc sinh · giáo viên
teacher-report.html[FLYER] Báo cáo học tập tuần {khoảng ngày} - {tên trường}20:00 thứ Hai và ngày 1 hằng thángGiáo viên · trung tâm
parent-report.html[FLYER] Báo cáo học tập - {tên học sinh} - Tháng {khoảng ngày}00:00 ngày 1 hằng thángPhụ huynh
exam-reminder.htmlĐặt trong mã gọi, không cố định trong mẫuTrước kỳ thi tập trungHọc sinh
tuition-reminder.htmlĐặt trong mã gọi, không cố định trong mẫuTrường gửi phiếu thu học phíPhụ huynh
placement-test.htmlĐặt trong mã gọi, không cố định trong mẫuGửi bài kiểm tra đầu vàoHọc sinh
Hai mẫu dùng chung một tiêu đềactive_account_teacher.hbs và teacher_speaking_ai.hbs cùng gửi với tiêu đề "Thông tin nâng cấp gói giáo viên FLYER", do hai lời gọi đi qua cùng một hàm HandleSendMailTeacher. Giáo viên mua lượt chấm Nói nhận được thư có tiêu đề nói về nâng cấp gói, trong khi nội dung bên trong lại là số lượt chấm đã cộng.

Nguồn: kho exam (thư mục templates/, ent/mutation/, module/auth/handler/) và kho flyer-rs (api/src/templates/). Tiêu đề đọc từ các lời gọi trong mã Go và Rust.

3Báo cáo định kỳ

Bộ lập lịch flyer-rs khai báo bốn việc, có thể đổi lịch qua trang quản trị.

ViệcLịchNghĩa là
TeacherWeeklyReport0 20 * * 120:00 thứ Hai hằng tuần
TeacherMonthlyReport0 20 1 * *20:00 ngày 1 hằng tháng
ParentReport0 0 1 * *00:00 ngày 1 hằng tháng
ClassScheduleRemind0 9 * * 1-509:00 các ngày trong tuần
Nhắc thời gian học chạy đều mỗi thứ SáuTám tuần gần nhất. Các cột gần bằng nhau cho thấy lịch chạy đúng hạn. Khoảng dao động 11.284 đến 11.983.
12.000
6.000
11.284
11.390
11.373
11.428
11.808
11.983
11.632
11.702
31/0707/0814/0821/0828/0804/0911/0918/09

Nguồn: bảng notifications, loại WEEKLY_STUDY_TIME_REMAINING.

Đối chiếu với dữ liệu thậtNhắc thời gian học chạy đều mỗi thứ Sáu, tám tuần liên tiếp gần nhất, khoảng 11.300 đến 12.000 bản ghi mỗi lần. Báo cáo phụ huynh chạy vào ngày 1 hằng tháng, lần gần nhất 01/09/2026 với 35.816 bản ghi. Hai lịch đều đúng như khai báo.

5.1 Báo cáo Study cho giáo viên

Ba bảng cho phép giáo viên tự đặt tần suất và giờ nhận: teacher_study_report_prefs, teacher_study_report_sends, teacher_study_report_nudges.

Gần như chưa được sử dụngHai bản ghi tuỳ chọn, năm lượt gửi, chưa có lượt nhắc nào. Tính năng đã hoàn thành nhưng chưa được giới thiệu tới giáo viên.

4Chuỗi sự kiện vòng đời học sinh

Bảng notification_events giữ 23 cấu hình, mỗi cấu hình một mốc tính từ sự kiện gốc, đơn vị ngày.

Học sinh bị nhắc vào những ngày nàoMỗi chấm là một mốc, tính từ sự kiện gốc. Mười mốc nằm trong 17 ngày đầu.
Kích hoạt lần đầuFIRST_ACTIVATION
Sau khi đăng kýREGISTERED · 10 mốc
Cảnh báo tài khoảnACCOUNT_WARNING · 3 mốc
Tài khoản hết hạnACCOUNT_EXPIRED
Lâu không làm bàiNO_EXAMS_FOR_PERIOD · 4 mốc
Qua Zalo4 cấu hình
Ngày 015304560

Nguồn: bảng notification_events. Ba cấu hình Zalo cùng ở ngày 0 nên trùng tại một chấm.

Sự kiện gốcKênhSố mốcMốc (ngày)Điều kiện kèm theo
REGISTEREDỨng dụng học sinh103, 4, 5, 6, 7, 9, 11, 13, 15, 17Chưa kích hoạt · Chưa làm bài · Đã làm đề Flyers · Đã làm đề Starters, Movers hoặc Flyers
NO_EXAMS_FOR_PERIODỨng dụng học sinh46, 30, 45, 60Không
ACCOUNT_WARNINGỨng dụng học sinh31, 7, 14Không
ACCOUNT_EXPIREDỨng dụng học sinh11Không
FIRST_ACTIVATIONỨng dụng học sinh10Không
REGISTEREDZalo10Không
FIRST_ACTIVATIONZalo10Không
FIRST_EXAMZalo10Không
ACCOUNT_EXPIREDZalo17Không

5Thông báo trong sản phẩm

LoạiBảngBản ghiNội dung
Có gì mới theo phiên bảnversion_notifications69EXAM_WEB 20 · STUDENT 19 · PARTNER_WEB 15 · TEACHER 13 · PARENT 2
Hướng dẫn theo mànmenu_notifications29GUIDELINE và TUTORIAL, gắn theo đường dẫn màn
Hàng chờ đẩy điện thoạinotification_schedules3.5582.843 đang chờ, 715 đã gửi
Email mời vào lớpclass_invitation_emails196Đếm lần mời theo địa chỉ
Thông báo cho đội salecrm_notifications0Đã tạo, chưa có bản ghi

6Zalo ZNS

Bốn mẫu trong flyer-rs/api/src/templates/zalo.rs, mỗi mẫu một mã template đã đăng ký với Zalo.

MẫuGửi cho ai
ParentReportZaloDataPhụ huynh · tiến độ
TeacherReportZaloDataGiáo viên · báo cáo lớp
TuitionZaloDataPhụ huynh · học phí
OtpZaloDataMã xác thực

Nguồn: read-replica 24/09/2026, ba lượt tra; mã nguồn exam (ent/schema/notification.go, sender/sender.go, deploy/lib/app.libsonnet) và flyer-rs (api/src/workers/jobs, api/src/templates, sdks/mail).