Mô Tả Luồng: Lập Lịch & Gửi Thông Báo AI-Powered qua Firebase
Luồng này mô tả quy trình từ việc tạo nội dung thông báo bằng AI, lên lịch gửi, xử lý bởi backend, gửi qua Firebase và theo dõi kết quả.
Giai đoạn 1: Tạo Prompt Thông Báo
- Người dùng (Admin/Content Creator): Truy cập giao diện người dùng (UI) tại
https://github.com/eduhub123/edu_scheduler_notifier/tree/master/front-end
. - Tạo Prompt:
- Sử dụng trình soạn thảo hoặc các trường nhập liệu trên UI để định nghĩa template cho prompt.
- Tham khảo các template có sẵn trong UI để có cấu trúc phù hợp.
- QUAN TRỌNG: Đảm bảo nội dung prompt khi được AI xử lý sẽ tạo ra kết quả có định dạng chính xác:
Title: <Nội dung tiêu đề thông báo> Body: <Nội dung chi tiết thông báo>
3. Lưu Prompt:
* Sau khi hoàn tất, người dùng lưu prompt lại.
* Hệ thống (Backend Go): Nhận yêu cầu lưu prompt.
* Lưu trữ (MongoDB): Thông tin cấu hình prompt (template, tên, các tham số liên quan) được lưu vào collection edu_backend.go_prompts
.
Giai đoạn 2: Tạo và Lập Lịch Job Gửi Thông Báo
-
Người dùng (Admin/Scheduler): Truy cập giao diện quản lý Lập lịch (Scheduler UI - có thể là một phần của front-end trên).
-
Tạo Job Mới:
- Chọn Prompt đã tạo ở Giai đoạn 1 để sử dụng cho job này.
- Chọn Ứng Dụng (App): Chỉ định rõ thông báo này sẽ được gửi đến người dùng của ứng dụng nào (ví dụ: App Học Sinh, App Giáo Viên).
- Cấu hình Lịch trình: Đặt thời gian gửi (gửi ngay, gửi một lần vào thời điểm cụ thể, gửi định kỳ - ví dụ: hàng ngày, hàng tuần).
- Cấu hình Đối tượng (Segmentation): Định nghĩa tiêu chí để lọc danh sách người dùng/thiết bị nhận thông báo (ví dụ: query dựa trên lớp học, khóa học đã đăng ký, hoạt động gần đây...).
- Cấu hình Hành động (Actions):
- QUAN TRỌNG: Trong danh sách các hành động có thể thực hiện, chọn chính xác
send_notification_for_a_segmentation_device
. Hành động này chỉ định job sẽ gửi thông báo Firebase đến một nhóm người dùng đã được phân đoạn.
- QUAN TRỌNG: Trong danh sách các hành động có thể thực hiện, chọn chính xác
-
Lưu và Kích hoạt Job:
- Người dùng lưu cấu hình job.
- Người dùng kích hoạt (activate) job để đưa vào trạng thái sẵn sàng chạy theo lịch.
- Hệ thống (Backend Go): Nhận yêu cầu lưu và kích hoạt job.
- Lưu trữ (MongoDB): Thông tin cấu hình job (ID prompt, lịch trình, query phân đoạn, app target, trạng thái
activate
...) được lưu vào collectionedu_backend.schedule_jobs
.
Giai đoạn 3: Xử Lý Job và Gửi Thông Báo (Tự động bởi Backend)
-
Scheduler Trigger (Backend Go): Dựa trên lịch trình đã cấu hình trong
schedule_jobs
, hệ thống Go xác định job nào cần chạy tại thời điểm hiện tại (job có trạng tháiactivate
và đúng giờ). -
Lấy Thông Tin Job: Hệ thống truy xuất thông tin chi tiết của job cần chạy từ
edu_backend.schedule_jobs
. -
Xử lý Prompt với AI:
- Lấy template prompt từ
edu_backend.go_prompts
dựa trên ID prompt trong job. - Gọi API của AI Model đã cấu hình (Gemini hoặc OpenAI GPT) với template prompt làm đầu vào.
- Nhận kết quả từ AI là nội dung thông báo hoàn chỉnh theo định dạng
Title:
vàBody:
.
- Lấy template prompt từ
-
Phân Đoạn Người Dùng (Segmentation):
- Thực thi query phân đoạn (đã định nghĩa trong job) trên cơ sở dữ liệu người dùng/thiết bị để lấy danh sách các Firebase device token của những người dùng thỏa mãn điều kiện.
-
Chia Batch Token:
- Kiểm tra giới hạn Firebase: Hệ thống biết rằng Firebase có giới hạn gửi (ví dụ: 500 token/request).
- Nếu danh sách token lấy được lớn hơn giới hạn, hệ thống sẽ chia danh sách này thành nhiều batch nhỏ hơn (mỗi batch tối đa 500 token).
-
Đưa Batch vào Hàng Đợi (Queue):
- Từng batch token được đưa vào một hàng đợi (queue) nội bộ do Go quản lý. Việc này giúp xử lý gửi tuần tự và tránh quá tải.
-
Gửi Thông Báo Từng Batch:
- Một hoặc nhiều worker (goroutine trong Go) sẽ lấy từng batch token ra khỏi queue.
- Với mỗi batch:
- Worker gọi Firebase Cloud Messaging (FCM) API để gửi nội dung thông báo (Title/Body đã tạo bởi AI) đến danh sách token trong batch đó.
- Log Gửi (MongoDB): Kết quả của việc gửi từng batch (thành công, thất bại, lỗi cụ thể nếu có, danh sách token) được ghi vào collection
edu_backend.log_notificaiton
.
- Quá trình này lặp lại cho đến khi tất cả các batch trong queue đã được xử lý.
-
Log Kết Quả Job (MongoDB): Sau khi tất cả các batch của một job đã được gửi (hoặc gặp lỗi không thể tiếp tục), hệ thống ghi lại kết quả tổng thể của lần chạy job đó (thời gian bắt đầu/kết thúc, số lượng token xử lý, số lượng gửi thành công/thất bại, ID các log chi tiết liên quan) vào collection
edu_backend.schedule_logs
. -
Cập nhật Trạng thái Job (MongoDB): Nếu là job chạy một lần, trạng thái có thể được cập nhật thành
inactive
hoặccompleted
trongedu_backend.schedule_jobs
. Nếu là job định kỳ, trạng tháiactivate
được giữ nguyên cho lần chạy tiếp theo.
Giai đoạn 4: Theo Dõi và Giám Sát
- Người dùng (Admin): Truy cập giao diện Dashboard.
- Xem Dữ Liệu:
- Dashboard hiển thị các chỉ số và biểu đồ trực quan về hoạt động gửi thông báo.
- Lọc theo App: Người dùng chọn đúng App mà họ muốn xem số liệu (ví dụ: xem tỷ lệ gửi thành công cho App Học Sinh).
- Dữ liệu được tổng hợp từ
edu_backend.schedule_logs
và có thể cảedu_backend.log_notificaiton
để cung cấp cái nhìn chi tiết (ví dụ: số job đã chạy, số thông báo đã gửi, tỷ lệ thành công/thất bại, xu hướng theo thời gian...).
- Phân Tích & Điều Chỉnh: Dựa trên dữ liệu dashboard, người dùng có thể đánh giá hiệu quả của các chiến dịch thông báo, xác định vấn đề (nếu có) và điều chỉnh lại prompt, lịch trình hoặc tiêu chí phân đoạn cho các job trong tương lai.
Tóm tắt Kiến trúc và Lưu trữ:
- Backend: Go (Xử lý logic lập lịch, gọi AI, phân đoạn, chia batch, quản lý queue, gọi Firebase API).
- Cơ sở dữ liệu: MongoDB.
edu_backend.go_prompts
: Lưu cấu hình template prompt cho AI.edu_backend.schedule_jobs
: Lưu cấu hình các job lập lịch (lịch trình, prompt ID, query phân đoạn, app target, action, trạng thái active/inactive).edu_backend.schedule_logs
: Lưu lịch sử và kết quả tổng thể của mỗi lần chạy job.edu_backend.log_notificaiton
: Lưu log chi tiết của từng lần gửi thông báo đến Firebase (theo batch hoặc từng token).
- AI Service: Gemini hoặc OpenAI GPT (Tạo nội dung Title/Body từ prompt template).
- Notification Service: Firebase Cloud Messaging (FCM) (Gửi thông báo push đến thiết bị người dùng).
- Frontend: Giao diện Web (
https://github.com/eduhub123/edu_scheduler_notifier/tree/master/front-end
) để tạo prompt, lập lịch job và xem dashboard.
Luồng này đảm bảo quy trình khép kín, tự động và có khả năng mở rộng để gửi thông báo cá nhân hóa đến đúng đối tượng vào đúng thời điểm, đồng thời cung cấp khả năng giám sát hiệu quả.