Share via


NFCtron zkrotí sebevětší akci a naservíruje data ceny zlata

Představte si akci, na které nejenže proudí davy spokojených návštěvníků, ale úsměv na rtech lze spatřit i v řadách organizátorů. Ještě aby ne. Po první hodině se podívali na real-time data a věděli, že už vydělali na zaplacení nájmu. Po druhé hodině zjistili, že se již dostali z červených čísel, a před koncem akce už mohli plánovat dovolenou. Třeba na Azurovém pobřeží. Proč právě tam? Systém NFCtron, který dokáže daleko víc než jen tyto zmíněné divy, totiž plně využívá výhod platformy Microsoft Azure.

Na počátku systému NFCtron byl problém. Vlastně hned několik problémů. Chtěli jsme uspořádat akci řádově pro tisícovky lidí, ale rozhodně jsme nehodlali trpět zdržování a fronty kvůli počítání útraty, vracení drobných a ťukání PINů platebních karet. Také jsme neměli v úmyslu vybírat od prodejců klasický poplatek za pronájem místa, ale výši poplatku jsme dohodli na určitých procentech z obratu. Jenže jak ho spolehlivě a co nejrychleji zjistit? A do třetice jsme toužili po tom, abychom se dostali k marketingově a ekonomicky zajímavým a užitečným datům.

S těmito třemi hlavními požadavky jsme se samozřejmě nejprve vrhli do zkoumání internetových vod. Neúspěšně. žádné řešení ani aplikace nám nemohly poskytnout přesně to, co jsme potřebovali. Vzali jsme to jako hozenou rukavici a rozhodli se stvořit vlastní systém.

Symfonie pro čipy a čtečky

Základem všeho se staly NFC čipy. Práci s touto technologií jsme už měli oťukanou z našeho dalšího projektu čerstvá sváča. Nicméně pro jednorázový event, který jsme připravovali, bylo potřeba vytvořit zbrusu nové řešení.

Naše představa byla taková, že po příchodu na akci dostane návštěvník NFC čip s unikátním ID. Na čip si v několika speciálních stanech s pokladnami nabije kredit platební kartou nebo za hotové. Veškeré platby na prodejních místech pak už probíhají pouhým přiložením čipu ke čtečce, která je přes USB připojena k dotykovým zařízením (např. tablet nebo konvertibilní notebook), na nichž běží aplikace v módu pro příjem objednávek. Po přiložení čipu obsluha jedním ťuknutím vybere objednané zboží a potvrdí prodej. K zařízením může být připojen navíc i monitor pro zákazníky, na němž se zobrazuje aktuální stav objednávky a dostupný kredit. Zákazníci tak mohou kontrolovat proces objednávky a také vidí, kolik kreditu jim na čipu ještě zbývá.

Hledají se optimální technologie

Zadání bylo tedy jasné. Co se týče technologické stránky, rozhodli jsme se aplikaci postavit na multiplatformním řešení Electron.js, což je framework, který umožňuje tvorbu nativních desktopových aplikací za pomoci webových technologií, JavaScriptu (Node.js), HTML a CSS. Pro vykreslování UI jsme použili React.js. Aplikace využívá Redux architekturu.

Jednou z nejtěžších věcí bylo zajistit komunikaci aplikace s připojenou čtečkou přes USB. Naštěstí tento problém vyřešila technologie Node Native Modules, která umožňuje přidat do aplikace C/C++ rozšíření, které může využívat nativní systémové knihovny pro komunikaci se čtečkou.

Díky tomuto řešení je aplikace multiplatformní a umožňuje sestavení pro všechny běžné desktopové operační systémy (Windows, Linux, OS X). V případě naší pilotní akce jsme se rozhodli využít dotyková zařízení se systémem Windows 10.

Abychom mohli jednoduše vytvářet nové buildy aplikace, nasadili jsme průběžnou integraci. Po každém commitu dojde na CI serveru automaticky k sestavení a otestování aplikace. Výsledná spustitelná aplikace je poté přesunuta do cloudového úložiště Azure Storage, odkud je možné ji stáhnout a následně spustit na koncových zařízení.

