CRMconnect Azuvio · Docs

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 scoring je 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 sistema
  • external_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 (zahteva smartcrm → edit)
  • cleanup_logs() — briše logove (zahteva smartcrm → delete)

Napomena o modulu bodovanja

Modul scoring je instaliran ali nefunkcionalan:

  • SQL za kreiranje tabela u install.php je 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