# Akinon

Project Zero ve Omnife Next
Kaynak: https://selwise.com/docs/platforms/akinon

Akinon, aynı public yolların arkasında **iki farklı çalışma zamanı** barındırır. Kurulum ve veri okuma, hangisinde olduğunuza göre değişir. Bu sayfa script'i, veri katmanını ve sayfa türünü anlatır; sepete ekleme, sipariş ve kullanıcı kimliği için [Akinon Sepet ve Sipariş](/docs/platforms/akinon-cart-orders), ürün beslemesi için [Akinon Besleme Şablonu](/docs/platforms/akinon-feed) sayfasına geçin.

## İki yığın

| Yığın | Nedir | Nasıl anlaşılır |
|---|---|---|
| **Project Zero** | Django tabanlı klasik storefront | Proje klasöründe `manage.py` vardır; sayfada `window.GLOBALS` bulunur |
| **Omnife Next** | `@akinon/next` tabanlı Next.js storefront | `@akinon/next` bağımlılığı, `pz-` önekli elementler, `akinoncloud.com` kaynakları |

## Script kurulumu

Aşağıdaki parçayı **tüm sayfalara** ekleyin. `SITE_KEY` yerine **Kanallar → Kanal Özeti → Setup** (Channels → Channel Overview) bölümündeki anahtarı yazın.

```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>
```

| Yığın | Yer |
|---|---|
| Project Zero | `templates/layout/base.html`, `head` içinde, GTM parçasının üstünde |
| Omnife Next | Omnitron'daki `external-gtm` CMS widget'ının head alanı (deploy gerektirmez) ya da kök layout'un `head` bölümü |

`external-gtm` yolu, incelenen Omnife Next projelerinde kök layout'un o widget'ın ham HTML'ini basmasına dayanır; kendi projenizde doğrulayın. Verify Now ham HTML'e baktığından etiket sunucu tarafından basılmalıdır.

Bir Selwise kanalı tek alan adı, tek para birimi ve tek besleme taşır. Aynı koddan birden çok pazar servis ediyorsanız pazar başına ayrı kanal açın ve anahtarı alan adından seçin; bilinmeyen bir alan adında hiçbir şey yüklemeyin, yoksa test ziyaretleri üretim cirosuna yazılır.

## Veri katmanı ayarı

**Ayarlar → Entegrasyonlar → Data Layer Configuration** (Settings → Integrations) ekranında:

