# Özel Platform

Desteklenmeyen altyapılar
Kaynak: https://selwise.com/docs/integration/custom-platform

Selwise, hazır bir entegrasyonu olmayan ya da özel geliştirilmiş herhangi bir e-ticaret platformuyla çalışır. Bu sayfa platform bağımsız kurulum reçetesini verir: script, ticari olaylar, sipariş, kimlik, onay ve gerekiyorsa sunucu taraflı çağrılar. Platformunuz hazır listedeyse (Akinon, Ticimax, T-Soft, ikas, IdeaSoft, Shopify) önce [Platformlar](/docs/platforms/overview) sayfasına bakın.

## Genel reçete

1. **Kanal oluşturun ve alan adını doğrulayın.** Bkz. [Kanal Ekleme](/docs/channels/adding-channels), [Alan Adı Doğrulama](/docs/channels/domain-verification).
2. **Script'i her sayfaya ekleyin.** `client.js`'i tüm şablonlara yerleştirin: [Widget Kurulumu](/docs/integration/widget-installation).
3. **Ürün katalogunu bağlayın.** Ürün olaylarındaki kod, beslemedeki `item_code` ile eşleşmelidir: [Ürün Beslemeleri](/docs/product-feeds/overview).
4. **Ticari olayları gönderin.** Otomatik yakalama yeterli değilse veri katmanıyla.
5. **Sipariş takibini bağlayın.** Teşekkür sayfasında `trackOrder`.
6. **Müşteriyi kimliklendirin.** Giriş yapan kullanıcı için `identify`.
7. **Doğrulayın:** [Takip Sorunları](/docs/troubleshooting/tracking-issues).

## 1. Script

```html
<link rel="preconnect" href="https://widget.selwise.com" crossorigin>
<link rel="preconnect" href="https://api.selwise.com" crossorigin>
<script>window.Selwise=window.Selwise||{};window.Selwise.q=window.Selwise.q||[];['track','trackOrder','identify','setTraits','pushDataLayer','grantConsent','revokeConsent','showConsentPreferences','withdrawConsent','endJourney'].forEach(function(m){if(!window.Selwise[m])window.Selwise[m]=function(){window.Selwise.q.push([m,arguments])}});</script>
<script async src="https://widget.selwise.com/client.js" data-site-key="SITE_KEY"></script>
```

Platformunuz için hazır bir veri katmanı profili yoksa Selwise onu `generic` olarak ele alır ve sayfa görüntülemelerini otomatik yakalar. Ürün ve sepet olayları temanıza bağlıdır; standart dışıysa aşağıdaki gibi manuel gönderin. Sayfa türü (ürün, kategori, sepet ...) tespiti URL desenlerine ve sayfa işaretlerine dayanır: [Veri Katmanı Ayarları](/docs/integration/data-layer-settings).

## 2. Ticari olayları veri katmanıyla gönderin

En güvenilir yöntem, her önemli olayda `window.selwiseLayer.push()` çağırmaktır. Tüm zarflar ve alanlar için [Veri Katmanı](/docs/integration/data-layer), olay adları için [Event Referansı](/docs/integration/events) sayfasına bakın.

Ürün detay sayfasında:

```html
<script>
  window.selwiseLayer = window.selwiseLayer || [];
  window.selwiseLayer.push({
    event: 'product_view',
    product: {
      sku: 'SUNUCUDAN_GELEN_SKU',
      title: 'Ürün Adı',
      price: 149.90,
      category: 'Kategori',
      currency: 'TRY',
    },
  });
</script>
```

Sepete ekleme butonunda (sepetin **tamamının** tutarını `total` ile verin; hedef çubuğu gibi yüzeyler yalnızca ölçülmüş bir sepetle çizilir):

```html
<script>
  document.querySelector('#add-to-cart')?.addEventListener('click', function () {
    window.selwiseLayer.push({
      event: 'add_to_cart',
      basket: {
        step: 'add',
        currency: 'TRY',
        total: 149.9,
        products: [{ sku: 'SKU-123', quantity: 1, price: 149.9 }],
      },
    });
  });
</script>
```

Kategori, arama ve ödeme adımları için ilgili olayları aynı şekilde gönderin: `category_view`, `search_query`, `checkout_begin`, `checkout_progress`.

> **Mevcut dataLayer'ınız varsa**
>
> Sitenizde GTM için zaten bir `window.dataLayer` varsa, Selwise bunu dinleyip olayları dönüştürebilir (veri katmanı entegrasyonu açıksa). Bu durumda çoğu olayı tekrar göndermeniz gerekmez. Bkz. [Veri Katmanı](/docs/integration/data-layer).

## 3. Sipariş takibi

Sipariş onay sayfasında, sunucudan gelen gerçek verilerle:

```html
<script>
  window.Selwise?.trackOrder({
    orderId: 'ORDER_12345',
    currency: 'TRY',
    total: 129.90,
    items: [
      { productItemCode: 'SKU-001', name: 'Ürün', quantity: 1, unitPrice: 129.90 },
    ],
  });
</script>
```

Alanlar ve tekilleştirme: [Sipariş Takibi](/docs/integration/order-tracking).

## 4. Kimliklendirme

Giriş yapmış kullanıcının sayfa şablonuna kimliğini yazabiliyorsanız:

```html
<script>
  window.Selwise?.identify('MUSTERI-1001', { email: 'ayse@example.com' });
</script>
```

Kimlik, siparişte kullandığınız müşteri kimliğiyle aynı olmalıdır: [Kullanıcı Kimliklendirme](/docs/integration/identify).

## 5. Onay

Kendi çerez çözümünüz varsa kararını `grantConsent()` ve `revokeConsent()` ile Selwise'e bildirin: [Onay Yönetimi](/docs/integration/consent).

## 6. İsteğe bağlı: sunucu taraflı render

Özel bir platformda sunucu şablonlarını siz yazdığınız için ürün sayfasına zenginleştirme içeriğini HTML'de basabilirsiniz; PHP, Node, Next.js ve Django örnekleri hazırdır: [Sunucu Taraflı Render Örnekleri](/docs/product-enrichment/server-side-recipes).

## Sunucu tarafı (headless)

Tarayıcı tarafına erişiminiz yoksa (mikroservis mimarisi, kendi mobil uygulamanız) olay ve siparişleri doğrudan public HTTP API ile gönderin. Bu durumda `Origin` başlığı **göndermeyin**; başlıksız istek ve `x-selwise-api-key` (kapsam `mobile_read`/`mobile_write`) kullanın. Sırasıyla: [Kimlik Doğrulama ve Erişim](/docs/api-reference/authentication), [Olay Gönderimi](/docs/api-reference/events-ingest), [Sipariş API'si](/docs/api-reference/orders-api), [Kullanıcı Kimliklendirme API'si](/docs/api-reference/identify-api). Kendi sisteminizin olaylarından senaryo başlatmak için [İş Olayları](/docs/integration/business-events).

> **productItemCode tutarlılığı**
>
> Hangi yöntemi kullanırsanız kullanın, `productItemCode` / `sku` değerinin ürün beslemenizdeki ürün koduyla birebir aynı olması gerekir. Bu, tüm ürün bazlı raporların ve önerilerin doğru çalışmasının ön koşuludur.
