הזמנות סינכרוניות מוגדרות כהזמנות שאושרו או נדחו בזמן אמת.
הזמנות אסינכרוניות מוגדרות כהזמנות שהמוכר מאשר או דוחה בשלב מאוחר יותר.
אפשר לציין אם ההזמנה היא סינכרונית או אסינכרונית ברמת הזמינות. זה גם אומר שעבור מוכר ושירות מסוימים, יכולים להיות משבצות זמינות סינכרוניות ואסינכרוניות.
כדי לקבוע את ההטמעה המתאימה, קודם צריך לזהות את הקטגוריה שאליה משתייך מלאי שטחי הפרסום:
- הפעלת הזמנות סינכרוניות בלבד: כל המוכרים והשירותים מאושרים באופן מיידי.
- הפעלת הזמנות אסינכרוניות: חלק מהמוכרים והשירותים או כולם דורשים אישור ידני של המוכר.
קריטריונים לקביעת פגישות לא סינכרוניות
- אי אפשר לשנות הזמנה אסינכרונית במרכז הפעולות.
- המוֹכרים צריכים להיות מסוגלים לאשר או לדחות את ההזמנה דרך המערכת אונליין של השותף (למשל, לוח הבקרה של המארח במסעדה). אסור להתקשר למוֹכר בשם המשתמש כדי לברר אם הוא מאשר או דוחה הזמנה.
- אין תמיכה בהצעה של מוֹכר לשינוי מועד ההזמנה. צריך לאשר או לדחות את בקשת ההזמנה במצב המקורי שלה.
הפעלה של הזמנות סינכרוניות בלבד
ההטמעה הרגילה מוגדרת כברירת מחדל להזמנות סינכרוניות. מידע נוסף מופיע במסמכי התיעוד בנושא שילוב של הזמנות מקצה לקצה.
הפעלת הזמנה אסינכרונית
אם חלק מהמוכרים או כולם משתמשים בתהליך הזמנה אסינכרוני, צריך לבצע את השינויים הבאים:
-
מצב אישור: כל הייצוגים של משבצות הזמינות כוללים עכשיו את השדה
confirmation_modeשמתאר איך מאשרים הזמנות של משבצת הזמינות הזו. מציינים אתconfirmation_modeשל כל משבצת זמן פנויה לכל אחד מהפרטים הבאים:- בפיד הזמינות, השדה
confirmation_modeמצוין ברמת הזמינות - בשיטות של Booking Server API,
confirmation_modeמצוין ברמת המשבצת - בשיטות של Real-Time Updates API,
confirmation_modeמצוין ברמת הזמינות
- בפיד הזמינות, השדה
- סטטוס ההזמנה: כל הייצוגים של ההזמנות מכילים שדה
statusשמייצג את מצב ההזמנה. הוספנו שלושה ערכי סטטוס אסינכרוניים חדשים:PENDING_CONFIRMATION,DECLINED_BY_MERCHANTו-FAILED. משתמשים בערכי הסטטוס החדשים האלה כשמעבדים יצירות, דחיות וכישלונות של הזמנות אסינכרוניות. - עדכונים לגבי הזמנות: כל העדכונים האסינכרוניים בסטטוס של ההזמנות צריכים להישלח באמצעות השיטה bookings.patch של Booking Notification API.
בתרשים הבא מוצג שימוש במצב אישור ובסטטוס הזמנה באינטראקציה אסינכרונית טיפוסית של הזמנה.
- עדכנו את פידים הזמינות כך שייקבע מצב האישור של כל משבצת זמינות. חשוב שהמידע הזה יופיע בפיד כדי שנוכל להסביר למשתמש את האופי האסינכרוני של ההזמנה בשלב מוקדם בתהליך.
- כשמתבצעת קריאה ל-
BatchAvailabilityLookupאו ל-CheckAvailability, אנחנו מעבירים את מצב האישור, ורצוי שיוחזר אותו מצב אישור. כך אפשר לוודא שהמשתמש יראה את ההודעה המתאימה. - כשקוראים לפונקציה
CreateBooking, אנחנו מעבירים את מצב האישור כדי לציין את מצב האישור הצפוי. כששולחים בקשת הזמנה אסינכרונית, ההזמנה מוחזרת עם הסטטוסPENDING_MERCHANT_CONFIRMATION. - כשהמוכר מאשר או דוחה בקשת הזמנה, סטטוס ההזמנה מתעדכן באמצעות השיטה bookings.patch של Booking Notification 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"
}
]
}אסינכרוני וסינכרוני
{
"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"
}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. התמיכה ב-GPP רלוונטית ל-methods הבאים:
מלאי RTU (ReplaceServiceAvailability או BatchReplaceServiceAvailability)
באמצעות השיטה availability.replace (batch) או השיטה 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"
}
]
}
]
}Booking Notification 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.
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_CONFIRMATIONCONFIRMEDDECLINED_BY_MERCHANTFAILEDCANCELED