Bật tính năng đặt trước không đồng bộ

Lượt đặt phòng đồng bộ được xác định là những lượt đặt phòng đã được xác nhận hoặc từ chối theo thời gian thực.

Lượt đặt trước không đồng bộ là các lượt đặt trước mà người bán xác nhận hoặc từ chối sau này.

Lượt đặt phòng được chỉ định là đồng bộ hoặc không đồng bộ ở cấp tình trạng phòng. Điều này cũng có nghĩa là đối với một người bán và dịch vụ cụ thể, có thể có cả vùng tình trạng còn hàng đồng bộ và không đồng bộ.

Để xác định cách triển khai phù hợp, trước tiên, hãy xác định danh mục của bạn thuộc danh mục nào:

Tiêu chí đặt phòng không đồng bộ

  • Tính năng đặt phòng không đồng bộ trên tính năng Đặt chỗ bằng Google không được hỗ trợ.
  • Chúng tôi không hỗ trợ những lượt đặt trước không đồng bộ có yêu cầu thanh toán.
  • Người bán phải có thể chấp nhận hoặc từ chối lượt đặt trước thông qua hệ thống trực tuyến của đối tác (ví dụ: bảng điều khiển của nhà hàng cho nhà hàng). Việc gọi cho người bán thay mặt người dùng để xác định xem người bán có chấp nhận hoặc không cho phép đặt hàng không.
  • Hệ thống không hỗ trợ đề xuất của người bán về thời gian đặt trước mới. Yêu cầu đặt phòng phải được chấp nhận hoặc bị từ chối ở trạng thái ban đầu.

Chỉ cho phép đặt trước đồng bộ

Phương thức triển khai chuẩn được áp dụng cho các lượt đặt phòng đồng bộ. Vui lòng tham khảo hướng dẫn tích hợp toàn diện để biết thêm thông tin.

Bật tính năng đặt trước không đồng bộ

Nếu một số hoặc tất cả người bán sử dụng quy trình đặt phòng không đồng bộ, thì bạn cần thực hiện các thay đổi sau:

  • Chế độ xác nhận: Bây giờ, tất cả bản trình bày về tình trạng rảnh/bận đều chứa một trường confirmation_mode, trong đó mô tả cách xác nhận yêu cầu đặt chỗ còn trống. Hãy chỉ định confirmation_mode của mỗi tình trạng rảnh/bận cho các mục sau:

    • Trong Nguồn cấp dữ liệu về tình trạng còn hàng, confirmation_mode được chỉ định ở tình trạng còn hàng
    • Trong các phương thức API Máy chủ đặt phòng, confirmation_mode được chỉ định ở cấp độ vị trí
    • Trong phương thức API cập nhật theo thời gian thực, confirmation_mode được chỉ định ở cấp khả dụng
  • Trạng thái đặt phòng: Tất cả thông tin đặt chỗ đều có trường status đại diện cho trạng thái của lượt đặt phòng. Ba giá trị trạng thái không đồng bộ mới đã được giới thiệu: PENDING_CONFIRMATION, DECLINED_BY_MERCHANTFAILED. Hãy sử dụng các giá trị trạng thái mới này khi xử lý quá trình tạo, từ chối và thất bại trong các lượt đặt trước không đồng bộ.
  • Nội dung cập nhật về lượt đặt phòng: Tất cả nội dung cập nhật không đồng bộ về trạng thái của lượt đặt phòng phải được báo cáo qua phương thức bookings.patch của API Thông báo đặt phòng.

Sơ đồ dưới đây cho thấy cách sử dụng chế độ xác nhận và trạng thái đặt phòng trong một lượt tương tác thông thường của lượt đặt phòng không đồng bộ.

Hình 1: Quy trình đặt phòng không đồng bộ
Hình 1: Quy trình đặt phòng không đồng bộ
  1. Nguồn cấp dữ liệu về tình trạng còn hàng đã được cập nhật để chỉ định chế độ xác nhận của từng khu vực cung cấp. Việc cung cấp thông tin này trong nguồn cấp dữ liệu là rất quan trọng để chúng tôi có thể giải thích sớm bản chất của tính năng đặt phòng cho người dùng trong quy trình này.
  2. Khi BatchAvailabilityLookup hoặc CheckAvailability được gọi, chúng ta sẽ chuyển sang chế độ xác nhận và tốt nhất là nên trả về cùng một chế độ xác nhận. Việc này giúp đảm bảo người dùng thấy thông báo phù hợp.
  3. Khi CreateBooking được gọi, chúng ta sẽ chuyển sang chế độ xác nhận để cho biết chế độ xác nhận dự kiến. Khi yêu cầu đặt phòng không đồng bộ được gửi, yêu cầu đặt phòng sẽ được trả về với trạng thái PENDING_MERCHANT_CONFIRMATION.
  4. Khi người bán chấp nhận hoặc từ chối yêu cầu đặt trước, trạng thái đặt phòng sẽ được cập nhật thông qua phương thức bookings.patch của API Thông báo đặt phòng theo thời gian thực. Nếu bạn muốn tự động từ chối những lượt đặt phòng không được phản hồi kịp thời, hãy làm như vậy thông qua cùng một phương thức cập nhật theo thời gian thực.

