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

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

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

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

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

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

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

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

الإعداد التلقائي للتنفيذ التلقائي للحجوزات المتزامنة. للحصول على مزيد من المعلومات، يمكنك الرجوع إلى دليل الدمج التام.

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

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

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

    • في خلاصة مدى التوفّر، يتم تحديد confirmation_mode على مستوى مدى التوفّر
    • في طُرق واجهة برمجة تطبيقات Server Booking، يتم تحديد confirmation_mode على مستوى الخانة.
    • في طرق واجهة برمجة التطبيقات للتحديثات في الوقت الفعلي، يتم تحديد confirmation_mode على مستوى مدى التوفّر.
  • حالة الحجز: تحتوي كلّ بيانات الحجوزات على الحقل status الذي يمثّل حالة الحجز. وقد تم إدخال ثلاث قيم جديدة للحالة غير متزامنة: PENDING_CONFIRMATION وDECLINED_BY_MERCHANT وFAILED. استخدِم قيم الحالة الجديدة هذه عند معالجة عمليات الإنشاء أو الرفض أو الإخفاق في الحجوزات غير المتزامنة.
  • التعديلات المتعلّقة بالحجز: يجب الإبلاغ عن جميع التعديلات غير المتزامنة التي أُجريت على حالة الحجوزات من خلال طريقة bookings.patch الخاصة بواجهة برمجة تطبيقات الإشعارات.

يوضّح المخطّط أدناه كيفية استخدام وضع التأكيد وحالة الحجز في تفاعل نموذجي للحجز غير المتزامن.

الشكل 1: تدفق الحجز غير المتزامن
الشكل 1: تدفق الحجز غير المتزامن
  1. تم تعديل خلاصات مدى التوفّر بحيث يتم تحديد وضع التأكيد لكل خانة مدى التوفّر. ومن المهم أن تكون هذه المعلومات مضمّنة في الخلاصة حتى نتمكّن من توضيح الطبيعة غير المتزامنة للحجز للمستخدم في وقت مبكر من العملية.
  2. عندما يتم استدعاء BatchAvailabilityLookup أو CheckAvailability، ننقل وضع التأكيد وبالوضع المثالي نفسه الذي سيتم عرضه. يضمن ذلك للمستخدم ظهور الرسائل المناسبة.
  3. عند الاتصال بالرقم CreateBooking، ننقل وضع التأكيد للإشارة إلى وضع التأكيد المتوقّع. وعند إرسال طلب الحجز غير المتزامن، يتم عرض الحجز بالحالة PENDING_MERCHANT_CONFIRMATION.
  4. عندما يقبل التاجر طلب الحجز أو يرفضه، يتم تعديل حالة الحجز باستخدام طريقة 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
    }
  ]
}

مزامنة غير متزامنة

{
  "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"
}

إنشاء حجز

احرص على عرض الحالة الصحيحة للحجز باستخدام الخيارات المتوفّرة أدناه:

// 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"
  }
}

تحديث الحجز

في الإصدار الأولي، لا يتم إجراء تعديلات على حجز حالي. بدلاً من ذلك، على المستخدم إلغاء الحجز وإنشاء حجز جديد.

تعديلات في الوقت الفعلي

للاطّلاع على التعديلات التي يتم إجراؤها في الوقت الفعلي، يجب تحديد confirmation_mode. وينطبق ذلك على الطرق التالية:

قيمة RTU للمستودع (استبدال ServiceService مدى التوفّر أو 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