Eşzamansız rezervasyon ekleme

Senkronize rezervasyonlar, gerçek zamanlı olarak onaylanan veya reddedilenler olarak tanımlanır.

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

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

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

Asenkron rezervasyon ölçütleri

  • İşlem Merkezi'nde eşzamansız rezervasyonların değiştirilmesi desteklenmez.
  • Satıcılar, rezervasyonu iş ortağının online sistemi (ör. restoranın barındırma 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ı aramaya izin verilmez.
  • Satıcının yeni bir rezervasyon zamanı teklifi desteklenmez. Rezervasyon isteği, orijinal durumda kabul edilmeli veya reddedilmeli.

Yalnızca senkronize rezervasyonları etkinleştirme

Standart uygulamada varsayılan olarak eşzamanlı rezervasyonlar kullanılır. Daha fazla bilgi için lütfen Randevu Sondan Sona Entegrasyon belgelerine 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 durumu aralıklarının tüm temsilleri artık bu müsaitlik durumu aralığının rezervasyonlarının nasıl onaylandığını açıklayan bir confirmation_mode alanı içerir. Aşağıdakiler için her bir müsaitlik süresi confirmation_mode değerini belirtin:

    • Stok durumu feed'inde confirmation_mode, stok durumu düzeyinde belirtilir
    • Rezervasyon sunucusu API yöntemlerinde confirmation_mode, aralık 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 temsil eden 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ını, reddedilmesini ve başarısızlığını işlerken bu yeni durum değerlerini kullanın.
  • Rezervasyon güncellemeleri: Rezervasyonların durumunda yapılan tüm asenkron güncellemeler, Booking Notification API'nin bookings.patch yöntemi aracılığıyla bildirilmelidir.

Aşağıdaki diyagramda, onay modunun ve rezervasyon durumunun tipik bir asenkron rezervasyon etkileşiminde nasıl kullanıldığı gösterilmektedir.

Şekil 1: Zaman uyumsuz rezervasyon akışı
Şekil 1: Eşzamansız rezervasyon akışı
  1. Stok durumu feed'leri, her stok durumu aralığının onay modunun belirtilmesi için güncellendi. Bu bilgilerin feed'de yer alması önemlidir. Böylece, rezervasyonun akışın başlarında kullanıcıya asenkron doğasını açıklayabiliriz.
  2. BatchAvailabilityLookup veya CheckAvailability çağrıldığında onay modunu ve ideal olarak da döndürülecek aynı onay modunu iletiriz. Bu sayede kullanıcıya uygun mesajlar gösterilir.
  3. CreateBooking işlevi çağrıldığında, beklenen onay modunu belirtmek için onay modunu iletiriz. 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, Booking Notification API'nin bookings.patch yöntemi aracılığıyla gerçek zamanlı güncellemeyle güncellenir. Zamanında yanıtlanmayan rezervasyonları otomatik olarak reddetmek istiyorsanız bunu aynı gerçek zamanlı güncelleme yöntemiyle yapın.

Kullanılabilirlik Feed'leri

Müsaitlik durumu feed'inde, her bir yuvanın senkronize mi 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 senkronize olduğu varsayılır. Ancak, yanlışlıkla atlananlarla ilgili kafa karışıklığını ortadan kaldırdığı için bir 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 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) bölümünde, stok durumu feed'inde belirtildiği ve BatchAvailabilityLookupRequest veya CheckAvailabilityRequest üzerinden 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 alanında, CreateBookingRequest'ta sağlanan rezervasyonun toplu alanı için geçerli confirmation_mode değerini döndürün. Ayrıca, rezervasyon eşzamanlı değilse status değerini PENDING_MERCHANT_CONFIRMATION olarak ayarlayın. Kullanıcının kafasını karıştırmamak için lütfen confirmation_mode değerinin hem kullanıcının hem de 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

Asynkron işlevin ilk sürümünde, kullanıcıların mevcut rezervasyonlarda 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

Stok durumuyla ilgili anlık 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 Availabilityconfirmation_modeCONFIRMATION_MODE_ASYNCHRONOUS

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

Booking Notification API

Rezervasyon durumundaki eşzamansız güncellemeler, Rezervasyon Bildirimi API'si bookings.patch yöntemi aracılığıyla yapılmalıdır.

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

Durum Açıklama
ONAYLANDI Satıcı rezervasyonu onayladı
BAŞARISIZ iş ortağı, rezervasyonu satıcıyla onaylayamadı veya reddedemez.
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 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

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