Tok rada: SmartCRM — Dvosmerna ERP sinhronizacija
Uključeni moduli: SmartCRM · Lidovi · Klijenti · Fakture · Projekti · Tiketi · Proizvodi · Magacin
Ko ga koristi: Administrator · IT · Operacije
Tipično trajanje: Ručna sinhronizacija = minuti · Automatska sinhronizacija = svakih 1/2/4/12/24 sata (konfigurabilan)
Pregled
SmartCRM je dvosmeran konektor između CRMConnect-a i eksternog ERP/CRM sistema (npr.: vlasnički ERP ili drugi CRM), a ne AI ili alat za bodovanje. Sinhronizuje u oba smera: uvozi podatke iz eksternog sistema u CRM i izvozi CRM zapise u eksterni sistem.
Sinhronizovani entiteti:
| Entitet | Uvoz (eksterno → CRM) | Izvoz (CRM → eksterno) |
|---|---|---|
| Proizvodi + cene | ✓ | ✗ |
| Grupe proizvoda | ✓ | ✗ |
| Klijenti + kontakti | ✓ | ✓ |
| Narudžbine / Profakture | ✓ (kao prodajne narudžbine) | ✗ |
| Zalihe po magacinu | ✓ | ✗ |
| Popusti po grupi | ✓ | ✗ |
| Lidovi | ✓ | ✓ |
| Projekti | ✓ | ✓ |
| Tiketi | ✓ | ✓ |
| Fakture | ✓ | ✓ |
Modul bodovanja: modul
scoringje nefunkcionalan u isporučenom stanju — SQL za instalaciju i hook-ovi za aktivaciju su potpuno zakomentarisani u kodu. Tabele se ne kreiraju pri aktivaciji. Ne postoji operativno izračunavanje ocene. Ne integriše se sa SmartCRM-om.
Dijagram toka
[PODEŠAVANJE — admin, obavezno pre prve sinhronizacije]
│
├── SmartCRM → Podešavanja:
│ ├── smartcrm_api_url (URL eksternog sistema + /index.php/api/)
│ ├── smartcrm_auth_token (Bearer token za REST API)
│ ├── smartcrm_client_token (odvojen token za sinhronizaciju entiteta V2 — OBAVEZAN)
│ ├── smartcrm_currency_mapping (JSON mapiranje ID valute eksternog sistema → lokalni)
│ └── Test veze → provera povezivosti
│
├── Konfiguracija crona (opciono):
│ ├── smartcrm_cron = 'yes'
│ └── smartcrm_interval: 1/2/4/12/24 sata
│
└── Batch podešavanja:
smartcrm_batch_size (podrazumevano 50)
smartcrm_api_timeout (podrazumevano 30s)
smartcrm_max_retries (podrazumevano 3, sa eksponencijalnim odlaganjem)
│
↓
════════════════════════════════════
UVOZ — PODACI IZ EKSTERNOG U CRM
════════════════════════════════════
│
├── Ručno: SmartCRM → Sinhronizacija → dugme po entitetu
├── Automatski (cron): svih 5 glavnih entiteta ako je interval protekao
│
├── Tok uvoza po entitetu:
│ ├── GET /api/{entitet} iz eksternog sistema (sa auth tokenom)
│ ├── Deduplikacija: proverava external_id + external_channel='smartcrm'
│ ├── INSERT ili UPDATE u CRM tabelama
│ └── Označiti sa external_id + external_channel='smartcrm'
│
├── Entiteti sa naprednom sinhronizacijom (sync_entity_v2 — zahteva smartcrm_client_token):
│ ├── Jedinice mere
│ ├── Grupe proizvoda → tblitems_groups
│ ├── Proizvodi sa cenama po magacinu → tblitems
│ ├── Klijenti sa mapiranjem okruga/mesta → tblclients
│ ├── Grupe klijenata → tbldiscount_groups
│ ├── Kontakti → tblcontacts
│ ├── Narudžbine/Profakture → tblcart + tblcart_detailt
│ ├── Valute → tblcurrencies (zahteva currency_mapping)
│ ├── Magacini → tblwarehouse
│ ├── Zalihe → tblinventory_manage
│ └── Mreže popusta → tblitem_client_group_discounts
│
└── Log: svaka operacija → tbl_smartcrm_logs (nivo, entitet, obrađeni/uspešni/neuspešni zapisi)
│
↓
════════════════════════════════════
IZVOZ — PODACI IZ CRM U EKSTERNO
════════════════════════════════════
│
├── Identifikacija novih zapisa: WHERE external_channel IS NULL OR != 'smartcrm'
├── Formatiranje korisnih podataka putem format_{entitet}_for_smartcrm()
├── POST /api/{entitet} u eksterni sistem
├── Uspešno: mark_as_exported_to_smartcrm() → external_id + external_channel='smartcrm'
└── Neuspešno: ponovi sa eksponencijalnim odlaganjem (2^n sekundi, maks smartcrm_max_retries)
│
↓
[PRAĆENJE]
│
├── SmartCRM → Kontrolna tabla: statistike sinhronizacije (uneseno/ažurirano/neuspešno po entitetu po danu)
├── SmartCRM → Logovi: detalji po operaciji (nivo: DEBUG/INFO/WARNING/ERROR)
├── SmartCRM → Pregled grešaka: grupisane greške
└── reset_statistics() / cleanup_logs() — ručno čišćenje
[SINHRONIZACIJA ZAVRŠENA ✓ · DVOSMERANI PODACI ✓]
Korak po korak
1. Početno podešavanje (admin)
Gde: /admin/smartcrm → Podešavanja
1a. API akreditivi (obavezni)
| Opcija | Opis |
|---|---|
smartcrm_api_url |
Bazni URL eksternog sistema (npr.: https://erp.kompanija.com/). Modul automatski dodaje index.php/api/{entitet} |
smartcrm_auth_token |
REST Bearer token za autentifikaciju na /api/leads, /api/clients, itd. |
smartcrm_client_token |
Odvojen token koji koristi sync_entity_v2 za napredne entitete (proizvodi, zalihe, grupe). Ovaj token se ne pojavljuje u UI podešavanja — mora se ručno postaviti u tbloptions sa name='smartcrm_client_token'. Bez njega, sync_entity_v2 ne uspeva sa "Missing client token". |
Test povezivosti: dugme Test veze → proverava dostupnost URL-a + važnost tokena.
1b. Mapiranje valuta (obavezno ako se sinhronizuju cene)
Gde: Podešavanja → Mapiranje valuta
JSON mapiranje ID-ova valuta eksternog sistema na lokalne ID-ove:
{"1": 1, "2": 3, "5": 2}
(npr.: ID 1 u eksternom = ID 1 lokalni = RON; ID 2 u eksternom = ID 3 lokalni = USD)
Bez ovog mapiranja, sinhronizacija cena vraća grešku.
1c. Konfiguracija automatskog crona
| Opcija | Vrednosti | Opis |
|---|---|---|
smartcrm_cron |
'yes' / 'no' |
Omogući automatsku sinhronizaciju |
smartcrm_interval |
1, 2, 4, 12, 24 |
Interval u satima između sinhronizacija |
Pri svakom pokretanju CRM crona, sync_cron_smartcrm() proverava da li je smartcrm_cron = 'yes' i da li je interval protekao od smartcrm_last_update. Ako je tako, sinhronizuje svih 5 glavnih entiteta.
1d. Podešavanja performansi
| Opcija | Podrazumevano | Opis |
|---|---|---|
smartcrm_batch_size |
50 | Zapisi po zahtevu |
smartcrm_api_timeout |
30 | Istek zahteva u sekundama |
smartcrm_max_retries |
3 | Ponovni pokušaji pri neuspehu (odlaganje: 2^n sec) |
smartcrm_log_level |
INFO | DEBUG / INFO / WARNING / ERROR |
2. Ručna sinhronizacija po entitetu
Gde: /admin/smartcrm → kartica Sinhronizacija
Odvojena dugmad po entitetu:
- Sinhronizuj lidove — uvoz/izvoz lidova
- Sinhronizuj klijente — uvoz/izvoz klijenata
- Sinhronizuj projekte — uvoz/izvoz projekata
- Sinhronizuj tikete — uvoz/izvoz tiketa
- Sinhronizuj fakture — uvoz/izvoz faktura
- Sinhronizuj entitet V2 (višestruki odabir) — proizvodi, zalihe, grupe, narudžbine, itd. (zahteva
smartcrm_client_token) - Izvezi → SmartCRM (po entitetu) — izvozi lokalno neoznačene zapise
3. Mehanizam deduplikacije
Sinhronizovani zapisi se označavaju sa:
external_id— ID iz eksternog sistemaexternal_channel = 'smartcrm'— identifikuje izvor
Pri ponovnoj sinhronizaciji, sistem proverava postojanje external_id + external_channel pre INSERT-a → vrši UPDATE ako postoji, INSERT ako ne postoji.
Zapisi kreirani lokalno (bez external_channel) su prihvatljivi za izvoz.
4. Praćenje i logovi
Gde: /admin/smartcrm/dashboard + /admin/smartcrm/errors_overview
Kontrolna tabla (tbl_smartcrm_sync_stats): po danu po entitetu — ukupno/uneseno/ažurirano/neuspešno + status (SUCCESS/FAILED/PARTIAL).
Logovi (tbl_smartcrm_logs): kompletni detalji po operaciji sa records_processed, records_success, records_failed, execution_time.
Čišćenje:
reset_statistics()— resetuje brojače (zahtevasmartcrm → edit)cleanup_logs()— briše logove (zahtevasmartcrm → delete)
Napomena o modulu bodovanja
Modul scoring je instaliran ali nefunkcionalan:
- SQL za kreiranje tabela u
install.phpje potpuno zakomentarisan (/* ... */) - Hook za aktivaciju (
scoring_module_activation_hook) je zakomentarisan - Meni i dozvole nisu registrovani
- Funkcija
save_scoring_lead()je prazan stub - Tražene tabele se ne kreiraju kada se modul aktivira
Ako vam je potrebno operativno bodovanje lidova, ovaj modul zahteva ručnu intervenciju (ručno kreirajte tabele u bazi podataka + odkomentarišite kod).
Potrebne dozvole
| Dozvola | Pristup |
|---|---|
smartcrm → view |
Pristup kontrolnoj tabli, logovima, statistikama, dugmadima sinhronizacije |
smartcrm → edit |
Resetovanje statistike |
smartcrm → delete |
Čišćenje logova |
| Podešavanja SmartCRM | Dostupno zaposlenima sa view (bez dodatne admin provere) |
Česte greške
| Problem | Uzrok | Rešenje |
|---|---|---|
| Sinhronizacija entiteta V2 ne uspeva sa "Missing client token" | smartcrm_client_token nije postavljen |
Ručno unesite u tbloptions: INSERT INTO tbloptions (name,value,autoload) VALUES ('smartcrm_client_token','VREDNOST_TOKENA',0) |
| Cene se ne sinhronizuju | smartcrm_currency_mapping nedostaje ili je nevažeći JSON |
Konfigurišite ispravno mapiranje u Podešavanjima |
| Duplirani zapisi pri ponovnoj sinhronizaciji | external_id nedostaje iz eksternog odgovora |
Proverite da eksterni API vraća dosledno ID polje |
| Cron ne sinhronizuje | smartcrm_cron != 'yes' ili interval nije protekao |
Omogućite cron + proverite smartcrm_last_update u tbloptions |
| Spor krug ponovnih pokušaja | max_retries=3 + odlaganje 2^n = 1+2+4=7 dodatnih sekundi po neuspešnom entitetu |
Smanjite smartcrm_max_retries na 1 za brzu sinhronizaciju ili povećajte api_timeout |
Reference modula
- Lidovi — sinhronizovani lidovi
- Klijenti — sinhronizovani klijenti
- Fakture — sinhronizovane fakture
- Magacin — sinhronizovane zalihe
- Integracije — Merlin ERP — drugi dostupni ERP konektor