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

Yêu cầu đặt phòng đồng bộ được định nghĩa là các yêu cầu đặ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ộ được định nghĩa là những lượt đặt trước mà người bán xác nhận hoặc từ chối sau đó.

Việc đăng ký được chỉ định đồng bộ hoặc không đồng bộ tại cấp độ khả dụ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ể có cả khe khả dụ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 nào kho hàng của bạn thuộc:

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

  • Việc sửa đổi việc đặt lịch hẹn không đồng bộ trên Actions Center không phải là được hỗ trợ.
  • Người bán có thể chấp nhận hoặc từ chối yêu cầu đặ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 lưu trữ của nhà hàng). 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 từ chối lượt đặt phòng không được phép.
  • Đề xuất của người bán về thời gian đặt trước mới không được hỗ trợ. Chiến lược phát hành đĩa đơn 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ỉ cho phép đặt trước đồng bộ

Phương thức triển khai chuẩn mặc định áp dụng cho các lượt đặt trước đồng bộ. Vui lòng tham khảo ý kiến tài liệu tích hợp Toàn bộ Cuộc hẹn để biết thêm thông tin.

Bật tính năng đặt phòng 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ộ, cần thực hiện những thay đổi sau:

  • Chế độ xác nhận: Hiện mọi bản trình bày của khung giờ trống chứa trường confirmation_mode mô tả cách đặt phòng của vị trí còn trống đó được xác nhận. Chỉ định confirmation_mode của mỗi khung giờ trống trong sau:

    • Trong Nguồn cấp dữ liệu về tình trạng còn hàng, confirmation_mode được chỉ định ở mức độ sẵn có
    • Trong các phương thức của API máy chủ đặt phòng, confirmation_mode được chỉ định là cấp độ vị trí
    • Trong phương thức Real-Time Updates API (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ả nội dung đại diện cho lượt đặt phòng đều có Trường status thể hiện trạng thái của yêu cầu đặt phòng. Ba lần các giá trị trạng thái không đồng bộ mới đã được giới thiệu: 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 phòng không đồng bộ.
  • Nội dung cập nhật đặt chỗ: Tất cả các cập nhật không đồng bộ đối với trạng thái của Lượt đặt phòng phải được báo cáo qua API Thông báo đặt phòng bookings.patch.

Sơ đồ dưới đây cho biết cách hệ thống sử dụng chế độ xác nhận và trạng thái đặt vé 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. Nguồn cấp dữ liệu về tình trạng còn hàng đã được cập nhật để chế độ xác nhận đã được chỉ định. Bạn cần 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 không đồng bộ của việc đặt phòng người dùng ngay từ đầu trong luồng.
  2. Thời gian BatchAvailabilityLookup hoặc CheckAvailability sẽ được gọi, chúng ta sẽ chuyển qua chế độ xác nhận và lý tưởng nhất là cùng một chế độ xác nhận để bị trả lại. Điều này giúp đảm bảo người dùng nhìn thấy thông báo phù hợp.
  3. Thời gian CreateBooking được gọi, chúng tôi sẽ chuyển chế độ xác nhận sang biểu thị chế độ xác nhận dự kiến. Khi việc đặt vé không đồng bộ yêu cầu được gửi, yêu cầu đặt phòng được trả về cùng 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, yêu cầu đặt chỗ đó được cập nhật qua bookings.patch. 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 một cách kịp thời, thực hiện việc đó qua cùng một bản 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 từng vùng là đồng bộ hay không đồng bộ. Để làm việc này, hãy đặt 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 bạn nên chỉ định rõ một chế độ vì giúp loại bỏ mọi nhầm lẫn về việc vô tình bỏ sót.

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ộ 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

Tra cứu BatchTình trạng hoặc CheckTình trạng còn hàng

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

BAL-Async

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

CA-Async

{
  "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 đảm bảo trả lại trạng thái chính xác của yêu cầu đặt phòng bằng cách sử dụng 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, trả về confirmation_mode hiện tại cho khung giờ tổng hợp đã cung cấp của yêu cầu đặt phòng trong CreateResetRequest. Ngoài ra, khi việc đặt phòng không đồng bộ, đặt status thành PENDING_MERCHANT_CONFIRMATION. Vui lòng đảm bảo rằng confirmation_mode là những gì người dùng và những gì Đặt trước với Google muốn 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 không đồng bộ ban đầu, người dùng sẽ 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 cần huỷ yêu cầu đặt chỗ và tạo một đặt chỗ mới.

Cập nhật theo thời gian thực

Để biết thông tin cập nhật theo thời gian thực về tình trạng còn hàng, confirmation_mode cần được chỉ định. Điều này áp dụng cho các phương thức sau:

RTU khoảng không quảng cáo (ReplaceServiceTình trạng hoặc BatchReplaceServiceAvailability)

Sử dụng Phương thức availability.replace (theo lô) 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ộ 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 phải cập nhật không đồng bộ trạng thái đặt phòng thông qua tính năng Đặt phòng Phương thức bookings.patch của API thông báo.

Khi cập nhật trạng thái, hãy nhớ thê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 việc đặt trước
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 chỗ với người bán
DECLINED_BY_MERCHANT người bán đã từ chối lượt đặ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à hãy chỉ định booking_failure. Nếu trạng thái được đặt thành bất kỳ trạng thái 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ó 5 email tiềm năng liên quan đến trạng thái của lượt đặt phòng được gửi đến người dùng.

  • PENDING_MERCHANT_CONFIRMATION
  • CONFIRMED
  • DECLINED_BY_MERCHANT
  • FAILED
  • CANCELED