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

رزروهای همزمان به عنوان رزروهایی که در زمان واقعی تایید یا رد می شوند تعریف می شوند.

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

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

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

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

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

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

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

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

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

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

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

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

شکل 1: جریان رزرو ناهمزمان
شکل 1: جریان رزرو ناهمزمان
  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"
    }
  ]
}

Async و Sync

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

ایجاد رزرو

مطمئن شوید که وضعیت صحیح رزرو را با استفاده از گزینه های موجود زیر بازگردانید:

// 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 (batch) یا services.availability.replace ، در Availability ، 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_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"
        }
      ]
    }
  ]
}

Async و Sync

{
  "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 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 را مشخص کنید. اگر وضعیت روی هر چیز دیگری تنظیم شود، 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