@@ -601,12 +601,6 @@ function consumeEvent() {
601601 console.log('[Meta Pixel] trackEvent:', eventName, data);
602602 if (!eventName) return;
603603
604- // ✅ Check if event is allowed before tracking (defensive check)
605- if (!isEventAllowed(event)) {
606- console.log('[Meta Pixel] Event disabled, skipping:', eventName);
607- return;
608- }
609-
610604 const eventData = formatEventData(event, data);
611605
612606 // ✅ eventId for Purchase + Search
@@ -618,34 +612,77 @@ function consumeEvent() {
618612
619613 console.log('[Meta Pixel] eventData:', eventData, 'eventId:', eventId);
620614
621- if ({{useGTM}}) {
622- // Push to GTM dataLayer
615+ // Get pixel IDs
616+ const pixelId = ('{{pixelId}}' || '').trim();
617+ const conversionsApiPixelId = ('{{conversionsApiPixelId}}' || '').trim();
618+
619+ // Track via Pixel (client-side) if pixelId is available AND event is enabled
620+ const shouldTrackPixel = pixelId && isEventAllowed(event);
621+ // Track via CAPI (server-side) if conversionsApiPixelId is available AND CAPI event is enabled
622+ const shouldTrackCapi = conversionsApiPixelId && isCapiEventAllowed(event);
623+
624+ console.log('[Meta Pixel] Tracking decision:', {
625+ shouldTrackPixel,
626+ shouldTrackCapi,
627+ pixelId: pixelId ? 'present' : 'missing',
628+ conversionsApiPixelId: conversionsApiPixelId ? 'present' : 'missing',
629+ isPixelEventEnabled: isEventAllowed(event),
630+ isCapiEventEnabled: isCapiEventAllowed(event)
631+ });
632+
633+ // If neither Pixel nor CAPI should track, skip the event
634+ if (!shouldTrackPixel && !shouldTrackCapi) {
635+ console.log('[Meta Pixel] Event disabled for both Pixel and CAPI, skipping:', eventName);
636+ return;
637+ }
638+
639+ // === Track via Pixel (client-side) ===
640+ if (shouldTrackPixel) {
641+ if ({{useGTM}}) {
642+ // Push to GTM dataLayer
643+ if (window.dataLayer) {
644+ window.dataLayer.push({
645+ event: 'meta_pixel_event',
646+ fb_event_name: eventName,
647+ fb_event_data: eventData,
648+ fb_event_id: eventId
649+ });
650+ console.log('[Meta Pixel] Event sent to GTM:', eventName, eventData, eventId);
651+ } else {
652+ console.warn('[Meta Pixel] dataLayer not available');
653+ }
654+ } else {
655+ // Direct Meta Pixel tracking
656+ if (!window.fbq) {
657+ console.warn('[Meta Pixel] fbq not available');
658+ } else {
659+ // ✅ pass eventID option (works for Purchase + Search)
660+ if (eventId) {
661+ fbq('track', eventName, eventData, { eventID: eventId });
662+ } else {
663+ fbq('track', eventName, eventData);
664+ }
665+ console.log('[Meta Pixel] Event tracked via fbq:', eventName, eventData, eventId);
666+ }
667+ }
668+ }
669+
670+ // === Track via CAPI (server-side) ===
671+ if (shouldTrackCapi && {{enableConversionsApi}}) {
672+ // Push CAPI event to dataLayer or custom endpoint
673+ // This will be picked up by server-side logic or GTM Server Container
623674 if (window.dataLayer) {
624675 window.dataLayer.push({
625- event: 'meta_pixel_event ',
676+ event: 'meta_capi_event ',
626677 fb_event_name: eventName,
627678 fb_event_data: eventData,
628- fb_event_id: eventId
679+ fb_event_id: eventId,
680+ fb_pixel_id: conversionsApiPixelId
629681 });
630- console.log('Meta Pixel Event (via GTM):', eventName, eventData, eventId);
631- } else {
632- console.warn('[Meta Pixel] dataLayer not available');
633- }
634- } else {
635- // Direct Meta Pixel tracking
636- if (!window.fbq) {
637- console.warn('[Meta Pixel] fbq not available');
638- return;
639- }
640-
641- // ✅ pass eventID option (works for Purchase + Search)
642- if (eventId) {
643- fbq('track', eventName, eventData, { eventID: eventId });
682+ console.log('[Meta Pixel] CAPI Event sent to dataLayer:', eventName, eventData, eventId);
644683 } else {
645- fbq('track', eventName, eventData );
684+ console.warn('[Meta Pixel] dataLayer not available for CAPI event' );
646685 }
647-
648- console.log('Meta Pixel Event:', eventName, eventData, eventId);
649686 }
650687 } catch (e) {
651688 console.error('[Meta Pixel] trackEvent error:', e);
0 commit comments