PRD · Teacher · FLYER

Mời giáo viên vào trường

Dựng lại màn mời thành viên của teacher.flyer.us theo cách Claude làm: một ô dán danh sách, thêm lựa chọn mời qua liên kết, và trả kết quả theo từng dòng thay vì một thông báo chung.

Sản phẩm
teacher.flyer.us
Căn cứ
Mã nguồn partner-web và read-replica
Số liệu chốt
26/09/2026
Trạng thái
Đề xuất — chưa có quyết định
Xuất xứ / Prompt / Giới hạn
Ngày 26/09/2026, yêu cầu được đặt ra nguyên văn như sau, kèm ảnh chụp hộp thoại Add member của Claude: anh muốn PRD một ideas mời giáo viên vào trường, giống style của Claude này

Tài liệu do trợ lý AI soạn trong một phiên làm việc, dựa trên mã nguồn partner-web (hộp thoại ModalInviteUser, trang quản lý tài khoản) và bảng school_invited_teachers, school_teacher_profiles trên read-replica production. Đây là bản đề xuất để thảo luận, chưa phải kết luận của đội sản phẩm.

1Vấn đề

Trường nhiều giáo viên gần như không tồn tại: 322/22.287 trường (1,44%) có từ hai giáo viên. Tính năng mời có từ lâu nhưng dùng rất ít — 2.071 lời mời toàn lịch sử từ 364 trường, và 83% lượt mời chỉ mời một người. Lượng mời đang tăng (tháng 9/2026: 224 lời mời từ 51 trường, cao nhất 12 tháng), nên đây là lúc sửa.

Trạng thái lời mờiSố lượngTỷ lệThời gian chờ trung bình
ACTIVE — đã vào trường1.79586,7%—
PENDING_APPROVAL — chờ trường duyệt1507,2%177 ngày
PENDING — chờ giáo viên nhận1266,1%411 ngày
Lời mời không có vòng đời256/276 lời mời chưa hoàn tất đã treo quá 30 ngày, lâu nhất 990 ngày. Không hạn dùng, không nhắc lại, không thu hồi.

2Luồng mời hiện tại

Hộp thoại ModalInviteUser gọi viewerPartnerSchoolInviteTeacher với danh sách identifier và một roleId chung cho cả lượt.

PhầnCách hoạt động hiện nay
Cách xác định người nhậnBa lựa chọn loại trừ nhau: email, số điện thoại, tên tài khoản. Đổi lựa chọn là xoá trắng ô vừa nhập.
Nhập nhiều ngườiChỉ nhận dấu phẩy. Dán một cột từ bảng tính — mỗi dòng một email — sẽ không tách đúng.
Vị tríMột vị trí cho cả lượt mời. Mặc định TEACHER, bỏ OWNER khỏi danh sách.
Kết quả trả vềMột thông báo chung. Khi có lỗi, giao diện chỉ đọc userErrors[0] — dán 30 email mà hỏng 2 thì không biết hỏng dòng nào.
Quản lý sau khi mờiĐã có tab Hoạt động / Chờ xác nhận, cột vị trí, tìm kiếm theo email và số điện thoại, xuất CSV.
Ràng buộc quyết định toàn bộ thiết kếschool_invited_teachers.teacher_profile_id không cho rỗng, và 2.071/2.071 lời mời đều trỏ tới tài khoản đã tồn tại — tức chỉ mời được người đã có tài khoản FLYER, người mới trả lỗi NotFound. Ngược lại, cột code 32 ký tự đã có đủ trên cả 2.071 dòng: cơ chế mã mời nằm sẵn trong dữ liệu, chỉ chưa có giao diện dùng tới.

3Màn mời đề xuất

Giữ nguyên bố cục Claude dùng: một ô dán duy nhất, hai cách mời đặt cạnh nhau, vị trí chọn bên dưới. Bỏ ba nút chọn loại trừ nhau, thay bằng một ô nhận cả email và số điện thoại — hệ thống tự nhận dạng từng dòng.

Mời giáo viên vào trường

Bản bấm thử được — nhập liệu, gửi và xem kết quả chạy thật trong trình duyệt, không gọi máy chủ.

