Структурирование доступности в фидах

Выбор формата доступности

Есть два способа указать данные о доступности: (1) Открытие спотов или (2) Повторение . Выберите только один метод, который будет использоваться всеми вашими продавцами и услугами. Выбрав метод, вы должны придерживаться его на протяжении всей интеграции (каналы, сервер бронирования и обновления в реальном времени).

Используйте следующее руководство, чтобы определить, какой формат доступности более подходит:

  • Сохраняется ли в вашей системе доступность в виде явных интервалов времени, например, с 8:00 до 8:30?
  • Сохраняете ли вы информацию о доступности в вашей системе в повторяющемся формате, то есть у продавцов есть услуги, которые предоставляются с постоянной частотой и с небольшими отклонениями? Например, слоты повторяются каждые 15 минут с 9:00 до 17:00, и каждые 15 минут доступно только одно место.
  • Может ли быть одновременно открыто несколько мест для услуг ваших продавцов? Например, 30 свободных мест на курс.
  • Ничего из вышеперечисленного не применимо?
    • Использовать открытые места
    • Примечание. Хотя использование повторения более эффективно и может привести к уменьшению размера фида, если ваша модель данных изначально не поддерживает повторение, не рекомендуется использовать повторение, так как вам придется пересчитывать количество повторяющихся интервалов за весь день для каждого реального времени. обновлять.

    Места открыты

    Определения параметров:

    • Spots_open: количество мест, доступных в настоящее время для этой записи о доступности.
    • Spots_total: общее количество мест, которые есть у продавца для этой конфигурации, включая те, которые недоступны.

    Метод Spots Open явно указывает доступность каждого слота и поддерживает модель наличия нескольких мест для одной и той же услуги. Эти два параметра работают вместе для создания цифрового представления возможностей сервиса.

    Когда происходит бронирование, количество Spot_open должно уменьшаться на 1 посредством обновления в реальном времени (количество Spot_total должно оставаться прежним). Как только Spots_open = 0, слот больше не должен отображаться.

    Примеры услуг

    Занятия йогой или салон красоты имеют следующие планы этажей и не имеют активных бронирований.

    Рисунок 1. План этажа без активных бронирований.

    Фид доступности для 2 слотов у этих торговцев будет выглядеть так:

    JSON

        {
          "availability": [
                {
                  "spots_total": 6,
                  "spots_open": 6,
                  "duration_sec": 3600,
                  "service_id": "1001",
                  "start_sec": 1535817600, # Sept 1, 2018 4:00:00 PM GMT
                  "merchant_id": "1001"
                },
                {
                  "spots_total": 6,
                  "spots_open": 6,
                  "duration_sec": 3600,
                  "service_id": "1001",
                  "start_sec": 1535832000, # Sept 1, 2018 8:00:00 PM GMT
                  "merchant_id": "1001",
                }
              ]
        }
        

    Примеры услуг с бронированием

    Рисунок 2. План этажа с одним активным бронированием.

    Теперь пользователь бронирует одно из мест. Когда происходит бронирование, в реальном времени выдается обновление для обновления доступности. Это бронирование должно быть отражено в следующем ежедневном фиде доступности. В канале доступности для этих продавцов значение Spot_open будет уменьшено на 1 для слота 1 сентября 2018 г., 16:00:00 по Гринвичу. Слот на 1 сентября 2018 г., 20:00:00 по Гринвичу, остается неизменным.

    Фрагмент фида с бронированием

    JSON

        {
          "availability": [
                {
                  "spots_total": 6,
                  "spots_open": 5,
                  "duration_sec": 3600,
                  "service_id": "1001",
                  "start_sec": 1535817600, # Sept 1, 2018 4:00:00 PM GMT
                  "merchant_id": "1001"
                },
                {
                  "spots_total": 6,
                  "spots_open": 6,
                  "duration_sec": 3600,
                  "service_id": "1001",
                  "start_sec": 1535832000, # Sept 1, 2018 8:00:00 PM GMT
                  "merchant_id": "1001",
                }
              ]
    }
        

    Повторение

    Определения параметров

    • повторение: представление последовательно повторяющихся слотов доступности.
    • повтор_до_сек: временная метка в формате UTC времени окончания последнего интервала, до которого повторяется доступность.
    • повтор_каждый_сек: количество секунд между последовательными интервалами доступности. Например, если повтор_каждый_сек = 1800 (30 минут), а начальный_сек начинается в 9:00, интервалы будут повторяться каждые 30 минут в 9:00, 9:30, 10:00 и т. д.
      • Примечание. Нет необходимости указывать Spots_open и Spot_total, они оба считаются равными 1, если не существует Schedule_Exception.

    Метод повторения указывает на ежедневную доступность услуг, которые выполняются через регулярные промежутки времени, например услугу, которая выполняется каждые 30 минут с 9:00 до 17:00 каждый день. При повторении вы указываете продолжительность слота, первый раз в день, когда слот появляется, как часто этот слот должен повторяться и когда в тот же день он должен перестать повторяться. Примечание: новый набор повторяющихся слотов необходимо указывать для каждого дня отдельно. Если слот уже забронирован в указанном временном диапазоне, вы укажете исключение из расписания. Например, повторяйте каждые полчаса с 9:00 до 21:00, кроме периода с 11:00 до 11:30. Каждая отдельная служба будет иметь свои собственные исключения повторения и планирования.

    Примеры услуг

    Салон красоты имеет следующую планировку и не имеет активных заказов.

    Рисунок 3. Планы этажей без активных бронирований. Предполагается, что на каждую услугу открыто только 1 место (например, Салли предоставляет услуги стрижки каждые 30 минут, но одновременно может обслуживать только 1 клиента).

    Фид доступности для 1 слота у этих продавцов будет выглядеть так:

    Фрагмент канала:

    JSON

        {
        "availability": [
              {
                "merchant_id": "1001",
                "service_id": "1001",  # haircut
                "start_sec": 1493888400, # May 4, 2017 9:00:00 AM GMT
                "duration_sec": 1800,
                "recurrence": {
                  "repeat_every_sec": 1800,
                  "repeat_until_sec": 1493915400 # May 4, 2017 4:30:00 PM GMT
                }
              }
            ]
        }
        

    Примеры услуг с бронированием

    Рисунок 4. Планы этажей с одним активным бронированием. Предполагается, что на каждую услугу открыто только 1 место (например, Салли предоставляет услуги стрижки каждые 30 минут, но одновременно может обслуживать только 1 клиента).

    Теперь представьте, что пользователь заказывает Салли стрижку в 12:30. Когда происходит бронирование, в реальном времени выдается обновление для обновления доступности. Это бронирование должно быть отражено в следующем ежедневном фиде доступности. В ленте доступности для этих продавцов будет исключено расписание с 12:30 до 13:00 для услуги продолжительностью 30 минут.

    Фрагмент фида с бронированием:

    JSON

        {
          "availability": [
                {
                  "merchant_id": "1001",
                  "service_id": "1001",
                  "start_sec": 1493888400, # May 4, 2017 9:00:00 AM GMT
                  "duration_sec": 1800,
                  "recurrence": {
                    "repeat_every_sec": 1800,
                    "repeat_until_sec": 1493915400 # May 4, 2017 4:30:00 PM GMT
                  },
                  "schedule_exception": [
                    {
                      "time_range": {
                        "begin_sec": 1493901000, # May 4, 2017 12:30:00 PM GMT
                        "end_sec": 1493902800 # May 4, 2017 1:00:00 PM GMT
                      }
                    }
                  ],
                }
              ]
        }