Bỏ qua để đến nội dung

Tra chuyến và chỗ trống

8 phút đọc

Luồng tra cứu chuyến cung cấp thông tin lịch chạy giữa các bến theo ngày, số chỗ trống và sơ đồ ghế chi tiết để khách hàng lựa chọn trước khi đặt vé. Ferry trả về dữ liệu chuyến đã được đồng bộ định kỳ từ hãng tàu, do đó dữ liệu phản ánh ảnh chụp gần nhất thay vì trạng thái tức thời trên hệ thống của từng hãng.

Điều kiệnÝ nghĩa nghiệp vụTài liệu tham khảo
Khóa API hợp lệCác lệnh tìm chuyến, sơ đồ ghế và đếm chỗ yêu cầu xác thực đối tácXác thực bằng API key
Mã bến đi và bến đếnAPI tra cứu sử dụng mã định danh bến, không dùng tên dạng văn bản tự doXem danh mục bến công khai
Môi trường gọi APIMôi trường thử nghiệm UAT có danh sách hãng tạm tắt đồng bộ dữ liệuMôi trường
Quy ước phân trang và ngàyGiới hạn 50 bản ghi mỗi trang; ngày gửi lên theo định dạng YYYY-MM-DDQuy ước chung
Quy tắc tính giáGiá kèm kết quả tra chuyến đã gồm các khoản markup của tuyến trênGiá vé và markup nhiều cấp

Sơ đồ dưới đây cho thấy trình tự tương tác giữa hệ thống của bạn và Ferry trong luồng tra cứu:

sequenceDiagram
autonumber
participant P as "Hệ thống của bạn"
participant F as "Ferry API"
participant S as "Sơ đồ ghế"
P->>F: "Lấy danh mục bến (công khai)"
F-->>P: "Danh sách bến kèm mã bến"
P->>F: "Tìm chuyến theo cặp bến và ngày"
alt "Danh sách trả về rỗng"
F-->>P: "Mảng rỗng kèm mã 200"
Note over P,F: "Danh sách rỗng: hết chuyến hoặc gián đoạn dữ liệu"
P->>P: "Đối chiếu ngưỡng cảnh báo"
else "Có chuyến khả dụng"
F-->>P: "Danh sách chuyến và giá cơ sở"
P->>S: "Lấy sơ đồ ghế theo mã chuyến"
S-->>P: "Sơ đồ ghế kèm trạng thái từng ghế"
P->>F: "Đếm số chỗ còn lại"
F-->>P: "Số lượng chỗ còn trống"
end

Sơ đồ dưới đây thể hiện mối quan hệ giữa các bước tra cứu danh mục và tra cứu chuyến:

flowchart LR
A["Nạp danh mục bến, tuyến<br/>(không cần API Key)"] --> B["Tìm chuyến theo bến và ngày<br/>(cần API Key)"]
B --> C["Lấy sơ đồ ghế của chuyến<br/>(cần API Key)"]
C --> D["Đếm số chỗ còn trống<br/>(cần API Key)"]
D --> E["Chuyển sang luồng đặt vé"]
A -.->|"Bộ nhớ tạm phía đối tác"| A
B -.->|"Gọi lại khi đổi bến hoặc ngày"| B

Bảng dưới đây tóm tắt các thao tác theo từng bước:

BướcHệ thống của bạnPhía FerryLưu ý đối tác
1Nạp danh mục bến và tuyến một lầnTrả danh mục dùng chung (không cần khóa)Lưu bộ nhớ tạm phía bạn; không gọi lại ở mỗi lượt khách tìm
2Tra cứu chuyến theo cặp bến và ngàyTrả danh sách chuyến từ dữ liệu đã đồng bộKiểm tra mảng kết quả; nếu rỗng, tránh kết luận vội là hết chuyến
3Lấy sơ đồ ghế của chuyến đã chọnTrả cấu trúc ghế và trạng thái từng ghếGhế trống là ảnh chụp tại lần đồng bộ gần nhất
4Đếm chỗ còn trước khi cho chọn ghếTrả số lượng ghế còn khả dụngSo sánh số chỗ với số lượng khách cần đặt
5Chuyển thông tin sang bước đặt véChuẩn bị dữ liệu chuyến, ghế và hành kháchXem tiếp Luồng đặt vé
  • Có thể tra chuyến theo dải ngày để dựng lịch tháng, không chỉ từng ngày; vẫn phải đọc đủ các trang kết quả.
  • Ngày YYYY-MM-DD được hiểu theo giờ địa phương của hãng, không có trường múi giờ kèm theo. Nếu máy chủ ở múi giờ khác, quy đổi về giờ Việt Nam trước khi tạo chuỗi ngày.
  • Danh mục tuyến và bến dùng chung cho mọi tổ chức, vẫn chịu giới hạn theo IP dù không cần khóa. Khuyến nghị làm mới cache danh mục mỗi ngày; chưa có cam kết tần suất thay đổi.

Ferry đồng bộ thông tin chuyến từ hãng tàu theo từng nhóm ngày:

Nhóm ngàyPhạm vi thời gianNhịp đồng bộ định kỳ
Ngày gầnHôm nay đến 7 ngày tớiMỗi 30 phút một lần
Ngày vừaTừ 8 đến 14 ngày tớiMỗi 2 giờ một lần
Ngày xaTừ 15 đến 45 ngày tớiMỗi 4 giờ một lần
Ngày rất xaTừ 46 đến 90 ngày tới3 lần mỗi ngày
Chuyến hết chỗMọi ngàyQuét lại mỗi 40 phút
Chuyến bị hãng tạm dừngMọi ngàyQuét lại mỗi 4 giờ

