> ## 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.

# Veri akışları

> Veri Akışlarını kullanarak gönderim anında API'lerinizden OneSignal e-posta mesajlarına gerçek zamanlı veri çekin; kişiselleştirme için Liquid sözdizimini kullanın.

Veri Akışları, gönderim anında **API'lerinizden doğrudan mesajlara gerçek zamanlı veri çekmenizi** sağlar. Bu, verileri OneSignal'e önceden yüklemeden son derece kişiselleştirilmiş içerik sunmanıza olanak tanır.

Veri Akışlarını verileriniz sık sık değiştiğinde kullanın, örneğin:

* Kullanıcının mevcut ödül bakiyesi
* En son sipariş durumu
* Kişiselleştirilmiş ürün önerileri

Diğer kişiselleştirme yöntemleri ([Etiketler](./add-user-data-tags) veya [Dinamik İçerik](./dynamic-content) gibi) statik veriler için iyi çalışır. **Veri Akışları, canlı ve hızla değişen değerler için en iyisidir**.

<Note>
  Veri Akışları şu anda **yalnızca Journeys aracılığıyla gönderilen e-posta mesajları için** kullanılabilir.
  Başka bir kanala mı ihtiyacınız var? [Bu kısa anketi doldurun](https://survey.survicate.com/954895d3e7ed1348/?p=anonymous).
</Note>

***

## Veri Akışları nasıl çalışır

1. **Bir Veri Akışı oluşturun** – OneSignal'in API'nize nasıl bağlanacağını yapılandırın.
2. **Veri Akışını** bir mesaj şablonuna ekleyin.
3. **Yanıt alanlarını** mesajınıza [Liquid sözdizimi](./using-liquid-syntax) kullanarak ekleyin.
4. **Gönderim anında**, OneSignal her alıcı için bir API çağrısı yapar, yanıtı ayrıştırır ve verileri mesajınıza enjekte eder.

### Örnek: Ödül puanlarını gösterme

Diyelim ki her müşteriye ödül bakiyesini göstermek istiyorsunuz:

```liquid theme={null}
Hi {{ first_name }},

You have {{ data_feed.rewards.points }} points!
Your membership status is {{ data_feed.rewards.status_level }}.

Keep shopping to earn more points!
```

Sarah bu e-postayı aldığında, Liquid değişkenleri gerçek puan bakiyesi ve üyelik durumuyla değiştirilir. Aşağıdaki bölümler bu örneği adım adım kurmayı göstermektedir.

## Veri Akışı oluşturma ve kullanma

### 1. Veri Akışı yapılandırmanızı ayarlayın

Mevcut Veri Akışlarının listesini görmek ve yeni bir tane oluşturmak için kenar çubuğunda **Veri > Veri Akışları**'na gidin.

Her Veri Akışı şunlara sahip olmalıdır:

* **Ad**: Akışları ayırt etmenize yardımcı olması için "Müşteri Ödülleri API'si" gibi açıklayıcı bir ad. Benzersiz adlar önerilir ancak zorunlu değildir.
* **Takma Ad**: Liquid sözdiziminde kullanılan `rewards` gibi kısa bir tanımlayıcı (örn. `{{ data_feed.rewards.points }}`). Benzersiz, küçük harf, alfasayısal olmalı; boşluk veya özel karakter içermemelidir.
* **Yöntem**: OneSignal'in API'nize ulaşmak için kullandığı HTTP yöntemi. Genellikle `GET`, ancak `POST` da desteklenir.
* **URL**: API uç noktanız. OneSignal'in kullanıcıya özel veri çekebilmesi için Liquid sözdizimini destekler.

Örneğin, ödül uç noktanız URL parametresi olarak kullanıcının `external_id`'sini (OneSignal'de depolanan) kabul edebilir:

```liquid theme={null}
https://acme.com/customers/user_id={{ external_id }}/rewards
```