Nguồn cấp dữ liệu về tình trạng còn hàng

Trong nguồn cấp dữ liệu về tình trạng còn hàng, hãy chỉ định xem mỗi vị trí có đồng bộ hoặc không đồng bộ hay không. Để thực hiện việc này, hãy đặt trường confirmation_mode mới.

// Mode by which bookings for an availability slot are confirmed.
//
enum ConfirmationMode {
  // The confirmation mode was not specified.
  // Synchronous confirmation will be assumed.
  CONFIRMATION_MODE_UNSPECIFIED = 0;
  // Bookings for this availability will be confirmed synchronously.
  CONFIRMATION_MODE_SYNCHRONOUS = 1;
  // Bookings for this availability will be confirmed asynchronously.
  CONFIRMATION_MODE_ASYNCHRONOUS = 2;
}

Mặc dù chế độ xác nhận được giả định là đồng bộ nếu không có chế độ nào được chỉ định, nhưng bạn nên chỉ định rõ chế độ vì việc này sẽ giúp tránh mọi nhầm lẫn về việc bỏ sót do nhầm lẫn.

Không đồng bộ

{
  "availability": [
    {
      "merchant_id": "10001",
      "service_id": "1000",
      "spots_open": 3,
      "spots_total": 3,
      "duration_sec": 3600,
      "start_sec": 1535806800,
      "resources": {
        "party_size": 4
      },
      "confirmation_mode": "CONFIRMATION_MODE_ASYNCHRONOUS"
    }
  ]
}

Đồng bộ hoá

{
  "availability": [
    {
      "merchant_id": "10001",
      "service_id": "1000",
      "spots_open": 3,
      "spots_total": 3,
      "duration_sec": 3600,
      "start_sec": 1535806800,
      "resources": {
        "party_size": 4
      },
      "confirmation_mode": "CONFIRMATION_MODE_SYNCHRONOUS"
    }
  ]
}

Đồng bộ hoá và đồng bộ hoá

{
  "availability": [
    {
      "merchant_id": "10001",
      "service_id": "1000",
      "spots_open": 3,
      "spots_total": 3,
      "duration_sec": 3600,
      "start_sec": 1535806800,
      "resources": {
        "party_size": 4
      },
      "confirmation_mode": "CONFIRMATION_MODE_SYNCHRONOUS"
    },
    {
      "merchant_id": "10002",
      "service_id": "1000",
      "spots_open": 4,
      "spots_total": 4,
      "duration_sec": 3600,
      "start_sec": 1535806800,
      "resources": {
        "party_size": 2
      },
      "confirmation_mode": "CONFIRMATION_MODE_ASYNCHRONOUS"
    }

  ]
}

Máy chủ đặt phòng

BatchAvailabilityLookup hoặc CheckAvailability

Trong BatchAvailabilityLookupResponse (BAL) hoặc CheckAvailabilityResponse (CA), hãy trả về cùng một confirmation_mode như đã chỉ định trong nguồn cấp dữ liệu về tình trạng còn hàng và chuyển qua BatchAvailabilityLookupRequest hoặc CheckAvailabilityRequest.

BAL-không đồng bộ

{
  "slot_time_availability": [
    {
      "slot_time": {
        "duration_sec": "3600",
        "resource_ids": {
          "party_size": 3
        },
        "service_id": "1000",
        "start_sec": "1546458300",
        "confirmation_mode": "CONFIRMATION_MODE_ASYNCHRONOUS"
      },
      "available": true
    }
  ]
}

Đồng bộ hóa BAL

{
  "slot_time_availability": [
    {
      "slot_time": {
        "duration_sec": "3600",
        "resource_ids": {
          "party_size": 3
        },
        "service_id": "1000",
        "start_sec": "1546458300",
        "confirmation_mode": "CONFIRMATION_MODE_SYNCHRONOUS"
      },
      "available": true
    }
  ]
}

Không đồng bộ hóa CA