Email hoặc số điện thoại *
Vị trí
Giáo viên
Hạn lời mời
14 ngày

Thử dán thêm dòng sai định dạng, hoặc email đã ở trong trường ([email protected]), để xem cách báo lỗi theo từng dòng.

Một điểm của Claude không lấy sangHộp thoại Claude có cột Tier (Standard / Premium) đi kèm mỗi thành viên. teacher.flyer.us hiện chỉ có khái niệm vị trí, chưa có hạng tài khoản theo từng giáo viên, nên phần này để trống thay vì dựng một khái niệm mới chưa ai dùng. Xem mục 7.

4Bốn thay đổi

Thay đổiGiải quyếtLàm gìĐộ nặng
Dán hàng loạt và tải CSVDán từ bảng tính không tách đúng dòngNhận dấu phẩy, chấm phẩy và xuống dòng; tự nhận dạng email hay số điện thoại, bỏ ba nút chọn loại trừ nhau.Nhẹ
Kết quả theo từng dòngHỏng 2 trong 30 dòng mà không biết dòng nàoTrả trạng thái cho từng dòng thay vì một thông báo chung.Nhẹ
Vòng đời lời mời256 lời mời treo quá 30 ngàyHạn mặc định 14 ngày, nhắc một lần trước hạn, gửi lại và thu hồi ngay ở tab Chờ xác nhận.Vừa
Liên kết mờiTrường không có sẵn danh sách emailSinh liên kết theo trường từ cột code có sẵn, kèm hạn dùng, vị trí mặc định, thu hồi và tạo lại.Vừa
Mời người chưa có tài khoảnKhông nạp được giáo viên mới vào hệ thốngLưu lời mời theo email hoặc số điện thoại khi chưa có tài khoản, gắn vào lúc người đó đăng ký. Nặng nhất nhưng giá trị nhất.Nặng

5Dữ liệu và kỹ thuật

Chỗ đụng tớiThay đổi
school_invited_teachersCho teacher_profile_id nhận giá trị rỗng; thêm email, phone_number, expires_at, invited_by. Ràng buộc: một trong ba cột định danh phải có giá trị.
viewerPartnerSchoolInviteTeacherTrả kết quả theo từng phần tử identifier thay vì một mảng lỗi chung, để giao diện dựng được bảng kết quả ở mục 3.
ModalInviteUser.tsxBỏ ba nút chọn loại trừ nhau, một ô nhập chung, tách theo dấu phẩy và xuống dòng, thêm tải CSV và bảng kết quả.
Luồng đăng kýKhi tài khoản mới được tạo, tra lời mời đang treo theo email hoặc số điện thoại và gắn vào trường.
Liên kết mờiĐường dẫn công khai đọc code, kiểm tra hạn, dẫn sang đăng ký hoặc đăng nhập rồi vào trường.
Tác vụ định kỳNhắc lời mời sắp hết hạn, chuyển lời mời quá hạn sang EXPIRED. Dùng lại loại SCHOOL_INVITE và mẫu thư school_invite_teacher đã có.

6Chỉ số thành công

Chỉ sốHiện tạiMục tiêu
Tỷ lệ lời mời được nhận86,7%Trên 92%
Lời mời treo quá 30 ngày256Dưới 30
Thời gian chờ trung bình khi chưa nhận411 ngàyDưới 14 ngày, do có hạn dùng
Lượt mời từ hai người trở lên17%Trên 40%
Trường có từ hai giáo viên322 (1,44%)Tăng theo quý, đo sau khi mở liên kết mời

Chỉ số cuối là chỉ số kết quả, không phải chỉ số của riêng màn mời: trường nhiều giáo viên còn phụ thuộc cách bán hàng và loại khách. Nên đọc kèm nguồn đăng ký.

7Câu hỏi mở


Nguồn: partner-web (ModalInviteUser.tsx, src/locales/vi/common.json), read-replica production (school_invited_teachers 2.071 dòng, school_teacher_profiles), ảnh chụp hộp thoại Add member của Claude · Tài liệu liên quan: Bản đồ báo cáo và thông báo · Danh mục PRD · Roadmap