Konfiguracja

Meta Pixel i Conversions API (CAPI) w SalesCRM

SalesCRM śledzi zdarzenia Meta (Facebook/Instagram) dwoma kanałami naraz: Pixelem w przeglądarce oraz Conversions API z naszego serwera. Oba dla tego samego zakupu wysyłają identyczny event_id, dzięki czemu Meta deduplikuje zdarzenia i nie liczy konwersji podwójnie.

1. Dwa kanały — o co chodzi

Meta zbiera te same zdarzenia (np. Purchase) z dwóch źródeł, bo każde ma inne mocne strony:

Najlepszy efekt daje uruchomienie obu kanałów jednocześnie — wtedy Meta ma komplet danych, a duplikaty usuwa po wspólnym event_id (patrz sekcja 4).

2. Konfiguracja w panelu

Wejdź w Konfiguracja → Integracje → Pixel Meta. Dostępne pola:

PoleKanałCo robi
Pixel IDobaIdentyfikator pixela z Menedżera Zdarzeń Meta. Samo jego ustawienie wstrzykuje na strony sklepu bazowy kod pixela (fbq('init', …) + <noscript>).
Śledzenie wyświetleńclient-sideWysyła PageView przy wczytaniu strony.
Śledzenie dodań do koszykaclient-sideWysyła AddToCart przy dodaniu produktu.
Śledzenie zakupówclient-sideWysyła Purchase z przeglądarki.
Strona śledzenia zakupówclient-sideGdzie odpalić przeglądarkowy Purchase: Potwierdzenie złożenia zamówienia, Przekierowanie po płatności albo Tylko po stronie serwera (przeglądarka nie wysyła nic — patrz sekcja 3).
Śledzenie zakupów po stronie serweraCAPIWysyła Purchase przez Conversions API po potwierdzeniu płatności. Wymaga tokenu API.
Śledzenie dodań do koszyka po stronie serweraCAPIWysyła AddToCart przez CAPI. Działa niezależnie od wersji client-side.
Śledzenie wyświetleń produktów po stronie serweraCAPIWysyła ViewContent przez CAPI przy każdym wejściu na stronę produktu.
Token API konwersjiCAPIToken dostępu z Menedżera Zdarzeń Meta (Ustawienia → Conversions API). Bez niego kanał serwerowy nie wyśle nic.
Identyfikator drugiego pixelaobaOpcjonalny. Drugie konto reklamowe, do którego mają trafiać te same zdarzenia — patrz sekcja 8.
Token API konwersji drugiego pixelaCAPIToken wystawiony dla drugiego pixela. Token pierwszego tu nie zadziała.

Checkboxy „client-side" i „po stronie serwera" są niezależne. Aby uzyskać deduplikację, włącz dla danego zdarzenia oba (np. Śledzenie zakupów + Śledzenie zakupów po stronie serwera).

3. Jakie zdarzenia i którym kanałem

SalesCRM używa standardowych nazw zdarzeń Meta (pisownia PascalCase). Nazwy małymi literami, np. purchase czy view_cart, to konwencja Google Analytics 4, a nie Meta — do Meta ich nie wysyłamy.