{
  "slot": {
    "duration_sec": "3600",
    "merchant_id": "317652",
    "resources": {
      "party_size": 3
    },
    "service_id": "1000",
    "start_sec": "1546458300",
    "confirmation_mode": "CONFIRMATION_MODE_ASYNCHRONOUS"
  },
  "count_available": 1,
  "duration_requirement": "DO_NOT_SHOW_DURATION"
}

Đồng bộ hoá CA

{
  "slot": {
    "duration_sec": "3600",
    "merchant_id": "317652",
    "resources": {
      "party_size": 3
    },
    "service_id": "1000",
    "start_sec": "1546458300",
    "confirmation_mode": "CONFIRMATION_MODE_SYNCHRONOUS"
  },
  "count_available": 1,
  "duration_requirement": "DO_NOT_SHOW_DURATION"
}

Tạo đặt chỗ

Hãy đảm bảo trả về trạng thái chính xác cho lượt đặt phòng bằng cách sử dụng các lựa chọn có sẵn bên dưới:

// Status of a booking.
//
// Updating booking status does not change the status of the associated payment.
// Prepayment status updates should be done using the PrepaymentStatus enum.
enum BookingStatus {
  // Not specified.
  BOOKING_STATUS_UNSPECIFIED = 0;
  // Booking has been confirmed
  CONFIRMED = 1;
  // Booking is awaiting confirmation by the merchant before it can transition
  // into CONFIRMED status. Only applicable to non-payments Dining or
  // Beauty verticals.
  PENDING_MERCHANT_CONFIRMATION = 2;
  // Booking has been canceled on behalf of the user.
  // The merchant can still trigger a manual refund.
  CANCELED = 3;
  // User did not show for the appointment
  NO_SHOW = 4;
  // User did not show for the appointment in violation of the cancellation
  // policy.
  NO_SHOW_PENALIZED = 5;
  // Booking could not be completed by the async backend due to a failure.
  FAILED = 6;
  // Booking was asynchronously declined by the merchant. Only applicable to
  // non-payments Dining or Beauty verticals.
  DECLINED_BY_MERCHANT = 7;
}

Trong CreateBookingResponse, hãy trả về confirmation_mode hiện tại cho vị trí tổng hợp của yêu cầu đặt phòng được cung cấp trong CreateBookingRequest. Ngoài ra, khi lượt đặt phòng không đồng bộ, hãy đặt status thành PENDING_MERCHANT_CONFIRMATION. Hãy đảm bảo confirmation_mode là nội dung mà người dùng dự kiến và những tính năng Đặt chỗ bằng Google dự kiến sẽ tránh gây nhầm lẫn cho người dùng.

Không đồng bộ

{
  "booking": {
    "slot": {
      "duration_sec": "3600",
      "merchant_id": "100001",
      "resources": {
        "party_size": 2
      },
      "service_id": "1000",
      "start_sec": "1546647234",
      "confirmation_mode": "CONFIRMATION_MODE_ASYNCHRONOUS"
    },
    "user_information": {
      "email": "johnsmith@gmail.com",
      "family_name": "John",
      "given_name": "Smith",
      "telephone": "+1 800-123-4567",
      "user_id": "2017492857928759285"
    },
    "payment_information": {
      "prepayment_status": "PREPAYMENT_NOT_PROVIDED"
    },
    "status": "PENDING_MERCHANT_CONFIRMATION"
  }
}

Đồng bộ hoá

{
  "booking": {
    "slot": {
      "duration_sec": "3600",
      "merchant_id": "100001",
      "resources": {
        "party_size": 2
      },
      "service_id": "1000",
      "start_sec": "1546647234",
      "confirmation_mode": "CONFIRMATION_MODE_SYNCHRONOUS"
    },
    "user_information": {
      "email": "johnsmith@gmail.com",
      "family_name": "John",
      "given_name": "Smith",
      "telephone": "+1 800-123-4567",
      "user_id": "2017492857928759285"
    },
    "payment_information": {
      "prepayment_status": "PREPAYMENT_NOT_PROVIDED"
    },
    "status": "CONFIRMED"
  }
}

Cập nhật đặt chỗ

Trong bản phát hành không đồng bộ ban đầu, người dùng không thể sử dụng tính năng sửa đổi đặt phòng hiện có. Thay vào đó, người dùng nên hủy lượt đặt trước và tạo một lượt đặt phòng mới.

Thông tin cập nhật theo thời gian thực

Để biết khả năng cập nhật theo thời gian thực về tính sẵn có, bạn phải chỉ định confirmation_mode. Điều này áp dụng cho các phương thức sau:

