# Sepete Ekleme

Sepet entegrasyonu ve varyant
Kaynak: https://selwise.com/docs/recommendations/add-to-cart

Öneri kartındaki düğmenin ne yapacağını ve "Sepete ekle" seçildiğinde sitenizin sepetiyle nasıl konuşacağını belirler. Platform entegrasyonu doğru değilse düğme görünür ama ürün sepete girmez.

## Panelde nerede

**Kişiselleştirme → Öneriler** (Personalization → Recommendations) → şeridi açın → **Design** adımı → **Cart** (Sepet) sekmesi.

## Kartın düğmesi ne yapsın

Sekmenin ilk sorusu "What should the card's button do?" (Kartın düğmesi ne yapsın?) sorusudur ve iki cevabı vardır:

| Seçenek | Ne olur |
|---|---|
| **Add to cart** (Sepete ekle) | Ürünü olduğu yerde sepete ekler. Bedenli üründe ne olacağını ürün kartının **Seçenek seçici** ayarı belirler (aşağıda). |
| **Open the product** (Ürüne git) | Düğme ürün sayfasını **yeni sekmede** açar; sepete ekleme mağazanın kendi sayfasında olur. Düğme yazısı **Review Button Text** kutusundadır (varsayılan "Review" / "İncele", en çok 50 karakter). |

Sepete ekleme her mağaza için doğru davranış değildir. Ürün seçiminin ürün sayfasında yapılması gereken kataloglarda (bedenli giyim, konfigüre edilebilir ürünler) **Open the product**'ı seçin. Düğmeye basmayıp kartın kendisine tıklayan ziyaretçi ürün sayfasına **aynı sekmede** gider.

Ürüne giden her tıklamada (düğme ya da kartın kendisi) ürün adresine bir `selwise_rw` parametresi eklenir (`selwise_rw=<şerit kimliği>.<zaman damgası>`). Atıf, ziyaretçi başka bir alan adına geçse bile bununla taşınır; mağazanızın adres temizleme ya da önbellek kurallarında bu parametreyi silmeyin.

## E-ticaret platformu

**Add to cart** seçiliyken **E-commerce Platform** (E-ticaret Platformu) listesi açılır. Yeni bir şerit, kanalınızın veri katmanında tanımlı platformla başlar. Şerit başka bir platformda kalmışsa altında "Your channel's platform is ..." uyarısı ve **Use it** (Bunu kullan) bağlantısı çıkar. Sekiz seçenek vardır:

| Platform | Ekleme nasıl yapılır |
|---|---|
| **Akinon** | Selwise Akinon'un sepet uç noktasına doğrudan istek atar (sayfanın CSRF anahtarıyla). Sepet **numerik ürün kodunu (pk)** ister, SKU'yu reddeder. Düğme eklerken, eklenince ve hata verince metin değiştirir. |
| **IdeaSoft** | IdeaSoft'un kendi `/cart/add_item` uç noktasına mağazanın CSRF anahtarıyla istek atar; mağaza isteği reddederse mağazanın kendi sepete ekle düğmesine ya da formuna döner. Düğme metni değişir. |
| **Shopify** | `/cart/add.js` ile varyant kodunu sepete ekler, ardından `cart:updated` olayını yayınlar. |
| **Ticimax**, **T-Soft**, **ikas** | Doğrudan istek yoktur: Selwise sayfada **bu ürüne ait** "Sepete ekle" düğmesini ya da formunu bulup onu tetikler. Ürüne ait düğme/form yoksa sayfadaki genel bir ekleme formunun ürün alanı bu ürüne çevrilip gönderilir; bu da yoksa ekleme olmaz. |
| **Custom** | Sizin yazdığınız JavaScript çalışır (aşağıda). |
| **Custom API** | **Custom** ile aynı çalışır: altında açılan betik alanına kendi sepet API'nizi çağıran kodu yazarsınız. |

> **Ticimax, T-Soft ve ikas: ürünün düğmesi sayfada olmalı**
>
> Bu üç platformda ekleme mağazanın kendi düğmesine devredilir ve sonucu bilinemez. Ürün sayfasında sayfanın kendi ekleme formu bulunduğu için çoğunlukla çalışır; ana sayfada ya da kategori sayfasında ise ekranda kullanılabilir bir form yoksa ekleme olmaz ve düğme bir hata göstermez. Bu sayfalarda şeridi **Open the product** ile kurmak daha güvenilirdir. Ayrıca bu platformlarda **Loading Text**, **Success Text** ve **Error Text** hiçbir şey değiştirmez.