* **Başlıklar**: API'nizin gerektirdiği anahtar-değer çiftleri (örn. kimlik doğrulama belirteçleri). Liquid sözdizimini destekler.
* **Gövde**: İsteğe bağlı JSON istek gövdesi. [Journey webhook'ları](./journeys-webhook#personalization) ile aynı şekilde Liquid sözdizimini destekler.

Örneğin, API'niz kullanıcının kimliğini URL yerine istek gövdesinde belirtmenizi gerektirebilir:

```json theme={null}
{
	"customer_id": "{{ subscription.external_id }}"
}
```

Tam bir Veri Akışı yapılandırması şöyle görünür:

<Frame caption="Veri Akışı yapılandırma örneği">
  <img src="https://mintcdn.com/onesignal/pJu1B0q7HE_EbGFK/images/dashboard/data-feed-configuration-example.png?fit=max&auto=format&n=pJu1B0q7HE_EbGFK&q=85&s=d000fa94b02ee58c15b089fa7f9ad834" alt="Data Feed configuration showing name, alias, method, URL, and headers" width="901" height="1142" data-path="images/dashboard/data-feed-configuration-example.png" />
</Frame>

<Tip>
  Akışınızı üretimde kullanmadan önce test edin. Veri Akışı testleri [test aboneliklerinize](./test-users) karşı çalışır; bu nedenle test aboneliği özniteliklerinizin API'nizden gerçek bir sonuç döndüreceğini doğrulayın.
</Tip>

Son olarak, kullanıma hazır olması için yeni Veri Akışınızı **Etkinleştirin**.

### 2. Veri Akışını mesaj şablonunuza ekleyin

OneSignal'in bunu kullanması gerektiğini bilmesi için Veri Akışınızı mesaj şablonunuza ekleyin.

1. **Mesajlar > Şablonlar**'a gidin
2. Mesaj bölümünde **Kişiselleştirme** düğmesini seçin

<Frame caption="Kişiselleştirme düğmesi seçenekleri">
  <img src="https://mintcdn.com/onesignal/ciRrThfP6xMpI7GY/images/dashboard/data-feeds-personalization-button.png?fit=max&auto=format&n=ciRrThfP6xMpI7GY&q=85&s=a2b46a9c67cc0ce86c469c407d2afbac" alt="Personalization button in the message template editor" width="1940" height="614" data-path="images/dashboard/data-feeds-personalization-button.png" />
</Frame>

3. **Veri Akışları**'nı açın ve akışınızı seçin

<Frame caption="Mesaj düzenleyicisinde Veri Akışları bölümü">
  <img src="https://mintcdn.com/onesignal/ciRrThfP6xMpI7GY/images/dashboard/data-feeds-option.png?fit=max&auto=format&n=ciRrThfP6xMpI7GY&q=85&s=ca51e5f38a54b8550b3256ad76843947" alt="Data Feeds toggle and feed selector in the message composer" width="978" height="762" data-path="images/dashboard/data-feeds-option.png" />
</Frame>

4. Şablonunuzu kaydedin

### 3. Verileri mesajınızda kullanın

Yanıt verilerini mesajınızın herhangi bir yerine eklemek için Liquid sözdizimini kullanın. Ödül örneğine devam edersek, `external_id`'si `a1-b2c3` olan Sarah için API yanıtı şöyle görünebilir:

```json theme={null}
{
	"external_id": "a1-b2c3",
	"points": 193,
	"status_level": "Gold"
}
```

Puan sayısını ve durum seviyesini eklemek için Veri Akışı takma adına ve yanıt alanlarına nokta notasyonuyla başvurun:

```liquid theme={null}
You have {{ data_feed.rewards.points }} points!
Your membership status is {{ data_feed.rewards.status_level }}.
```

Bu, OneSignal'e şunu söyler:

* Bir Veri Akışı kullan
* `rewards` Veri Akışını kullan
  * Hatırlatma: `rewards` akışı, API'yi alıcının `external_id`'si ile çağırmayı bilir
* Yanıttan, `points` öğesinin değerini (193) ve `status_level` öğesinin değerini (Gold) ekle

***

## Gereksinimler ve sınırlar

API'nizin şunları yapması gerekir:

* **Başlıklarda kimlik doğrulama belirteçleriyle tek adımlı kimlik doğrulamayı kabul etmek**
* **Hızlı yanıt vermek.** 250ms altı önerilir (bu, gönderim hızını doğrudan etkiler)
* **JSON döndürmek.** Diğer formatlar şu anda desteklenmiyor.
  * Farklı bir formata ihtiyacınız varsa, [kullanım durumunuzu paylaşın](https://survey.survicate.com/954895d3e7ed1348/?p=anonymous).
* **Gönderim hacminizi karşılamak.** API'nizdeki düşük oran sınırı mesaj teslimini yavaşlatır.
* **Makul boyutlu yükler döndürmek.** En iyi performans için yanıtları 50 KB altında tutun.

Mevcut sınırlar:

* **Şablon başına bir Veri Akışı.** İhtiyacınız olan her şeyi tek bir API yanıtında alın.
* **Mesaj başına Veri Akışı başına bir API çağrısı.**
* **Yalnızca Journeys.** Henüz diğer gönderim yöntemleri için kullanılamıyor.
* **Çağrı zincirlemesi yok.** Bir Veri Akışından gelen yük, başka birini çağırmak için kullanılamaz.

<Info>
  Şablon başına birden fazla Veri Akışına veya diğer kanallar için desteğe mi ihtiyacınız var? Bu özelliklere öncelik verilmesine yardımcı olmak için [kullanım durumunuzu paylaşın](https://survey.survicate.com/954895d3e7ed1348/?p=anonymous).
</Info>

***

## API'nizi ayarlama

Bir Veri Akışı oluşturmadan önce, API'nizin bu gereksinimleri karşılayabildiğinden emin olun:

### Kimlik doğrulama

API'niz başlıklar aracılığıyla kimlik doğrulamayı kabul etmelidir:

```
Authorization: Bearer YOUR_TOKEN
```

veya

```
X-API-Key: YOUR_KEY
```

### JSON istek gövdesi

İsteğe bir gövde eklemeniz gerekiyorsa, API'niz JSON'u kabul etmelidir. Bu, başlıklarınızın `Content-Type: application/json` içermesi gerektiği anlamına gelebilir.

### JSON yanıtı

API'niz bir JSON nesnesi döndürmelidir. Tipik olarak bu, başlıklarınızın `Accept: application/json` içereceği anlamına gelir.

### Kişiselleştirme parametreleri

Genellikle kullanıcı tanımlayıcılarını URL'de şu şekilde geçireceksiniz:

```liquid theme={null}
https://api.example.com/users/{{external_id}}/data
https://api.example.com/rewards?email={{email | url_encode}}
```

Ve/veya gövdede:

```json theme={null}
{
	"customer_id": "{{ external_id }}",
	"email": "{{ subscription.email }}"
}
```

Bu verilerin OneSignal'de var olacağından emin olun (genellikle Etiketler olarak, ancak [özel olay özellikleri](#örnekler-ve-gelişmiş-kullanım-durumları) gibi diğer seçenekler de mevcuttur).

### Oran sınırları

API'nizin oran sınırlarını göz önünde bulundurun. 10.000 kullanıcıya gönderim, hızlı art arda 10.000 API çağrısı anlamına gelir. API'nizin bu hacmi kaldırabileceğinden emin olun.

### Hata işleme

API'niz bir hata döndürürse veya bir kullanıcı için veriye sahip değilse, mesaj o alıcıya gönderilmeyecektir. API'nizin beklenen tüm kullanıcılar için veri döndürdüğünden emin olun.

***

## Başlangıç kontrol listesi

Veri Akışlarını uygulamadan önce şu soruları yanıtlayın:

* Mesajımda hangi verileri göstermek istiyorum? API'nizden doldurulacak öğelerin tanımlandığı basit bir taslaktan geriye doğru çalışmak, düşüncelerinizi organize etmenize yardımcı olacaktır.
* Bu veriler tek bir API uç noktası üzerinden kullanılabilir mi?
* API isteklerini nasıl doğrulayacağım?
* Kişiselleştirilmiş verileri almak için hangi tanımlayıcıyı veya diğer veri öğesini kullanacağım?
* Bu tanımlayıcı zaten OneSignal'de depolanıyor mu? Değilse, nasıl doldurulacak?
* API'm üreteceğim istek hacmini kaldırabilir mi?
* API'm bir kullanıcı için veriye sahip değilse ne olur?

***

## Örnekler ve gelişmiş kullanım durumları

Veri Akışları, Liquid sözdizimi ile veya daha karmaşık kişiselleştirme üretmek için diğer özelliklerle birlikte yaratıcı şekillerde kullanılabilir.

<Tabs>
  <Tab title="Döngülerle yineleme: terk edilmiş sepet">
    Diyelim ki kullanıcının sepetindeki öğelerin bir dizisini ve sepet toplam dolar tutarını döndüren bir cart Veri Akışınız var:

    ```json theme={null}
    {
      "items": [
        {
          "name": "Blue Running Shoes",
          "price": 84.00,
          "image_url": "https://acme.com/blue-running-shoes.png"
        },
        {
          "name": "Protein Bar",
          "price": 5.99,
          "image_url": "https://acme.com/protein-bar.png"
        }
      ],
      "total": 89.99
    }
    ```

    Sepetteki her öğeyi ve sepet toplamını göstermek istiyorsanız, Liquid'de bir for döngüsü kullanabilirsiniz:

    ```html theme={null}
    <ul>
      {% for item in data_feed.cart.items %}
        <li>
          <strong>{{ item.name }}</strong><br>
          ${{ item.price }}<br>
          <img src="{{ item.image_url }}" alt="{{ item.name }}">
        </li>
      {% endfor %}
    </ul>

    <p>Cart total: ${{ data_feed.cart.total }}</p>

    ```

    Bu şu sonucu verecektir:

    ```text theme={null}
    - Blue Running Shoes
    - $84.00
    - <running shoes image>
    - Protein Bar
    - $5.99
    - <protein bar image>
    Cart total: $89.99
    ```

    <Note>
      E-posta blok düzenleyicisini kullanıyorsanız, bu tür karmaşık Liquid sözdizimini eklerken, özellikle resimler veya bağlantılar eklemeniz gerekiyorsa, en iyi sonuçlar için özel HTML blok öğesini kullanın.
    </Note>

    <Tip>
      Bu terk edilmiş sepet e-postasını özel olayları kullanarak nasıl tetikleyeceğinizi görmek ister misiniz? Tam iş akışı için **Özel olay özellikleri** sekmesine bakın.
    </Tip>
  </Tab>

  <Tab title="Özel olay özellikleri">
    Önceki terk edilmiş sepet örneğine devam edersek, o belirli sepeti ilk etapta nasıl alacağımızı nasıl bilebiliriz?

    Bir yöntem, özelliklerin bir cart\_id içerdiği bir `cart_abandoned` [özel olayı](./custom-events) tarafından tetiklenen bir Journey oluşturmak olabilir. Bu örnekte o olay API aracılığıyla OneSignal'e gönderiliyor:

    ```bash theme={null}
    curl --request POST \
      --url https://api.onesignal.com/apps/{app_id}/custom_events \
      --header 'Accept: application/json' \
      --data '{
      "events": [
        {
          "name": "cart_abandoned",
          "external_id": "user_12345",
          "properties": {
            "cart_id": 98765
          }
        }
      ]
    }'
    ```

    <Frame caption="Journey girişi için özel olay">
      <img src="https://mintcdn.com/onesignal/ciRrThfP6xMpI7GY/images/dashboard/data-feed-custom-event-journey-entry.png?fit=max&auto=format&n=ciRrThfP6xMpI7GY&q=85&s=6bb357d09ef9a2830ee6e9a19109afc1" alt="Journey entry node triggered by a custom event" width="936" height="548" data-path="images/dashboard/data-feed-custom-event-journey-entry.png" />
    </Frame>

    Kullanıcı `user_12345`, bu olay tetiklendiğinde Journey'ye girer, ardından e-posta gönderen bir düğüme ulaşır. Bu e-posta şablonu, URL'nin belirli bir sepetin içeriğini şu şekilde almak üzere ayarlandığı `cart` Veri Akışı ile kurulmuştur:

    ```liquid theme={null}
    https://acme.com/carts/{{ journey.event.cart_abandoned.data.cart_id }}
    ```

    Böylece, bu belirli olay alındığında ve Journey'yi tetiklediğinde:

    1. `98765` olan `cart_id` değeri Journey'ye depolanacaktır
    2. E-posta adımına ulaşıldığında, `cart` Veri Akışı bu `cart_id` değerine referans verecek ve onu sepet API'sini çağırmak için kullanacaktır
    3. Döndürülen JSON özellikleri ayrıştırılacak ve yukarıdaki önceki örnekteki gibi e-postaya eklenecektir

    <Tip>
      Sipariş durumuna göre Veri Akışı içeriğini koşullu olarak nasıl görüntüleyeceğinizi görmek ister misiniz? Daha fazla bilgi için **Koşullu görüntüleme: sipariş durumu** sekmesine bakın.
    </Tip>
  </Tab>

  <Tab title="Koşullu görüntüleme: sipariş durumu">
    Diyelim ki bir müşterinin siparişinin durumunu eklemek istiyorsunuz, ancak yalnızca sipariş sevk edilmişse bir takip numarası bağlantısı eklemek istiyorsunuz. Bunu yapmak için bir `if` ifadesi kullanabilirsiniz:

    ```liquid theme={null}
    Your order is {{data_feed.order.status}}!

    {% if data_feed.order.tracking_number != empty %}
    Track it here: {{data_feed.order.tracking_url}}
    {% endif %}
    ```

    Burada, takip bağlantısı yalnızca `tracking_number` mevcutsa görüntülenecektir.
  </Tab>

  <Tab title="Kişiselleştirme olmadan otomasyon">
    Veri Akışları, alıcı başına kişiselleştirilmeye gerek kalmadan mesajlarınıza güncel bilgileri otomatik olarak eklemek için kullanılabilir.

    Örneğin, belki e-postalarınızın üstüne bir banner resmi eklersiniz ve tatiller ve diğer aylık olaylarla güncel kalmak için onu aylık olarak değiştirirsiniz. Her ay yeni bir resmi OneSignal'e yüklemeyi ve tüm şablonlarınızı değiştirmeyi hatırlamak yerine, CMS'inizden veya diğer varlık yönetimi konumunuzdan mevcut banner resim URL'sini alan bir Veri Akışı kurabilirsiniz.

    URL'de herhangi bir değişken **olmadan** bir uç noktaya işaret eden bir `banner` Veri Akışı kurarsınız:

    ```liquid theme={null}
    https://acme.com/assets/email-banner
    ```

    Bu, mevcut banner URL'si ile bir yanıt döndürür:

    ```json theme={null}
    {
    	"banner_url": "https://acme.com/assets/email-banner/2025july.png"
    }
    ```

    E-posta şablonunuzu resim kaynak URL'si olarak `{{ data_feed.banner.banner_url }}` kullanacak şekilde ayarlarsınız ve bu süreci ileriye dönük otomatikleştirirsiniz.
  </Tab>

  <Tab title="Kişiselleştirilmiş kupon kodları">
    Bu örnek, her alıcı için API'nizden benzersiz bir değer alan Veri Akışını kullanarak e-postalarda kişiselleştirilmiş, tek kullanımlık kupon kodları göndermeyi kapsar.

    ### Hedef

    Şöyle bir e-posta gönderin:

    > Merhaba George,
    >
    > Önümüzdeki 2 saat içinde rezervasyonunuzu tamamlayın ve kişisel kodunuzla %10 tasarruf edin: XYZ123ABC

    Her kullanıcı, e-posta gönderildiğinde harici bir API çağrısı aracılığıyla canlı olarak oluşturulan, belirli bir zaman penceresi için geçerli ve o kullanıcıya özel benzersiz bir kupon kodu alır.

    ### Ön koşullar

    * OneSignal'de [e-posta kanalı yapılandırılmış](./email-setup) (uygulamanızda e-posta özelliği etkin)
    * Kullanıcı tanımlayıcısını (örneğin [`external_id`](./users#external-id)) ve kampanya tanımlayıcısını kabul eden, kupon kodu, indirim ve son kullanma tarihiyle JSON döndüren harici bir API
    * API'nizin kupon oluşturmak için kullanabileceği her kullanıcı için benzersiz bir tanımlayıcı (örn. `external_id`)
    * E-postayı OneSignal Journey'si aracılığıyla göndermek için kullanılan bir [segment](./segmentation) veya tetikleyici (örneğin, "son 24 saatte terk edilmiş arama")

    ### Adım 1: Veri Akışını oluşturun

    <Steps>
      <Step title="Veri Akışları'na gidin">
        OneSignal uygulamanızda, gezinme çubuğundan **Veri akışları**'nı seçin, ardından **Yeni veri akışı**'na tıklayın.
      </Step>

      <Step title="Veri Akışını yapılandırın">
        Aşağıdaki alanları yapılandırın:

        * **Veri Akışı Adı**: `coupon_code_generator`
        * **Takma Ad**: `coupon`
        * **Yöntem**: `GET`
        * **URL**: `https://api.example.com/generate-coupon?userId={{ external_id }}&campaign=AbandonedBooking10`
        * **Başlıklar**:
          ```json theme={null}
          {
            "Authorization": "Bearer YOUR_API_TOKEN"
          }
          ```
      </Step>

      <Step title="API yanıtına referans verin">
        API şöyle bir JSON döndürdüğünde:

        ```json theme={null}
        {
          "code": "AB10-5F3K-HT9L",
          "discount_percent": "10%",
          "expires_in_hours": 2
        }
        ```

        E-posta şablonunuzda değerlerine şu şekilde başvurabilirsiniz:

        * `{{ data_feed.coupon.code }}`
        * `{{ data_feed.coupon.discount_percent }}`
        * `{{ data_feed.coupon.expires_in_hours }}`
      </Step>

      <Step title="Veri Akışını test edin ve etkinleştirin">
        Yapılandırmanızı doğrulamak için **Test Gönder**'e tıklayın, ardından Veri Akışını şablonlarda kullanıma açmak için **Etkinleştir**'e tıklayın.
      </Step>
    </Steps>

    ### Adım 2: E-posta şablonunu oluşturun

    1. OneSignal'de **Mesajlar → E-posta → Yeni Şablon**'a gidin
    2. Mesaj gövdenizde Veri Akışı takma adını ve alanlarını kullanın. Örneğin:

    ```html theme={null}
    <h2>Hi {{ first_name }},</h2>
    <p>
    Complete your booking in the next {{ data_feed.coupon.expires_in_hours }} hours and save
    {{ data_feed.coupon.discount_percent }} with your personal code:
    <strong>{{ data_feed.coupon.code }}</strong>
    </p>

    <p><a href="https://example.com/checkout?coupon={{ data_feed.coupon.code }}">Use Code Now →</a></p>
    ```

    <Note>
      * Liquid sözdizimini `{{ data_feed.<alias>.<field> }}` biçiminde kullanın
      * Veri Akışının şablona eklendiğinden emin olun
      * Özel Liquid mantığıyla sürükle-bırak düzenleyicisini kullanıyorsanız, bir HTML bloğu kullanın
    </Note>

    ### Adım 3: Veri Akışını ekleyin ve e-postayı tetikleyin

    1. Şablon düzenleyicisinde, **Kişiselleştirme** altında **Veri Akışları**'nı açın ve akışınızı seçin (`coupon_code_generator`)
    2. Bu, OneSignal'in her alıcı için gönderim anında API çağrısı yapmasını, verileri doldurmasını ve e-postaya enjekte etmesini sağlar
    3. Mesajı otomatikleştirmek için bir Journey kurun:
       * **Giriş koşulu**: "Son 24 saatte terk edilmiş arama" gibi bir segment
       * **[Bekle](./custom-events#wait-until-event)**: Bir `booking_completed` özel olayı oluşturun. Beklemeyi, bu olay tetiklenirse Journey'den çıkacak veya 1 saat sonra devam edecek şekilde yapılandırın. Rezervasyonu tamamlarlarsa kupon almadan çıkarlar; aksi takdirde kupon almaya devam ederler.
       * **E-posta gönder**: Kişiselleştirilmiş kupon e-posta şablonunu kullanın
       * Journey'nin e-posta kanalını kullandığından ve alıcıların e-postaya abone olduğundan emin olun

    ### Adım 4: Kupon kullanımını ve takibini yönetin

    Arka ucunuz şunları yapmalıdır:

    1. Oluşturulan her kodu `userId`, `code`, `campaign`, `expiration_time` ve `redeemed` bayrağıyla birlikte kaydedin
    2. Ödeme sırasında kodları doğrulayın ve kullanıldı olarak işaretleyin
    3. ROI analizi için kullanım verilerini (kullanıcı, kampanya ve süre) kaydedin

    ### Tam iş akışı örneği

    | Adım | Olay                                               | Eylem                                                                                           |
    | ---- | -------------------------------------------------- | ----------------------------------------------------------------------------------------------- |
    | 1    | Kullanıcı "terk edilmiş arama" segmentini tetikler | Kullanıcı segment aracılığıyla Journey'ye girer                                                 |
    | 2    | Journey e-posta gönderimini tetikler               | OneSignal Veri Akışını ekler, kullanıcının `external_id`'si ve kampanya adıyla API'nizi çağırır |
    | 3    | API JSON döndürür                                  | OneSignal veri akışı kupon alanlarını doldurur ve e-postayı gönderir                            |
    | 4    | Kullanıcı e-postayı alır                           | Örnek: "Merhaba George! Kişisel kodunuzla %10 tasarruf edin: AB10-5F3K-HT9L"                    |
    | 5    | Kullanıcı kodu kullanır                            | Arka uç kullanımı doğrular ve kaydeder                                                          |

    ### Test etme

    * Bilinen `external_id`'ye sahip bir kullanıcıyla test edin
    * Doğru JSON yanıtlarını onaylamak için API'nizi manuel olarak çağırın
    * Veri akışı kupon alanlarının dolduğunu doğrulamak için OneSignal şablon düzenleyicisinde **Önizleme**'yi kullanın
    * Gecikme ve hatalar için API günlüklerini kontrol edin
    * Bir Veri Akışı çağrısı başarısız olursa, OneSignal mesajı o alıcıya göndermez
  </Tab>
</Tabs>

***

## SSS

### Veri Akışı değerleri mesajda görünmüyor. Ne kontrol etmeliyim?

Bunları sırayla doğrulayın:

1. Veri Akışının şablona **eklendiğini** kontrol edin (**Kişiselleştirme > Veri Akışları** altında).
2. Liquid sözdiziminin JSON yanıt yapısıyla tam olarak eşleştiğini kontrol edin — `{{ data_feed.<alias>.<field> }}`.
3. API uç noktasının aynı tanımlayıcılarla manuel olarak çağrıldığında geçerli JSON döndürdüğünü doğrulayın.
4. Alıcının OneSignal'de gerekli tanımlayıcıya (örn. `external_id`) sahip olduğunu kontrol edin.

### Mesajlar neden yavaş gönderiliyor?

Veri Akışı API çağrıları her alıcı için gönderim anında çalışır. API'niz yavaş yanıt verirse veya eş zamanlı istekleri karşılayamazsa, mesaj teslimi orantılı olarak yavaşlar. 250 ms altında yanıt süresi hedefleyin ve altyapınızın gönderim hacminizi kaldırabildiğinden emin olun.

### Bazı alıcılar neden mesaj almıyor?

Bir alıcı için Veri Akışı API çağrısı başarısız olursa — 404, zaman aşımı veya eksik veri nedeniyle — OneSignal o alıcıyı atlar. Veri Akışı yapılandırmanızdaki hata günlüğünü ve hatalar için kendi API günlüklerinizi kontrol edin. Bu kullanıcıların OneSignal'de gerekli tanımlayıcılara sahip olduğunu doğrulayın.

### Bir şablonda birden fazla Veri Akışı kullanabilir miyim?

Şu anda hayır. Her şablon bir Veri Akışını destekler. İhtiyacınız olan tüm verileri tek bir API yanıtında alın. Birden fazla akışa ihtiyacınız varsa, [kullanım durumunuzu paylaşın](https://survey.survicate.com/954895d3e7ed1348/?p=anonymous).

### Veri Akışları push bildirimleri veya SMS için kullanılabilir mi?

Hayır. Veri Akışları şu anda yalnızca Journeys aracılığıyla gönderilen e-posta mesajları için kullanılabilir. Ek kanallar için destek planlanmaktadır — önceliklendirmeye yardımcı olmak için [kullanım durumunuzu paylaşın](https://survey.survicate.com/954895d3e7ed1348/?p=anonymous).

### Mesaj gönderilirken API'im çökmüşse ne olur?

OneSignal, Veri Akışı çağrısı başarısız olan alıcıları atlar. Mesaj o alıcıya gönderilmez ve yedek değer eklenmez. Planlı gönderimlerde API çalışma sürenizi ve hata oranlarınızı izleyin.

## İlgili sayfalar

<Columns cols={2}>
  <Card title="Liquid sözdizimi" icon="code" href="./using-liquid-syntax">
    OneSignal mesajlarında Liquid şablonlama için tam referans.
  </Card>

  <Card title="Journeys" icon="route" href="./journeys-overview">
    Veri Akışı e-postalarını tetikleyen otomatik mesajlaşma iş akışları oluşturun.
  </Card>

  <Card title="Özel olaylar" icon="bolt" href="./custom-events">
    Journey'leri tetikleyin ve Veri Akışı URL'leri için olay özelliklerini geçirin.
  </Card>

  <Card title="Mesaj kişiselleştirme" icon="user-pen" href="./message-personalization">
    Tüm kişiselleştirme yöntemlerine genel bakış — etiketler, Liquid, dinamik içerik ve Veri Akışları.
  </Card>
</Columns>
