Eşzamansız rezervasyonları etkinleştirme

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.

Randevu, müsaitlik durumu düzeyinde eşzamanlı veya eşzamansız olarak belirtilir. Bu, belirli bir satıcı ve hizmet için hem eşzamanlı hem de eşzamansız kullanılabilirlik alanları olabileceği anlamına gelir.

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

Eşzamansız rezervasyon ölçütleri

  • Google ile Rezervasyon'da eşzamansız rezervasyonda değişiklik yapılması desteklenmez.
  • Ödeme gerektiren eşzamanlı rezervasyonlar desteklenmez.
  • Satıcılar, iş ortağının online sisteminden (ör. restoran için barındırma paneli) rezervasyonu kabul edebilmeli veya reddedebilmelidir. Satıcının bir rezervasyonu kabul edip etmediğini belirlemek için kullanıcı adına satıcıyı aramasına izin verilmez.
  • Yeni rezervasyon zamanı için satıcı teklifi desteklenmez. Rezervasyon isteği, orijinal durumda kabul edilmeli veya reddedilmelidir.

Yalnızca eşzamanlı rezervasyonları etkinleştirme

Standart uygulamada varsayılan olarak eşzamanlı rezervasyonlar kullanılır. Daha fazla bilgi için lütfen uçtan uca entegrasyon kılavuzuna bakın.

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: Kullanılabilirlik slotlarının tüm temsilleri artık bu müsaitlik durumu rezervasyonlarının nasıl onaylandığını açıklayan bir confirmation_mode alanı içermektedir. Aşağıdakiler için her bir kullanılabilirlik alanının confirmation_mode özelliğini belirtin:

    • Stok Durumu Feed'inde confirmation_mode, stok durumu düzeyinde belirtilir
    • Booking Server API yöntemlerinde confirmation_mode, alan düzeyinde belirtilir
    • Real-Time Updates API yöntemlerinde confirmation_mode, kullanılabilirlik düzeyinde belirtilir
  • Rezervasyon durumu: Tüm rezervasyon beyanları, rezervasyonun durumunu temsil eden bir status alanını içerir. Üç yeni eşzamansız durum değeri kullanıma sunuldu: PENDING_CONFIRMATION, DECLINED_BY_MERCHANT ve FAILED. Eşzamansız rezervasyonların oluşturulma, reddedilme ve başarısızlıklarını işlerken bu yeni durum değerlerini kullanın.
  • Rezervasyon güncellemeleri: Rezervasyonların durumuyla ilgili tüm eşzamansız güncellemeler, Booking Notification API'nin bookings.patch yöntemi kullanılarak bildirilmelidir.

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

Şekil 1: Eşzamansız rezervasyon akışı
Şekil 1: Eşzamansız rezervasyon akışı
  1. Müsaitlik durumu feed'leri, her bir müsaitlik durumu alanının onay modunun belirtileceği şekilde güncellendi. Rezervasyonun eşzamansız yapısının, akışın başlarında kullanıcıya açıklanabilmesi için bu bilgilerin feed'de bulunması önemlidir.
  2. BatchAvailabilityLookup veya CheckAvailability çağrıldığında onay modunu ve iade edilmesi için aynı onay modunu geçiririz. Bu, kullanıcıya uygun mesajın gösterilmesini sağlar.
  3. CreateBooking çağrıldığında, beklenen 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 gerçek zamanlı güncelleme Booking Notification API'nin bookings.patch yöntemi kullanılarak rezervasyon durumu güncellenir. Zamanında yanıtlanmayan rezervasyonların otomatik olarak reddedilmesini istiyorsanız bu işlemi 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;
}

Herhangi bir mod belirtilmezse onay modunun eşzamanlı olacağı düşünülse de, yanlışlıkla yapılan eksikliklerle ilgili tüm karışıklıklar ortadan kalkacağı için 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 Senkronizasyon

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

BatchAvailabilitySearch veya CheckAvailability

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

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

Rezervasyon

Aşağıdaki mevcut seçenekleri kullanarak rezervasyon için doğru durumu döndürdüğünüzden 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 öğesinde, CreateBookingRequest'te sağlanan rezervasyonun toplu alanı için geçerli confirmation_mode değerini döndürün. Ayrıca, rezervasyon eşzamansız olduğunda status öğesini PENDING_MERCHANT_CONFIRMATION olarak ayarlayın. Lütfen kullanıcının ve Google ile Rezervasyon'un kullanıcının kafasını karıştırmamak için neler beklediğinden emin olun. confirmation_mode

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

Güncelleme Rezervasyonu

Eş zamansızlığın ilk sürümünde, kullanıcıların mevcut bir rezervasyonda yaptığı değişiklikler desteklenmez. Bunun yerine, kullanıcının rezervasyonu iptal edip yeni bir rezervasyon oluşturması gerekir.

Gerçek Zamanlı Güncellemeler

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

Envanter RTU (ChangeServiceAvailability veya BatchChangeServiceAvailability)

availability.replace (toplu) yöntemini veya services.availability.replace yöntemini kullanarak Availability içinde confirmation_mode değerini 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 Senkronizasyon

{
  "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'sı

Rezervasyon durumuyla ilgili eşzamansız güncellemeler, Booking Notification API bookings.patch yöntemi kullanılarak yapılmalıdır.

Durumu güncellerken updateMask alanına status alan adını eklediğinizden emin olun.

Durum Açıklama
ONAYLANDI satıcı rezervasyonu onayladı
BAŞARISIZ İş ortağı, satıcıyla ilgili rezervasyonu onaylayamadı veya reddetti
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ı olması durumunda, rezervasyon durumunu FAILED olarak ayarlayın ve visit_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 rezervasyonlarda, rezervasyonun durumuyla ilgili olarak kullanıcılara gönderilen beş potansiyel e-posta vardır.

  • PENDING_MERCHANT_CONFIRMATION
  • CONFIRMED
  • DECLINED_BY_MERCHANT
  • FAILED
  • CANCELED