رزروهای ناهمزمان را اضافه کنید

رزروهای همزمان به رزروهایی گفته می‌شود که در لحظه تأیید یا رد می‌شوند.

رزروهای غیرهمزمان به رزروهایی گفته می‌شود که فروشنده بعداً آنها را تأیید یا رد می‌کند.

یک رزرو در سطح دسترسی به صورت همزمان یا ناهمزمان مشخص می‌شود. این همچنین به این معنی است که برای یک فروشنده و سرویس مشخص، می‌تواند هم بازه‌های زمانی همزمان و هم ناهمزمان برای دسترسی وجود داشته باشد.

برای تعیین پیاده‌سازی مناسب، ابتدا مشخص کنید که موجودی شما در کدام دسته قرار می‌گیرد:

معیارهای رزرو ناهمزمان

  • اصلاح رزرو ناهمزمان در مرکز عملیات پشتیبانی نمی‌شود .
  • فروشندگان باید بتوانند رزرو را از طریق سیستم آنلاین همکار (مثلاً پنل میزبان برای رستوران) بپذیرند یا رد کنند. تماس با فروشنده از طرف کاربر برای تعیین اینکه آیا فروشنده رزرو را می‌پذیرد یا رد می‌کند، مجاز نیست .
  • پیشنهاد فروشنده برای زمان رزرو جدید پشتیبانی نمی‌شود . درخواست رزرو باید در حالت اولیه پذیرفته یا رد شود.

فعال کردن رزروهای همزمان فقط

پیاده‌سازی استاندارد به صورت پیش‌فرض روی رزروهای همزمان است. برای اطلاعات بیشتر، لطفاً به مستندات یکپارچه‌سازی سرتاسری رزروها مراجعه کنید.

فعال کردن رزرو ناهمزمان

اگر برخی یا همه پذیرندگان از جریان رزرو ناهمزمان استفاده می‌کنند، تغییرات زیر باید اعمال شود:

  • حالت تأیید: اکنون تمام نمایش‌های بازه‌های زمانی موجود شامل یک فیلد confirmation_mode هستند که نحوه تأیید رزروهای آن بازه زمانی موجود را شرح می‌دهد. confirmation_mode هر بازه زمانی موجود را برای موارد زیر مشخص کنید:

    • در فید دسترسی، confirmation_mode در سطح دسترسی مشخص شده است.
    • در متدهای API سرور رزرو، confirmation_mode در سطح اسلات مشخص شده است.
    • در متدهای API مربوط به به‌روزرسانی‌های بلادرنگ، confirmation_mode در سطح دسترسی مشخص شده است.
  • وضعیت رزرو: همه نمایش‌های رزرو شامل یک فیلد status هستند که وضعیت رزرو را نشان می‌دهد. سه مقدار وضعیت ناهمزمان جدید معرفی شده‌اند: PENDING_CONFIRMATION ، DECLINED_BY_MERCHANT و FAILED . از این مقادیر وضعیت جدید هنگام پردازش ایجاد، رد و شکست رزروهای ناهمزمان استفاده کنید.
  • به‌روزرسانی‌های رزرو: تمام به‌روزرسانی‌های ناهمزمان وضعیت رزروها باید از طریق متد bookings.patch از API اعلان رزرو گزارش شوند.

نمودار زیر نحوه استفاده از حالت تأیید و وضعیت رزرو را در یک تعامل رزرو ناهمزمان معمولی نشان می‌دهد.

شکل ۱: جریان رزرو ناهمزمان
شکل ۱: جریان رزرو ناهمزمان
  1. فیدهای مربوط به موجودی به‌روزرسانی شده‌اند تا حالت تأیید هر اسلات موجودی مشخص شود. وجود این اطلاعات در فید بسیار مهم است تا بتوانیم ماهیت ناهمزمان رزرو را در مراحل اولیه برای کاربر توضیح دهیم.
  2. وقتی BatchAvailabilityLookup یا CheckAvailability فراخوانی می‌شوند، ما حالت تأیید را ارسال می‌کنیم و در حالت ایده‌آل، همان حالت تأیید را برمی‌گردانیم. این کار تضمین می‌کند که پیام مناسب به کاربر نشان داده می‌شود.
  3. وقتی CreateBooking فراخوانی می‌شود، ما حالت تأیید را برای نشان دادن حالت تأیید مورد انتظار ارسال می‌کنیم. وقتی درخواست رزرو ناهمزمان ارسال می‌شود، رزرو با وضعیت PENDING_MERCHANT_CONFIRMATION بازگردانده می‌شود.
  4. وقتی فروشنده درخواست رزرو را می‌پذیرد یا رد می‌کند، وضعیت رزرو از طریق متد bookings.patch از 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"
    }

  ]
}

سرور رزرو

جستجوی یا بررسی در دسترس بودن دسته‌ای

در BatchAvailabilityLookupResponse (BAL) یا CheckAvailabilityResponse (CA)، همان confirmation_mode را که در availability feed مشخص شده و از طریق BatchAvailabilityLookupRequest یا CheckAvailabilityRequest ارسال شده است، برگردانید.

BAL-غیرهمزمان

{
  "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-غیرهمزمان

{
  "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 همان چیزی است که کاربر و Reserve with 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"
  }
}

به‌روزرسانی رزرو

در نسخه اولیه async، تغییرات کاربر در رزرو موجود پشتیبانی نمی‌شود. در عوض، کاربر باید رزرو را لغو کرده و یک رزرو جدید ایجاد کند.

به‌روزرسانی‌های بلادرنگ

برای به‌روزرسانی‌های بلادرنگِ در دسترس بودن‌ها، باید confirmation_mode مشخص شود. این مورد برای متدهای زیر اعمال می‌شود:

RTU موجودی (ReplaceServiceAvailability یا BatchReplaceServiceAvailability)

با استفاده از متد availability.replace (دسته‌ای) یا متد services.availability.replace ، confirmation_mode در بخش Availability روی 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_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 اعلان رزرو

به‌روزرسانی‌های ناهمزمان وضعیت رزرو باید از طریق متد booking.patch از API اعلان رزرو انجام شود.

هنگام به‌روزرسانی وضعیت، مطمئن شوید که نام فیلد status را در updateMask وارد کنید.

وضعیت توضیحات
تأیید شد فروشنده رزرو را تأیید کرد
شکست خورد شریک نتوانست رزرو را با فروشنده تأیید یا رد کند
توسط فروشنده رد شد تاجر رزرو را رد کرد
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 را مشخص کنید. اگر وضعیت روی هر چیز دیگری تنظیم شده باشد، 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