Strukturyzowanie dostępności w plikach danych

Wybór formatu dostępności

Dane dotyczące dostępności można określić na 2 sposoby: (1) miejsca dostępne lub (2) powtarzanie. Wybierz tylko jedną metodę do użycia we wszystkich sprzedawcach i usługach. Po wybraniu metody musisz jej używać w całości integracji (pliki danych, serwer rezerwacji i aktualizacje w czasie rzeczywistym).

Skorzystaj z tego przewodnika, aby określić, który format dostępności jest bardziej odpowiedni:

  • Czy w Twoim systemie dostępność jest przechowywana jako konkretne przedziały czasowe, na przykład 8:00–8:30?
  • Czy w Twoim systemie dostępność jest przechowywana w powtarzalnym formacie, co oznacza, że usługodawcy oferują usługi o stałej częstotliwości z niewielką liczbą odstępstw? Na przykład sloty powtarzają się co 15 minut w godzinach 9:00–17:00, a w każdym 15-minutowym interwale dostępne jest tylko jedno miejsce.
  • Czy w przypadku usług sprzedawców może być więcej niż jedno miejsce naraz? Na przykład 30 miejsc w zajęciach
  • Żadne z tych stwierdzeń nie pasuje?
    • Użyj miejsc dostępnych.
    • Uwaga: choć używanie powtórzeń jest wydajniejsze i może skutkować mniejszymi rozmiarami plików danych, jeśli Twój model danych nie obsługuje powtórzeń w wersji natywnej, nie zalecamy korzystania z powtórzeń, ponieważ będziesz musiał ponownie przeliczyć powtarzające się sloty na cały dzień dla każdej aktualizacji w czasie rzeczywistym.

    Spots Open

    Definicje parametrów:

    • spots_open: liczba miejsc obecnie dostępnych w przypadku tego wpisu z informacją o dostępności.
    • spots_total: łączna liczba miejsc, które sprzedawca ma w ramach tej konfiguracji, w tym tych, które są niedostępne.

    Metoda otwartych miejsc reklamowych wyraźnie wskazuje dostępność każdego miejsca reklamowego i wspiera model z kilkoma miejscami reklamowymi dla tej samej usługi. Te dwa parametry współpracują ze sobą, aby tworzyć cyfrowe odwzorowanie pojemności usługi.

    Gdy nastąpi rezerwacja, liczba miejsc_dostępnych powinna zmniejszyć się o 1 w ramach aktualizacji w czasie rzeczywistym (liczba miejsc_razem powinna pozostać taka sama). Gdy spots_open = 0, boks nie powinien się już wyświetlać.

    Przykładowe usługi

    Zajęcia jogi lub salon kosmetyczny mają takie plany piętra i brak aktywnych rezerwacji:

    Ilustracja 1. Plan piętra bez aktywnych rezerwacji

    Plik danych z dostępnością dla 2 miejsc u tych sprzedawców wyglądałby tak:

    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",
                }
              ]
        }
        

    Przykładowe usługi z rezerwacją

    Ilustracja 2. Plan piętra z jedną aktywną rezerwacją

    Użytkownik rezerwuje jedno z miejsc. Gdy nastąpi rezerwacja, w czasie rzeczywistym wysyłana jest aktualizacja dostępności. Rezerwacja powinna zostać uwzględniona w kolejnych codziennych plikach danych z dostępnością. W pliku danych o dostępności tych sprzedawców wartość wymiaru spots_open zostałaby zmniejszona o 1 dla 1 września 2018 r., 16:00 czasu UTC. Czas 8:00:00 1 września 2018 r. (czasu GMT) pozostaje bez zmian.

    Fragment danych z rezerwacją

    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",
                }
              ]
    }
        

    Powtarzanie

    Definicje parametrów

    • recurrence: reprezentacja stale powtarzających się przedziałów dostępności.
    • repeat_until_sec: sygnatura czasowa UTC czasu zakończenia ostatniego przedziału, w którym dostępność jest powtarzana.
    • repeat_every_sec: liczba sekund między kolejnymi przedziałami dostępności. Jeśli na przykład parametr repeat_every_sec = 1800 (30 minut), a wartość parametru start_sec to 9:00, sloty będą się powtarzać co 30 minut o godzinach 9:00, 9:30, 10:00 itd.
      • Uwaga: nie trzeba podawać wartości atrybutów spots_open ani spots_total, ponieważ zakładają one, że ich wartość wynosi 1, chyba że występuje atrybut schedule_exception.

    Metoda powtarzania wskazuje dostępność na podstawie codziennych usług, które występują w regularnych odstępach czasu, na przykład usługa, która odbywa się co 30 minut od 9:00 do 17:00 każdego dnia. W przypadku powtórzeń musisz określić czas trwania slotu, jego pierwszy czas wystąpienia w ciągu dnia, częstotliwość powtarzania oraz czas, do którego ma się powtarzać. Uwaga: dla każdego dnia należy określić nowy zestaw powtarzających się przedziałów. Jeśli w podanym zakresie czasowym slot jest już zarezerwowany, należy określić wyjątek do harmonogramu. Na przykład powtarzaj co pół godziny od 9:00 do 21:00, z wyjątkiem godzin 11:00–11:30. Każda usługa będzie miała własne wyjątki dotyczące powtarzania i harmonogramu.

    Przykładowe usługi

    Salon piękności ma taki plan piętra i brak aktywnych rezerwacji

    Rysunek 3. Plany pięter bez aktywnych rezerwacji. Zakładamy, że na każdą usługę przypada tylko 1 miejsce (np. Sally świadczy usługi strzyżenia co 30 minut, ale może zajmować się tylko 1 klientem naraz).

    Plik danych z dostępnością dla 1 miejsca u tych sprzedawców będzie wyglądał tak:

    Fragment pliku danych:

    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
                }
              }
            ]
        }
        

    Przykładowe usługi z rezerwacją

    Rysunek 4. Plany pięter z jedną aktywną rezerwacją. Zakładamy, że na każdą usługę przypada tylko 1 miejsce (np. Sally świadczy usługi strzyżenia co 30 minut, ale może zajmować się tylko 1 klientem naraz).

    Wyobraź sobie, że użytkownik umawia się na strzyżenie do Sally o 12:30. Gdy dokonano rezerwacji, informacja o dostępności jest aktualizowana w czasie rzeczywistym. Rezerwacja powinna zostać uwzględniona w następnym pliku danych o dostępności na dany dzień. Plik danych o dostępności tych sprzedawców zawierałby wyjątek dotyczący harmonogramu w godzinach 12:30–13:00 dla usługi trwającej 30 minut.

    Krótki tekst w pliku danych z rezerwacją:

    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
                      }
                    }
                  ],
                }
              ]
        }