# Nối Booking vào PriceLabs Platform: PriceLabs · HTML: https://harthliving-ota.pages.dev/guide/pricelabs/pricelabs-connect-booking-playbook/ · Source: vault/18-ota-listings/platforms/pricelabs-connect-booking-playbook.md # Nối listing Booking.com vào PriceLabs > ⚠️ **Người bấm là user, KHÔNG phải agent.** Mọi bước dưới đây đều là GHI (đổi cấu hình thật, đổi giá thật trên kênh bán). > Luật `vault/10-rules/ota-readonly-rule.md` cấm agent tự làm; riêng nhãn `Add/Re-import Listings` nằm trong danh sách cấm chạm ở tầng C. > Agent chỉ được làm hai việc: **đo trạng thái trước khi nối** và **xác minh sau khi nối** (mục 6). Viết cho `25anthuong11` — property Booking `16927056`, room `1692705601`. Các căn khác dùng lại y hệt, chỉ đổi hai số đó. --- ## 1. Vì sao phải làm — tình trạng đo được 11/09/2026 Bốn bằng chứng độc lập đều chỉ cùng một kết luận: property này **chưa nối** channel manager nào. | Đo ở đâu | `25anthuong11` (chưa nối) | `41lehycat` (đã nối, dùng làm mẫu) | | :--- | :--- | :--- | | Payload `home.html` | `channelManagerConnected: 0` | `channelManagerConnected: 1` | | Header lịch | `Monthly view` (còn xem được theo tháng) | `XML (edits overwritten)` | | `rate_plans.html`, cột *Price* của `Standard Rate` | `Managed by your Calendar` | `Mapped from PriceLabs` | | Danh sách listing PriceLabs | không có dòng `bcom` nào mang `16927056` | có `15668481___1566848101` | Hệ quả đang gánh: giá Booking của căn này **phẳng 5.000.000₫/đêm ở toàn bộ 81 ô lịch** đọc được, không theo mùa, không theo cuối tuần, không theo nhu cầu. → `issues.md` **L-15** + **L-42**. --- ## 2. Điều kiện tiên quyết — kiểm trước khi bấm gì | Điều kiện PriceLabs đòi | Trạng thái căn này | | :--- | :--- | | Listing đang **live và bookable** trên Booking | ✅ `Open/Bookable` | | Có ít nhất một **rate plan loại Standard** | ✅ `Standard Rate` ID `67628679` | | Không còn PMS/channel manager cũ đang nối | ✅ chưa có cái nào (`channelManagerConnected: 0`) | | Tài khoản PriceLabs còn chỗ cho listing mới | ⚠️ xem mục 7 — phí child listing | **Quyết định phải chốt TRƯỚC khi bật sync:** ba con số `Min` · `Base` · `Max` cho dòng Booking mới. Nối xong mà chưa đặt là PriceLabs đẩy giá của nó xuống, ghi đè mức 5.000.000₫ hiện tại. Mốc tham chiếu từ căn 4 phòng ngủ cùng cỡ `41lehycat` trên Booking: ``` 41 Lê Hy Cát · Booking: Min 4.000.000 Base 5.500.000 Max chưa đặt 25 AT 11 · Booking: giá tĩnh đang chạy 5.000.000 25 AT 11 · Airbnb: Min 3.000.000 Base 4.000.000 ``` Gợi ý điểm xuất phát an toàn: `Base` = 5.000.000 (đúng giá đang bán, không tạo cú sốc giá), `Min` = 3.500.000, `Max` đặt một trần thật thay vì bỏ trống. Đây là **đề xuất, không phải số đã chốt** — user quyết. --- ## 3. Phần A — Bên Booking extranet: khai PriceLabs là Connectivity provider Nguồn: [Booking Partner Help — Setting up and working with a Connectivity provider](https://partner.booking.com/en-us/help/first-steps/online-bookable/setting-and-working-connectivity-provider). ### Cách A1 — làm cho riêng một property (đơn giản nhất) 1. Đăng nhập extranet, **chọn đúng property `16927056`** (4BR Villa in An Thuong 500m to MyKhe Beach). 2. Bấm **`Account`** trên thanh trên cùng, chọn **`Connectivity provider`** trong menu xổ xuống. 3. Bấm **`Search`**, tìm **`PriceLabs`** trong danh sách nhà cung cấp. 4. Chọn PriceLabs, rồi **tick đủ các quyền**. PriceLabs nói rõ: *"If any one of these is not selected, then the sync will not work."* - `Rates and Availability` - `Reservations` - `Content` (Booking gọi là `Content and photos`) 5. Tick ô đồng ý điều khoản, bấm **`Connect`**. ### Cách A2 — làm từ group extranet (hợp với tài khoản này hơn) Tài khoản này là **group account 9 property**, và PriceLabs đã là provider của 7 property khác — nên đường bulk là đường tự nhiên để thêm căn thứ 8. 1. Đăng nhập **group extranet**, bấm **`Bulk editing`**. 2. Mục `Connectivity provider`, bấm **`Take action`** cạnh **`Manage connectivity provider`**. 3. Tìm **`PriceLabs`**, bấm **`Connect`**, chọn các quyền cần tích hợp, bấm **`Next`**. 4. Chọn đúng property **`16927056`** (chỉ căn này, đừng động vào 7 căn đang chạy), bấm **`Check and confirm changes`**. 5. Soát lại rồi bấm **`Apply change`**. ### Sau khi bấm Connect Booking gửi yêu cầu kết nối sang PriceLabs qua email. PriceLabs làm phần mapping và cấu hình, rồi kết nối **tự động hoàn tất khi họ xác nhận xong**. Thông báo về **hộp thư extranet**. Trạng thái kết nối xem lại ở đúng chỗ cũ: `Account` → `Connectivity provider`. ⏱️ Không phải lập tức. Đừng kết luận hỏng nếu chưa thấy đổi ngay trong vài phút. --- ## 4. Phần B — Bên PriceLabs: nạp listing vào dashboard Nguồn: [PriceLabs — How to Integrate PriceLabs with Booking.com](https://help.pricelabs.co/portal/en/kb/articles/how-to-integrate-pricelabs-with-booking). 1. Đăng nhập PriceLabs. 2. Bấm **`Add/Reconnect Listings`** (tài khoản mới thì nhãn là `Add your listings`). 3. Chọn nhóm **`Airbnb/Booking.com/Houfy/Vrbo`**, rồi chọn **`Booking.com`** trong dropdown. 4. Câu hỏi *"If you have added PriceLabs as your connectivity provider in Booking.com"* → chọn **`Yes`**. 5. Nhập **Property ID / Hotel ID**: ``` 16927056 ``` 6. Bấm **`Connect`**. Kết quả mong đợi: **mỗi room type thành một listing riêng** trong PriceLabs. Căn này có đúng một room nên sẽ xuất hiện đúng một dòng, khoá dự kiến: ``` 16927056___1692705601 ``` --- ## 5. Phần C — Cấu hình trước khi cho phép đẩy giá Làm đủ ba việc này **trước** khi bật sync. ### 5.1 Đặt Min / Base / Max Mở listing Booking mới, khối **`Configure Prices`**, nhập ba ô rồi bấm **`Save & Refresh`**. Số đã bàn ở mục 2. ### 5.2 Map cha–con với listing Airbnb của cùng căn Đây là việc **chống lệch giá giữa hai kênh và chống tính tiền hai lần**. Vào `Dynamic Pricing` → `Manage Listings` → nút **`Map Listings`**: - **Parent:** listing Airbnb `1729647978348243002` - **Child:** listing Booking `16927056___1692705601` - Bấm **`Map Listings`**. Bằng chứng cách này chạy đúng đã có sẵn trong chính tài khoản: cặp cha–con của 36 Dương Tử Giang có `Min` và `Base` **giống hệt nhau ở cả hai kênh**. Bảy căn trong phạm vi chưa nối cha–con nên Base đang trôi mỗi kênh một kiểu → `issues.md` **L-23**. ⚠️ Nối cha–con **không** sửa số phòng ngủ khai trong PriceLabs. Kiểm riêng ô `BR` của dòng mới, đừng để nó thành `1 BR` như ba dòng Booking đang sai (**L-18**). ### 5.3 Chênh lệch hoa hồng giữa hai kênh Nếu muốn giá hai kênh khác nhau cho đúng phần hoa hồng, PriceLabs bảo dùng **pricing offset** và **áp ở cấp tài khoản**, không vá từng ngày. --- ## 6. Phần D — Bật sync, rồi xác minh 1. Trong PriceLabs, bật **`Sync Prices`** cho listing mới, hoặc bấm **`Sync Now`** để đẩy ngay một lần. 2. Đợi, rồi kiểm **bốn dấu hiệu** dưới đây. Nối đúng thì cả bốn phải đổi: | Kiểm ở đâu | Trước | Sau khi nối đúng | | :--- | :--- | :--- | | Lịch Booking | `Monthly view` | `XML (edits overwritten)`, **mất hẳn chế độ xem theo tháng** | | `rate_plans.html`, cột *Price* của Standard Rate | `Managed by your Calendar` | `Mapped from PriceLabs` | | Payload `home.html` | `channelManagerConnected: 0` | `1` | | Danh sách listing PriceLabs | 8 dòng `bcom` | 9 dòng, có `16927056___1692705601` | Agent chạy hộ bước xác minh này được, vì nó chỉ đọc: ```bash node scripts/chrome-cdp-daemon.mjs & node scripts/chrome-grab.mjs --out /tmp/verify-25at11 --settle 8000 \ "https://admin.booking.com/hotel/hoteladmin/extranet_ng/manage/rate_plans.html?hotel_id=16927056&lang=xu" \ "https://admin.booking.com/hotel/hoteladmin/extranet_ng/manage/home.html?hotel_id=16927056&lang=xu" \ "https://app.pricelabs.co/pricing" ``` 3. Ba rate plan của căn này ăn theo nhau nên **chỉ cần Standard Rate được đẩy là cả ba đổi**: ``` Standard Rate 67628679 ← PriceLabs đẩy vào đây Weekly 67628681 = rẻ hơn Standard 5% Monthly 69060005 = rẻ hơn Standard 10% ``` --- ## 6b. Kết quả thật của lần chạy đầu — `25anthuong11`, 11/09/2026 Bốn dấu hiệu **đều đã lật** ⇒ phần kết nối coi như xong. Nhưng đo tiếp trong PriceLabs thì thấy **giá chưa hề được đẩy**: | Đo được | Giá trị | | :--- | :--- | | `Enable Price Sync` | **chưa bật** | | `Last synced` | `NA` (chưa đồng bộ lần nào) | | Min · Base · Max | 3.450.000 · 4.600.000 · **chưa đặt** | | `Property Type` · `BR` | `Short-Term` · `4 BR` ✅ | | Map cha–con với Airbnb | **chưa** — `parent_key` hai dòng khác nhau (4100624 vs 4277456) | 📌 **Bài học đắt nhất của bước này:** nối xong KHÔNG có nghĩa là giá chạy. Booking vẫn phục vụ mức tĩnh cũ cho tới khi bật `Enable Price Sync`. Ai chỉ nhìn nhãn `XML (edits overwritten)` rồi báo "xong" là báo sai. 🔎 **Cách kiểm map cha–con bằng máy:** trong `GET /api/pd_dropdown_options`, hai listing đã map **dùng chung `parent_key`**. Cặp mẫu đã map trong tài khoản: 36 Dương Tử Giang, Airbnb `1614694700651096321` và Booking `15995581___1599558101` cùng `parent_key = 3583058`. ⚠️ **Xem giá PriceLabs định đẩy TRƯỚC khi bật sync.** Lịch của căn này hiện phần lớn các đêm nằm đúng ở sàn 3.450.000, tức thuật toán còn muốn xuống thấp hơn nữa nhưng bị Min chặn. Bật sync là giá Booking rơi từ 5.000.000 xuống quanh 3.450.000. Đó có thể là điều mình muốn (lấp đầy 13%), nhưng phải là quyết định có chủ ý, không phải tác dụng phụ. --- ## 7. Phần E — Việc BẮT BUỘC làm sau: nối lịch bằng iCal 🔴 **PriceLabs KHÔNG đồng bộ tình trạng phòng.** Nguyên văn: *"PriceLabs does not manage availability. You need another tool to ensure that the calendar for your Airbnb and Booking.com is synced."* Nghĩa là nối xong giá chạy đúng nhưng **hai kênh vẫn có thể bán trùng một đêm**. Villa nguyên căn thì đặt trùng là hỏng thật, không phải phiền toái nhỏ. Thêm một bẫy PriceLabs cảnh báo thẳng: *"Even if your Airbnb and Booking.com are already synced prior connecting them to PriceLabs, please follow this step again as Booking.com may have removed the sync."* ⇒ **sau khi nối, phải mở lại phần iCal của Booking và kiểm, kể cả khi trước đó đã nối rồi**. iCal do Booking quản, PriceLabs không can thiệp được; hỏng thì hỏi Booking support. --- ## 8. Những thứ sẽ mất hoặc đổi — biết trước để khỏi hoảng | Thay đổi | Chi tiết | | :--- | :--- | | **Mất chế độ xem lịch theo tháng** | Booking tắt `Monthly view` với mọi property nối API. Chỉ còn `List view` và `Yearly view`. Đây là hành vi bình thường, không phải lỗi | | **Sửa giá tay trong extranet sẽ bị ghi đè** | Nhãn `XML (edits overwritten)` nói đúng nghĩa đen. Từ đó về sau **sửa giá ở PriceLabs**, không sửa trong extranet | | **Giá không đổi từng ngày một cách mượt** | PriceLabs dùng **Delta Push**: chỉ đẩy khi giá mới lệch từ ~5 USD trở lên so với lần đẩy trước | | **Lịch sử đặt phòng chỉ kéo về 15 ngày** | Giới hạn của API Booking, không phải lỗi PriceLabs | | **Phí** | Listing con map từ kênh khác tính khoảng **1 USD/tháng**. Không map thì bị tính như một listing đầy đủ ⇒ map cha–con vừa đúng giá vừa rẻ hơn | --- ## 9. Thứ tự rút gọn ``` 1. Chốt Min / Base / Max cho dòng Booking (user quyết) 2. Booking extranet → Account → Connectivity provider → PriceLabs → tick đủ quyền → Connect (hoặc group extranet → Bulk editing → Manage connectivity provider) 3. Đợi PriceLabs xác nhận — thông báo về hộp thư extranet 4. PriceLabs → Add/Reconnect Listings → Booking.com → Yes → 16927056 → Connect 5. Nhập Min/Base/Max → Save & Refresh 6. Map Listings: parent = Airbnb 1729647978348243002, child = 16927056___1692705601 7. Kiểm ô BR của dòng mới (phải là 4 BR) 8. Bật Sync Prices 9. Xác minh 4 dấu hiệu ở mục 6 10. Nối lại iCal Airbnb ↔ Booking và kiểm — PriceLabs không lo tình trạng phòng ``` --- ## 10. Liên quan - `issues.md` **L-15** · **L-42** — hai việc mở mà cẩm nang này đóng - `issues.md` **L-23** (chưa map cha–con) · **L-18** (dòng Booking khai sai BR) — sửa luôn trong lúc làm - `platforms/pricelabs.md` §2 — bản đồ 36 listing và cách đọc Base - `platforms/booking.md` §3 — ý nghĩa nhãn XML, sửa ở đâu - `vault/10-rules/ota-readonly-rule.md` — vì sao agent không tự bấm