Ba yếu tố ảnh hưởng đến độ trễ dữ liệu thực tế:

  1. Rải tải tác vụ: Các tác vụ đồng bộ được rải đều trong cửa sổ 5 phút để tránh quá tải máy chủ hãng.
  2. Bỏ qua lượt quét xa: Với các ngày xa, nếu dữ liệu lưu tạm chưa hết hạn, hệ thống sẽ bỏ qua lượt truy vấn hãng để tối ưu tài nguyên.
  3. Cơ chế dự phòng khi hãng gián đoạn: Ferry có thể trả bản dữ liệu hợp lệ gần nhất trong tối đa 4 giờ thay vì báo lỗi. Phản hồi không có dấu hiệu cho biết đó là bản dự phòng; nếu số liệu đứng yên bất thường, hãy báo Ferry.

Khuyến nghị thiết kế cho đối tác: Đặt thời gian lưu bộ nhớ tạm (cache) phía bạn không quá 5 phút cho ngày gần, và luôn gọi lại sơ đồ ghế cùng số chỗ còn trống ngay trước khi khách chốt chọn chỗ.

  • Danh sách rỗng kèm mã 200: Truy vấn tìm chuyến trả về mảng rỗng khi không có chuyến hoặc khi xảy ra sự cố dữ liệu. Bạn nên thiết lập ngưỡng theo dõi bất thường trên các tuyến cố định.
  • Tham số sắp xếp bị bỏ qua: Yêu cầu sắp theo giờ khởi hành hoặc giá bị thay bằng sắp theo mã bản ghi, không có cảnh báo. Hãy đọc đủ các trang rồi sắp xếp tại ứng dụng của bạn.
  • Giới hạn số lượng bản ghi: Tra chuyến thông thường bị kẹp tối đa 50 bản ghi mỗi trang, không báo lỗi. Riêng bảng chuyến dạng HTML để nhúng vào web hoặc email có trần 100. Dùng con trỏ phân trang để đọc đủ dữ liệu.
  • Không có bước giữ chỗ trước: Xem sơ đồ hoặc tạo booking chưa giữ ghế trên hệ thống hãng tàu. Booking mới chỉ là bản ghi phía Ferry; chỗ và vé chỉ được xác nhận sau khi bước xác nhận xuất vé thành công.
  • Chuyến chưa hỗ trợ xuất vé tự động: Tra cứu trả về chuyến của 13 hãng tàu, nhưng hiện có 4 hãng chưa mở bộ nối xuất vé tự động qua API. Xem chi tiết tại Xuất vé và đơn hàng.
Triệu chứngNguyên nhân khả dĩHướng xử lýCó nên thử lại ngay
Mảng chuyến rỗng trên tuyến đang khai thácTuyến chưa mở bán hoặc kết nối hãng gặp sự cố tạm thờiĐối chiếu lịch chạy công bố; báo Ferry nếu kéo dàiGọi lại sau một khoảng thời gian
Nhận tối đa 50 bản ghi dù yêu cầu nhiều hơnGiới hạn phân trang tối đa 50 bản ghi mỗi trangDùng con trỏ phân trang để tải trang tiếp theoCó, gọi trang tiếp theo
Kết quả không theo thứ tự giờ chạy mong muốnTham số sắp xếp được xử lý theo mã nội bộSắp xếp dữ liệu tại ứng dụng phía bạnKhông, xử lý phía máy khách
Ghế còn trên sơ đồ nhưng tạo đơn báo hết chỗChỗ đã được đặt bởi kênh khác trước khi tạo đơnLàm mới sơ đồ ghế và mời khách chọn ghế khácCó, sau khi làm mới sơ đồ
Nhận mã 403 khi gọi tra chuyếnKhông phải thiếu quyền: tra chuyến, sơ đồ ghế và đếm chỗ chỉ yêu cầu khóa hợp lệ, không kiểm quyền riêngThử lại một lần; nếu vẫn lỗi hoặc xảy ra hàng loạt, báo vận hành FerryCó, một lần

Để tra cứu lược đồ tham số chi tiết và thử nghiệm gọi trực tiếp, mở giao diện Scalar UI theo các nhóm nghiệp vụ:

Nội dung cần xemNhóm trên Scalar
Tra cứu chuyến theo bến và ngày, lịch chạyVoyages
Sơ đồ ghế và trạng thái vị trí ngồiBoat Layout
Đếm số lượng chỗ trống còn lạiVoyage Counts
Danh mục tuyến tàu (công khai)Routes
Danh mục bến đón trả (công khai)Locations
Danh sách hãng tàu (công khai)Operators

Xem hướng dẫn đăng nhập và điền khóa API tại Tham chiếu API.

TrangNội dung liên quan
Giá vé và markup nhiều cấpHiểu cơ chế tính giá và các khoản cộng thêm
Luồng đặt véCác bước tạo booking và quản lý vòng đời đơn
Quy ước chungChuẩn định dạng ngày, tiền tệ và cơ chế phân trang
Môi trườngKhác biệt dữ liệu giữa môi trường UAT và sản xuất
Xuất vé và đơn hàngQuy trình xác nhận xuất vé điện tử