Eşzamansız rezervasyonlar ekleme

Eşzamanlı rezervasyonlar, gerçek zamanlı olarak onaylanan veya reddedilen rezervasyonlar olarak tanımlanır.

Eşzamansız rezervasyonlar, satıcının daha sonra onayladığı veya reddettiği rezervasyonlar olarak tanımlanır.

Rezervasyonlar, kullanılabilirlik düzeyinde eşzamanlı veya eşzamansız olarak belirtilir. Bu aynı zamanda, belirli bir satıcı ve hizmet için hem eşzamanlı hem de eşzamansız kullanılabilirlik slotları olabileceği anlamına gelir.

Uygun uygulamayı belirlemek için önce envanterinizin hangi kategoriye girdiğini belirleyin:

eşzamansız rezervasyon ölçütleri

  • Actions Center'da eşzamansız rezervasyonların değiştirilmesi desteklenmez.
  • Satıcılar, iş ortağının online sistemi (ör. restoranın barındırma paneli) üzerinden rezervasyonu kabul edebilmeli veya reddedebilmelidir. Satıcının rezervasyon kabul edip etmediğini belirlemek için kullanıcı adına satıcıyı aramasına izin verilmez.
  • Yeni bir rezervasyon zamanıyla ilgili satıcı teklifi desteklenmez. Rezervasyon isteği orijinal haliyle kabul edilmeli veya reddedilmelidir.

Yalnızca eşzamanlı rezervasyonlar etkinleştiriliyor

Standart uygulamada varsayılan olarak eşzamanlı rezervasyonlar kullanılır. Daha fazla bilgi için lütfen Randevu Uçtan Uca entegrasyon belgelerini inceleyin.

Eşzamansız rezervasyonu etkinleştirme

Satıcıların bazıları veya tümü eşzamansız rezervasyon akışı kullanıyorsa aşağıdaki değişikliklerin yapılması gerekir:

  • Onay modu: Müsaitlik durumu slotlarının tüm temsillerinde artık, söz konusu müsaitlik durumu slotunun rezervasyonlarının nasıl onaylandığını açıklayan bir confirmation_mode alanı bulunmaktadır. Aşağıdakiler için her kullanılabilirlik slotunun confirmation_mode değerini belirtin:

    • Müsaitlik Durumu Feed'inde, confirmation_mode, kullanılabilirlik düzeyinde belirtilmektedir
    • Reservation Server API yöntemlerinde confirmation_mode, alan düzeyinde belirtilir
    • Real-Time Updates API yöntemlerinde confirmation_mode, kullanılabilirlik düzeyinde belirtiliyor
  • Rezervasyon durumu: Tüm rezervasyon temsilleri, rezervasyonun durumunu temsil eden bir status alanı içerir. Üç yeni eşzamansız durum değeri kullanıma sunuldu: PENDING_CONFIRMATION, DECLINED_BY_MERCHANT ve FAILED. Eşzamansız rezervasyonlara ait oluşturma, ret ve başarısızlıkları işlerken bu yeni durum değerlerini kullanın.
  • Rezervasyon güncellemeleri: Rezervasyonların durumuyla ilgili eşzamansız tüm güncellemeler, Reservation Notification API'nin bookings.patch yöntemi aracılığıyla bildirilmelidir.

Aşağıdaki şemada, tipik bir eşzamansız rezervasyon etkileşiminde onay modu ve rezervasyon durumunun nasıl kullanıldığı gösterilmektedir.

Şekil 1: eşzamansız rezervasyon akışı
Şekil 1: eşzamansız rezervasyon akışı
  1. Kullanılabilirlik feed'leri, her müsaitlik durumu slotunun onay modu belirtilecek şekilde güncellendi. Bu bilgilerin feed'de bulunması önemlidir. Böylece, rezervasyonun eşzamansız yapısını akışın başlarında kullanıcıya açıklayabiliriz.
  2. BatchAvailabilityLookup veya CheckAvailability çağrıldığında onay modunu ve ideal olarak aynı onay modunu iletiriz. Bu, kullanıcıya uygun mesajın gösterilmesini sağlar.
  3. CreateBooking çağrıldığında, öngörülen onay modunu belirtmek için onay modunu iletiriz. Eşzamansız rezervasyon isteği gönderildiğinde, rezervasyon PENDING_MERCHANT_CONFIRMATION durumuyla döndürülür.
  4. Satıcı bir rezervasyon isteğini kabul ettiğinde veya reddettiğinde rezervasyon durumu, gerçek zamanlı güncelleme Reservation Notification API'nin bookings.patch yöntemi aracılığıyla güncellenir. Zamanında yanıtlanmayan rezervasyonları otomatik olarak reddetmek isterseniz bunu aynı gerçek zamanlı güncelleme yöntemini kullanarak yapın.

