A/B testi
Bir kampanya deney taşıyabilir: her biri kendi tam içerik haritasına sahip iki ila dört varyant, artı kazanan için kitlenin bir kısmını tutan isteğe bağlı örneklem oranı.

Tanımlama
Panel: içerik adımı → A/B testi → her varyanta ad verin, metnini kendi sekmesinde düzenleyin, ağırlıkları ve örneklemi ayarlayın.
API:
{
"name": "Sepet hatırlatma — başlık testi",
"content": { "tr": { "title": "Sepetinde bir şey kaldı", "body": "…" }, "_default": "tr" },
"experiment": {
"sampleRate": 0.5,
"variants": [
{ "id": "a", "name": "Sade hatırlatma", "weight": 1, "content": { "tr": { "title": "Sepetinde bir şey kaldı", "body": "…" }, "_default": "tr" } },
{ "id": "b", "name": "Ürün sayılı", "weight": 1, "content": { "tr": { "title": "Sepetinde {{cartItems}} ürün var", "body": "…" }, "_default": "tr" } }
]
},
"segment": { "field": "tags.cartItems", "op": "gte", "value": 1 }
}
| Alan | Kurallar |
|---|---|
variants[].id | ^[a-z0-9_-]{1,8}$, benzersiz |
variants[].weight | göreli, > 0 (2:1 = üçte iki / üçte bir) |
variants[].content | tam içerik haritası, kampanyanınkiyle aynı kurallar |
sampleRate | 0,01–1. 0.5 = kitlenin yarısı teste girer; diğer yarısı tutulur |
üst düzey content | yedek / özetin gösterdiği; her varyant kendininkini taşır |
Deterministik atama
Rastgele hiçbir şey yok. Her kullanıcı için:
bucket = sha256("<campaignId>|<userId>|sample") → bucket < sampleRate ise testte
variant = sha256("<campaignId>|<userId>|variant") ile ağırlıklı seçim
Güvenebileceğiniz sonuçlar:
- Üç cihazlı kullanıcı üçünde de aynı varyantı görür.
- Fan-out'u yeniden çalıştırmak (tekrar deneme) aynı varyantı atar.
- Tutulan kısım, aynı anahtarla örneklemin tam tümleyenidir — iki yarı asla çakışamaz.
Sonuçları okuma
Raporun A/B tablosu varyant başına gösterir: gönderildi, ulaştı (+ oran), açılma, tıklanma. İzleme kimliği varyantı gömer (…|platform|variant), böylece her SDK pingi arama yapmadan hem kampanya sayacını hem stats.variants.<id>.<type>'ı artırır. Oranlar her yerde olduğu gibi payda olarak ulaşanı kullanır.
Zaman tanıyın: açılmalar ulaşmaları saatlerce geriden izler. Saatlik grafik eğrilerin ne zaman düzleştiğini söyler.
Kazananı gönderme
sampleRate < 1 ile tutulan bir kalan vardır. Bir varyant seçin:
- Panel: rapordaki Kazananı gönder.
- API:
POST /v1/campaigns/:id/experiment/winner { "variant": "b" }→202 { id: <yeni kampanya> }.
Ne olur:
- Kazananın içeriğiyle ve
experiment.remainderOf = <parent>ile yeni bir kampanya oluşturulur. - Fan-out'u aynı hash anahtarını
!inSampleile kullanır — tam olarak testte olmayan kullanıcılar, ne eksik ne fazla. - Parent
winnervewinnerCampaignIdkaydeder; rapor takip kampanyasına bağlanır (Kazanan gönderimin raporu). - İkinci kazanan çağrısı
409döner.
sampleRate: 1 ile herkes testteydi; kalan ve kazanan düğmesi yoktur.
İpuçları
- Tek şeyi test edin (başlık, CTA, görsel). Aynı anda iki değişiklik hiçbir şey söylemez.
- 10 000 kullanıcıda 2 varyant × %50 örneklem = kol başına 2 500 — birkaç puanlık açılma farkının gerçek olması için yeterli. Kol başına ~500'ün altında farkları gürültü sayın.
- Varyantlar yalnızca metin değil, farklı butonlar ve görseller kullanabilir.