ZdarzenieClient-side (Pixel)Server-side (CAPI)event_id
PageViewtak (jeśli „śledzenie wyświetleń")
AddToCarttaktak (osobny checkbox)atc-<id>-… (wspólny dla obu kanałów)
ViewContenttak (osobny checkbox)vc-<produkt>-…
Purchasetaktak (osobny checkbox)orders_<id zamówienia> (wspólny dla obu kanałów)

InitiateCheckout nie jest nadawany przez SalesCRM — pojawia się tylko, jeśli własny front sklepu (architektura headless) odpala je samodzielnie.

3a. Kiedy dokładnie liczy się zakup

Domyślnie przeglądarkowy Purchase odpala się na stronie potwierdzenia zamówienia — czyli w chwili złożenia zamówienia, zanim klient trafi do bramki płatności. Zamówienie, za które nikt nie zapłaci, i tak zostanie zaraportowane jako zakup. Meta optymalizuje wtedy kampanie na zawyżonym sygnale.

Pole Strona śledzenia zakupów ma trzy ustawienia:

UstawienieKiedy leci PurchaseZamówienie nieopłacone
Potwierdzenie złożenia zamówienia (domyślne)zaraz po złożeniu, na stronie podziękowaniazostanie policzone jako zakup
Przekierowanie po płatnościgdy klient wraca z bramki bez błęduzwykle nie, ale powrót z bramki to jeszcze nie potwierdzona wpłata
Tylko po stronie serweradopiero po potwierdzeniu płatności przez operatoranie zostanie policzone

Jeśli zależy Ci, żeby w Meta widnieć wyłącznie faktycznie opłacone zamówienia, wybierz Tylko po stronie serwera i upewnij się, że masz zaznaczone Śledzenie zakupów po stronie serwera oraz wpisany token API konwersji. Opłacone zamówienie da wtedy dokładnie jedno zdarzenie, a nieopłacone żadnego. Powtórne powiadomienie od operatora płatności ani odświeżenie strony niczego nie dublują.

Cena tego wyboru: Meta nie dostaje kopii przeglądarkowej, a dwa zgodne sygnały zwykle dają lepsze dopasowanie użytkownika niż jeden. To kompromis między jakością dopasowania a czystością danych o sprzedaży.

Sprzedaż za pobraniem: takie zamówienia trafią do Meta dopiero, gdy oznaczysz je w panelu jako rozliczone — przy pobraniu nie ma automatycznego potwierdzenia wpłaty.

Zamówienia za 0 zł nie tworzą płatności, więc liczą się od razu przy złożeniu — niezależnie od wybranego trybu.

4. Deduplikacja po event_id

Meta uznaje dwa zdarzenia (jedno z Pixela, drugie z CAPI) za ten sam fakt, gdy mają identyczne event_name oraz event_id. Dla zakupu SalesCRM używa po obu stronach klucza:

event_id = orders_<wewnętrzny numer zamówienia>   // np. orders_18345

To ten sam identyfikator wysyłany przez Pixel (jako eventID) i przez Conversions API (jako event_id), więc Meta widzi jeden zakup zamiast dwóch. Analogicznie AddToCart deduplikuje się po wspólnym kluczu atc-….

Aby deduplikacja działała, ten sam zakup musi dolecieć oboma kanałami z tym samym event_id. Jeśli któryś kanał jest wyłączony albo wysyła inny identyfikator, Meta nie ma czego sparować.

5. Dane dopasowania (Event Match Quality)

Kanał serwerowy (CAPI) dołącza do zdarzenia dane dopasowania, które podnoszą skuteczność atrybucji. Dane osobowe są hashowane SHA-256 przed wysyłką:

6. Architektura headless (własny front sklepu)

Jeśli sklep działa na własnym froncie (np. Next.js), a SalesCRM pełni rolę zaplecza, to przeglądarkowy Pixel odpala Twój front, a Conversions API wysyła SalesCRM. Żeby oba kanały deduplikowały się poprawnie, front musi użyć tego samego event_id co serwer (orders_<id>).

Udostępniamy do tego endpoint REST API (uwierzytelnienie nagłówkiem X-API-KEY sklepu), który zwraca kanoniczne dane zakupu na podstawie identyfikatora płatności z adresu powrotu bramki:

GET /api/v1/purchase_pixel_data?payment_id=<OrderID z powrotu płatności>
X-API-KEY: <klucz API sklepu>

→ { "event_id": "orders_18345", "value": 59.98, "currency": "PLN", "contents": [ ... ] }

Front pobiera stąd event_id (oraz autorytatywną wartość zamówienia) i oznacza nim przeglądarkowe zdarzenie Purchase — dzięki czemu jest zgodne z tym, co równolegle wysyła Conversions API.

Bramki płatności (np. Autopay) na powrocie przekazują zwykle własny identyfikator transakcji/płatności, a nie wewnętrzny numer zamówienia. To najczęstsza przyczyna „rozjazdu" event_id między frontem a serwerem — powyższy endpoint mapuje jedno na drugie.

7. Drugi pixel — raportowanie do dwóch kont

Sklep może wysyłać te same zdarzenia do dwóch pixeli naraz. Typowa sytuacja: własne konto reklamowe i konto agencji, która prowadzi kampanie. Zamiast wybierać, kto widzi dane, uzupełniasz Identyfikator drugiego pixela w tym samym ekranie konfiguracji.

Co warto wiedzieć:

Zdarzenia w obu kontach będą identyczne. Jeżeli agencja potrzebuje innego zestawu zdarzeń niż Ty, drugi pixel tego nie załatwi.

8. Najczęstsze pytania

Odznaczyłem checkboxy, a kod pixela dalej jest na stronie. Dlaczego?

Bazowy kod pixela (fbq('init', …)external_id oraz znacznik <noscript> PageView) renderuje się zawsze, gdy wpisany jest Pixel ID — niezależnie od checkboxów. Checkboxy sterują tylko wysyłką poszczególnych zdarzeń, nie samą inicjalizacją. Aby usunąć pixel całkowicie, wyczyść pole Pixel ID.

W Menedżerze Zdarzeń mam niskie pokrycie deduplikacji (np. 9,6%) i ostrzeżenia o event_id.

To znaczy, że dla większości zakupów Meta dostaje zdarzenie tylko z jednego kanału albo z dwoma różnymi event_id. Sprawdź kolejno:

Pamiętaj, że 100% jest nieosiągalne — część przeglądarkowych Pikseli zawsze utną blokery reklam i brak zgody na ciasteczka. To normalne i bezpieczne: Conversions API łapie wszystkie zakupy, więc atrybucja pozostaje kompletna niezależnie od wskaźnika deduplikacji.

Czy wysyłacie zdarzenia purchase / view_cart (małymi literami)?

Nie do Meta. To nazewnictwo Google Analytics 4. Do Meta lecą standardowe zdarzenia PageView, AddToCart, ViewContent, Purchase.

Czy event_id to numer zamówienia?

Pełni dokładnie tę rolę. Kanoniczny klucz deduplikacji zakupu to orders_<wewnętrzny numer zamówienia> — spójny między Pixelem a Conversions API.

Podsumowanie: ustaw Pixel ID, włącz oba kanały dla Purchase (+ token API), a deduplikacja zadziała po wspólnym event_id = orders_<id>. Przy własnym froncie użyj endpointu z sekcji 6.
← Wszystkie artykuły Webhooks →