SENSET – história vzniku, problém a riešenie
Keď nás navštívil klient s prvou myšlienkou, jednalo sa o jednoduchú internú taxi aplikáciu pre jeho firmu. Začal kolobeh viacerých stretnutí a výmeny myšlienok, ako by mohol fungovať telefonický Taxi dispečing bez dispečérok, len cez aplikáciu.
Problém taxi firiem v menších mestách je, že chcú mať jedno telefónne číslo (ktoré kvalitne promujú), no na tom čísle musí niekto prijímať a vybavovať hovory.
Taxi firmy mali len 2 možnosti
Centrálny telefón dvíha priamo jeden “hlavný vodič” ktorý ďalej po vysielačke nejakou osobnou logikou rozdeľuje zákazky. Má to viacero rizík: personálnych, organizačných aj bezpečnostných (áno, robí to neustále za jazdy so zákazníkmi)
Alebo ak je firma väčšia, tak už zamestnáva za nemalé mesačné náklady 3 a viac dispečérok. Znova personálne, osobné a v tomto prípade aj finančné záťaže.
Nápad sa teda vyprofiloval do reálneho zadania.
Chceme aby zákazníci volali na jedno centrálne tel. číslo, keďže to v menších mestách stále takto chodí. Vodičom dajme jednoduchú aplikáciu do mobilov/tabletov, kde budú vedieť prijať zákazky a presúvať si ich medzi sebou. Musia sa vidieť na mape a systém za nich musí férovo rozdeľovať zákazky medzi sebou.
Navrhli sme funkčnú špecifikáciu
Keďže klient nemal technické zázemie, zapojili sme sa priamo do napísania funkčnej špecifikácie do všetkých detailov. Do technickej analýzy a researchu trhu od A-Z. Snažili sme sa zistiť a nájsť podobné riešenia, ich výhody a nevýhody.
Tieto materiály sa ďalej používali aj pre zadanie verejného obstarávania na získanie finančných prostriedkov z eurofondov.
Hybridná mobilná aplikácia vo Vue.js cez Phonegap
Aplikácia si prešla rôznymi zmenami či rozhodnutiami zo strany programovania aj biznis logiky. Nakoľko sa jedná o celkom unikátny systém a kombináciu technológii, nebolo vždy jednoduché rozhodnúť ako aplikáciu postaviť.
Vodiči šoférujú počas používania, sú vo veku 18-65 rokov, niektorí ani nedržali dotykový telefón v rukách. Nakoľko sú autá v pohybe a zameriavame sa na menšie mestá, autá často zachádzajú aj do obcí kde nie je mobilný signál.
Použité sú svetové technológie
Komunikačným prostriedkom backendu a aplikácie sú REST API, push eventy a websockety. Po otestovaní a spustení BETA verzie v roku 2019 sme agilným prístupom refaktorovali jadro systému kým ešte nebolo veľmi rozsiahle, doplnili sme nadstavbu pre administračné rozhrania Laravel Nova a pripravovali nové API služby ktoré sú dokumentované automaticky nástrojom Swagger. Hlavné systémové funkcie sú pokryté Unit testami + Cypress testami, ktoré spúšťame automatizovane pred každým deploy (nahrávaním) na testovací a produkčný server.
Riadiaca aplikácia pre vodičov taxi
Aplikácia vodičom slúži na jednoduchú obsluhu prijatých zákaziek.
Presúvanie zákaziek medzi vodičmi, zachytávanie nevybavených zákaziek a systém sme napodmienkovali na desiatky nových situácii ktoré začali vznikať (neprijaté hovory, súčasné hovory na jedno číslo, hovory na obsadené linky, čo ak sú všetci vodiči obsadení, zrušenie zákaziek, atď. atď.)
Systém ponúka aj plánované objednávanie, kde pomocou jednoduchého formulára môže vodič alebo majiteľ zadať plánovanú zákazku na iný dátum a čas, miesto a počet osôb. Takéto zákazky sa automaticky v správnu chvíľu pridelia voľnému vodičovi. Na základe GPS vypočítame dostatočný čas upozornenia vodiča, podľa vzdialenosti k zákazníkovi. Následne X minút pred zákazkou systém vyberie voľného vodiča a zavolá mu na mobil s nahratým hlasom, kde si vypočuje že dostal plánovanú objednávku a má ju ísť vybaviť.
Centrálny systém prepojený s telefonickou ústredňou
Naprogramovali sme najskôr backend systém s pomocou PHP frameworku Laravel a jeho ďalších rozšírení.
Celý systém sa skladá zo šietich hlavných súčastí:
- riadiaci backend systém pre majiteľa
- mobilná aplikácia vodičov (iOS aj Android)
- zákaznícka mobilná aplikácia (iOS aj Android)
- dispečérsky modul pre manuálne riadenie na veľkom monitore
- externý objednávkový formulár umiestniteľný na web klienta
- telefonická ústredňa ktorá zabezpečuje prijímanie a prepájanie hovorov.