ActiveSquad – generyczny system rezerwacji wycieczek i atrakcji

ActiveSquad potrzebował rozwiązania, które pozwoli uporządkować i zautomatyzować sprzedaż wycieczek oraz atrakcji. Celem nie było stworzenie kolejnego prostego formularza rezerwacyjnego, ale systemu, który obsłuży cały proces — od prezentacji oferty i wyboru terminu, przez rezerwację oraz płatność, aż po późniejszą komunikację z klientem.
System został zaprojektowany jako rozwiązanie generyczne, dzięki czemu jego logika nie jest związana z jednym konkretnym typem wycieczki. Może obsługiwać różne oferty, terminy, warianty uczestników, pobyty oraz odmienne modele płatności.
Rezerwacja od początku do końca
Klient wybiera interesującą go ofertę, termin oraz odpowiednią liczbę uczestników. System obsługuje różne grupy wiekowe i warianty cenowe, a następnie na podstawie wybranych parametrów oblicza wartość całej rezerwacji.
Każda rezerwacja składa się z konkretnych pozycji zawierających m.in. wybraną wycieczkę, datę, opcje oraz liczbę uczestników. Dzięki temu ten sam mechanizm może być wykorzystywany przy różnych rodzajach ofert bez konieczności budowania osobnego procesu dla każdej z nich.
Po zatwierdzeniu zamówienia system tworzy rezerwację i przeprowadza klienta do płatności.
Płatności online i obsługa należności
Jednym z ważniejszych elementów projektu było przygotowanie kompletnego procesu płatności.
System został zintegrowany z Revolut Merchant API. Po utworzeniu rezerwacji generowane jest zamówienie płatnicze, a klient może bezpiecznie przejść do checkoutu i dokonać płatności online.
Cała warstwa płatności została oddzielona od konkretnego operatora, dzięki czemu możliwe jest późniejsze dodawanie kolejnych dostawców bez przebudowy logiki rezerwacji.
System obsługuje również bardziej złożony model rozliczeń. Rezerwacja może zawierać informację o kwocie zapłaconej od razu oraz pozostałej należności. Dzięki temu możliwa jest obsługa zaliczek i późniejszych dopłat.
Przed terminem wycieczki system może automatycznie wykryć rezerwację z nieuregulowanym saldem, wygenerować płatność za pozostałą kwotę i wysłać klientowi wiadomość z linkiem umożliwiającym jej opłacenie.
Automatyczna komunikacja z klientem
Dużą część projektu stanowią procesy działające w tle.
System wysyła automatyczne wiadomości związane z rezerwacją, płatnościami oraz kolejnymi etapami obsługi klienta. Dzięki temu pracownik nie musi ręcznie pilnować każdej rezerwacji i przypominać klientom o kolejnych działaniach.
Po zakończeniu wycieczki system może również automatycznie poprosić uczestnika o wystawienie opinii.
Każde zaproszenie do wystawienia recenzji posiada indywidualny, bezpieczny token pozwalający klientowi przejść bezpośrednio do odpowiedniego formularza. Proces może wykorzystywać zarówno wiadomości e-mail, jak i kolejkę wiadomości SMS.
Pozwala to zautomatyzować również etap, o którym przy ręcznej obsłudze często się zapomina — zebranie opinii po zakończonej usłudze.
Terminy, wycieczki i pobyty
Rdzeń systemu nie opiera się wyłącznie na pojedynczym produkcie.
W modelu danych rozdzielone zostały m.in.:
wycieczki,
konkretne terminy ich realizacji,
pobyty,
uczestnicy i grupy wiekowe,
rezerwacje,
pozycje rezerwacji,
płatności.
Pozwala to elastycznie budować kolejne rodzaje ofert i rozwijać platformę bez przepisywania podstawowych mechanizmów sprzedaży.
System przygotowany do dalszego rozwoju
Od początku zależało mi na tym, żeby rozwiązanie nie było jednorazowym systemem napisanym wyłącznie pod jedną konkretną ofertę.
Logika rezerwacji, płatności i obsługi klienta została podzielona na osobne moduły i serwisy. Dzięki temu platformę można rozwijać o kolejne typy produktów, operatorów płatności czy zewnętrzne integracje.
System wykorzystuje również konfigurację domenową, dzięki której wygląd oraz część komunikacji mogą być dostosowywane do serwisu, z którego pochodzi rezerwacja. Pozwala to wykorzystać wspólny silnik rezerwacyjny w kilku serwisach lub markach bez utrzymywania osobnych aplikacji dla każdej z nich.
Panel i zaplecze rezerwacji
Po stronie administracyjnej system umożliwia zarządzanie rezerwacjami i kontrolowanie całego procesu obsługi klienta.
Informacje dotyczące klienta, wybranego terminu, produktów, wartości zamówienia oraz płatności znajdują się w jednym miejscu. Statusy płatności synchronizowane są z operatorem, a system odpowiednio reaguje na opłacenie, anulowanie lub niepowodzenie transakcji.
Pozwala to ograniczyć ręczne sprawdzanie płatności i przepisywanie informacji pomiędzy kilkoma narzędziami.
Technologie
Frontend platformy powstał w Next.js, natomiast backend został zbudowany w Laravelu z wykorzystaniem modułowej architektury.
System obejmuje m.in.:
Next.js — warstwa użytkownika i proces rezerwacji
Laravel — backend oraz logika biznesowa
Revolut Merchant API — płatności online
kolejki zadań — wiadomości i procesy wykonywane w tle
e-mail i SMS — automatyczna komunikacja z klientami
REST API — komunikacja między frontendem, backendem i zewnętrznymi usługami
Duża część logiki znajduje się po stronie backendu, dzięki czemu ceny, płatności i statusy rezerwacji nie są uzależnione od danych przesyłanych przez przeglądarkę użytkownika.
Efekt
W rezultacie powstał kompletny system obsługi rezerwacji wycieczek, który przejmuje znaczną część pracy wykonywanej wcześniej ręcznie.
Od momentu wyboru wycieczki klient przechodzi przez spójny proces rezerwacji i płatności, natomiast system zajmuje się statusami, komunikacją, należnościami oraz późniejszym kontaktem.
Dzięki generycznej architekturze rozwiązanie może być dalej rozwijane i wykorzystywane przy kolejnych ofertach oraz serwisach bez konieczności tworzenia każdego procesu od początku.
ActiveSquad jest dla mnie przykładem projektu, w którym technologia nie jest celem samym w sobie — jej zadaniem jest przede wszystkim uprościć codzienną pracę firmy i zautomatyzować proces, który przy rosnącej liczbie klientów szybko staje się trudny do obsługi ręcznie.
