Określanie dostępności w plikach danych

Wybieranie formatu dostępności

Dane o dostępności można określić na 2 sposoby: (1) Otwarte Spoty lub (2) Powtarzanie. Wybierz tylko jedną metodę, której chcesz używać we wszystkich swoich sprzedawcach i usługach. Po wybraniu metody musisz się jej trzymać przez całą integrację (pliki danych, serwer rezerwacji i aktualizacje w czasie rzeczywistym).

Ten przewodnik pomoże Ci określić, który format dostępności jest bardziej odpowiedni:

  • Czy w systemie przechowujesz dostępność jako jawne przedziały czasu, np. 8:00–8:30?
  • Czy w systemie informacje o dostępności są przechowywane w formacie cyklicznym, co oznacza, że sprzedawcy mają usługi wykonywane ze stałą częstotliwością i z niewielkimi odchyleniami? Na przykład przedziały powtarzają się co 15 minut od 9:00 do 17:00 i w każdym co 15 minut ma miejsce tylko 1 miejsce.
  • Czy w przypadku usług Twoich sprzedawców w danym momencie może być więcej niż 1 wolne miejsce? np. 30 wolnych miejsc na zajęcia.
  • Żadna z powyższych sytuacji nie ma zastosowania?
    • Użyj opcji Spots Open (Otwarte).
    • Uwaga: chociaż powtarzanie jest skuteczniejsze i może prowadzić do zmniejszenia rozmiaru pliku danych, ale jeśli Twój model danych natywnie nie obsługuje powtarzania, nie zalecamy korzystania z powtarzania, ponieważ przy każdej aktualizacji w czasie rzeczywistym trzeba ponownie obliczać liczbę przedziałów cyklicznych z całego dnia.

    Otwarte miejsca

    Definicje parametrów:

    • spot_open: liczba miejsc obecnie dostępnych dla tego wpisu dostępności.
    • spot_total: łączna liczba miejsc, które sprzedawca ma w tej konfiguracji, w tym te, które są niedostępne.

    Metoda Spots Open wyraźnie wskazuje dostępność każdego przedziału i obsługuje model posiadania wielu miejsc dla tej samej usługi. Te 2 parametry działają razem, tworząc cyfrową reprezentację wydajności usług.

    Gdy następuje rezerwacja, liczba spot_open powinna zmniejszyć się o 1 w ramach aktualizacji w czasie rzeczywistym (liczba spotów_total powinna pozostać taka sama). Gdy miejsce spot_open ma wartość 0, boks nie powinien się już wyświetlać.

    Przykładowe usługi

    Zajęcia z jogi lub salon kosmetyczny mają poniższe plany pięter i nie są aktywne żadne rezerwacje

    Rysunek 1. Plan piętra bez aktywnych rezerwacji

    Plik danych dostępności dla dwóch przedziałów 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ą

    Rysunek 2. Plan piętra z 1 aktywną rezerwacją

    Teraz użytkownik rezerwuje jedno z miejsc. W momencie rezerwacji wysyłana jest aktualizacja w czasie rzeczywistym, by zaktualizować dostępność. Ta rezerwacja powinna zostać uwzględniona w następnym pliku danych o dostępności. W przypadku tych sprzedawców wartość w pliku danych o dostępności zmieniłaby się na godzinę 16:00 GMT 1 września 2018 r. o godz. 16:00:00 czasu GMT. Przedział czasu GMT 1 września 2018 r. o 20:00:00 czasu GMT pozostaje bez zmian.

    Fragment pliku 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

    • powtarzanie: reprezentacja stale powtarzanych przedziałów dostępności.
    • multiple_until_sec: sygnatura czasowa UTC czasu zakończenia ostatniego przedziału, do którego dostępność powtarza się;
    • Multiple_every_sec: liczba sekund między kolejnymi przedziałami dostępności. Na przykład: jeśli powtórzenie_każdego_sekundy = 1800 (30 minut), a element start_sec zaczyna się o 9:00, przedziały będą się powtarzać co 30 minut o 9:00, 9:30, 10:00 itd.
      • Uwaga: nie musisz określać opcji spot_open i spot_total; obie te wartości mają wartość 1, chyba że występuje wyjątek „schedule_exception”

    Metoda powtarzania wskazuje dzienną dostępność usług, które występują w regularnych odstępach czasu, na przykład usługi realizowanej co 30 minut w godzinach 9:00–17:00 każdego dnia. Powtarzanie pozwala określić czas trwania boksu, pierwsze wystąpienie boksu w dniu, jak często ma się on powtarzać i kiedy tego samego dnia powinien przestać się powtarzać. Uwaga: dla każdego dnia musisz określić nowy zestaw przedziałów cyklicznych. Jeśli przedział jest już zarezerwowany w danym przedziale czasu, określisz wyjątek od harmonogramu. Na przykład powtarzaj to co pół godziny od 9:00 do 21:00 z wyjątkiem 11:00–11:30. Każda usługa będzie miała własne wyjątki od harmonogramu i powtarzania.

    Przykładowe usługi

    Salon urody ma ten plan piętra i nie ma aktywnych rezerwacji

    Rysunek 3. Plany pięter bez aktywnych rezerwacji. Zajmuje się tylko 1 otwartym miejscem na usługę (np. Sandra oferuje strzyżenie fryzjerskie co 30 minut, ale może zajmować się tylko 1 klientem jednocześnie).

    Plik danych dostępności dla 1 przedziału u tych sprzedawców mógłby wyglądać tak:

    Fragment kanału:

    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 1 aktywną rezerwacją. Zajmuje się tylko 1 otwartym miejscem na usługę (np. Sandra oferuje strzyżenie fryzjerskie co 30 minut, ale może zajmować się tylko 1 klientem jednocześnie).

    Teraz wyobraźmy sobie, że użytkownik rezerwuje fryzurę u Sylwii o 12:30. Gdy rezerwacja się odbywa, przeprowadzana jest aktualizacja w czasie rzeczywistym w celu zaktualizowania dostępności. Ta rezerwacja powinna zostać uwzględniona w następnym pliku danych o dostępności. W przypadku tych sprzedawców plik danych o dostępności w przypadku usługi o długości 30 minut może mieć wyjątek dotyczący harmonogramu w godzinach 12:30–13:00.

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