Eşzamansız rezervasyon ekleme

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

Asenkron rezervasyonlar, satıcının daha sonra onayladığı veya reddettiği rezervasyonlar olarak tanımlanır.

Rezervasyon, uygunluk düzeyinde senkron veya asenkron olarak belirtilir. Bu, belirli bir satıcı ve hizmet için hem eşzamanlı hem de eşzamansız kullanılabilirlik aralıkları olabileceği anlamına da gelir.

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

Eşzamansız rezervasyon kriterleri

  • İşlemler Merkezi'nde yapılan asenkron rezervasyonların değiştirilmesi desteklenmez.
  • Satıcılar, rezervasyonu iş ortağının online sistemi (ör. restoran için ana makine paneli) üzerinden kabul edebilir veya reddedebilir. Satıcının rezervasyonu kabul edip etmediğini belirlemek için kullanıcı adına satıcıyı aramak yasaktır.
  • Yeni bir rezervasyon zamanı için satıcı önerisi desteklenmez. Rezervasyon isteği, orijinal durumunda kabul edilmeli veya reddedilmelidir.

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

Standart uygulama varsayılan olarak eşzamanlı rezervasyonları kullanır. Daha fazla bilgi için lütfen Rezervasyonlar Uçtan Uca Entegrasyon dokümanlarına bakın.

Eşzamansız rezervasyonu etkinleştirme

Satıcıların bir kısmı veya tamamı eşzamansız rezervasyon akışı kullanıyorsa aşağıdaki değişikliklerin yapılması gerekir:

  • Onay modu: Müsaitlik aralıklarının tüm gösterimleri artık bu müsaitlik aralığına yapılan rezervasyonların nasıl onaylandığını açıklayan bir confirmation_mode alanı içeriyor. Aşağıdakiler için her bir uygunluk aralığının confirmation_mode değerini belirtin:

    • Stok durumu feed'inde confirmation_mode, stok durumu düzeyinde belirtilir.
    • Rezervasyon Sunucusu API yöntemlerinde confirmation_mode, zaman aralığı düzeyinde belirtilir.
    • Gerçek Zamanlı Güncellemeler API yöntemlerinde confirmation_mode, kullanılabilirlik düzeyinde belirtilir.
  • Rezervasyon durumu: Rezervasyonların tüm temsillerinde, rezervasyonun durumunu gösteren bir status alanı bulunur. Üç yeni eşzamansız durum değeri kullanıma sunuldu: PENDING_CONFIRMATION, DECLINED_BY_MERCHANT ve FAILED. Asenkron rezervasyonların oluşturulması, reddedilmesi ve başarısız olması işlemlerini gerçekleştirirken bu yeni durum değerlerini kullanın.
  • Rezervasyon güncellemeleri: Rezervasyonların durumundaki tüm eşzamansız güncellemeler, Rezervasyon Bildirimi API'sinin bookings.patch yöntemiyle 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. Stok durumu feed'leri, her stok durumu aralığının onay modunu belirtecek şekilde güncellendi. Rezervasyonun eşzamansız yapısını akışın başlarında kullanıcıya açıklayabilmemiz için bu bilgilerin feed'de yer alması önemlidir.
  2. BatchAvailabilityLookup veya CheckAvailability çağrıldığında onay modunu ve ideal olarak aynı onay modunun döndürülmesini iletiriz. Bu sayede kullanıcıya uygun mesaj gösterilir.
  3. When CreateBooking çağrıldığında, beklenen onay modunu belirtmek için onay modunu ile iletiyoruz. Asenkron 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 Rezervasyon Bildirimi API'lerinin bookings.patch yöntemiyle güncellenir. Zamanında yanıtlanmayan rezervasyonları otomatik olarak reddetmek istiyorsanız aynı anlık güncelleme yöntemini kullanın.

Stok Durumu Feed'leri

Uygunluk feed'inde her bir zaman aralığının senkron mu yoksa asenkron mu 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 belirtilmemişse onay modunun senkron olduğu varsayılsa da yanlışlıkla atlanan durumlarla ilgili karışıklığı önlemek için modu açıkça belirtmeniz ö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 eş zamanlı

{
  "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) bölgelerinde, stok durumu feed'inde belirtilen ve BatchAvailabilityLookupRequest veya CheckAvailabilityRequest aracılığıyla iletilen confirmation_mode değerini döndürün.

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

BAL-Sync

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

CA-Sync

{
  "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 seçenekleri kullanarak rezervasyonun doğru durumunu 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 içinde, 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 confirmation_mode değerinin, kullanıcıyı yanıltmamak için kullanıcının ve Google ile Rezervasyon'un beklediği değer olduğundan 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

Asenkron özelliğinin ilk sürümünde, mevcut bir rezervasyonda kullanıcı tarafından yapılan değişiklikler desteklenmez. Bunun yerine, kullanıcı rezervasyonu iptal edip yeni bir rezervasyon oluşturmalıdır.

Gerçek Zamanlı Güncellemeler

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

Envanter RTU'su (ReplaceServiceAvailability veya BatchReplaceServiceAvailability)

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 eş zamanlı

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

Booking Notification API

Rezervasyon durumunda yapılan eşzamansız güncellemeler, Rezervasyon Bildirimi API'sinin bookings.patch yöntemiyle yapılmalıdır.

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

Durum Açıklama
ONAYLANDI satıcı rezervasyonu onayladıysa
BAŞARISIZ iş 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 başarısız olursa rezervasyon durumunu FAILED olarak ayarlayın ve booking_failure'ı 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

Asenkron rezervasyonlarda, rezervasyonun durumuyla ilgili olarak kullanıcılara gönderilebilecek beş olası e-posta vardır.

  • PENDING_MERCHANT_CONFIRMATION
  • CONFIRMED
  • DECLINED_BY_MERCHANT
  • FAILED
  • CANCELED