Stok Durumu Feed'leri

Müsaitlik durumu feed'inde her alanın eşzamanlı mı yoksa eşzamansız mı olduğunu belirtin. Bunu yapmak için yeni confirmation_mode alanını ayarlayın.

// 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;
}

Hiçbir mod belirtilmezse onay modunun eşzamanlı olduğu varsayılsa da, yanlışlıkla yapılan atlamalarla ilgili karışıklığı ortadan kaldıran bir modun açıkça belirtilmesi önemle tavsiye edilir.

Asenk.

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

Sync

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

Eş Zamansız ve Senkronize

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

  ]
}

Rezervasyon Sunucusu

BatchAvailabilityLookup veya CheckAvailability

BatchAvailabilityLookupResponse (BAL) veya CheckAvailabilityResponse (CA) sisteminde, stok durumu feed'inde belirtilen ve BatchAvailabilityLookupRequest ya da CheckAvailabilityRequest ile iletilen confirmation_mode değerini döndürür.

BAL Eş Zamansız

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

BAL Senkronizasyonu

{
  "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 Eş Zamansız

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

CA Senkronizasyonu

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

Aşağıdaki kullanılabilir seçenekleri kullanarak rezervasyon için doğru durumu ilettiğinizden emin olun:

// 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;
}

CreateBookingResponse içinde, rezervasyonun CreateReservationRequest'te sağlanan toplu slotu için geçerli confirmation_mode değerini döndürün. Ayrıca, rezervasyon eşzamansız olduğunda status özelliğini PENDING_MERCHANT_CONFIRMATION olarak ayarlayın. confirmation_mode'nin kullanıcının kafasını karıştırmamasını beklediği gibi olduğundan ve Google ile Rezervasyon'un kullanıcının kafasını karıştırmamasını beklediğinden emin olun.

Asenk.

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

Sync

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

Eş zamansız sürümün ilk sürümünde, mevcut bir rezervasyonda kullanıcı tarafından yapılan değişiklikler desteklenmez. Bunun yerine, kullanıcının rezervasyonu iptal etmesi ve yeni bir rezervasyon oluşturması gerekir.

Gerçek Zamanlı Güncellemeler

Müsaitliklerle ilgili gerçek zamanlı güncellemeler için confirmation_mode belirtilmelidir. Bu, aşağıdaki yöntemler için geçerlidir:

Envanter RTU (ReplaceServiceAvailability veya BatchReplaceServiceAvailability)

availability.replace (toplu) yöntemini veya services.availability.replace yöntemini kullanarak Availability içinde confirmation_mode öğesini CONFIRMATION_MODE_ASYNCHRONOUS olarak ayarlayın

Asenk.

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

Sync

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

Eş Zamansız ve Senkronize

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

Rezervasyon Bildirimi API'si

Bir rezervasyon durumunda yapılan eşzamansız güncellemeler, Reservation Notification API bookings.patch yöntemi aracılığıyla yapılmalıdır.

Durumu güncellerken status alanının adını updateMask bölümüne eklediğinizden emin olun.

Durum Açıklama
ONAYLANDI satıcı, rezervasyonu onayladı
BAŞARISIZ İş ortağı, satıcıyla rezervasyonu onaylayamadı veya reddedemedi
DECLINED_BY_MERCHANT satıcı, rezervasyonu reddetti
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"}

Rezervasyon hatası durumunda rezervasyon durumunu FAILED olarak ayarlayın ve purchase_failure değerini belirtin. Durum başka bir değere ayarlanırsa booking_failure yoksayılır.

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

E-posta Bildirimleri

Eşzamansız rezervasyonlar için kullanıcılara gönderilen rezervasyonun durumuyla ilgili beş potansiyel e-posta bulunur.

  • PENDING_MERCHANT_CONFIRMATION
  • CONFIRMED
  • DECLINED_BY_MERCHANT
  • FAILED
  • CANCELED