Pemesanan sinkron didefinisikan sebagai pemesanan yang dikonfirmasi atau ditolak secara real-time.
Pemesanan asinkron didefinisikan sebagai pemesanan yang dikonfirmasi atau dikonfirmasi oleh penjual menurun di lain waktu.
Pemesanan ditetapkan sebagai sinkron atau asinkron di tingkat ketersediaan. Hal ini juga berarti bahwa untuk penjual dan layanan tertentu, mungkin ada slot ketersediaan sinkron dan asinkron.
Untuk menentukan penerapan yang tepat, pertama-tama identifikasi kategori mana inventaris Anda termasuk dalam:
- Mengaktifkan pemesanan sinkron saja: Semua penjual dan layanan akan langsung dikonfirmasi.
- Mengaktifkan pemesanan asinkron: Beberapa atau semua penjual dan layanan memerlukan panduan penjual konfirmasi.
Kriteria pemesanan asinkron
- Modifikasi pemesanan asinkron di Actions Center bukan didukung.
- Penjual harus dapat menerima atau menolak pemesanan melalui sistem online partner (misalnya panel host untuk restoran). Memanggil penjual atas nama pengguna untuk menentukan apakah penjual menerima atau menolak pemesanan tidak diizinkan.
- Permintaan penjual untuk waktu pemesanan baru tidak didukung. Tujuan permintaan pemesanan harus diterima atau ditolak di negara bagian asli.
Mengaktifkan pemesanan sinkron saja
Penerapan standar ditetapkan secara default ke pemesanan sinkron. Harap konsultasikan dokumentasi integrasi Menyeluruh Reservasi untuk informasi lebih lanjut.
Mengaktifkan pemesanan asinkron
Jika beberapa atau semua penjual menggunakan alur pemesanan asinkron, metode perubahan berikut harus dilakukan:
-
Mode konfirmasi: Semua representasi slot ketersediaan kini berisi kolom
confirmation_mode
yang menjelaskan cara pemesanan dari slot ketersediaan tersebut telah dikonfirmasi. Tentukanconfirmation_mode
dari setiap slot ketersediaan untuk berikut ini:- Dalam Feed Ketersediaan,
confirmation_mode
ditentukan di tingkat ketersediaan - Dalam metode Booking Server API,
confirmation_mode
ditentukan di level slot - Dalam metode Real-Time Updates API,
confirmation_mode
ditentukan di tingkat ketersediaan
- Dalam Feed Ketersediaan,
- Status pemesanan: Semua representasi pemesanan berisi
Kolom
status
yang mewakili status pemesanan. Tiga kali nilai status asinkron baru telah diperkenalkan:PENDING_CONFIRMATION
,DECLINED_BY_MERCHANT
, danFAILED
. Gunakan nilai status baru ini saat memproses pembuatan, penurunan, dan kegagalan pemesanan asinkron. - Pembaruan pemesanan: Semua pembaruan asinkron pada status pemesanan harus dilaporkan melalui Booking Notification API bookings.patch.
Diagram di bawah menunjukkan cara penggunaan mode konfirmasi dan status pemesanan dalam interaksi pemesanan asinkron umum.
![Gambar 1: Alur pemesanan asinkron](https://developers-dot-devsite-v2-prod.appspot.com/static/actions-center/images/enabling_async_1.png?authuser=4&hl=id)
- Feed ketersediaan telah diperbarui sehingga setiap slot ketersediaan mode konfirmasi ditentukan. Penting untuk memiliki informasi ini di feed agar kami dapat menjelaskan sifat reservasi yang asinkron kepada pengguna di awal alur.
- Kapan
BatchAvailabilityLookup
atauCheckAvailability
digunakan, kita meneruskan mode konfirmasi dan idealnya mode konfirmasi yang sama dikembalikan. Hal ini memastikan pengguna melihat pesan yang tepat. - Kapan
CreateBooking
dipanggil, kita meneruskan mode konfirmasi untuk menunjukkan mode konfirmasi yang diantisipasi. Saat pemesanan asinkron permintaan dikirim, pemesanan akan ditampilkan dengan statusPENDING_MERCHANT_CONFIRMATION
. - Saat penjual menerima atau menolak permintaan pemesanan, diperbarui melalui update real-time Booking Notification API bookings.patch. Jika Anda ingin otomatis menolak pemesanan yang tidak ditanggapi secara tepat waktu, melakukannya melalui pembaruan waktu nyata yang sama .
Feed Ketersediaan
Di feed ketersediaan, tentukan apakah setiap slot bersifat sinkron atau
asinkron. Untuk melakukannya, setel confirmation_mode
baru
kolom tersebut.
// 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; }
Walaupun mode konfirmasi diasumsikan sebagai sinkron jika tidak ada mode yang ditentukan, sangat disarankan untuk menentukan mode secara eksplisit karena menghilangkan kebingungan seputar pengabaian yang tidak disengaja.
Asinkron
{ "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" } ] }
Sinkron
{ "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" } ] }
Asinkron dan Sinkron
{ "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" } ] }
Server Pemesanan
BatchAvailabilityLookup atau CheckAvailability
Di kolom
BatchAvailabilityLookupResponse
(BAL)
atau
CheckAvailabilityResponse
(CA), menampilkan confirmation_mode
yang sama seperti yang ditentukan dalam
feed ketersediaan dan diteruskan melalui
BatchAvailabilityLookupRequest
atau
CheckAvailabilityRequest
.
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
Pastikan untuk menampilkan status yang benar untuk pemesanan menggunakan opsi di bawah ini:
// 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; }
Di CreateBookingResponse
,
tampilkan confirmation_mode
saat ini untuk slot gabungan pemesanan yang disediakan
di CreateBookingRequest. Selain itu, jika pemesanan dilakukan secara asinkron,
setel status
ke PENDING_MERCHANT_CONFIRMATION
. Harap pastikan
confirmation_mode
adalah tempat pengguna dan yang digunakan untuk melakukan Reservasi
Google berharap untuk menghindari kebingungan pengguna.
Asinkron
{ "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" } }
Sinkron
{ "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
Pada rilis awal asinkron, pengguna memodifikasi pemesanan yang ada tidak didukung. Sebagai gantinya, pengguna harus membatalkan pemesanan dan membuat pemesanan baru.
Real-Time Updates
Untuk pembaruan real-time pada ketersediaan, confirmation_mode
harus ditentukan. Hal ini berlaku untuk metode berikut:
RTU Inventaris (ReplaceServiceAvailability atau BatchReplaceServiceAvailability)
Menggunakan
Metode availability.replace
(batch)
atau
Metode services.availability.replace
,
setel confirmation_mode
ke CONFIRMATION_MODE_ASYNCHRONOUS
di Availability
Asinkron
{ "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" } ] } ] }
Sinkron
{ "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" } ] } ] }
Asinkron dan Sinkron
{ "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
Pembaruan asinkron pada status pemesanan harus dilakukan melalui Pemesanan Metode bookings.patch API Notifikasi.
Saat memperbarui status, pastikan untuk menyertakan nama kolom status
di bagian
updateMask
.
Status | Deskripsi |
---|---|
CONFIRMED | penjual mengonfirmasi pemesanan |
FAILED | partner tidak dapat mengonfirmasi atau menolak pemesanan dengan penjual |
DECLINED_BY_MERCHANT | penjual menolak pemesanan |
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"}
Jika terjadi kegagalan pemesanan, tetapkan status pemesanan ke FAILED
dan
menentukan booking_failure. Jika status disetel ke hal lain,
booking_failure
diabaikan.
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"}
Notifikasi Email
Untuk pemesanan asinkron, ada lima kemungkinan email yang terkait dengan status pemesanan yang dikirim ke pengguna.
PENDING_MERCHANT_CONFIRMATION
CONFIRMED
DECLINED_BY_MERCHANT
FAILED
CANCELED