Hướng dẫn tính khung giờ còn trống cho từng thợ
Back To BlogsỞ bài trước, trang /dat-lich của Nuny Nail đã nhận được lịch hẹn: khách chọn dịch vụ, chọn thợ, chọn giờ trong giờ mở cửa và gửi đi, chủ tiệm thấy lịch ngay trong admin. Nhưng khách vẫn có thể chọn đúng giờ mà thợ đã có người đặt, và chủ tiệm phải gọi điện xin dời lịch.
Trong bài này, chúng ta sẽ cùng AI tính khung giờ còn trống cho từng thợ, dựa trên giờ mở cửa, thời gian làm của dịch vụ, ngày nghỉ và những lịch hẹn đã có, rồi hiển thị các giờ đó thành nút bấm trên trang /dat-lich để khách chỉ chọn được giờ thợ thật sự rảnh.
Phần 1. Chốt quy tắc tính giờ trống
Đừng để AI tự hiểu "giờ trống" là gì. Hãy nói rõ quy tắc của tiệm và để AI ghi lại trước khi viết code:
Prompt mẫu
"Hãy đọc docs/thiet-ke-du-lieu-dat-lich.md và dữ liệu thợ, giờ mở cửa, ngày nghỉ của Nuny Nail (dùng MCP Server, chỉ đọc). CHƯA viết code. Một khung giờ chỉ còn trống khi: Giờ bắt đầu từ giờ mở cửa, và giờ kết thúc (cộng tổng thời gian các dịch vụ khách chọn) không quá giờ đóng cửa của ngày đó. Thợ đi làm hôm đó: không trùng ngày nghỉ cố định, ngày nghỉ đột xuất, ngày tiệm nghỉ. Thợ làm được tất cả dịch vụ khách chọn. Không chồng lên lịch hẹn chờ xác nhận hoặc đã xác nhận của thợ. Lịch đã hủy, khách không đến thì không chiếm giờ. Giữa hai khách của cùng một thợ nghỉ 15 phút để dọn bàn. Khung giờ cách nhau 15 phút. Đặt cho hôm nay phải trước ít nhất 1 giờ, đặt trước tối đa 14 ngày. 'Thợ nào cũng được': khung giờ còn trống nếu có ít nhất một thợ phù hợp rảnh, khi đặt thì gán thợ rảnh có ít lịch nhất trong ngày. Mọi giờ tính theo giờ Việt Nam. Hãy ghi bộ quy tắc vào docs/quy-tac-gio-trong.md, mỗi quy tắc kèm một ví dụ của Nuny Nail, và liệt kê những điểm bạn chưa rõ."
Thay các con số bằng cách làm thật của tiệm bạn. Thời gian nghỉ giữa hai khách là điểm hay bị quên nhất: không có nó, thợ vừa xong khách này đã phải ngồi ngay vào khách khác.
Phần 2. Chuẩn bị ví dụ có sẵn đáp án
Nhìn code rất khó biết AI tính đúng hay sai, nhưng nếu có sẵn ví dụ đã tính đáp án thì chỉ cần so kết quả. Lấy một ngày thứ Bảy, tiệm mở 9:00 đến 20:00, đã có các lịch hẹn:
| Thợ | Giờ | Dịch vụ | Trạng thái |
|---|---|---|---|
| Mai | 9:00 đến 10:30 | Đắp bột | Đã xác nhận |
| Mai | 14:00 đến 15:15 | Sơn gel tay và Vẽ móng | Đã xác nhận |
| Chị Lan | 10:00 đến 11:00 | Nối móng úp | Chờ xác nhận |
| Chị Lan | 13:00 đến 13:45 | Sơn gel tay | Đã hủy |
Đáp án đúng theo bộ quy tắc ở Phần 1:
| # | Khách chọn | Giờ còn trống đúng |
|---|---|---|
| 1 | Đắp bột (90 phút), thợ Mai, thứ Bảy | 10:45 đến 12:15 và 15:30 đến 18:30 |
| 2 | Sơn gel tay (45 phút), chị Lan, thứ Bảy | 9:00 và 11:15 đến 19:15 (có cả 13:00) |
| 3 | Đắp bột, thợ Thảo, thứ Bảy | Không có, vì Thảo không làm đắp bột |
| 4 | Đắp bột, thợ nào cũng được, thứ Bảy | 10:45 đến 18:30 |
| 5 | Đắp bột, chị Lan, Chủ nhật chưa có lịch | 9:00 đến 16:30 |
| 6 | Sơn gel tay, chị Lan, thứ Hai | Không có, vì là ngày nghỉ cố định |
Ví dụ ở tình huống 1: Mai xong khách lúc 10:30, nghỉ 15 phút nên sớm nhất 10:45. Lịch sau bắt đầu 14:00, khách mới phải xong trước 13:45, nên đắp bột 90 phút bắt đầu muộn nhất 12:15. Buổi chiều Mai rảnh từ 15:30, và để xong trước 20:00 thì bắt đầu muộn nhất 18:30.
Cho AI tính tay trước khi viết code:
Prompt mẫu
"Đây là ngày làm việc mẫu và 6 tình huống kiểm tra: [dán hai bảng ở trên]. Theo docs/quy-tac-gio-trong.md, hãy tự tính giờ còn trống từng tình huống, trình bày cách tính. CHƯA viết code. So với cột đáp án, nếu khác thì chỉ ra bạn hiểu sai quy tắc nào. Lưu hai bảng vào docs/tinh-huong-kiem-tra-gio-trong.md."
Nếu AI tính tay đã sai thì code viết ra cũng sẽ sai. Sửa cho thống nhất ở bước này nhanh hơn nhiều so với sửa code.
Phần 3. Tính giờ trống ở phía máy chủ
Tính giờ trống cần đọc lịch hẹn của mọi khách, trong đó có tên và số điện thoại. Vì vậy phải tính ở phía máy chủ, trang web chỉ nhận về danh sách giờ, không kèm thông tin của khách khác.
Prompt mẫu
"Dùng MCP Server và tài liệu EzyPlatform, hãy viết API tính giờ trống cho Nuny Nail theo docs/quy-tac-gio-trong.md: Nhận vào: mã dịch vụ (một hoặc nhiều), mã thợ hoặc 'bat-ky', ngày. Trả về: danh sách giờ còn trống và tên thợ nhận được ở từng giờ. Không trả về tên, số điện thoại của khách. Từ chối ngày đã qua hoặc quá 14 ngày, kèm thông báo dễ hiểu. Khi khách gửi lịch hẹn, máy chủ phải kiểm tra lại giờ đó còn trống không trước khi lưu, để hai khách không đặt trùng. Viết kiểm tra tự động cho 6 tình huống trong docs/tinh-huong-kiem-tra-gio-trong.md với đúng đáp án trong bảng. Yêu cầu: Trước khi làm, cho tôi biết sẽ viết ở đâu trong EzyPlatform và theo cách nào. Phần nào là suy đoán thì ghi rõ. Không đưa admin_access_token hay thông tin bí mật vào code giao diện. Sau khi xong, chạy kiểm tra tự động, báo kết quả từng tình huống, liệt kê các file đã thay đổi và dừng lại để tôi xem trước."
Lưu ý: Nếu có tình huống chưa đúng, yêu cầu AI sửa code, không được sửa đáp án trong bảng để kiểm tra "qua". Đáp án là quy tắc của tiệm, chỉ bạn mới được quyết định đổi.
Phần 4. Hiển thị giờ trống trên trang /dat-lich
Bước 1: Đổi ô chọn giờ thành các nút giờ trống
Prompt mẫu
"Hãy sửa trang /dat-lich để dùng API giờ trống: Sau khi khách chọn dịch vụ và thợ, hiện dải 14 ngày tới dạng nút ngang (ví dụ 'T7 17/10'), ngày thợ nghỉ hiện mờ, không bấm được. Khách chọn ngày thì hiện các giờ còn trống dạng nút, chia Sáng, Chiều, Tối. Với 'thợ nào cũng được', chọn giờ xong thì ghi rõ thợ sẽ làm. Ngày không còn giờ trống thì hiện 'Ngày này đã kín lịch' và gợi ý ngày gần nhất còn trống. Nếu khách gửi đúng lúc giờ đó vừa có người đặt, báo 'Giờ này vừa có người đặt, mời bạn chọn giờ khác' và tải lại danh sách giờ. Giữ nguyên phần nhập thông tin và màn hình cảm ơn đã làm ở bài trước. Làm theo brand-guide.md, ưu tiên điện thoại. Yêu cầu: Không đưa admin_access_token hay thông tin bí mật vào code giao diện. Nếu chưa lấy được giờ trống, hiển thị thông báo thân thiện kèm số điện thoại, Zalo của tiệm. Sau khi xong, liệt kê các file đã thay đổi và dừng lại để tôi xem trước."
Bước 2: Thử trên website như khách và chủ tiệm
Cách kiểm tra rõ nhất là đóng vai hai khách cùng đặt lịch trong một ngày cùng một thợ.
Khách thứ nhất đặt lịch
Mở /dat-lich?dich-vu=son-gel-tay, chọn thợ Mai, chọn Thứ Năm 15/10 và giờ 9:15, nhập tên, số điện thoại rồi bấm gửi. Trang cảm ơn sau khi khách thứ nhất đặt Sơn gel tay với Mai lúc 9:15 như ảnh bên dưới đây.
Khách thứ hai đặt lịch cùng ngày
Chọn Thứ Năm 15/10: giờ bắt đầu sớm nhất của Mai là 10:15. Khách thứ nhất đã giữ Mai từ 9:15 đến 10:00, cộng 15 phút nghỉ dọn bàn, nên những giờ trước 10:15 không còn hiện.
Kết luận
Qua bài này, trang đặt lịch Nuny Nail đã chỉ cho khách chọn những giờ thợ thật sự rảnh: máy chủ tính giờ trống dựa trên giờ mở cửa từng ngày, tổng thời gian các dịch vụ, ngày nghỉ của thợ, thời gian nghỉ giữa hai khách và những lịch hẹn đang giữ chỗ, trang /dat-lich hiển thị các giờ đó thành nút bấm dễ chọn trên điện thoại, còn khi hai khách cùng bấm một giờ thì chỉ một người đặt được và thông tin của khách khác không bao giờ lộ ra trang web.
Cách làm quan trọng nhất vẫn là chốt quy tắc bằng lời, chuẩn bị ví dụ có sẵn đáp án, cho AI tính tay rồi mới viết code, và giữ nguyên đáp án khi kiểm tra thay vì để AI sửa cho "qua".
Ở bài tiếp theo, chúng ta sẽ hoàn thiện form đặt lịch nhiều bước trên điện thoại, cho khách gửi kèm ảnh mẫu móng muốn làm và có trang xác nhận lịch hẹn rõ ràng.
Nguyễn Thị Thanh Tuyền - Chuyên viên Marketing