הזמנות סינכרוניות מוגדרות כהזמנות שאושרו או נדחו בזמן אמת.
הזמנות אסינכרוניות מוגדרות כהזמנות שהמוכר מאשר, או לדחות את הבקשה במועד מאוחר יותר.
הזמנה מצוינת כסינכרונית או אסינכרונית ברמת הזמינות. זה גם אומר שעבור מוֹכר ושירות נתונים, יכולים להיות משבצות זמינות סינכרוניות וגם אסינכרוניות.
כדי לקבוע את היישום המתאים, תחילה יש לזהות את הקטגוריה מלאי שטחי הפרסום שלכם:
- הפעלת הזמנות סינכרוניות בלבד: כל המוכרים והשירותים מאושרים באופן מיידי.
- הפעלת הזמנות אסינכרוניות: חלק מהמוכרים והשירותים או חלקם דורשים מדריך למוֹכר אישור.
קריטריונים להזמנה אסינכרונית
- שינוי של הזמנה אסינכרונית במרכז הפעולות אינו נתמך.
- למוכרים צריכה להיות אפשרות לאשר או לדחות את ההזמנה דרך המערכת הווירטואלית של השותף (למשל, פאנל מארח של המסעדה). קריאה ל מוכר בשם המשתמש, כדי לקבוע אם המוכר מקבל או אסור לדחות הזמנה.
- אין תמיכה בהצעה של מוֹכר למועד הזמנה חדש. צריך לאשר או לדחות את בקשת ההזמנה במצב המקורי.
הפעלת הזמנות סינכרוניות בלבד
כברירת מחדל, בהטמעה הרגילה מוגדרות הזמנות מסונכרנות. לייעוץ מסמכי התיעוד בנושא שילוב מקצה לקצה של ההזמנות לקבלת מידע נוסף.
הפעלת הזמנה אסינכרונית
אם חלק מהמוכרים או כולם משתמשים בתהליך הזמנה אסינכרוני, יש לבצע את השינויים הבאים:
-
מצב אישור: כל הייצוגים של משבצות זמינות עכשיו מכילים שדה
confirmation_mode
שמתאר את האופן שבו אפשר לבצע הזמנות של משבצת הזמינות הזו אושרו. יש לציין אתconfirmation_mode
מכל משבצת זמינות של הבאים:- בפיד הזמינות, הערך
confirmation_mode
מצוין רמת זמינות - ב-methods של ממשק ה-API של שרת ההזמנות, הערך
confirmation_mode
מצוין כך רמת מיקום המודעה - ב-methods של Real-Time Updates API, מציינים
confirmation_mode
ברמת הזמינות
- בפיד הזמינות, הערך
- סטטוס ההזמנה: כל הייצוגים של ההזמנות כוללים
שדה
status
שמייצג את מצב ההזמנה. שלושה מוצרים נוספו ערכי סטטוס אסינכרוניים חדשים:PENDING_CONFIRMATION
,DECLINED_BY_MERCHANT
ו-FAILED
. יש להשתמש בערכי הסטטוס החדשים האלה כאשר עיבוד יצירות, דחיות וכישלונות של הזמנות אסינכרוניות. - עדכוני הזמנות: כל העדכונים האסינכרוניים בסטטוס של צריך לדווח על ההזמנות דרך ה-Booking Notification API שיטת bookings.patch.
בתרשים הבא אפשר לראות איך אנחנו משתמשים במצב האישור ובסטטוס ההזמנה באינטראקציה אסינכרונית של הזמנה טיפוסית.
![איור 1: תהליך הזמנה אסינכרוני](https://developers.google.cn/static/actions-center/images/enabling_async_1.png?authuser=8&hl=he)
- הפידים של הזמינות עודכנו כך שכל משבצת זמינות מצב אישור צוין. חשוב לכלול את המידע הזה הפיד כדי שנוכל להסביר את האופי האסינכרוני של ההזמנה. בקרב המשתמשים בשלב מוקדם של התהליך.
- מתי
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. בנוסף, כשההזמנה אסינכרונית,
מגדירים את הערך PENDING_MERCHANT_CONFIRMATION
בשדה status
. צריך לבדוק
confirmation_mode
מייצג את התוכן שהמשתמש בוחר והפלטפורמה 'Google הזמנת מקומות'
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 או Batch ExchangeServiceAvailability)
באמצעות
שיטת availability.replace
(באצווה)
או
ה-method 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" } ] } ] }
ממשק API של התראות הזמנה
צריך לבצע עדכונים אסינכרוניים בסטטוס ההזמנה דרך ההזמנה שיטת bookings.patch ב-Notification API.
כשמעדכנים את הסטטוס, חשוב לכלול את שם השדה 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
וכן
לציין את order_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