# Kullanıcı Kimliklendirme

identify, traits ve id uzunluk sözleşmesi
Kaynak: https://selwise.com/docs/integration/identify

Kimliklendirme, Selwise'in anonim bir tarayıcıyı gerçek bir müşteriyle eşleştirmesini sağlar. Müşteri seviyesindeki her özellik buna dayanır.

## Neden gerekli

Kimliklendirme olmadan Selwise yalnızca **cihazları** tanır. Aynı müşteri telefondan ve bilgisayardan girdiğinde iki ayrı kişi görünür.

| Özellik | Kimliksiz | Kimlikle |
|---|---|---|
| Müşteri yaşam boyu değeri | Cihaz başına bölünmüş | Gerçek toplam |
| "3+ sipariş vermiş" segmenti | Eksik yakalar | Doğru |
| Kişisel öneriler | Yalnızca o cihazın geçmişi | Tüm geçmiş |
| Müşteri profili | Parçalı | Tam |
| `include` modlu segment hedefleme | Neredeyse hiç eşleşmez | Çalışır |

## Ne zaman çağrılır

`identify` şu anlarda çağrılmalıdır:

| An | Neden |
|---|---|
| Kullanıcı giriş yaptığında | Ana kullanım |
| Sayfa yüklendiğinde, kullanıcı zaten giriş yapmışsa | Oturum devam ediyor |
| Kayıt tamamlandığında | Yeni müşteri |

Sonuncusu unutulur: kayıt sonrası çağrılmazsa yeni müşteri bir sonraki girişine kadar anonim kalır.

## Kullanım

```js
window.Selwise?.identify('MUSTERI-1001', {
  plan: 'premium',
  sehir: 'İstanbul',
});
```

