يتم تعريف الحجوزات المتزامنة على أنها حجوزات تم تأكيدها أو رفضها. في الوقت الفعلي.
تُعرّف الحجوزات غير المتزامنة على أنها حجوزات يؤكدها التاجر أو الانخفاض في وقت لاحق.
يتم تحديد الحجز على أنه متزامن أو غير متزامن في مدى التوفر. وهذا يعني أيضًا أنّه بالنسبة إلى تاجر معيّن أو خدمة معيّنة، قد تكون هناك خانات توفّر متزامنة وغير متزامنة.
لتحديد طريقة التنفيذ المناسبة، حدّد أولاً الفئة يندرج مستودعك الإعلاني ضمن:
- تفعيل الحجوزات المتزامنة فقط: يتم تأكيد معلومات جميع التجّار والخدمات فورًا.
- تفعيل الحجوزات غير المتزامنة: يتطلّب بعض التجّار والخدمات أو جميعهم استخدام دليل التاجر. التأكيد.
معايير الحجز غير المتزامن
- ليس تعديل الحجز غير المتزامن في "مركز الإجراءات"
- يجب أن يتمكّن التجّار من قبول الحجز أو رفضه من خلال نظام الشريك عبر الإنترنت (على سبيل المثال، لوحة المضيف للمطعم). سيؤدي استدعاء التاجر نيابةً عن المستخدم لتحديد ما إذا كان التاجر يقبل أو يرفض حجزًا غير مسموح به.
- لا يُسمح بعرض اقتراح من التاجر لوقت حجز جديد. تشير رسالة الأشكال البيانية يجب قبول طلب الحجز أو رفضه إذا كان متوفّرًا في الحالة الأصلية.
تفعيل الحجوزات المتزامنة فقط
يتم ضبط التنفيذ العادي تلقائيًا على الحجوزات المتزامنة. يُرجى استشارة وثائق التكامل التام بين الحجوزات للحصول على مزيد من المعلومات.
جارٍ تفعيل الحجز غير المتزامن
إذا استخدم بعض التجار أو جميعهم تدفق حجز غير متزامن، يجب إجراء التغييرات التالية:
-
وضع التأكيد: جميع الأمثلة على خانات التوفّر الآن تحتوي على حقل
confirmation_mode
يصف كيفية عمل الحجوزات من خانة مدى التوفر هذه. تحديدconfirmation_mode
من كل خانة مدى توفُّر التالي:- في خلاصة مدى التوفّر، يتم تحديد
confirmation_mode
عند مستوى التوفّر - في طرق واجهة برمجة تطبيقات خادم الحجز، يتم تحديد
confirmation_mode
على مستوى الخانة - في طرق واجهة برمجة التطبيقات للتحديثات في الوقت الفعلي، يتم تحديد
confirmation_mode
على مستوى التوفّر
- في خلاصة مدى التوفّر، يتم تحديد
- حالة الحجز: تحتوي جميع العروض للحجوزات على
حقل
status
يمثّل حالة الحجز. ثلاث مرّات تم تقديم قيم جديدة غير متزامنة للحالة:PENDING_CONFIRMATION
،DECLINED_BY_MERCHANT
وFAILED
استخدم قيم الحالة الجديدة هذه معالجة عمليات إنشاء الحجوزات غير المتزامنة وحالات الرفض وحالات تعذُّر المعالجة. - تحديثات الحجز: كل التحديثات غير المتزامنة على حالة أن يتم إعداد تقارير بالحجوزات عبر واجهة برمجة التطبيقات Booking Notification API bookings.patch.
يوضّح المخطّط أدناه كيفية استخدام وضع التأكيد وحالة الحجز. في تفاعل حجز نموذجي غير متزامن.
- تم تحديث خلاصات مدى التوفر بحيث تصبح كل خانة مدى يتم تحديد وضع التأكيد. من المهم أن تكون هذه المعلومات في الخلاصة كي نتمكن من شرح الطبيعة غير المتزامنة للحجز المستخدم في وقت مبكر من التدفق.
- فعندما
BatchAvailabilityLookup
أوCheckAvailability
فإننا نمرر وضع التأكيد ومن الناحية المثالية نفس وضع التأكيد عاد. يضمن ذلك عرض الرسائل المناسبة على المستخدم. - فعندما
CreateBooking
فإننا نمرر وضع التأكيد إلى وضع التأكيد المتوقع. عندما يُجري الحجز غير المتزامن عند إرساله، يتم إرجاع الحجز مع تحديد الحالةPENDING_MERCHANT_CONFIRMATION
- عندما يقبل التاجر طلب الحجز أو يرفضه، يتمّ نقل يتم تحديث الحالة عبر واجهة برمجة التطبيقات Booking Notification API الخاصة بالتحديث في الوقت الفعلي bookings.patch. إذا كنت تريد أن ترفض تلقائيًا الحجوزات التي لا استجابت لها في الوقت المناسب، فقم بذلك من خلال التحديث نفسه في الوقت الفعلي .
خلاصات مدى التوفّر
في خلاصة مدى التوفّر، حدِّد ما إذا كانت كل خانة متزامنة أو
غير متزامن. لتنفيذ ذلك، عليك ضبط إعدادات 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" } ] }
عدم المزامنة والمزامنة
{ "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
{ "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
{ "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
احرص على إرجاع الحالة الصحيحة للحجز باستخدام الحالة المتوفّرة. الخيارات أدناه:
// 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
الغرض الذي يستخدمه المستخدم وطريقة الحجز
وتتوقع 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" } }
UpdateBooking
في الإصدار الأولي من المزامنة غير المتزامنة، تعديلات المستخدم على حجز حالي غير مدعومة. بدلاً من ذلك، على المستخدم إلغاء الحجز وإنشاء حجز جديد.
تحديثات في الوقت الفعلي
للحصول على معلومات عن مدى التوفّر في الوقت الفعلي، confirmation_mode
. ينطبق ذلك على الطرق التالية:
قيمة RTU للمستودع (ReplaceServiceAvailability أو BatchReplaceServiceAvailability)
استخدام
طريقة availability.replace
(مجمّعة)
أو
طريقة services.availability.replace
يتم ضبط confirmation_mode
على CONFIRMATION_MODE_ASYNCHRONOUS
في Availability
.
غير متزامنة
{ "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" } ] } ] }
عدم المزامنة والمزامنة
{ "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" } ] } ] }
واجهة برمجة تطبيقات إشعارات الحجز
يجب إجراء تعديلات غير متزامنة على حالة الحجز من خلال قسم "الحجز". طريقة 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
.
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