رزروهای همزمان به عنوان رزروهایی که در زمان واقعی تایید یا رد می شوند تعریف می شوند.
رزروهای ناهمزمان به رزروهایی گفته میشود که تاجر در زمان دیگری تأیید یا رد میکند.
رزرو در سطح در دسترس بودن به صورت همزمان یا ناهمزمان مشخص می شود. این همچنین به این معنی است که برای یک تاجر و خدمات معین، میتواند هم اسلات دسترسی همزمان و هم ناهمزمان وجود داشته باشد.
برای تعیین پیاده سازی مناسب، ابتدا مشخص کنید که موجودی شما در کدام دسته قرار می گیرد:
- فعال کردن رزروهای همزمان : همه تجار و خدمات فوراً تأیید می شوند.
- فعال کردن رزروهای ناهمزمان : برخی یا همه تجار و خدمات به تأیید دستی فروشنده نیاز دارند.
معیارهای رزرو ناهمزمان
- تغییر یک رزرو غیر همگام در مرکز اقدامات پشتیبانی نمی شود.
- بازرگانان باید بتوانند رزرو را از طریق سیستم آنلاین شریک (مانند پنل میزبان رستوران) بپذیرند یا رد کنند. تماس با تاجر از طرف کاربر برای تعیین اینکه آیا تاجر رزرو را می پذیرد یا رد می کند، مجاز نیست .
- پیشنهاد تاجر برای زمان رزرو جدید پشتیبانی نمیشود . درخواست رزرو باید در حالت اصلی پذیرفته یا رد شود.
فعال کردن فقط رزروهای همزمان
اجرای استاندارد به طور پیش فرض برای رزرو همزمان است. لطفاً برای اطلاعات بیشتر به مستندات یکپارچهسازی پایان به پایان قرار ملاقاتها مراجعه کنید.
فعال کردن رزرو ناهمزمان
اگر برخی یا همه تاجران از جریان رزرو ناهمزمان استفاده میکنند، باید تغییرات زیر اعمال شود:
حالت تأیید: همه نمایشهای اسلات در دسترس بودن اکنون حاوی یک فیلد
confirmation_mode
هستند که نحوه تأیید رزرو آن اسلات دسترسی را توضیح میدهد.confirmation_mode
هر شکاف دسترسی را برای موارد زیر مشخص کنید:- در فید Availability،
confirmation_mode
در سطح در دسترس بودن مشخص شده است - در روش های Booking Server API،
confirmation_mode
در سطح اسلات مشخص شده است - در روشهای Real-Time Updates API،
confirmation_mode
در سطح در دسترس بودن مشخص شده است.
- در فید Availability،
- وضعیت رزرو: تمام نمایش های رزرو شامل یک قسمت
status
است که وضعیت رزرو را نشان می دهد. سه مقدار وضعیت ناهمزمان جدید معرفی شده است:PENDING_CONFIRMATION
،DECLINED_BY_MERCHANT
، وFAILED
. از این مقادیر وضعیت جدید هنگام پردازش موارد ایجاد شده، رد کردن و شکست رزروهای ناهمزمان استفاده کنید. - بهروزرسانیهای رزرو: همه بهروزرسانیهای ناهمزمان وضعیت رزروها باید از طریق روش Bookings.patch API اطلاع رسانی رزرو گزارش شوند.
نمودار زیر نحوه استفاده از حالت تأیید و وضعیت رزرو را در یک تعامل معمولی رزرو ناهمزمان نشان میدهد.
![شکل 1: جریان رزرو ناهمزمان](https://developers.google.cn/static/actions-center/images/enabling_async_1.png?authuser=2&hl=fa)
- فیدهای در دسترس بودن بهروزرسانی شدهاند تا حالت تأیید هر شکاف در دسترس بودن مشخص شود. مهم است که این اطلاعات در فید وجود داشته باشد تا بتوانیم ماهیت ناهمزمان رزرو را در اوایل جریان برای کاربر توضیح دهیم.
- هنگامی که
BatchAvailabilityLookup
یاCheckAvailability
فراخوانی می شود، از حالت تایید عبور می کنیم و در حالت ایده آل همان حالت تایید را برای بازگرداندن می گذاریم. این تضمین می کند که پیام مناسب به کاربر نشان داده شود. - هنگامی که
CreateBooking
فراخوانی می شود، از حالت تایید عبور می کنیم تا حالت تایید پیش بینی شده را نشان دهیم. وقتی درخواست رزرو ناهمزمان ارسال شد، رزرو با وضعیتPENDING_MERCHANT_CONFIRMATION
برگردانده میشود. - هنگامی که تاجر درخواست رزرو را میپذیرد یا رد میکند، وضعیت رزرو از طریق روش bookings.patch API اطلاع رسانی رزرو بهروزرسانی بهروز بهروزرسانی میشود. اگر می خواهید رزروهایی را که به موقع به آنها پاسخ داده نمی شود رد کنید، این کار را از طریق همان روش به روز رسانی بلادرنگ انجام دهید.
فیدهای در دسترس بودن
در فید در دسترس بودن، مشخص کنید که هر شکاف همزمان یا ناهمزمان باشد. برای این کار فیلد جدید confirmation_mode
را تنظیم کنید.
// 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; }
اگر چه حالت تأیید همزمان فرض می شود اگر حالتی مشخص نشده باشد، به شدت توصیه می شود که به صراحت یک حالت را مشخص کنید زیرا این حالت هرگونه سردرگمی در مورد حذف های تصادفی را برطرف می کند.
همگام
{ "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" } ] }
همگام سازی
{ "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" } ] }
Async و 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" }, { "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" } ] }
سرور رزرو
BatchAvailabilityLookup یا CheckAvailability
در BatchAvailabilityLookupResponse
(BAL) یا CheckAvailabilityResponse
(CA)، همان confirmation_mode
که در فید در دسترس بودن مشخص شده و از طریق BatchAvailabilityLookupRequest
یا 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" }
ایجاد رزرو
مطمئن شوید که وضعیت صحیح رزرو را با استفاده از گزینه های موجود زیر بازگردانید:
// 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
، confirmation_mode
فعلی را برای اسلات جمع آوری رزرو ارائه شده در CreateBookingRequest برگردانید. علاوه بر این، هنگامی که رزرو ناهمزمان است، status
را روی PENDING_MERCHANT_CONFIRMATION
تنظیم کنید. لطفاً مطمئن شوید که confirmation_mode
همان چیزی است که کاربر و Reserve with Google انتظار دارد تا کاربر را گیج نکند.
همگام
{ "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" } }
همگام سازی
{ "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" } }
به روز رسانی رزرو
در نسخه اولیه async، تغییرات کاربر در رزرو موجود پشتیبانی نمیشود. در عوض، کاربر باید رزرو را لغو کند و رزرو جدیدی ایجاد کند.
به روز رسانی در زمان واقعی
برای بهروزرسانی بیدرنگ در دسترسپذیریها، confirmation_mode
باید مشخص شود. این برای روش های زیر اعمال می شود:
موجودی RTU (ReplaceServiceAvailability یا BatchReplaceServiceAvailability)
با استفاده از روش availability.replace
(batch) یا services.availability.replace
، در Availability
، confirmation_mode
روی CONFIRMATION_MODE_ASYNCHRONOUS
تنظیم کنید.
همگام
{ "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" } ] } ] }
همگام سازی
{ "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" } ] } ] }
Async و 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_ASYNCHRONOUS" }, { "startTime": "2014-10-03T11:00:00.00Z", "duration": "5400s", "spotsOpen": "1", "spotsTotal": "1", "availabilityTag": "1000002", "confirmation_mode": "CONFIRMATION_MODE_SYNCHRONOUS" } ] } ] }
API اطلاع رسانی رزرو
بهروزرسانیهای ناهمزمان برای وضعیت رزرو باید از طریق روش Booking Notification API bookings.patch انجام شود.
هنگام بهروزرسانی وضعیت، مطمئن شوید که نام فیلد status
را در updateMask
لحاظ کنید.
وضعیت | توضیحات |
---|---|
تایید شد | تاجر رزرو را تایید کرد |
ناموفق | شریک نتوانست رزرو با تاجر را تأیید یا رد کند |
DECLINED_BY_MERCHANT | تاجر رزرو را رد کرد |
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"}
در صورت عدم موفقیت رزرو، وضعیت رزرو را روی FAILED
تنظیم کنید و booking_failure را مشخص کنید. اگر وضعیت روی هر چیز دیگری تنظیم شود، booking_failure
نادیده گرفته میشود.
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"}
اعلان های ایمیل
برای رزروهای ناهمزمان، پنج ایمیل احتمالی مربوط به وضعیت رزرو وجود دارد که برای کاربران ارسال می شود.
-
PENDING_MERCHANT_CONFIRMATION
-
CONFIRMED
-
DECLINED_BY_MERCHANT
-
FAILED
-
CANCELED