הוספת הזמנות אסינכרוניות

הזמנות סינכרוניות מוגדרות כהזמנות שאושרו או נדחו בזמן אמת.

הזמנות אסינכרוניות מוגדרות כהזמנות שהמוכר מאשר, או לדחות את הבקשה במועד מאוחר יותר.

הזמנה מצוינת כסינכרונית או אסינכרונית ברמת הזמינות. זה גם אומר שעבור מוֹכר ושירות נתונים, יכולים להיות משבצות זמינות סינכרוניות וגם אסינכרוניות.

כדי לקבוע את היישום המתאים, תחילה יש לזהות את הקטגוריה מלאי שטחי הפרסום שלכם:

קריטריונים להזמנה אסינכרונית

  • שינוי של הזמנה אסינכרונית במרכז הפעולות אינו נתמך.
  • למוכרים צריכה להיות אפשרות לאשר או לדחות את ההזמנה דרך המערכת הווירטואלית של השותף (למשל, פאנל מארח של המסעדה). קריאה ל מוכר בשם המשתמש, כדי לקבוע אם המוכר מקבל או אסור לדחות הזמנה.
  • אין תמיכה בהצעה של מוֹכר למועד הזמנה חדש. צריך לאשר או לדחות את בקשת ההזמנה במצב המקורי.

הפעלת הזמנות סינכרוניות בלבד

כברירת מחדל, בהטמעה הרגילה מוגדרות הזמנות מסונכרנות. לייעוץ מסמכי התיעוד בנושא שילוב מקצה לקצה של ההזמנות לקבלת מידע נוסף.

הפעלת הזמנה אסינכרונית

אם חלק מהמוכרים או כולם משתמשים בתהליך הזמנה אסינכרוני, יש לבצע את השינויים הבאים:

  • מצב אישור: כל הייצוגים של משבצות זמינות עכשיו מכילים שדה 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: תהליך הזמנה אסינכרוני
איור 1: תהליך הזמנה אסינכרוני
  1. הפידים של הזמינות עודכנו כך שכל משבצת זמינות מצב אישור צוין. חשוב לכלול את המידע הזה הפיד כדי שנוכל להסביר את האופי האסינכרוני של ההזמנה. בקרב המשתמשים בשלב מוקדם של התהליך.
  2. מתי BatchAvailabilityLookup או CheckAvailability נקרא, אנחנו מעבירים הלאה את מצב האישור, ורצוי שהוא יהיה אותו מצב אישור הוחזרו. כך אפשר להבטיח שהמשתמשים יראו את המסרים המתאימים.
  3. מתי CreateBooking נקראת, אנחנו מעבירים את מצב האישור אל לציין את מצב האישור הצפוי. כשההזמנה האסינכרונית הבקשה נשלחת, ההזמנה מוחזרת עם הסטטוס PENDING_MERCHANT_CONFIRMATION
  4. כשהמוכר מאשר או דוחה בקשה להזמנה, ההזמנה שהסטטוס שלהם מתעדכן בזמן אמת דרך 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