إضافة حجوزات غير متزامنة

يتم تعريف الحجوزات المتزامنة على أنها حجوزات تم تأكيدها أو رفضها. في الوقت الفعلي.

تُعرّف الحجوزات غير المتزامنة على أنها حجوزات يؤكدها التاجر أو الانخفاض في وقت لاحق.

يتم تحديد الحجز على أنه متزامن أو غير متزامن في مدى التوفر. وهذا يعني أيضًا أنّه بالنسبة إلى تاجر معيّن أو خدمة معيّنة، قد تكون هناك خانات توفّر متزامنة وغير متزامنة.

لتحديد طريقة التنفيذ المناسبة، حدّد أولاً الفئة يندرج مستودعك الإعلاني ضمن:

معايير الحجز غير المتزامن

  • ليس تعديل الحجز غير المتزامن في "مركز الإجراءات"
  • يجب أن يتمكّن التجّار من قبول الحجز أو رفضه من خلال نظام الشريك عبر الإنترنت (على سبيل المثال، لوحة المضيف للمطعم). سيؤدي استدعاء التاجر نيابةً عن المستخدم لتحديد ما إذا كان التاجر يقبل أو يرفض حجزًا غير مسموح به.
  • لا يُسمح بعرض اقتراح من التاجر لوقت حجز جديد. تشير رسالة الأشكال البيانية يجب قبول طلب الحجز أو رفضه إذا كان متوفّرًا في الحالة الأصلية.

تفعيل الحجوزات المتزامنة فقط

يتم ضبط التنفيذ العادي تلقائيًا على الحجوزات المتزامنة. يُرجى استشارة وثائق التكامل التام بين الحجوزات للحصول على مزيد من المعلومات.

جارٍ تفعيل الحجز غير المتزامن

إذا استخدم بعض التجار أو جميعهم تدفق حجز غير متزامن، يجب إجراء التغييرات التالية:

  • وضع التأكيد: جميع الأمثلة على خانات التوفّر الآن تحتوي على حقل confirmation_mode يصف كيفية عمل الحجوزات من خانة مدى التوفر هذه. تحديد confirmation_mode من كل خانة مدى توفُّر التالي:

    • في خلاصة مدى التوفّر، يتم تحديد confirmation_mode عند مستوى التوفّر
    • في طرق واجهة برمجة تطبيقات خادم الحجز، يتم تحديد confirmation_mode على مستوى الخانة
    • في طرق واجهة برمجة التطبيقات للتحديثات في الوقت الفعلي، يتم تحديد 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. بالإضافة إلى ذلك، عندما يكون الحجز غير متزامن، ضبط 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