> ## Documentation Index
> Fetch the complete documentation index at: https://documentation.onesignal.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Custom Events ile Kişiselleştirme

> Journey mesajlarini Liquid sozdizimi ile kisisellestirmek icin Custom Event ozelliklerini kullanin. Olaylarin nasil depolandigini, erisildgini ve push, e-posta ve SMS sablonlarinda nasil islendigini ogrenin.

[Custom Events](./custom-events), olay ozelliklerini (urun adlari, fiyatlar, URL'ler, diziler vb.) kullanarak Journey mesajlarini kisisellestirmenizi saglar.

Olay ozellikleri sablonlarda yalnizca olay asagidaki kosullari karsiladiginda kullanilabilir:

* Journey girisini tetiklediginde veya
* Journey icindeki bir **Wait Until** kosuluyla eslesmediginde

Depolanan olay ozelliklerine [Liquid sozdizimi](./using-liquid-syntax) kullanilarak erisilebilir.

***

## Custom Event kisisellestirmesi nasil calisir

Bu adimlari izleyerek Journey mesajlariniza olay ozellikleri ekleyin:

<Steps>
  <Step title="Ozelliklerle birlikte bir Custom Event gonderin">
    Ornek [Custom Events](./custom-events) veri yapisi:

    ```json JSON theme={null}
    {
      "name": "purchase",
      "properties": {
        "item": "Blue Sweater",
        "price": "29.99",
        "order status": "pending",
        "details": [
          {
            "manufacturer": "Company A",
            "model": "1234567890"
          },
          {
            "manufacturer": "Company B",
            "model": "9876543210"
          }
        ]
      },
      "external_id": "user_12345",
      "timestamp": "2025-10-21T19:09:32.263Z",
    }
    ```
  </Step>

  <Step title="Journey mesaj sablonlarinda olay ozelliklerine basvurun">
    Olay ozelliklerine erismek icin [Liquid sozdizimi](./using-liquid-syntax) kullanin.

    ### Yaygin Liquid erisim kaliplari

    | Ne istiyorsunuz         | Liquid                                                                | Cikti                          |
    | ----------------------- | --------------------------------------------------------------------- | ------------------------------ |
    | Olay adi                | `{{ journey.first_event.name }}`                                      | `purchase`                     |
    | Ozellik                 | `{{ journey.first_event.properties.item }}`                           | `Blue Sweater`                 |
    | Ic ice ozellikler       | `{{ journey.first_event.properties.details.first.manufacturer }}`     | `Company A`                    |
    | Ozel karakterli ozellik | `{{ journey.last_event.properties["order status"] }}`                 | `pending`                      |
    | Zaman damgasi           | `{{ journey.last_event.timestamp \| date: "%B %d, %Y at %I:%M %p" }}` | `October 21, 2025 at 07:09 PM` |

    #### Ic ice Liquid erisim kaliplari

    Ic ice ozelliklere nokta ve koseli parantez gosterimi kullanarak da erisebilirsiniz:

    ```liquid Liquid theme={null}
    {{ journey.first_event.properties.details.first.manufacturer }} = Company A
    {{ journey.first_event.properties.details.last.manufacturer }} = Company B
    {{ journey.first_event.properties.details[0].manufacturer }} = Company A
    {{ journey.first_event.properties.details[1].manufacturer }} = Company B
    ```

    <Warning>
      Gecersiz Liquid veya eksik ozellikler bos dize olarak islenir. Mesajlar yine de gonderilir. Bir yedek deger belirlemek icin [varsayilan filtreler](./using-liquid-syntax#default) kullanin.
    </Warning>
  </Step>

  <Step title="Bir Journey olusturun">
    Journey'yi giris kurali ve/veya Wait Until kosulu olarak Custom Event'i kullanacak sekilde ayarlayin.

    * Giris kurallari icin [Journey ayarlari](./journeys-settings) sayfasina bakin.
    * Wait Until kosullari icin [Journey eylemleri](./journeys-actions) sayfasina bakin.

    Sablonlarla mesaj dugumlerini ekleyin.
  </Step>
</Steps>

### Olay ozelligi depolama kurallari

* Giris kurallari ve Wait Until adimlarini birlestirerek Journey'nizde birden fazla olay kullanabilirsiniz.
* Maksimum: **Kullanici basina Journey ornegi basina 100 depolanmis olay ozelligi** (en eskiler kaldirilir).
* Olay ozellikleri **kullanici basina, Journey ornegi basina** depolanir.
* Giristen once gonderilen olaylara erisilemez.
* Kullanici Journey'den ciktiginda olay ozellikleri temizlenir.

<Warning>
  Bir Journey'de depolanan olaylara baska bir Journey'den erisilemez.
</Warning>

***

## Custom Event Liquid referansi

Journey icindeki depolanmis olaylara erismek icin bu nesneleri kullanin.

<ParamField body="journey.first_event">
  Bu Journey ornegi icin depolanan ilk olay.

  * Bir **Custom Event Giris Kurali** kullaniyorsaniz, bu Journey girisine neden olan olaydir.
  * Custom Event Giris Kurali kullanmiyorsaniz, bu bir Wait Until kosuluyla eslesen ilk depolanan olaydir.

  ```liquid Liquid theme={null}
  Thanks for purchasing {{ journey.first_event.properties.item | default: "your item" }}!
  ```
</ParamField>

<ParamField body="journey.last_event">
  Bu Journey ornegi icin en son depolanan olay.

  * Yalnizca bir olay depolanmissa, `first_event` ve `last_event` ayni seyi dondurur.

  ```liquid Liquid theme={null}
  Your most recent purchase was {{ journey.last_event.properties.item | default: "made" }}!
  ```
</ParamField>

<ParamField body="journey.event.EVENT_NAME">
  Belirli bir ada sahip en son depolanan olay.

  * `EVENT_NAME` yerine olay adinizi yazin (ornegin `purchase`).
  * Ayni olay adi birden fazla kez kullanilmissa, en son ornegi dondurur.

  ```liquid Liquid theme={null}
  {% assign event = journey.event.purchase %}
  ```

  Olay adiniz bosluk veya ozel karakterler iceriyorsa, [koseli parantez gosterimi](https://shopify.dev/docs/api/liquid/basics#referencing-handles) kullanin.

  **Ornek Olay:** `"name": "order status"`

  ```liquid Liquid theme={null}
  {% assign event = journey.event["order status"] %}
  ```
</ParamField>

<ParamField body="journey.all_events" type="array">
  Bu Journey ornegi icin depolanmis tum olaylar, depolanma sirasina gore.

  * Uzerlerinde yineleme yapmak icin [for donguleri](./using-liquid-syntax#for-loops) kullanin.

  ```liquid Liquid theme={null}
  {% for event in journey.all_events %}
  • {{ event.properties.item | default: "Item" }} — ${{ event.properties.price | default: "0.00" }}
  {% endfor %}
  ```

  * `journey.first_event`, `journey.all_events[0]` ifadesinin kisaltmasidir.
  * `journey.last_event`, dizideki en son olayin kisaltmasidir.
</ParamField>

***

## Ornek: Custom Events kullanarak terk edilmis sepet sablonlari

Bu ornek, Custom Events kullanarak terk edilmis sepet mesajlarinin nasil kisisellestirilecegini gostermektedir. [Terk Edilmis Sepet rehberi](./abandoned-cart) uzerine insa edilmistir.

**Ornek Custom Event seti:**

```json JSON theme={null}
{
  "events": [
    {
      "name": "cart_abandoned",
      "properties": {
        "cart_url": "https://yourdomain.com/username/cart",
        "cart": [
          {
            "product_name": "24 Pack of Acorns",
            "product_image": "https://i.imgur.com/ssPCfbC.png",
            "product_price": "$12.99",
            "product_quantity": "1"
          },
          {
            "product_name": "Fancy Sweater",
            "product_image": "https://i.imgur.com/8QWTfV4.png",
            "product_price": "$9.99",
            "product_quantity": "1"
          }
        ]
      },
      "external_id": "ID_OF_THE_USER"
    }
  ]
}
```

### E-posta sablonu

Bu ornek, asagidakileri goruntuleyen bir e-posta sablonunun nasil olusturulacagini gostermektedir:

* Sepetteki urun sayisi
* For dongusu kullanarak her urunun gorseli, adi, miktari ve fiyati
* Musterinin benzersiz sepet URL'sine baglanti veren bir buton

<Frame caption="Ornek Terk Edilmis Sepet E-posta Sablonu">
  <img src="https://mintcdn.com/onesignal/KSCNwSpBCNSQ8xdF/images/docs/fd61543-Screenshot_2023-08-28_at_10.52.05_AM.png?fit=max&auto=format&n=KSCNwSpBCNSQ8xdF&q=85&s=4128b15d8d53d69c6626e129eee538fa" width="693" height="1477" data-path="images/docs/fd61543-Screenshot_2023-08-28_at_10.52.05_AM.png" />
</Frame>

<Steps>
  <Step title="E-posta sablonunu olusturun">
    **Messages > Templates > New Email Template** sayfasina gidin ve Surukle & Birak Duzenleyiciyi acin.
  </Step>

  <Step title="Yapi duzenini ekleyin">
    Bes satir olusturun:

    * Satir 1, 2 ve 4: bir **Paragraf** blogu iceren tek sutun
    * Satir 3: **HTML | Paragraf | Paragraf | Paragraf** iceren dort sutun
    * Satir 5: bir **Buton** blogu iceren tek sutun

    <Frame caption="Terk edilmis sepet icin baslangic e-posta sablonu">
      <img src="https://mintcdn.com/onesignal/v-hm59YoewwF90UX/images/email/starter-template-abandoned-cart.png?fit=max&auto=format&n=v-hm59YoewwF90UX&q=85&s=551e9ec4618f64fdc0b6ab610a537c48" width="2968" height="2124" data-path="images/email/starter-template-abandoned-cart.png" />
    </Frame>
  </Step>

  <Step title="Urun sayisini goruntuleyin">
    Satir 1'de ekleyin:

    ```liquid Liquid theme={null}
    We're holding onto {{journey.first_event.properties.cart.size}} items in your cart, but don't wait too long!
    ```

    Daha dogru dilbilgisi icin "1 urun" ile "2 urun" arasinda ayrım yapmak uzere bir kosullu ifade kullanabilirsiniz, ancak terk edilmis sepet e-postalari icin cogul ifade genellikle kabul edilebilir.

    ```liquid Liquid theme={null}
    {% assign cart = message.custom_data.cart %}
    {% assign item_count = cart.size | plus: 0 %}
    {% if item_count == 1 %}
    We're holding onto {{item_count}} item in your cart, but don't wait too long, other squirrels are getting ahead!
    {% endif %}
    {% if item_count > 1 %}
    We're holding onto {{item_count}} items in your cart, but don't wait too long, other squirrels are getting ahead!
    {% endif %}
    ```
  </Step>

  <Step title="For dongusunu baslattin">
    Her sepet urunu icin urun gosterim satirini tekrarlamak uzere bir [for dongusu](./using-liquid-syntax#for-loops) kullanin.

    Satir 2'de (dongu baslangici), ekleyin:

    ```liquid Liquid theme={null}
    {% for product in journey.first_event.properties.cart %}
    ```

    **Bu ne yapar:**

    * `cart` dizisindeki her nesne uzerinde yinelenen bir dongu baslatir
    * Mevcut ogesi temsil eden gecici bir `product` degiskeni olusturur
    * `{% for %}` ile `{% endfor %}` arasindaki her sey, her sepet urunu icin bir kez tekrarlanir
    * `product` yerine istediginiz ismi verebilirsiniz (ornegin `item`, `cartItem`) — yeter ki tutarli olun

    <Warning>
      For dongusu yerlesimi: `{% for %}` sozdiziminin kendi Metin blogu satirinda oldugundan emin olun. Bunu diger iceriklerle birlikte cok sutunlu bir satira yerlestirmeyin, cunku bu bazi e-posta istemcilerinde e-posta gorunumunu bozabilir.
    </Warning>
  </Step>

  <Step title="Urun detaylarini goruntuleyin">
    Bu 4 sutunlu satir gorsel, ad, miktar ve fiyati gosterir. Dongunun icinde oldugu icin her sepet urunu icin tekrarlanir.

    Satir 3'te (urun detaylari), yapilandirin:

    **Sutun 1 - HTML blogu** (urun gorseli):

    ```html theme={null}
    <img src="{{product.product_image}}" alt="Product image" style="max-width:100%;" />
    ```

    **Sutun 2-4 - Metin bloklari** (urun adi, miktar, fiyat):

    * Sutun 2: `{{product.product_name}}`
    * Sutun 3: `{{product.product_quantity}}`
    * Sutun 4: `{{product.product_price}}`

    **Dongu nasil calisir:**

    * Ilk yinelemede, `product` = sepet dizisindeki ilk nesne
    * `{{product.product_image}}` ilk urunun gorselini alir
    * Ikinci yinelemede, `product` = ikinci nesne
    * Satir tum sepet urunleri icin otomatik olarak tekrarlanir

    <Warning>
      **Alan adi eslesmesi:** `product_image` gibi anahtarlar, olay veri yapisindaki ile tam olarak eslesmelidir (buyuk/kucuk harf duyarli). Uyumsuzluklar bos dize olarak islenir.
    </Warning>
  </Step>

  <Step title="For dongusunu sonlandirin">
    Tekrarlamanin nerede duracagini belirlemek icin donguyu kapatin.

    Satir 4'te (dongu sonu), ekleyin:

    ```liquid Liquid theme={null}
    {% endfor %}
    ```

    <Note>
      Her `{% for %}` ifadesinin eslesenmis bir `{% endfor %}` ifadesi olmalidir. Bunu atlamak e-posta islemesini bozar.
    </Note>
  </Step>

  <Step title="Sepet URL butonunu ekleyin">
    Satir 5'teki **Buton** blogunda, Eylem URL'sini su sekilde ayarlayin:

    ```liquid Liquid theme={null}
    {{journey.first_event.properties.cart_url}}
    ```

    <Frame caption="Bicimlendirilmemis terk edilmis sepet icin tamamlanmis temel e-posta sablonu">
      <img src="https://mintcdn.com/onesignal/v-hm59YoewwF90UX/images/email/finished-template-abandoned-cart-custom-event.png?fit=max&auto=format&n=v-hm59YoewwF90UX&q=85&s=67217e202cc57ca4039e0b34d2501f15" width="2968" height="1716" data-path="images/email/finished-template-abandoned-cart-custom-event.png" />
    </Frame>
  </Step>

  <Step title="Sablonu test edin">
    * Sablonu bos bir Journey'ye ekleyin ve giris kuralini Custom Event olarak ayarlayin.
    * Journey'yi etkinlestirin ve Custom Event API araciligiyla kendinizi giris yapin.
    * Verilerin dogru goruntulendigini dogrulayin.

    <Check>Basarili! Artik sablonunuza kendi stilinizi uygulayabilirsiniz. Bkz. [Surukle ve birak ile e-posta tasarlama](./design-emails-with-drag-and-drop).</Check>
  </Step>
</Steps>

### Push sablonu

Push bildirimlerinde sinirli alan vardir, bu nedenle bir urun gosterin ve toplam sayiyi belirtin.

**Mesaj alani:**

[Kosullu ifadeler](./using-liquid-syntax#if-elsif-else) kullanarak urun ve sayiyi dogru dilbilgisiyle goruntuleyin.

```liquid Liquid theme={null}
{% assign cart = journey.first_event.properties.cart %}
{% assign item_count = cart.size | plus: 0 %}
{% if item_count == 1 %}
You left {{cart.first.product_name}} in your cart.
{% endif %}
{% if item_count == 2 %}
You left {{cart.first.product_name}} and {{item_count | minus: 1}} more item in your cart.
{% endif %}
{% if item_count > 2 %}
You left {{cart.first.product_name}} and {{item_count | minus: 1}} more items in your cart.
{% endif %}
```

**Gorsel alani:**

```liquid Liquid theme={null}
{{journey.first_event.properties.cart.first.product_image | default: "https://i.imgur.com/ssPCfbC.png"}}
```

**Acilis URL alani:**

```liquid Liquid theme={null}
{{journey.first_event.properties.cart_url | default: "https://yourdomain.com/cart"}}
```

Test Journey'sine ekleyerek ve baska bir Custom Event API cagrisi araciligiyla kendinizi giris yaparak kendinize bir test push bildirimi gonderin. Buna benzer bir bildirim gormeniz gerekir:

<Frame caption="Terk edilmis sepet push sablon ornegi">
  <img src="https://mintcdn.com/onesignal/4HyuQPBpu-4xjmQC/images/docs/d0db985-Screenshot_2023-08-28_at_9.30.23_AM.png?fit=max&auto=format&n=4HyuQPBpu-4xjmQC&q=85&s=6cf03ce9b622ba399656f2b14fb055f3" width="688" height="656" data-path="images/docs/d0db985-Screenshot_2023-08-28_at_9.30.23_AM.png" />
</Frame>

<Check>Basarili! Artik daha fazla sablon olusturabilir ve bunlari [Terk Edilmis Sepet Journey](./abandoned-cart)'sinde kullanabilirsiniz.</Check>

***

## Sorun giderme ve en iyi uygulamalar

**Yaygin hatalar:**

| Hata                                        | Neden basarisiz olur                    | Dogru sozdizimi                                |
| ------------------------------------------- | --------------------------------------- | ---------------------------------------------- |
| `{{ journey.first_event.item }}`            | `.properties` eksik                     | `{{ journey.first_event.properties.item }}`    |
| `{{ journey.event.purchase.item }}`         | `.properties` eksik                     | `{{ journey.event.purchase.properties.item }}` |
| `{{ journey.first_event.properties.Item }}` | Yanlis buyuk/kucuk harf (`item` olmali) | `{{ journey.first_event.properties.item }}`    |
| `{{ event.properties.item }}`               | `journey.` on eki eksik                 | `{{ journey.first_event.properties.item }}`    |

**En iyi uygulamalar:**

* Sablonlari yayina almadan once her zaman test edin
* Istege bagli ozellikler icin [varsayilan filtreler](./using-liquid-syntax#default) kullanin
* Olay semasinin sablon beklentileriyle eslestigini dogrulayin

***

## Ilgili sayfalar

<Columns cols={2}>
  <Card title="Mesaj kisisellestirme" href="./message-personalization" icon="sparkles">
    Custom Events ve diger yontemler dahil olmak uzere OneSignal'daki tum kisisellestirme seceneklerine genel bakis.
  </Card>

  <Card title="Custom Events" href="./custom-events" icon="bolt">
    SDK veya API araciligiyla Custom Events uygulama ve gonderme icin eksiksiz rehber.
  </Card>

  <Card title="Journey'lere genel bakis" href="./journeys-overview" icon="route">
    Tetikleyiciler, kosullar ve eylemlerle otomatik mesajlasma is akislari olusturmayi ogrenin.
  </Card>

  <Card title="Journey ayarlari" href="./journeys-settings" icon="gear">
    Olay tetiklemeli giris kurallarini ve Journey davranisini yapilandirin.
  </Card>

  <Card title="Wait Until eylemleri" href="./journeys-actions#wait-until" icon="clock">
    Journey ilerlemesi sirasinda ek olaylari depolamak icin Wait Until dugumlerini kullanin.
  </Card>

  <Card title="Liquid sozdizimini kullanma" href="./using-liquid-syntax" icon="droplet">
    Filtreler, kosullar, donguler ve dize manipulasyonu ile eksiksiz Liquid referansi.
  </Card>

  <Card title="Sablonlar" href="./templates" icon="file">
    Journey'lerde kullanmak icin yeniden kullanilabilir mesaj sablonlari olusturun ve yonetin.
  </Card>
</Columns>

<Info>
  Yardıma mı ihtiyacınız var?

  Destek ekibimizle sohbet edin veya `support@onesignal.com` adresine e-posta gönderin

  Lütfen şunları ekleyin:

  * Yaşadığınız sorunun ayrıntıları ve varsa yeniden üretme adımları
  * OneSignal Uygulama Kimliğiniz
  * Varsa Harici ID veya Abonelik ID
  * Varsa OneSignal Panosunda test ettiğiniz mesajın URL'si
  * İlgili [günlükler veya hata mesajları](/docs/en/capturing-a-debug-log)

  Size yardımcı olmaktan mutluluk duyarız!
</Info>

***