Jako CI server jsme využili řešení AppVeyor, protože na něm běží OS Windows, a je tedy možné sestavit aplikaci pro chod na Windows. Do budoucna zvažujeme použití Visual Studio Team Services, které kromě průběžných sestavení aplikace nabízejí i nástroje pro řízení vývoje a hostování kódu.

Po dokončení aplikace jsme narazili na problém, jak ji jednoduše distribuovat do koncových zařízení. Pro pilotní akci jsme se spokojili s ručním stahováním a instalací, ale do budoucna přemýšlíme o distribuci přes Windows Store, což by celý proces značně usnadnilo a urychlilo.

Aplikace komunikovala se serverem pomocí REST API a WebSockets. Serverovou aplikaci jsme napsali v node.js. Využili jsme Express.js a Socket.io. Data jsme se rozhodli ukládat v MongoDB. Po dokončení backendu vyvstala otázka, kam aplikaci nasadíme, abychom ji mohli jednoduše monitorovat, aktualizovat a škálovat. Nechtěli jsme se soustředit na správu serveru, nýbrž na aplikaci samotnou. Proto jsme se rozhodli využít některé z cloudových řešení typu PaaS. Po vyhodnocení funkcí, které jednotlivé cloudy nabízejí, jsme vsadili na Azure Web Apps na platformě Microsoft Azure.

Azure Web Apps mimo jiné nabízejí automatické škálování, deploy přes Git, podporu pro node.js nebo monitorování aplikace. Vzhledem k tomu jsme se rozhodli hostovat databázi také na platformě Microsoft Azure. Využili jsme MongoLab, který nabízí nasazení MongoDB do Microsoft Azure. Do budoucna přemýšlíme o migraci na databázi Azure DocumentDB, která je nativně podporována v cloudu Azure, nabízí škálování, replikace, nízkou latenci, vysokou dostupnost i jednoduchou správu. Navíc Microsoft nyní uvolnil podporu protokolu MongoDB pro DocumentDB, takže je možné přejít na DocumentDB bez nutnosti přepisovat aplikaci, která byla původně napsaná pro MongoDB.

nfctron_architecture

Data s cenou zlata

Takto tedy vznikl systém NFCtron. Celé řešení se povedlo úspěšně otestovat v provozu na akci Slavnosti růžového vína Třebíč. Kromě už zmíněných funkcionalit jsme si vyzkoušeli také průběžné sledování dat. Systém totiž poskytuje real-time monitoring, takže je možné živě sledovat například počty objednávek na jednotlivých prodejních místech, sumy nabitých kreditů a utracených peněz.

Data dále ukazují nákupní aktivity a preference jednotlivých zákazníků, dobu strávenou na akci, utracenou sumu atd. Analyzovat lze také nabízený sortiment. Díky tomu, že vidíte prodávanost jednotlivých položek, můžete předvídat vývoj a po porovnání se skladovými zásobami operativně jednat a případně zajistit dodání nejžádanějšího zboží, u něhož hrozí vyprodání. Dále lze na základně analýzy optimalizovat rozložení stánků, přidat nákupní místa nebo upravit nabídku.

Oproti konkurenčním řešením představuje NFCtron komplexní a škálovatelné řešení, které je vždy přizpůsobeno klientovi na míru přesně podle potřeb jeho akce. Rovněž real-time monitoring a následné poradenství na základě získaných dat je unikátní.

Systém NFCtron nadále průběžně vylepšujeme. Z nově plánovaných funkcionalit zmiňme alespoň ticket systém, možnost nabíjení kreditu dopředu před akcí přes web nebo mobilní aplikaci, platbu mobilem nebo tisk účtenek. Kupa práce, že? Víme. A proto hledáme další zapálené vývojáře. Chtěli byste ukázat genialitu vašeho vývojářského mozku a podílet se na udávání směru NFCtronu? Podívejte se na to, jakým způsobem pracujeme, a pokud hrajeme podle podobných not, budeme rádi, když se ozvete.