Opis za rad
Node 22+, bez ijedne zavisnosti (`node:http`, ugrađeni `fetch`). Svaki klijent ima svoju bazu znanja u JSON-u i svoj `config/client.json`; novi vertikal je novi JSON, ne novi kod.
Kako se pokreće
node src/cli.mjs serve # HTTP (PORT, default 8788; this demo runs on 8798)
node _qa/smoke.mjs # 12/12 checks, offline, $0
node src/cli.mjs test --file sample/lead-implant.json
node src/cli.mjs metrics
node src/cli.mjs digest --day 2026-10-21
# live model (production): "llm": { "mode": "live" } + DEEPSEEK_API_KEY
# without a key the machine falls back to offline rules
API
| metod | putanja | šta radi |
|---|---|---|
POST | /lead | novi upit (JSON ili form) — kanal se povezuje ovde |
POST | /lead/:id/message | novi nastavak razgovora |
GET | /lead/:id | ceo razgovor |
POST | /lead/:id/takeover | čovek preuzima razgovor |
POST | /lead/:id/human-reply | odgovor čoveka u istom toku |
POST | /learn | novo pravilo jednom rečenicom |
GET | /watch | dashboard za nadzor |
GET | /metrics | brojevi: ukupno, izuzeća, prosečno i p95 vreme odgovora, SLA |
GET | /digest?day= | dnevni izveštaj (isti tekst koji ide na Telegram) |
Podaci
- knowledge/<klijent>.json — usluge, cene, radno vreme, pravila, FAQ (baza znanja je proizvod)
- config/client.json — ime klijenta, ton, SLA, kvalifikacija, CRM (bez tajni)
- data/events.jsonl — svaki događaj sa vremenom (append-only, izvor metrika)
Ograničenja — šta ovaj demo ne radi
- Demo radi offline (pravila po ključnim rečima) — dovoljno za prikaz, ne za prodaju bez modela.
- Nema adaptera za mejl/WhatsApp — kanal je webhook na `/lead`; dostava odgovora je sledeći adapter.
- Jedan klijent po instanci (jedan `config/client.json`).
- Demo nema autentikaciju — svako može da pošalje upit i preuzme razgovor.
Kako se postavlja
Jedan Node proces iza nginx-a, systemd servis, Let’s Encrypt. Recept: E:\poslovi\DEMO-REGISTAR.md.
Demo ne troši novac: režim je offline, nema `DEEPSEEK_API_KEY` u okruženju.