## Özel sepet betiği

**Custom** seçildiğinde **Custom Add to Cart Script** alanı çıkar ve **boş bırakılamaz** ("A custom cart integration needs an add-to-cart script"). Betik her kart tıklamasında çalışır ve şu değişkenleri alır:

| Değişken | İçerik |
|---|---|
| `productItemCode`, `itemCode` | Ürünün kataloğundaki kodu |
| `productId` | Ürünün kimliği (kodla aynıdır) |
| `productName` | Ürün adı |
| `productPrice` | Fiyat |
| `quantity` | Her zaman 1 |
| `product` | `id`, `title`, `price`, `itemCode` ve `variantId` alanlarını taşıyan nesne. `variantId` sepetin kabul ettiği koddur: seçilen beden ya da seçenek varsa onun kodu, yoksa ürünün sepet kodu. |

Betikte `${productItemCode}` gibi yer tutucular çalıştırılmadan önce değerlerle değiştirilir:

```js
window.addToCart(productItemCode, quantity);

// Yer tutucuyla aynı şey
window.addToCart('${productItemCode}', ${quantity});
```

Betiğin söz dizimi alanın altında denetlenir. Betik hata fırlatırsa ekleme başarısız sayılır; hata yalnızca tarayıcı konsoluna yazılır. Sepetiniz stok kodundan farklı bir kod bekliyorsa `product.variantId` değerini kullanın. Bu alan yalnızca web kanalında çalışır; uygulama kanalında betik hiç çalıştırılmaz.

## Düğme metinleri

**Button texts** (Düğme metinleri) bölümünde **Button Text**, **Loading Text**, **Success Text** ve **Error Text** vardır; boş bırakırsanız varsayılanlar ("Add to Cart", "Adding...", "Added!", "Error") kullanılır. Düğmenin eklerken, eklenince ve hata verince değişen metni yalnızca **Akinon** ve **IdeaSoft** platformlarında görünür; diğerlerinde bu metinler kullanılmaz.

## Para birimi

**Currency (ISO-4217)** üç harfli bir koddur (`TRY`, `USD`); yazdığınız küçük harfler büyütülür ve üçüncü harften sonrası kesilir. Boş bırakabilirsiniz. Ürünün kendi para birimi varsa her zaman o kullanılır; yoksa bu alandaki kod, o da boşsa kanalın para birimi.

## Varyantlı ürünler

Beslemenizdeki her satır kendi ürünüdür ve kendi koduyla sepete eklenir; bir tonun ya da bedenin ayrı ürün olması sepete eklemeyi engellemez.

Kartın bir ürünün seçeneklerini (beden, renk, ölçü) nasıl sunacağı **ürün kartının** ayarıdır: **Tasarım → Ürün Kartları** (Design → Product Cards) → kart → editör başlığındaki **Option chooser** (Seçenek seçici); hem tasarımcıda hem kendi kodunuzda aynı yerdedir ve seçtiğiniz değer önizlemede hemen görünür. Aynı kart öneri şeritlerinde, aramada ve kampanyalarda kullanıldığı için ayar tek yerde durur; öneri şeridinin **Sepet** bölmesi kartın değerini gösterir ve **Kartta değiştir** ile karta götürür.

| Değer | Kartta ne olur |
|---|---|
| **Gösterme** (varsayılan) | Seçici çizilmez. Sepete ekle, kartta görünen ürünü ekler: beslemede her beden ya da ölçü kendi satırıysa bu, kartın adındaki o beden ya da ölçüdür. Birden çok seçeneği olan ama kendi sepet kodu olmayan bir ürün (bedenleri iç içe gelen bir Akinon ürünü) için düğme ürün sayfasını açar; beden tahmin edilmez. |
| **Kutucuklar** | Her seçenek için bir düğme, sepete ekle düğmesinin hemen üstünde. Az bedenli giyim ve ayakkabı için. |
| **Açılır liste** | Tek, kompakt bir liste. Çok seçeneği olan ürünler için (misina kalınlıkları, ayakkabı numaraları). |