RTU khoảng không quảng cáo (ReplaceServiceAvailability hoặc BatchReplaceServiceAvailability)

Sử dụng phương thức availability.replace (Batch) hoặc phương thức services.availability.replace, đặt confirmation_mode thành CONFIRMATION_MODE_ASYNCHRONOUS trong Availability

Không đồng bộ

{
  "extendedServiceAvailability": [
    {
      "merchantId": "1001",
      "serviceId": "12310",
      "startTimeRestrict": "2014-10-02T15:01:23.045123456Z",
      "endTimeRestrict": "2014-10-02T19:01:23.045123456Z",
      "availability": [
        {
          "startTime": "2014-10-02T15:30:00.00Z",
          "duration": "3600s",
          "spotsOpen": "0",
          "spotsTotal": "2",
          "availabilityTag": "1000001",
          "confirmation_mode": "CONFIRMATION_MODE_ASYNCHRONOUS"
        }
      ]
    }
  ]
}

Đồng bộ hoá

{
  "extendedServiceAvailability": [
    {
      "merchantId": "1001",
      "serviceId": "12310",
      "startTimeRestrict": "2014-10-02T15:01:23.045123456Z",
      "endTimeRestrict": "2014-10-02T19:01:23.045123456Z",
      "availability": [
        {
          "startTime": "2014-10-02T15:30:00.00Z",
          "duration": "3600s",
          "spotsOpen": "0",
          "spotsTotal": "2",
          "availabilityTag": "1000001",
          "confirmation_mode": "CONFIRMATION_MODE_SYNCHRONOUS"
        }
      ]
    }
  ]
}

Đồng bộ hoá và đồng bộ hoá

{
  "extendedServiceAvailability": [
    {
      "merchantId": "1001",
      "serviceId": "12310",
      "startTimeRestrict": "2014-10-02T15:01:23.045123456Z",
      "endTimeRestrict": "2014-10-02T19:01:23.045123456Z",
      "availability": [
        {
          "startTime": "2014-10-02T15:30:00.00Z",
          "duration": "3600s",
          "spotsOpen": "0",
          "spotsTotal": "2",
          "availabilityTag": "1000001",
          "confirmation_mode": "CONFIRMATION_MODE_ASYNCHRONOUS"
        },
        {
          "startTime": "2014-10-03T11:00:00.00Z",
          "duration": "5400s",
          "spotsOpen": "1",
          "spotsTotal": "1",
          "availabilityTag": "1000002",
          "confirmation_mode": "CONFIRMATION_MODE_SYNCHRONOUS"
        }
      ]
    }
  ]
}

API Thông báo đặt trước

Bạn cần cập nhật không đồng bộ trạng thái đặt phòng thông qua phương thức bookings.patch của API Thông báo đặt phòng.

Khi cập nhật trạng thái, hãy nhớ bao gồm tên trường status trong updateMask.

Trạng thái Mô tả
ĐÃ XÁC NHẬN người bán đã xác nhận yêu cầu đặt chỗ
KHÔNG THÀNH CÔNG đối tác không thể xác nhận hoặc từ chối đặt trước với người bán
Để __ đựng_ nhà_xuất_hiện người bán đã từ chối đơn đặt hàng
Request:
PATCH https://mapsbooking.googleapis.com/v1alpha/notification/partners/<PARTNER_ID>/bookings/<BOOKING_ID>?updateMask=status

Body:
{"name":"partners/<PARTNER_ID>/bookings/<BOOKING_ID>", "status":"DECLINED_BY_MERCHANT"}

Trong trường hợp lượt đặt phòng không thành công, hãy đặt trạng thái lượt đặt phòng thành FAILED và chỉ định lượt đặt phòng không thành công. Nếu bạn đặt trạng thái thành bất kỳ giá trị nào khác, thì booking_failure sẽ bị bỏ qua.

Request:
PATCH https://mapsbooking.googleapis.com/v1alpha/notification/partners/<PARTNER_ID>/bookings/<BOOKING_ID>?updateMask=status&booking_failure.cause="SLOT_UNAVAILABLE"

Body:
{"name":"partners/<PARTNER_ID>/bookings/<BOOKING_ID>", "status":"FAILED"}

Thông báo qua email

Đối với các lượt đặt trước không đồng bộ, có thể có 5 email liên quan đến trạng thái của yêu cầu đặt chỗ được gửi đến người dùng.

  • PENDING_MERCHANT_CONFIRMATION
  • CONFIRMED
  • DECLINED_BY_MERCHANT
  • FAILED
  • CANCELED