5.5 KiB
05 - Dashboard, builder automatizaci a simulace
Stranky portalu
/dashboard prehled: dlazdice, graf za 14 dni, posledni tickety a incidenty
/dashboard/automatizace seznam a zalozeni nove
/dashboard/automatizace/:id builder: strom akci
/dashboard/konektory katalog sluzeb, jejich spousteču a akci
/dashboard/tickety seznam, filtry, prehled vytizeni tymu
/dashboard/tickety/:id detail ticketu: prubeh a log, resitel, zakaznik
/dashboard/incidenty prehled incidentu
/dashboard/nastaveni udaje o uctu
V postrannim menu je pod Nastavenim tlacitko Simulace.
Zivy dashboard
Portal drzi jedno SSE spojeni pro celou aplikaci. Zajistuje ho
EventStreamProvider v web/src/components/dashboard/.
- Stav spojeni ukazuje
LiveIndicatorv horni liste. Uzivatel musi poznat, ze data nejsou ziva. - Prichozi udalosti ukazuje
EventToastsjako bubliny vpravo dole. - Data se obnovuji sama.
useApiQueryma volitelnyrefetchOnse seznamem typu udalosti, po kterych se ma dotaz zopakovat. Vice udalosti tesne po sobe se slouci do jednoho nacteni.
Pri vypadku se stream znovu pripojuje s exponencialne rostoucim odstupem az do 15 sekund, aby pri vypadku serveru neubijel provoz.
Simulace provozu
Modalni okno se otevre tlacitkem Simulace. Umoznuje:
- zalozit ticket z vybraneho kanalu vcetne celeho logu, ktery k nemu vede, a s prepinacem, jestli se zakaznik v CRM dohleda nebo ne,
- vyvolat incident s vlastnim popisem, sluzbou a zavaznosti,
- vyresit prvni nevyrizeny ticket nebo bezici incident,
- spustit automatizaci uspesne nebo s chybou.
Kazda akce opravdu meni data na serveru, takze se projevi i v seznamech a v souhrnu, ne jen v bublinach.
Strom akci
Automatizace se sklada z spoustece a kroku. Krok je bud akce nad konektorem, nebo podminka se dvema vetvemi - proto je to strom, ne seznam.
interface AutomationFlow {
trigger: {
connectorId: string;
operationId: string;
fields: TriggerField[]; // vstupni parametry
webhookToken?: string; // generuje vyhradne server
} | null;
steps: FlowStep[];
}
type FlowStep =
| { id: string; kind: 'action'; connectorId: string; operationId: string }
| { id: string; kind: 'condition'; fieldId: string; operator: string;
value?: string; yes: FlowStep[]; no: FlowStep[] };
Podminka odkazuje na field.id, ne na nazev. Prejmenovani parametru proto
existujici podminky nerozbije.
Misto vlozeni urcuje FlowPath v web/src/lib/flow.ts: prazdne pole je hlavni
sekvence, [{ stepId, branch }] je vetev konkretni podminky.
Odkud se berou vstupni parametry
Jsou dva druhy spousteču a lisi se tim, kdo urcuje jejich parametry.
Parametry deklaruje uzivatel (webhook, formular). V katalogu maji
customPayload: true. V builderu se pridavaji rucne: nazev, typ (text, cislo,
ano-ne, datum) a povinnost.
Parametry urcuje sluzba (e-mail, WhatsApp, hlasova linka, ticket). V katalogu
je nese providedFields. Builder je ukazuje jen ke cteni a server je pri ulozeni
stromu vzdy dosadi z katalogu, jeste pred validaci. Podrobnosti a duvody jsou
v 06-tickety.md, sekce "Parametry od sluzby".
U spoustece typu webhook vygeneruje server pri ulozeni adresu
POST <verejna-adresa>/webhook/<token>.
Podminky pak porovnavaji hodnotu parametru, napriklad score >= 15. Nabidka
operatoru se ridi typem, na cislo nejde pustit "obsahuje". Tabulka operatoru je
na obou stranach - src/data/conditions.ts a web/src/lib/flow.ts. Server je
autorita, kopie na klientovi existuje jen proto, aby UI nenabidlo nesmysl.
Pri zmene upravit obe.
Dokud spoustec nema zadny parametr, nejde pridat podminka - nebylo by podle ceho se rozhodovat. Dialog to vysvetli.
Validace
Rozlisuji se dve veci:
Chyby vraci 400 a neulozi se: neexistujici konektor nebo operace, operace spatneho druhu, podminka na neexistujici parametr, operator nesedici na typ, duplicitni nebo nevalidni nazev parametru.
Nedodelky se ulozi, jen brani zapnuti: chybi spoustec, zadny krok, webhook
bez adresy, podminka bez hodnoty. Vraci se v poli issues a builder je vypise.
Rozdelana prace se nikdy nezahazuje.
Pridani konektoru
- Pridat zaznam do
connectorsvsrc/data/connectors.tsvcetnetriggersaactions. - Pokud pouziva novou ikonu, doplnit klic do
web/src/lib/connectorIcons.ts. Musi existovat vlucide-react. - Pokud patri do nove kategorie, doplnit ji do
connectorCategoriesa do typuConnectorCategoryna obou stranach. - Pokud spoustec predava vlastni data, deklarovat je v
providedFields. ID parametru musi zustat stabilni, odkazuji se na ne podminky v ulozenych stromech.
Builder i katalog ji vezmou automaticky.
Co chybi
| Chybi | Poznamka |
|---|---|
| Nastaveni poli akci | fields u akci se zobrazuji jen jako napoveda |
| Vazba logu ticketu na beh | log plni simulace, ne vykonany strom |
| Predavani dat do akci | chybi syntaxe odkazu, navrh je {{trigger.customer}} |
| Kombinovane podminky | jedna podminka je jedno porovnani, AND a OR jen vnorenim |
| Beh automatizaci | ulozeny strom se nevykonava |
| Historie behu a logy | prazdne, chybi runtime |
| Drag and drop | presouvani je zatim tlacitky nahoru a dolu |