Lưu trú

Kết nối kênh OTA

Xem bản Markdown

Đồng bộ lịch hai chiều với Airbnb, Booking.com, Agoda... theo chuẩn iCal: chuẩn mà mọi kênh lớn đều hỗ trợ cho cơ sở nhỏ, chỉ cần dán liên kết, không cần ký hợp tác API.

Nguyên tắc: lịch iCal chỉ nói ngày nào bận, không nói còn mấy phòng, nên mỗi kết nối ghép một phòng với một listing trên kênh. Khách sạn có nhiều phòng cùng hạng thì tạo nhiều kết nối, mỗi phòng một listing.

Tạo kết nối

Vào Cài đặt > Cấu hình nghiệp vụ > Kênh OTA (cần quyền Kênh OTA):

  1. Chọn kênh (gõ tự do nếu ngoài danh sách gợi ý), cơ sở và phòng.
  2. Dán URL lịch nhập từ kênh: lấy trong trang quản lý listing của OTA (Airbnb: Availability > Export calendar; Booking.com: Rates & Availability > Sync calendars). Bỏ trống nếu chỉ muốn phát lịch cho kênh đọc, không nhận về.
  3. Khai Giá ước tính mỗi đêm nếu muốn báo cáo doanh thu tính được phần khách từ kênh này.
  4. Lưu xong bấm URL lịch xuất để lấy link dán ngược vào OTA, kênh sẽ tự khoá những ngày đã có khách đặt ở đây (kể cả khách lễ tân và khách web).

Đồng bộ chạy thế nào

  • Hệ thống tự kéo lịch mỗi giờ (cần cron schedule:run trên máy chủ). Muốn kéo liền tay thì bấm Đồng bộ ngay ở từng kết nối.
  • Lịch OTA về thành đặt phòng Đã xác nhận, nguồn khách OTA, gán đúng phòng. Quỹ phòng bị trừ ngay nên web và lễ tân không bán trùng được nữa.
  • Tiền phòng: iCal không mang giá. Kết nối chưa khai Giá ước tính mỗi đêm thì đặt phòng về với tiền 0, và báo cáo doanh thu sẽ không thấy phần khách OTA. Khai số đó thì đặt phòng mang sẵn tiền phòng bằng giá nhân số đêm, ghi luôn vào sổ chi phí, nên công suất và doanh thu nhìn ra được. Đây là số ƯỚC TÍNH để báo cáo có căn cứ; tiền thu thật vẫn do lễ tân ghi vào sổ khi khách đến, và sửa lại dòng tiền phòng nếu kênh trả về khác.
  • Kênh đổi ngày thì đặt phòng đổi theo; kênh gỡ khỏi lịch (khách huỷ trên OTA) thì đặt phòng tự huỷ. Khách đang ở thì máy không tự đổi/huỷ mà báo trong cột Tình trạng để lễ tân xử tay.
  • Bán trùng: lịch OTA về đúng khoảng phòng đã có khách thì vẫn nhập (kênh đã bán rồi, giấu đi là loạn quỹ) kèm cảnh báo vàng, lễ tân đổi phòng hoặc huỷ một bên.

Cột Tình trạng ở danh sách kết nối: xanh là êm, vàng là có cảnh báo, đỏ là lỗi (rê chuột xem chi tiết).

Bao lâu thì coi là nguội khai ở Cài đặt > Cấu hình nghiệp vụ > Vận hành, mặc định 3 giờ — đủ tha hai lượt kéo lịch bị lỡ mà vẫn bắt được lúc lịch chạy chết hẳn. Bán nhiều kênh thì hạ xuống 1 giờ cho biết sớm; đối tác phát lịch chậm thì nâng lên 6 giờ, kẻo ngày nào cũng báo oan rồi quen mắt bỏ qua. Kênh đang tắt và kênh chỉ phát lịch ra ngoài không bị đòi nhịp tim.

Nối bằng API: đẩy số phòng trống và giá (Channex)

Đường iCal ở trên chỉ nói ngày nào bận. Muốn kênh biết còn mấy phòng và bán bao nhiêu tiền thì phải nối bằng API, và màn cho việc đó là Cài đặt > Cấu hình nghiệp vụ > Nối kênh bằng API (dùng chung quyền Kênh OTA).

Hai đường sống song song được, và nhiều cơ sở sẽ chạy cả hai một thời gian: Airbnb đi iCal, Booking.com và Agoda đi API.

Hiện nay đường API đi qua Channex — một đầu mối nối tới nhiều kênh: khai một lần là số của mình tới được Booking.com, Agoda, Expedia, Airbnb, khỏi phải xin duyệt với từng kênh. Đẩy thẳng sang từng OTA chưa mở.

Khai một đường nối

  1. Nhà cung cấp: chọn Channex.
  2. Máy chủ: để Bản thử trong lúc còn khai dở. Bản thật là bán phòng thật, và hai bản dùng hai khoá khác nhau.
  3. Mã cơ sở bên kia: Channex cấp khi cơ sở được nhận. Chưa có thì để trống.
  4. Khoá API: cất mã hoá, lưu xong không bao giờ bày lại. Để trống khi sửa là giữ nguyên khoá cũ, không phải xoá. Cột Khoá API ở danh sách cho biết đã lưu hay chưa.
  5. Ánh xạ hạng phòng: mỗi dòng nối một cặp (hạng phòng, bảng giá) của mình với cặp mã bên kia cấp. Thiếu bảng này thì không đẩy được một con số nào.

Mỗi cơ sở chỉ nối một lần với mỗi nhà cung cấp. Muốn nối cơ sở khác thì đổi cơ sở ở thanh trên rồi khai đường nối mới.

Số nào được đẩy

  • Phòng trống lấy đúng phép đếm của sơ đồ phòng, tính theo giờ nhận và giờ trả của cơ sở chứ không phải từ nửa đêm.
  • Giá lấy đúng đường màn Giá phòng đang dùng: có giá ghi đè theo ngày thì lấy giá ấy, không thì lấy giá thường của bảng giá. Không nhân chia thêm gì.
  • Chỉ bảng giá tính theo đêm được đẩy. Bảng giá theo giờ và theo ngày không có khái niệm giá một đêm, đẩy lên là kênh bán một đêm bằng giá vài tiếng.
  • Mỗi lượt đẩy tối đa 365 đêm, tức đẩy được trọn một năm trong một lần bấm. Kênh bán không nhận lịch xa hơn một năm nên xa hơn nữa là gửi số vào chỗ không ai đọc.

Đẩy lúc nào

Hiện nay chưa có lượt đẩy tự động. Đẩy là việc gõ tay trên máy chủ, và mặc định chỉ xem trước chứ không gửi:

php artisan pms:channel-push                 # chỉ xem trước, không chạm mạng
php artisan pms:channel-push --send          # gửi thật
php artisan pms:channel-push --account=3 --from=2026-10-01 --nights=30 --send

Cột Lần đẩy gần nhất ở danh sách cho biết lượt gửi trọn vẹn gần nhất. Lượt nào hỏng thì lý do nằm ở chính đường nối ấy, và giờ không được đóng dấu — nên thấy giờ cũ nghĩa là số chưa lên.

Mục tài liệu