Pemesanan sinkron ditentukan sebagai pemesanan yang dikonfirmasi atau ditolak secara real time.
Pemesanan asinkron ditentukan sebagai pemesanan yang dikonfirmasi atau ditolak penjual di kemudian 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 sesuai, pertama-tama identifikasikan kategori yang mencakup inventaris Anda:
- Mengaktifkan pemesanan sinkron saja: Semua penjual dan layanan langsung dikonfirmasi.
- Mengaktifkan pemesanan asinkron: Sebagian atau semua penjual dan layanan memerlukan konfirmasi manual penjual.
Kriteria pemesanan asinkron
- Modifikasi pemesanan asinkron di Pusat Tindakan tidak didukung.
- Penjual harus dapat menerima atau menolak pemesanan melalui sistem online partner (mis., sistem pengelolaan untuk restoran). Dilarang menelepon penjual atas nama pengguna untuk mengetahui apakah penjual menerima atau menolak pemesanan.
- Permintaan penjual untuk waktu pemesanan baru tidak didukung. Permintaan pemesanan harus diterima atau ditolak dalam status aslinya.
Mengaktifkan pemesanan sinkron saja
Penerapan standar ditetapkan secara default ke pemesanan sinkron. Lihat dokumentasi Integrasi Reservasi menyeluruh untuk informasi lebih lanjut.
Mengaktifkan pemesanan asinkron
Jika beberapa atau semua penjual menggunakan alur pemesanan asinkron, perubahan berikut harus dilakukan:
-
Mode konfirmasi: Semua representasi slot ketersediaan sekarang berisi kolom
confirmation_mode
yang mendeskripsikan cara pemesanan slot ketersediaan tersebut dikonfirmasi. Tentukanconfirmation_mode
dari setiap slot ketersediaan untuk hal berikut:- Dalam Feed Ketersediaan,
confirmation_mode
ditentukan pada tingkat ketersediaan - Dalam metode Booking Server API,
confirmation_mode
ditentukan pada tingkat slot - Dalam metode Real-Time Updates API,
confirmation_mode
ditentukan pada tingkat ketersediaan
- Dalam Feed Ketersediaan,
- Status pemesanan: Semua representasi pemesanan berisi kolom
status
yang merepresentasikan status pemesanan. Tiga nilai status asinkron baru telah diperkenalkan:PENDING_CONFIRMATION
,DECLINED_BY_MERCHANT
, danFAILED
. Gunakan nilai status baru tersebut saat memproses pembuatan, penolakan, dan kegagalan pemesanan asinkron. - Pembaruan pemesanan: Semua pembaruan asinkron pada status pemesanan harus dilaporkan melalui metode bookings.patch Booking Notification API.
Diagram di bawah menunjukkan cara mode konfirmasi dan status pemesanan digunakan dalam interaksi pemesanan asinkron standar.
- Feed ketersediaan telah diperbarui sehingga mode konfirmasi setiap slot ketersediaan ditentukan. Penting untuk memiliki informasi ini di feed sehingga kami dapat menjelaskan sifat asinkron dari pemesanan kepada pengguna di awal alur.
- Saat
BatchAvailabilityLookup
atauCheckAvailability
dipanggil, kami meneruskan mode konfirmasi dan idealnya mode konfirmasi yang sama akan ditampilkan. Hal ini memastikan bahwa pengguna mendapatkan pesan yang sesuai. - Saat
CreateBooking
dipanggil, kami meneruskan mode konfirmasi untuk menunjukkan mode konfirmasi yang diharapkan. Saat permintaan pemesanan asinkron dikirimkan, pemesanan akan ditampilkan dengan statusPENDING_MERCHANT_CONFIRMATION
. - Saat penjual menerima atau menolak permintaan pemesanan, status pemesanan akan diperbarui melalui metode bookings.patch Booking Notification API update real-time. Jika Anda ingin secara otomatis menolak pemesanan yang tidak direspons dengan tepat waktu, lakukan melalui metode update real-time yang sama.
Feed Ketersediaan
Dalam feed ketersediaan, tentukan apakah setiap slot bersifat sinkron atau
asinkron. Untuk melakukannya, tetapkan kolom confirmation_mode
baru.
// 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; }
Meskipun mode konfirmasi diasumsikan sebagai sinkron jika tidak ada mode yang ditentukan, sangat dianjurkan untuk menentukan mode secara eksplisit agar menghilangkan kebingungan seputar penghapusan 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
BatchAvailabilityLookupResponse
(BAL)
atau
CheckAvailabilityResponse
(CA), tampilkan 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 pemesanan yang benar menggunakan opsi yang tersedia di bawah:
// 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, saat pemesanan bersifat asinkron,
tetapkan status
ke PENDING_MERCHANT_CONFIRMATION
. Pastikan
confirmation_mode
digunakan oleh pengguna dan diharapkan oleh Pesan dengan
Google agar tidak membingungkan 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, modifikasi pengguna pada pemesanan yang ada tidak didukung. Sebagai gantinya, pengguna harus membatalkan pemesanan dan membuat pemesanan baru.
Real-Time Updates
Untuk update 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
,
tetapkan 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 metode bookings.patch Booking Notification API.
Saat memperbarui status, pastikan untuk menyertakan nama kolom status
di 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 tentukan booking_failure. Jika status ditetapkan ke yang lain, booking_failure
akan 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 terkait status pemesanan yang dikirimkan kepada pengguna.
PENDING_MERCHANT_CONFIRMATION
CONFIRMED
DECLINED_BY_MERCHANT
FAILED
CANCELED