- **Enable Data Layer** (Data Layer'ı Etkinleştir) açık olsun; varsayılan kapalıdır.
- **E-commerce Platform Preset** olarak **Akinon** seçin.
- **Use External Data Layer** açık, **External Data Layer Name** `dataLayer` kalsın.
- **Save Changes** ile kaydedin.

## Hazır olay eşlemesi

Project Zero'nun standart GTM adaptörü olayları Enhanced Ecommerce biçiminde yazar ve üç farklı anlamı aynı adla gönderir; anlam `ecommerce` içindeki eylem anahtarındadır. Akinon ön ayarı bunu bilir:

| Mağazanın olayı | Selwise olayı |
|---|---|
| `eeEvent` + `ecommerce.detail` | `product_view` |
| `eeEvent` + `ecommerce.click` | `product_click` |
| `eeEvent` + `ecommerce.impressions` | `product_impression` |
| `eeCart` + `ecommerce.add` | `add_to_cart` |
| `eeCart` + `ecommerce.remove` | `remove_from_cart` |
| `eeCheckout` adım 1 | `cart_view` |
| `eeCheckout` adım 2 | `checkout_begin` |
| `eeCheckout` adım 3 ve 4 (ve diğer adımlar) | `checkout_progress` |
| `eepurchase` | `purchase` |

Eşlemeye **girmeyenler**: promosyon olayları (`promoView`, `promoClick`), `gaEvent` (giriş ve kayıt) ve **GA4 adları** (`view_item`, `add_to_cart`, `purchase`, `search`, `login`). Bu yüzden:

- Omnife Next mağazanız olayları GA4 adlarıyla yazıyorsa Selwise bunları `dataLayer` üzerinden **kendiliğinden okumaz**. Ürün görüntüleme yine sayfadan okunur; sepet ve ödeme olaylarını `window.selwiseLayer.push` ile gönderin ([Veri Katmanı](/docs/integration/data-layer)).
- Giriş, kayıt ve arama için [Akinon Sepet ve Sipariş](/docs/platforms/akinon-cart-orders) sayfasındaki yöntemleri kullanın.

> **Kitteki eeEvent shim'i ile birlikte kurmayın**
>
> Selwise Akinon entegrasyon kitindeki `selwise-ee-shim.js`, olayları GA4 adlarıyla özel bir katmana yansıtır ve **External Data Layer Name** değerinin değiştirilmesini ister. Bugünkü hazır eşleme GA4 adlarını içermediğinden bu yolla olayların çoğu okunmaz. `dataLayer`'ı olduğu gibi bırakıp ön ayara güvenin.

## Sayfa türü

Panelin varsayılan desenleri Akinon yollarının yalnızca bir kısmını tanır: `/baskets/basket` sepet, `/orders/checkout` ödeme, `/product/123/` ürün olarak bulunur; `/list/?search_text=` arama ve `/category/12/` kategori olarak **bulunmaz**. Sayfa türü ayrıca ürün sayfasındaki `pz-add-to-cart`, `[data-product-code]` ve `.product-detail` gibi ayırt edicilerden de çıkarılır; ürün için bu çoğu zaman yeterlidir.

**Ayarlar → Entegrasyonlar → Data Layer Configuration → Page Type Patterns** (Settings → Integrations) alanlarına, Akinon'un sabit yollarına göre doğrulanmış şu desenleri yazın:

```text
Home:     ^/(?:[a-z]{2}(?:-[a-z]{2})?/)?$
Product:  /(?:product|products|group-product|bundle-product)/
Category: /(?:category|categories|landing-page)/
Search:   /list/?\?(?:[^&]*&)*search_text=
Cart:     /(?:baskets/basket|basket)(?:/|$|\?)
Checkout: /orders/checkout
Account:  /(?:account|users/(?:orders|profile|auth))
```

Arama deseni sorgu parametresini ister: parametresiz `/list/` bir kategori listesidir. Ürün ve kategori adresleri Omnitron'da mağaza başına serbestçe yeniden yazılabilir; mağazanız `-p-123` gibi özel bir adres düzeni kullanıyorsa ürün ve kategori desenine onu da ekleyin.

## Kurulumu doğrulama

1. Mağaza kaynağında `data-site-key` değerini görün ve **Verify Now**'a basın.
2. **Channel Overview → Data flow** satırında olay sayısı artmalıdır.
3. **Data Layer Configuration → View Events** listesinde bir ürün sayfası gezdikten sonra `product_view`, sepete ekledikten sonra `add_to_cart` görünmelidir.
4. Mağazanın konsolunda `localStorage.setItem('selwise_debug', 'true')` yazıp sayfayı yenileyin; eşlenen her olay konsola yazılır.

## Sık yapılan hatalar

- **Enable Data Layer** kapalı kalmıştır; hiçbir olay gelmez.
- Omnife Next mağazasında GA4 adlarına güvenilmiştir; yukarıdaki not.
- `eeEvent` sayfa içinde `dataLayer` yerine başka bir değişkene yazılmaktadır; **External Data Layer Name** o adı taşımalıdır.

## İmzalı kimlik (isteğe bağlı)

Akinon vitrini sunucu tarafında çalıştığı için müşteri numarasını sunucuda imzalayıp veri katmanındaki `user` nesnesine `idHash` / `idHashTs` olarak ekleyebilirsiniz. Kanal sırrı yalnızca sunucuda durmalıdır. Ayrıntı ve örnekler: [İmzalı Kimlik](/docs/integration/identity-verification).

## Mobil uygulama

Akinon mobil uygulamaları için ayrı bir SDK vardır: [Mobil SDK](/docs/mobile/overview). Uygulama içindeki WebView ödeme akışı ayrıca köprülenmelidir: [WebView Köprüsü](/docs/mobile/webview-bridge).