İlk parametre kimlik, ikincisi isteğe bağlı özelliklerdir. Metot imzası ve dönüş değeri: [JavaScript API](/docs/integration/javascript-api). Çağrı `{ success, merged }` döndürür: `merged: true`, bu çağrıda yeni bir cihazın (ziyaretçi kimliğinin) müşteriye bağlandığını söyler. HTTP karşılığı ve hata durumları: [Kullanıcı Kimliklendirme API'si](/docs/api-reference/identify-api).

Kimliği değiştirmeden yalnızca özellik güncellemek için `setTraits` kullanın. `setTraits` **tanınmış bir müşteri gerektirir**: o tarayıcıda daha önce `identify` çağrılmamışsa `false` döner ve hiçbir şey yazılmaz.

## E-posta adresi

İkinci parametrede `email` alanı bir **özellik değildir**; kişinin kimliğine bağlanır:

```js
window.Selwise?.identify('MUSTERI-1001', { email: 'ayse@example.com' });
```

- Adres sunucuda karma olarak kimliğe yazılır. Farklı cihazlarda aynı e-postayla gelen kişi aynı profilde buluşur.
- Adres, kişinin iletişim kaydına **izinsiz** olarak eklenir: kişiye ulaşılabilir olduğunu söyler, pazarlama izni yerine geçmez.
- Adres, özellikler arasında ve olay kayıtlarında düz metin olarak saklanmaz.
- Adres gibi görünmeyen bir değer (örneğin önceden karma alınmış bir metin) yok sayılır.

## Her sayfada çağırmak

Giriş yapmış kullanıcının kimliğini her sayfa şablonuna yazan platformlarda `identify` her sayfada çağrılabilir. Aynı kişi, aynı tarayıcı ve aynı adres için sunucunun onayladığı ikinci çağrı istek atmaz. Kimlik veya adres değiştiğinde çağrı yeniden gönderilir.

## Çıkış

Kullanıcı çıkış yaptığında data layer'a bir çıkış olayı gönderin:

```js
window.selwiseLayer = window.selwiseLayer || [];
window.selwiseLayer.push({ event: 'user_logout' });
```

Bu, çıkış olayını kaydeder ve tarayıcıdaki kullanıcı kimliğini unutur; sonraki olaylar ve siparişler artık o kişiye yazılmaz. Ziyaretçi kimliği korunur, bu yüzden deney atamaları ve sıklık sınırları değişmez.

Kendi dataLayer'ınızdaki `login` veya `sign_up` olayını Selwise'in giriş ya da kayıt olayına eşlediyseniz ve olay `user_id` taşıyorsa, kimliklendirme otomatik yapılır. Eşlenmiş bir çıkış olayı da kimliği unutturur.

## Kimlik olarak ne gönderilmeli

| Gönderin | Göndermeyin |
|---|---|
| Sistem içi müşteri kimliği (`12345`, `MUSTERI-1001`) | Düz e-posta adresi |
| Kararlı bir UUID | Oturum kimliği |
| — | Sepet kimliği |

> **Kimlik kararlı olmalı**
>
> Kullanıcı her giriş yaptığında değişen bir değer (oturum kimliği gibi) gönderirseniz her giriş yeni bir müşteri oluşturur ve müşteri verisi anlamsızlaşır. Kimlik, kişinin ömrü boyunca aynı kalmalıdır.

## Uzunluk sınırı: 64 karakter

Kimlik en fazla **64 karakter** olabilir. Bu, platform genelinde tek bir sınırdır ve giriş noktalarında doğrulanır.

Daha uzun bir kimlik gönderirseniz istek reddedilir ve hata mesajı sınırı söyler.

> **Bu sınır neden var**
>
> Sipariş ve event tablolarındaki kimlik sütunları 64 karakterdir. Daha önce kimliklendirme daha uzun değerleri kabul ediyor, sonra o kullanıcının ilk siparişinde veritabanı hatası veriyordu. Sınırı giriş noktasına taşımak, hatayı sessiz bir başarısızlıktan anlaşılır bir doğrulama mesajına çevirdi.

Kimliğiniz daha uzunsa kısa ve kararlı bir türev üretin (örneğin kimliğin karmasının ilk 32 karakteri) ve her yerde aynısını kullanın.

## Cihazlar nasıl birleşir

`identify` çağrıldığında, o andaki ziyaretçi kimliği müşteri profiline bağlanır. Aynı kimlikle başka bir cihazdan çağrıldığında o cihaz da aynı profile bağlanır ve geçmişleri birleşir.

Birleşme **geriye dönük** çalışır: kullanıcı giriş yapmadan önce yaptığı gezinme de profile eklenir.

Müşteri numarası tarayıcıdan geldiği için birleşmenin sınırları var:

- Bir müşteriye aynı ağdan (aynı ev ya da ofis bağlantısı) bir haftada en fazla 5 tarayıcı bağlanır; fazlası kimliklenir ama profile birleşmez. Telefon, bilgisayar ve tablet bunun çok altında kalır.
- Bir tarayıcı bir günde en fazla 5 farklı müşteri numarasıyla tanıtılabilir; fazlası `429` alır.
- Profilde kayıtlı e-posta imzasız bir çağrıyla değişmez.

Müşteri numarasının gerçekten sizin sunucunuzdan geldiğini kanıtlamak ve bu sınırların ötesinde koruma için: [İmzalı Kimlik](/docs/integration/identity-verification).

## Sipariş verisiyle tutarlılık

Sipariş gönderirken kullandığınız müşteri kimliği ile `identify` ile gönderdiğiniz kimlik **aynı** olmalıdır. Farklıysa siparişler müşteriye bağlanmaz ve profil boş görünür.

Sipariş gönderimi: [Sipariş Takibi](/docs/integration/order-tracking).

## Kurulumu doğrulama

1. Sitenizde giriş yapın.
2. Panelde **Site Users** sayfasını açın.
3. Kendi profilinizin oluştuğunu görün.
4. Bir test siparişi verin ve profile bağlandığını kontrol edin.

Bu üç adım, kimliklendirmenin çalıştığının en hızlı kanıtıdır.

## Onay ile ilişkisi

`identify` çağrısı çerez onayı denetiminden **geçmez**: widget onu ziyaretçinin onay durumuna bakmadan sunucuya gönderir. Onay denetimine takılan, çağrının ürettiği `identify` **olayıdır** (diğer olaylar gibi, onay gelene kadar bekletilir). Onay vermemiş bir ziyaretçiyi ne zaman kimliklendireceğiniz sizin hukuki değerlendirmenizdir; denetimi isteyen mağazalar çağrıyı onay verildikten sonra yapar:

```js
// onay banner'ınızın "kabul" işleyicisinde
window.Selwise?.grantConsent();
window.Selwise?.identify('MUSTERI-1001');
```

Bkz. [Onay Yönetimi](/docs/integration/consent).