Seçici, ürünün **kendi** seçeneklerini sorar. Ürünün başka renklerini göstermek ayrı bir şeydir: tasarımcıdaki **Colours** (Renkler) öğesi aynı grup kodunu paylaşan diğer ürünleri çip olarak çizer ve çip o rengin ürün sayfasını açar; bkz. [Kart Tasarımcısı](/docs/product-cards/designer).

Beslemenizde renk alanı yoksa (IdeaSoft gibi), bir grubun bedenleri ürünün kendi **görselini** paylaşan satırlardan alınır; başka görseldeki aynı bedenli satır başka bir renktir ve sunulmaz. Aynı görselde aynı beden iki kez geçiyorsa ya da ürünün kendi görselini hiçbir bedenli satır taşımıyorsa seçici hiç çizilmez: yanlış renk sepete girmesin diye tahmin edilmez.

Seçici kutucuk ya da listeyken beden seçilmeden ürün eklenmez ve seçici işaretlenir. Stokta olmayan seçenekler görünür kalır ama seçilemez. Akinon'da beslemede beden yoksa widget, ziyaretçi düğmeye bastığında ürünün bedenlerini mağazanın kendi ürün sayfasından bir kez okur (yalnız seçici açıkken).

Dikkat edilecek tek nokta, sepetin hangi kodu kabul ettiğidir. Bazı altyapılarda bu, ürünün mağaza tarafındaki kodundan farklıdır: Akinon'un sepet uç noktası ürünün numerik `pk`'sını ister ve `sku`'yu reddeder. Alan eşleştirmesindeki **Sepete ekleme kodu** satırı bunu karşılar; bkz. [Varyant Gruplama](/docs/product-feeds/variant-grouping).

> **Yanlış sepet kodu sessizce hata döndürür**
>
> Sepet kodu eşleştirmesi eksikse Selwise ürünün kendi kodunu gönderir. Sepetiniz farklı bir kod bekliyorsa istek reddedilir ve düğme hata durumuna geçer. Kendi mağazanızda bir ürünü sepete eklerken tarayıcının ağ sekmesinde hangi kodun gönderildiğine bakıp aynı alanı eşleştirin.

## Hepsini sepete ekle

**Complementary Products** stratejisinin **Complete the look** görünümünde ek bir **Add all to basket** düğmesi çıkar. Yalnızca sepetin cevabı okunabilen Akinon, IdeaSoft ve Shopify'da ve **Add to cart** açıkken gösterilir. Ayrıntı: [Görüntüleme Tipleri](/docs/recommendations/display-types#rol-sekmeli-ve-kombin).

## Test etme ve doğrulama

1. Şeridi **Test Mode** açık kaydedin ve test modunu tarayıcınızda açın ([Widget Oluşturma](/docs/recommendations/creating-widget#test-etme)).
2. Bir karttan ürünü sepete ekleyin ve mağazanın sepetinde göründüğünü doğrulayın.
3. Tarayıcının ağ sekmesinde Akinon, IdeaSoft ve Shopify için gönderilen istekte hangi kodun gittiğine bakın.

Eklemenin başarısız olduğu her sebep (yanlış kod, bulunamayan düğme, betik hatası) kartta ya hiç görünmez ya da yalnızca düğme metninde görünür; asıl ipucu tarayıcı konsoludur: betik hataları ve reddedilen istekler orada görünür.

## Ölçüm

Eklemeden önce beden ve kod çözülür; beden seçilmemişse `add_to_cart` olayı **hiç gönderilmez** (seçicisiz kartta ürün sayfasına gidilen tıklama da sepete ekleme sayılmaz). Olay, ekleme isteği atılmadan hemen önce gönderilir; yani istek sonradan reddedilirse (yanlış sepet kodu) ya da mağazanın kendi düğmesi bulunamazsa olay yine de sayılmıştır: sepete ekleme sayısı "düğmeye basıldı ve beden belliydi" demektir, "mağazanın sepeti onayladı" demek değildir. Kartın kendi düğmesiyle yapılan ekleme, şeridin etkileşimi sayılır ve ekleme sonrası siparişler şeride yazılır; sitenizin kendi ürün sayfasından yapılan eklemeler şeride sayılmaz. Bkz. [Öneri Performansı](/docs/analytics/recommendations).

## Butonu kapatmak

Düğmenin sepete eklemesini istemiyorsanız **Open the product**'ı seçin. Kart hâlâ tıklanır ve tıklama ölçülür.
