Kurulum ve Güncelleme Raporu
Muzibu.com için Facebook Pixel ve Conversions API (CAPI) entegrasyonu tamamlandı. Kayıt ve abonelik işlemlerinde otomatik event tracking aktif.
3 dosya güncellendi
CAPI Aktif
3 dosya güncellendi
Pixel Aktif
Deduplication
eventID
Facebook'un reklam sistemine Muzibu'daki kullanıcı hareketlerini otomatik olarak bildiren bir sistem kuruldu. Bu sayede Facebook, hangi reklamların işe yaradığını daha iyi anlayacak ve reklam bütçeniz daha verimli kullanılacak.
Örnek: Bir kullanıcı Facebook reklamından gelip Muzibu'ya kayıt olduğunda, bu bilgi otomatik olarak Facebook'a gönderiliyor. Facebook bu sayede "bu reklam işe yaradı" diye anlıyor ve benzer kişilere daha fazla reklam gösteriyor.
Yeni bir kullanıcı ücretsiz hesap oluşturduğunda Facebook'a "Lead" (potansiyel müşteri) olayı gönderiliyor.
Bir kullanıcı premium üyelik satın aldığında Facebook'a "Subscribe" (abone olma) olayı gönderiliyor.
Facebook doğru kişileri bulduğu için aynı sonuç için daha az para harcanıyor.
Facebook benzer özelliklere sahip kişileri bulup onlara da reklam gösteriyor.
Kullanıcının reklam engelleyicisi olsa bile veriler sunucudan gönderiliyor (CAPI).
Hem tarayıcıdan (Pixel) hem sunucudan (CAPI) gönderiliyor, birisi başarısız olsa diğeri çalışıyor.
Kullanıcı verileri (email, isim) Facebook'a göndermeden önce SHA256 ile şifreleniyor (hash). Bu sayede Facebook sadece "bu kullanıcıyı tanıyorum" diyor ama gerçek bilgileri görmüyor.
Not: Access Token gibi gizli bilgiler sadece sunucuda tutuluyor, tarayıcıya asla gönderilmiyor. Pixel ID ise halka açık bir bilgi (sorun değil).
┌─────────────────────────────────────────────────────────────┐
│ KULLANICI KAYIT AKIŞI │
└─────────────────────────────────────────────────────────────┘
│
1. Kayıt formu submit
▼
┌─────────────────────────────────────────┐
│ TrackUserRegistration Listener │
│ (Backend - Server-Side) │
├─────────────────────────────────────────┤
│ • Lead event → Facebook CAPI │
│ • eventID = lead_[time]_[uniqid] │
│ • Session'a kaydet: fb_lead_event_id │
│ • User data: email, name (hashed) │
└─────────────────────────────────────────┘
│
2. Redirect sonrası
▼
┌─────────────────────────────────────────┐
│ facebook-lead-tracker.blade.php │
│ (Frontend - Client-Side) │
├─────────────────────────────────────────┤
│ • Session'dan eventID al │
│ • fbq('track', 'Lead', {...}, { │
│ eventID: 'lead_xxx' │
│ }) │
│ • dataLayer.push({ │
│ event: 'generate_lead', │
│ event_id: 'lead_xxx' │
│ }) │
│ • Cookie'lerden _fbp, _fbc extract │
└─────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────┐
│ Facebook Events Manager │
│ (Deduplication - eventID ile) │
├─────────────────────────────────────────┤
│ Backend + Frontend = Tek Event │
│ (Aynı eventID sayesinde) │
└─────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ ABONELİK SATIN ALMA AKIŞI │
└─────────────────────────────────────────────────────────────┘
│
1. Ödeme tamamlandı
▼
┌─────────────────────────────────────────┐
│ PaymentObserver (Backend) │
│ Status: completed olunca tetiklenir │
├─────────────────────────────────────────┤
│ • Subscribe event → Facebook CAPI │
│ • eventID = sub_[time]_[uniqid] │
│ • Payment metadata'ya kaydet │
│ • predicted_ltv hesapla: │
│ - Aylık: amount * 6 │
│ - Yıllık: amount * 3 │
│ • Subscription period tespit et │
└─────────────────────────────────────────┘
│
2. Success page
▼
┌─────────────────────────────────────────┐
│ payment-success.blade.php │
│ (Frontend) │
├─────────────────────────────────────────┤
│ • Payment metadata'dan eventID al │
│ • fbq('track', 'Subscribe', {...}, { │
│ eventID: 'sub_xxx' │
│ }) │
│ • dataLayer.push({ │
│ event: 'subscribe', │
│ event_id: 'sub_xxx' │
│ }) │
└─────────────────────────────────────────┘
app/Services/FacebookConversionAPIService.php
trackEvent() metoduna eventID parametresi eklendibuildEventData() içinde event_id payload'a ekleniyorapp/Listeners/TrackUserRegistration.php
lead_{time}_{uniqid}session(['fb_lead_event_id' => $eventID])app/Observers/PaymentObserver.php
sub_{time}_{uniqid}$payment->update(['metadata' => [..., 'fb_event_id' => $eventID]])calculatePredictedLTV() metodu eklendi (monthly: 6x, yearly: 3x)extractSubscriptionData() metodu eklendi (period detection)resources/views/components/marketing/facebook-lead-tracker.blade.php
YENİ
fb_lead_event_id varsa tetikleniyorfbq('track', 'Lead', {...}, {eventID})dataLayer.push({event: 'generate_lead'})_fbp, _fbcresources/views/themes/muzibu/layouts/app.blade.php
<x-marketing.facebook-lead-tracker /> eklendiModules/Payment/.../payment-success.blade.php
predicted_ltv hesaplama (PHP tarafında da yapılıyor)dataLayer.push({event: 'subscribe'})_fbp, _fbc.env
FACEBOOK_PIXEL_ID=1350880453347156FACEBOOK_ACCESS_TOKEN=EAAK0y... (GİZLİ)FACEBOOK_API_VERSION=v19.0config/services.php
'facebook' => [...] service config eklendisettings table
key: marketing_fb_pixel_idvalue: 1350880453347156tenant_id: 1001 (Muzibu)Aynı event'in hem backend (CAPI) hem frontend (Pixel) tarafından gönderilmesi durumunda Facebook'ta çift sayılmasını engellemek için eventID kullanılıyor.
1. Backend (TrackUserRegistration):
$eventID = 'lead_' . time() . '_' . uniqid();
session(['fb_lead_event_id' => $eventID]);
$this->facebookService->trackEvent('Lead', $userData, $customData, null, $eventID);
2. Frontend (facebook-lead-tracker.blade.php):
const eventID = '{{ session('fb_lead_event_id') }}';
fbq('track', 'Lead', {...}, { eventID: eventID });
Sonuç: Facebook aynı eventID'ye sahip 2 olayı tek event olarak sayar
1. Backend (PaymentObserver):
$eventID = 'sub_' . time() . '_' . uniqid();
$metadata['fb_event_id'] = $eventID;
$payment->update(['metadata' => $metadata]);
$this->facebookService->trackEvent('Subscribe', $userData, $customData, null, $eventID);
2. Frontend (payment-success.blade.php):
const eventID = '{{ $payment->metadata['fb_event_id'] ?? '' }}';
fbq('track', 'Subscribe', {...}, { eventID: eventID });
Sonuç: Backend + Frontend = Tek event (deduplication)
Facebook'a gönderilen Subscribe event'inde, kullanıcının tahmini yaşam boyu değeri (Lifetime Value) hesaplanıyor.
protected function calculatePredictedLTV(Payment $payment, array $subscriptionData): float
{
$amount = (float) $payment->amount;
if ($subscriptionData['period'] === 'yearly') {
// Yıllık plan: 3 yıl retention varsayımı
return round($amount * 3, 2);
}
// Aylık plan: 6 ay retention varsayımı
return round($amount * 6, 2);
}
Varsayım: 6 ay tutma oranı
LTV = Tutar × 6
Varsayım: 3 yıl tutma oranı
LTV = Tutar × 3
POST Endpoint:
https://graph.facebook.com/v19.0/1350880453347156/events
Access Token:
EAAK0yoAlg5kBQxkRZAYp8FedcOIZBypEGkOFtTZAa2yUSOpZAmHKFhNnM33CM7c...
Pixel ID:
1350880453347156
Yeni kullanıcı kaydı oluştur
Kayıt formunu doldur ve submit et
Browser console kontrol
Facebook Pixel: Lead event tracked with eventID: lead_xxx
DataLayer: generate_lead event pushed
Laravel log kontrol
Facebook CAPI: Lead event tracked (storage/logs/laravel.log)
Facebook Events Manager
Event: Lead, eventID ile deduplication kontrolü
Subscription satın al
Test ödeme yaparak abonelik satın al
Payment success sayfası console
Facebook Pixel: Subscribe event tracked with eventID: sub_xxx
DataLayer: subscribe event pushed
Laravel log kontrol
Facebook CAPI: Subscribe event tracked
predicted_ltv: [hesaplanan değer]
Facebook Events Manager
Event: Subscribe, predicted_ltv değeri, eventID kontrolü
Payment metadata kontrol
Database: payments tablosu, metadata kolonu → fb_event_id mevcut mu?
GTM Preview Mode
Google Tag Manager'ı preview modunda aç
DataLayer events kontrol
generate_lead ve subscribe event'lerinin görünmesi
4 Mart 2026 • Muzibu.com