Thêm tính năng đặt trước không đồng bộ

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

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

Lượt đặt trước sẽ đượ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ụ nhất định, có thể sẽ có cả khung thời gian đồ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 trong khoảng không quảng cáo của bạn:

Tiêu chí đặt trước không đồng bộ

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

Chỉ bật tính năng đặt trước đồng bộ

Quy trình triển khai chuẩn mặc định là thông tin đặt trước đồng bộ. Vui lòng tham khảo tài liệu tích hợp toàn diện của cuộc hẹ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 trước không đồng bộ, thì bạn cần thực hiện những thay đổi sau:

  • Chế độ xác nhận: Tất cả bản trình bày về khung giờ phát sóng đều có trường confirmation_mode mô tả cách xác nhận các lượt đặt phòng của khung giờ có phòng trống đó. Hãy chỉ định confirmation_mode của từng vị trí phát sóng quảng cáo cho những 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 ở cấp độ tình trạng còn hàng
    • Trong các phương thức của Subscription Server API (API Máy chủ đặt phòng), confirmation_mode được chỉ định ở cấp vùng quảng cáo
    • Trong các 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 của lượt đặt phòng: Tất cả thông tin về lượt đặt phòng đều có trường status cho biết 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 ra mắt: PENDING_CONFIRMATION, DECLINED_BY_MERCHANTFAILED. Sử dụng các giá trị trạng thái mới này khi xử lý lượt tạo, từ chối và lỗi của các lượt đặt trước không đồng bộ.
  • Thông tin cập nhật về yêu cầu đặt phòng: Mọi thông tin cập nhật không đồng bộ về trạng thái của yêu cầu đặt phòng phải được báo cáo thông 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 trước trong một lượt tương tác đặt phòng không đồng bộ thông thường.

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. Chúng tôi đã cập nhật nguồn cấp dữ liệu về tình trạng còn hàng để chỉ định chế độ xác nhận của từng khung thời gian. Điều quan trọng là phải có thông tin này trong nguồn cấp dữ liệu để chúng tôi có thể giải thích tính chất không đồng bộ của việc đặt phòng cho người dùng ngay từ đầu quy trình.
  2. Khi BatchAvailabilityLookup hoặc CheckAvailability được gọi, chúng tôi sẽ chuyển chế độ xác nhận và lý tưởng là cùng một chế độ xác nhận sẽ được trả về. Điều này giúp đảm bảo thông điệp hiển thị phù hợp cho người dùng.
  3. Khi CreateBooking được gọi, chúng tôi sẽ chuyển chế độ xác nhận để cho biết chế độ xác nhận dự kiến. Khi bạn gửi yêu cầu đặt phòng không đồng bộ, lượt đặt phòng đó sẽ được trả về có 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 cập nhật theo thời gian thực. Nếu bạn muốn tự động từ chối các lượt đặt phòng không được phản hồi kịp thời, hãy thực hiện 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 tình trạng còn hàng, hãy chỉ định xem mỗi vị trí đồng bộ hay không đồng bộ. Để làm 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 coi là đồng bộ nếu không có chế độ nào được chỉ định, nhưng bạn nên chỉ định rõ một chế độ để loại bỏ mọi nhầm lẫn về việc bỏ sót ngoài ý muố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"
    }
  ]
}

Không đồng bộ và đồng bộ hóa

{
  "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ư được chỉ định trong nguồn cấp dữ liệu tình trạng còn hàng và được truyền qua BatchAvailabilityLookupRequest hoặc CheckAvailabilityRequest.

Không đồng bộ BAL

{
  "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ộ hoá 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

{
  "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"
}

CreateBooking

Hãy nhớ trả về trạng thái chính xác cho yêu cầu đặt chỗ bằng các lựa chọn có sẵn dưới đây:

// 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 lượt đặt phòng mà bạn cung cấp trong CreateBookingRequest. Ngoài ra, khi yêu cầu đặt phòng không đồng bộ, hãy đặt status thành PENDING_MERCHANT_CONFIRMATION. Hãy đảm bảo confirmation_mode đúng là thông tin mà người dùng và tính năng Đặt chỗ bằng Google mong đợi để 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"
  }
}

UpdateBooking

Trong bản phát hành ban đầu của chế độ không đồng bộ, việc người dùng sửa đổi một lượt đặt trước hiện có không được hỗ trợ. Thay vào đó, người dùng phải huỷ lượt đặt trước và tạo một lượt đặt trước mới.

Bản cập nhật theo thời gian thực

Để cập nhật tình trạng còn hàng theo thời gian thự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 của khoảng không quảng cáo (ReplaceServiceAvailability hoặc BatchReplaceServiceAvailability)

Sử dụng phương thức availability.replace (hàng loạt) 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"
        }
      ]
    }
  ]
}

Không đồng bộ và đồng bộ hóa

{
  "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 phòng

Bạn phải 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ớ thêm tên trường status vào updateMask.

Trạng thái Nội dung mô tả
ĐÃ XÁC NHẬN người bán đã xác nhận yêu cầu đặt hàng
KHÔNG THÀNH CÔNG Đối tác không thể xác nhận hoặc từ chối yêu cầu đặt trước với người bán
DECLINED_BY_MERCHANT người bán đã từ chối yêu cầu đặt trước
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 đặt phòng không thành công, hãy đặt trạng thái đặt phòng thành FAILED và chỉ định lỗi booking_failure. Nếu trạng thái được đặt 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 yêu cầu đặt trước không đồng bộ, có 5 email tiềm năng liên quan đến trạng thái của yêu cầu đặt trước được gửi cho người dùng.

  • PENDING_MERCHANT_CONFIRMATION
  • CONFIRMED
  • DECLINED_BY_MERCHANT
  • FAILED
  • CANCELED