← Documentație

Comenzi offline și POAS

Ce face, într-o frază: magazinul ne anunță fiecare comandă (webhook), noi regăsim vizita care a produs-o (click id-uri Google, cookie-urile Meta, GA client id — „magazia de vizitatori”), calculăm profitul comenzii (preț de vânzare − preț de achiziție − transport − ambalare − comisioane) și îl trimitem la Google Ads, GA4 și Meta ca evenimentul profit, ca să optimizezi campaniile pe profit (POAS), nu pe venit.

Cum funcționează (pe scurt)

site (SDK) ──► Edge ──► magazie: bc_id ↔ email/telefon hash, transaction_id, click id-uri, _fbp/_fbc, GA cid
                                     ▲
magazin ──webhook──► Edge ──► comanda normalizată ──► profit (feed de costuri + formulă) ──► evenimentul offline `profit`
                                                                                            │
                                                          GA4 `purchase_profit` ◄───────────┼──► Google Ads „Profit (POAS)” (tag în containerul server)
                                                          Meta eveniment custom `Profit` ◄──┘
  • Atribuire: comanda se leagă de vizită întâi prin transaction_id (dacă site-ul a trimis purchase), apoi prin

hash-ul de email / telefon / id client. Se folosesc IP-ul, User-Agent-ul, _fbp/_fbc, gclid/wbraid/gbraid și GA client id ale vizitei. Fără vizită găsită: evenimentul pleacă cu action_source=system_generated și potrivire doar pe email/telefon (hash).

  • Consimțământ: magazia reține doar vizitele cu consimțământ (ads sau analytics) și doar dacă webhook-urile sunt pornite;

rândurile expiră după *retentionDays* (implicit 90). Datele personale sunt doar hash-uri. Evenimentul offline moștenește consimțământul vizitei (fără ads consent → Meta sare, Google primește semnalele de refuz).

  • Dedup: un singur profit per comandă (event_id = profit_<order_id>), oricâte livrări repetate face magazinul.

Anulare / retur după ce profitul a plecat → refund (doar GA4, evenimentul standard cu transaction_id).

Formula de profit

profit = Σ (preț net încasat − cost achiziție) × cantitate
       + transport încasat de la client (net)
       − costul tău de transport − ambalare
       − comision plată % × total comandă − taxă fixă
  • Net = fără TVA. WooCommerce și Shopify spun singure dacă prețurile includ TVA; pentru formatul generic folosim setarea *Shop prices include VAT*.
  • Costul unui produs vine, în ordine: cost din webhook (per produs) → feed-ul de costuri (după SKU / product_id / id / variant_id) → marja implicită

(*fallback margin*, marcat în Events ca „N item(s) without cost”). Un profit explicit pe comandă (format generic) se trimite ca atare.

  • minProfit = 0 înseamnă că nu trimitem valori negative (Google Ads le respinge); gol = trimitem numărul real.
  • Când trimitem: la paid (recomandat: aproape de click), la completed (evită comenzile anulate, dar vine după zile) sau la orice status.

Setare (dashboard → client → Settings → Offline orders & POAS)

  1. Receive orders from the shop ✔ → Save. Cardul arată câte un URL per platformă: https://<host>/bc/webhook/<secret>?source=woocommerce|shopify|generic.
  2. Magazin: WooCommerce → Settings → Advanced → Webhooks → topic *Order updated*, API v3, Active. Shopify → Settings → Notifications → Webhooks →

*Order payment*, *Order cancellation*, *Refund create*, JSON. Gomag / PrestaShop / ERP: POST JSON pe URL-ul generic după fiecare comandă și schimbare de status.

  1. Feed de costuri: URL (CSV/TSV/XML, coloane id + cost, reîmprospătat zilnic) sau listă lipită o dată (*Import feed*, max 8 MB). Coloane recunoscute:

sku, id, product_id, cod, code, g:id și cost, purchase_price, pret_achizitie, cost_price, g:cost_of_goods_sold. Id-ul trebuie să fie cel trimis de magazin în comandă (SKU e cel mai sigur).

  1. Google Ads: acțiune de conversie *Profit* (Website, valoare diferită per conversie) → eticheta ei în cardul Google Ads, eveniment profit → Save →

re-descarcă și îmbină presetul serverului (Install → B). Presetul primește tag-ul *BC - Google Ads conversion - Profit (POAS)* pe evenimentul purchase_profit.

  1. Meta: Events Manager → Custom conversions → din evenimentul Profit; GA4: purchase_profit marcat key event.
  2. Verificare: comandă de test (sau curl-ul din card). În Events: linia webhook:<sursă> (comanda, statusul, profitul, „visit matched by …”) și apoi profit cu răspunsul fiecărei platforme.

Formatul generic (orice denumire apropiată e înțeleasă):

{ "order_id": "1001", "status": "paid", "currency": "RON", "total": 266.20, "shipping": 20, "prices_include_vat": true,
  "items": [{ "sku": "A", "name": "Dress", "quantity": 2, "price": 121, "cost": 60 }],
  "customer": { "email": "client@example.com", "phone": "+40722000000", "id": "55" }, "profit": 80 }

Statusuri: paid / processing / confirmed / platita → paid; completed / delivered / livrata → completed; pending → created; cancelled / anulata; refunded / returned / returnata.