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.
Bir rezervasyon, 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 alanları olabileceği anlamına gelir.
Uygun uygulamayı belirlemek için önce envanterinizin hangi kategoriye denk geldiğini belirleyin:
- Yalnızca eşzamanlı rezervasyonları etkinleştirme: Tüm satıcılar ve hizmetler anında onaylanır.
- Eşzamansız rezervasyonları etkinleştirme: Satıcıların ve hizmetlerin bazıları veya tümü, satıcılara manuel onay verilmesini gerektirir.
Eşzamansız rezervasyon ölçütleri
- İşlemler Merkezi'nde 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 rezervasyonları kabul edip etmediğini belirlemek için kullanıcı adına satıcının aranmasına izin verilmez.
- Satıcının yeni rezervasyon zamanı teklifi desteklenmez. Rezervasyon isteği orijinal haliyle kabul edilmeli veya reddedilmelidir.
Yalnızca eşzamanlı rezervasyonları etkinleştirme
Standart uygulama varsayılan olarak eşzamanlı rezervasyonlara ayarlanır. Daha fazla bilgi için lütfen Rezervasyonlar Uçtan Uca entegrasyon belgelerine 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: Müsaitlik durumu alanlarının tüm temsillerinde artık, söz konusu müsaitlik durumu aralığı rezervasyonlarının nasıl onaylandığını açıklayan bir
confirmation_mode
alanı bulunmaktadır. Aşağıdakiler için her kullanılabilirlik slotununconfirmation_mode
değerini belirtin:- Stok Durumu Feed'inde
confirmation_mode
, kullanılabilirlik düzeyinde belirtilmiştir - Booking Server API yöntemlerinde
confirmation_mode
, alan düzeyinde belirtilir - Real-Time Updates API yöntemlerinde
confirmation_mode
, kullanılabilirlik düzeyinde belirtilir
- Stok Durumu Feed'inde
- Rezervasyon durumu: Rezervasyonların tüm temsillerinde, rezervasyonun durumunu temsil eden bir
status
alanı bulunur.PENDING_CONFIRMATION
,DECLINED_BY_MERCHANT
veFAILED
olmak üzere üç yeni eşzamansız durum değeri kullanıma sunuldu. Eşzamansız rezervasyonlarla ilgili oluşturma, ret ve hata işlemlerini işlerken bu yeni durum değerlerini kullanın. - Rezervasyon güncellemeleri: Rezervasyonların durumuyla ilgili eşzamansız güncellemeler, Booking Notification API'nin bookings.patch yöntemi üzerinden 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ışı](https://developers-dot-devsite-v2-prod.appspot.com/static/actions-center/images/enabling_async_1.png?authuser=6&hl=tr)
- Müsaitlik durumu feed'leri, her müsaitlik durumu aralığının onay modu belirtilecek ş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 bulunması önemlidir.
BatchAvailabilityLookup
veyaCheckAvailability
çağrıldığında, onay modunu ve ideal olarak aynı onay modunun döndürülmesi sağlanır. Bu, kullanıcıya uygun mesajın gösterilmesini sağlar.CreateBooking
çağrıldığında, beklenen onay modunu belirtmek için onay modunu iletiriz. Eşzamansız rezervasyon isteği gönderildiğinde, rezervasyonPENDING_MERCHANT_CONFIRMATION
durumuyla döndürülür.- Satıcı bir rezervasyon isteğini kabul ettiğinde veya reddettiğinde rezervasyon durumu, gerçek zamanlı güncelleme Booking Notification API'nin bookings.patch yöntemiyle güncellenir. Zamanında yanıtlanmayan rezervasyonları otomatik olarak reddetmek istiyorsanız bunu aynı gerçek zamanlı güncelleme yöntemini kullanarak yapın.
Stok Durumu Feed'leri
Kullanılabilirlik feed'inde, her bir 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 belirtilmemişse onay modunun eşzamanlı olduğu varsayılsa da yanlışlıkla yapılan ihmallerle ilgili karışıklığı ortadan kaldırdığı için açıkça bir mod belirtilmesi önerilir.
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) içinde, müsaitlik durumu feed'inde belirtilen ve BatchAvailabilityLookupRequest
ya da 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 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 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, rezervasyonun CreateBookingRequest'te sağlanan toplama dönemi 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. Lütfen confirmation_mode
değerinin kullanıcı tarafından ve Google ile Rezervasyon'un kullanıcının kafasını karıştırmamak için 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 kullanıcıların mevcut bir rezervasyonda yaptığı 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
Stok durumu güncellemeleri için confirmation_mode
belirtilmelidir. Bu, aşağıdaki yöntemler için geçerlidir:
Envanter RTU'su (SwapServiceAvailability veya BatchPlaceServiceAvailability)
availability.replace
(toplu) yöntemini veya services.availability.replace
yöntemini kullanarak confirmation_mode
öğesini Availability
içinde 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
Rezervasyon durumunda eşzamansız güncellemeler, Booking Notification API bookings.patch yöntemi üzerinden 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 | iş ortağı, satıcıyla yapılan 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ı olması durumunda rezervasyon durumunu FAILED
olarak ayarlayın ve rezervasyon_failuresini 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, kullanıcılara gönderilen rezervasyonun durumuyla ilgili beş olası e-posta vardır.
PENDING_MERCHANT_CONFIRMATION
CONFIRMED
DECLINED_BY_MERCHANT
FAILED
CANCELED