User chốt 03/09/2026, sửa lại cùng ngày sau khi user chỉ ra bản đầu quá chặt. Áp cho MỌI agent trong workspace (Claude Code, Codex, Cline, Antigravity) và MỌI công cụ điều khiển trình duyệt.
0. Nguyên tắc gốc
Agent truy cập bốn hệ thống này để đọc và hiểu thông tin. Không tự ý chỉnh sửa, không áp dụng, không kích hoạt bất cứ thay đổi nào. Mọi việc chỉnh sửa chỉ làm khi user ra lệnh trực tiếp cho đúng việc đó.
Ranh giới đúng là ĐỌC ↔ GHI, không phải BẤM ↔ KHÔNG BẤM
Bản luật đầu tiên cấm thẳng mọi cú click. Sai ở chỗ: nó rộng hơn chính mục đích của mình. Bấm sang trang 2 của một bảng không đổi giá, không đổi lịch, không gửi gì cho ai — nó chỉ đổi cái agent đang nhìn. Cấm nó không bảo vệ được gì, chỉ làm mất dữ liệu.
Phép thử một câu, dùng trước mọi thao tác:
Sau thao tác này, có thứ gì trên tài khoản khác đi mà khách, nền tảng, hoặc user nhìn thấy được không?
- Không → đọc hoặc điều khiển hiển thị. Xem tầng A và B.
- Có → ghi. Cấm, trừ khi user vừa ra lệnh đúng việc đó. Xem tầng C.
- Không chắc → coi như CÓ. Dừng và hỏi.
Gọn lại thành một câu để nhớ: bấm để xem thì tự làm, save hay apply thì phải xin.
1. Bốn hệ thống bị ràng buộc
| # | Hệ thống | Miền |
|---|---|---|
| 1 | Booking.com — Extranet / Group homepage | admin.booking.com, account.booking.com, partner.booking.com |
| 2 | Airbnb — Host / Hosting dashboard | airbnb.com/hosting/*, airbnb.com/multicalendar, airbnb.com/users/* |
| 3 | Agoda — Partner Portal / YCS | portal.agoda.com, ycs.agoda.com, partnerhub.agoda.com |
| 4 | PriceLabs — Dynamic Pricing | app.pricelabs.co, pricelabs.co |
Bốn hệ thống này điều khiển tiền thật và phòng thật. PriceLabs còn đẩy giá xuống cả ba kênh cùng lúc, nên một thao tác sai ở đó lan ra toàn danh mục.
2. Thang ưu tiên — thử hết bậc trên rồi mới xuống bậc dưới
Bài học 03/09: 26 dòng bảng giá PriceLabs không bị luật chặn, mà bị agent thiếu ý tưởng. Có đường lấy dữ liệu không cần bấm mà agent không nghĩ ra.
| Bậc | Cách lấy | Ghi chú |
|---|---|---|
| 1 | Đọc response API đã tải — list_network_requests rồi get_network_request |
Rẻ nhất, đầy đủ nhất. Endpoint dạng /api/... thường trả trọn bộ dữ liệu, không phân trang như giao diện |
| 2 | Tải lại trang rồi đọc lại network | Dùng khi DevTools bắt đầu ghi sau lúc trang đã tải nên không bắt được request gốc. Reload là điều hướng tới URL xem — hợp lệ |
| 3 | evaluate_script chỉ-đọc trên DOM |
Khi dữ liệu đã render sẵn |
| 4 | Điều khiển hiển thị (tầng B) | Chỉ khi ba bậc trên không ra |
| 5 | Dừng, báo user | Khi cả bốn bậc đều không được |
3. Tầng A — được làm tự do
- Liệt kê tab, chọn tab, mở tab mới tới một URL xem, tải lại trang, quay lại / tiến tới.
- Chụp màn hình, chụp snapshot a11y.
evaluate_scriptchỉ để đọc:textContent,innerText,getAttribute, đọc bảng, đếm phần tử, dò biến toàn cục.- Đọc console log; liệt kê và đọc nội dung network request đã xảy ra.
- Cuộn trang, đổi kích thước cửa sổ, phóng to thu nhỏ.
4. Tầng B — BẤM ĐỂ XEM, được phép
User chốt 03/09/2026: "bạn có thể tự bấm chỗ cần xem, miễn là không save hay áp dụng thay đổi gì."
Agent được tự bấm vào bất cứ thứ gì mà mục đích là mở ra để nhìn, không cần xin phép từng lần.
Được bấm — mọi thao tác nhằm xem
- Phân trang · số dòng mỗi trang · sắp xếp cột · bộ lọc hiển thị · bật/tắt cột.
- Chuyển tab, bung/thu hàng và khối chi tiết.
- Chuyển tháng / đổi dải ngày trên lịch.
- Mở một listing, một property, một đơn đặt phòng để xem chi tiết.
- Mở panel, popover, drawer, modal chỉ để hiển thị thông tin.
- Mở trang cài đặt để ĐỌC giá trị đang đặt — phí, chính sách, cấu hình listing.
- Đóng modal, đóng banner, quay lại trang trước.
Ba rào chắn vẫn bắt buộc
- Đọc nhãn phần tử trước khi bấm. Lấy
innerText/aria-labelcủa đúng phần tử sắp bấm. Không bao giờ bấm theo toạ độ, không bấm theo thứ tự phần tử. Nhãn khớp danh sách cấm ở tầng C → dừng. - Vào rồi thì chỉ đọc. Mở một trang cài đặt để xem giá trị là hợp lệ; chạm vào ô nhập, kéo thanh trượt, gạt công tắc trong đó thì không — kể cả khi chưa bấm Save. Nhiều giao diện tự lưu khi rời ô.
- Thử bậc 1–3 của thang ưu tiên trước. Đọc API vẫn rẻ và đầy đủ hơn bấm qua từng trang. Bấm là đường sau cùng, không phải đường đầu tiên.
Điều phải khai với user
Vài thao tác xem có ghi thiết lập hiển thị — ví dụ đổi số dòng/trang ghi cookie manage_listings_page_size của PriceLabs. Đó là thiết lập giao diện của chính user, không phải dữ liệu kinh doanh, nên vẫn thuộc tầng B. Nhưng phải nói ra, không lờ đi như thể không ghi gì.
Cạm bẫy: trang xem chứa nút ghi
Vào xem thì được, chạm vào thứ gì bên trong thì không. Review Prices của PriceLabs mở ra lịch giá — đọc thoải mái, nhưng bên trong có nút lưu và duyệt giá.
5. Tầng C — cấm tuyệt đối
Cấm không cần hỏi, kể cả khi trông có vẻ vô hại:
- Điền form (
fill,fill_form), tải file lên (upload_file), gõ phím vào ô nhập (press_keyvào input). - Kéo thả (
drag) — kéo trên lịch là đổi ngày hoặc đổi giá. - Bấm nút xác nhận trong hộp thoại (
handle_dialogvớiaccept). evaluate_scriptcó tác dụng phụ: gán DOM,el.click(),form.submit(),fetch/XHRphương thức POST · PUT · PATCH · DELETE, ghilocalStorage, gọi hàm nội bộ của trang.- Điều hướng tới URL mang hành động — chứa
action=,save,apply,confirm,delete,bulk,sync,publish,send,approve. - Trả lời tin nhắn khách ở bất kỳ hộp thư nào của bốn kênh.
- Đăng nhập, đăng xuất, đổi tài khoản, đổi mật khẩu, đổi cài đặt thông báo. Gặp trang đăng nhập thì dừng và báo user, không tự điền.
Nhãn nút cấm chạm — dừng ngay khi thấy
Save · Apply · Update · Publish · Send · Confirm · Submit · Approve · Delete · Remove ·
Bulk edit · Sync now · Sync Price · Update My Prices Now · Add/Re-import Listings ·
Open / Close phòng · List a property · Accept · Decline · Cancel booking · Mark as no-show
6. Vùng nguy hiểm theo từng nền tảng
| Nền tảng | Chỗ dễ bấm nhầm nhất |
|---|---|
| Booking Extranet | Nút Bulk edit nằm ngay góc phải khối lịch, sát vùng bảng. Hàng Room status bấm được để mở/đóng phòng. Ô giá trong lịch là input, chạm vào là sửa được |
| Airbnb | Banner "We're simplifying service fees" dẫn vào luồng có thể xác nhận đổi phí — chỉ đọc chữ, không bấm. Multicalendar sửa giá ngay tại ô. Toggle Listed/Unlisted gỡ listing khỏi sàn |
| Agoda Partner Portal | Nút List a property. Tab Reservations có hành động với đơn thật |
| PriceLabs | Nguy hiểm nhất vì đẩy giá xuống cả ba kênh. Sync Price ở mỗi hàng, banner Update My Prices Now, Add/Re-import Listings. Review Prices mở trang xem nhưng bên trong có nút lưu |
7. Khi thấy việc cần sửa
Không sửa. Làm đủ ba bước:
- Ghi lại vào
vault/19-Harthliving-OTA/issues/issues.md— mãL-nn, mức ưu tiên, sửa ở đâu. - Báo user kèm: thấy gì, ở đâu (kênh + ID listing + ngày), hậu quả nếu để nguyên, và các bấm cụ thể cần làm.
- Đợi lệnh. User nói làm cái gì thì làm đúng cái đó, không làm kèm thứ khác.
8. Phạm vi của một lệnh cho phép
Khi user ra lệnh sửa, quyền đó là một lần, cho đúng việc đó, trên đúng listing đó.
- Không suy ra quyền cho listing khác, ngày khác, kênh khác.
- Không suy ra quyền cho lần sau.
- "Mở giá 17/09–01/10 cho căn 502 trên Booking" không cho phép mở giá căn 305, cũng không cho phép mở tháng 10.
- Việc khó lùi (đóng listing, xoá property, gửi tin cho khách, apply giá hàng loạt) phải xác nhận lại một lần nữa ngay trước khi bấm, kể cả khi user đã ra lệnh.
- Báo cáo lại sau khi làm: đã bấm gì, kết quả ra sao, có gì ngoài dự kiến không.
9. Bảo mật và phạm vi trình duyệt
- Chrome DevTools MCP bám profile Chrome mặc định và thấy mọi cửa sổ của profile đó — gồm cả ngân hàng, email, extranet đang mở. User đóng tab nhạy cảm trước khi cho agent chạy tự do.
- Agent chỉ thao tác trên tab thuộc bốn miền ở mục 1.
- Không ghi thông tin xác thực vào vault. URL extranet chứa
ses=...; response header của API chứa cookie phiên (remember_user_token,cf_clearance…). Lưuhotel_id,listing_id— bỏ hết token, cookie, session. - Không ghép session token vào URL tự chế. Token hết hạn thì trang bật ra màn đăng nhập; agent không được đăng nhập, nên chỉ tạo ra một tab chết. Nhờ user tự mở trang cần xem.
10. Nhật ký sửa luật
| Ngày | Sửa gì | Vì sao |
|---|---|---|
| 03/09/2026 | Bản đầu: cấm thẳng mọi click |
User yêu cầu chỉ-đọc trên bốn hệ thống |
| 03/09/2026 | Tách ba tầng A/B/C; thêm thang ưu tiên 5 bậc; thêm vùng nguy hiểm từng nền tảng | User chỉ ra bản đầu tự mâu thuẫn: tiêu đề nói "cấm thứ làm đổi trạng thái" nhưng lại cấm cả cú bấm không đổi gì. Hệ quả thật: mất 26/36 dòng bảng giá PriceLabs, trong khi có đường API lấy được mà agent không nghĩ ra |
| 03/09/2026 | Tầng B mở rộng từ danh sách trắng hẹp thành bấm để xem nói chung | User: "bạn có thể tự bấm chỗ cần xem, miễn là không save hay áp dụng thay đổi gì." Ranh giới chốt ở save/apply, không ở cú bấm |
11. Liên quan
vault/19-Harthliving-OTA/DATA.md— kho hồ sơ listing, luồng làm việcvault/10-rules/ota-messaging-rules.md— luật nội dung tin nhắn gửi khách (khác việc, cùng ba kênh)