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

# Zaman Operatörleri

> Zaman Operatörleri, belirli bir zaman anına göre mesajlar göndermenizi sağlar—bir eylem gerçekleştikten sonra veya gelecekteki bir tarihten önce.

## Genel Bakış

Zaman Operatörleri, belirli bir zaman anına göre mesajlar göndermenizi sağlar—**bir eylem gerçekleştikten sonra** veya **gelecekteki bir tarihten önce**.

O anı, **Etiket** kullanarak kullanıcıya **Unix zaman damgası (saniye cinsinden)** olarak saklarsınız. OneSignal daha sonra mevcut zamanı o zaman damgasıyla karşılaştırır ve geçen zamana (veya kalan zamana) göre kullanıcıları hedeflemenizi sağlar.

Bu, mesajları manuel olarak planlamadan hatırlatıcılar, takipler ve son teslim tarihi mesajlarını otomatikleştirmeyi kolaylaştırır.

**Yaygın kullanım durumları:**

* **[Terk edilmiş sepet](./abandoned-cart)**: Belirli bir süre sonra ödeme yapmayan kullanıcıları hatırlatmak
* **Etkinlik hatırlatıcıları**: Planlanmış randevu veya yenileme tarihinden önce kullanıcılara mesaj göndermek
* **Kilometre taşları**: Kullanıcılar bir son tarihe kadar bir eylemi tamamlamadıklarında takip etmek
* **Doğum günleri**: Kullanıcının doğum gününde (veya doğum günü civarında) otomatik mesajlar göndermek

<Note>
  Zaman Operatörleri yalnızca ücretli planlarda kullanılabilir. Ücretsiz planlar hala First Session ve Last Session gibi varsayılan zamana dayalı segment filtrelerini kullanabilir.
</Note>

### Bunu ne zaman kullanmalıyım?

Şu durumlarda Zaman Operatörleri kullanın:

* Sabit takvim zamanı değil, **bir etkinliğe göre** mesajlar göndermek
* **Hareketli zaman pencereleri** oluşturmak (örneğin, "24–48 saat sonra")
* Farklı tarihlere sahip birçok kullanıcı için aynı mantığı yeniden kullanmak
* Zaman geçtikçe uygunluğu sürekli değerlendirmek

Bir etkinlik gerçekleştiğinde hemen mesajlaşmayı tetiklemeniz gerekiyorsa, bunun yerine **[Özel Etkinlikler](./custom-events)** kullanmayı düşünün.

### Etiketler vs Özel Etkinlikler

Birçok "hatırlatıcı" kullanım durumunu **Etiketler** veya **Özel Etkinlikler** ile çözebilirsiniz. En iyi seçenek, neyi saklamak istediğinize ve otomasyonu nasıl tetiklemek istediğinize bağlıdır.

* Kullanıcıda **son bilinen zaman damgasını** (örneğin, `cart_updated_at` veya `subscription_expires_at`) saklamak ve zamanla o değere göre segmentleme yapmak istediğinizde **Etiketler** kullanın.
* **Her etkinlik oluşumunu** (özellikleriyle birlikte) kaydetmek ve gerçek zamanlı davranışa göre Journey'leri tetiklemek istediğinizde **Özel Etkinlikler** kullanın.

<Info>
  Pratikte, birçok uygulama ikisini birden kullanabilir: gerçek zamanlı izleme için Özel Etkinlikler ve daha sonra segmentleme yapmak istediğiniz kullanıcı durumu için Etiketler.
</Info>

[Etiketler](/docs/en/add-user-data-tags) ve [Özel Etkinlikler](/docs/en/custom-events) kullanıcılarınıza veri eklemenin her ikisi de yoludur. Ancak bazı temel farklar vardır:

| Özellik        |                     Etiketler                    |                                           Özel Etkinlikler                                          |
| -------------- | :----------------------------------------------: | :-------------------------------------------------------------------------------------------------: |
| Veri kullanımı |          Segmentasyon ve kişiselleştirme         | Segment olmadan Yolculukları tetikleme, Bekle adımları, doğrudan Yolculuklar içinde kişiselleştirme |
| Veri tutma     |                     Ömür boyu                    |           30+ gün ([ömür boyu depolama mevcuttur](/docs/en/billing-faq#streaming-events))           |
| Veri formatı   |        Anahtar-değer dizgiler veya sayılar       |                                                 JSON                                                |
| Veri kaynağı   | OneSignal SDK, API veya entegrasyonlar (sınırlı) |                                OneSignal SDK, API veya entegrasyonlar                               |
| Veri erişimi   |       Segmentasyon ve mesaj kişiselleştirme      |             Yolculuklar ve Yolculuk-mesaj-şablon kişiselleştirme, Segmentasyon (Yakında)            |

Etiketler ve Özel Etkinlikler arasındaki temel ayrım, derinliklerinde ve kullanım durumlarındadır. Etiketler bir kullanıcının özellikleridir, örneğin Ad, Hesap Durumu veya Konum. Etkinlikler ise kullanıcının yaptığı şeylerdir, örneğin Bir Öğe Satın Alma, Seviye Tamamlama veya Arkadaş Davet Etme. Hem etiketler hem de etkinlikler segmentasyon ve kişiselleştirme için kullanılabilir.

Uygulamada, muhtemelen her ikisini de kullanacaksınız:

* Statik ve sık değişmeyen kullanıcı özellikleri için Etiketler
* Gerçek zamanlı senaryolar, karmaşık segmentasyon ve daha sofistike yolculuk iş akışları için Özel Etkinlikler

***

## Hızlı Referans

1. Etkinlik tarihini **saniye cinsinden** Unix zaman damgasına dönüştürün.
2. Anahtarın etkinlik adı ve değerin zaman damgası **string** olarak olduğu bir [Etiket](./add-user-data-tags) ayarlayın (örn., `'event_date': '1739145600'`).
3. **Time Elapsed Greater Than** operatörünü kullanarak bir segment oluşturun:
   * Geçmiş bir tarihten sonra için **Time Elapsed Greater Than** operatörünü pozitif değerle kullanın
   * Gelecekteki bir tarihten önce için **Time Elapsed Greater Than** operatörünü negatif değerle kullanın

<Warning>
  Yaygın bir hata, zaman damgalarını **saniye** (10 basamak) yerine **milisaniye** (13 basamak) olarak ayarlamaktır. Zaman Operatörleri **saniye** gerektirir.
</Warning>

***

## Geçmiş bir etkinlikten sonra mesaj gönderme

Bir şey olduktan sonra **belirli bir süre geçtikten sonra** kullanıcılara mesaj göndermek istediğinizde bu kalıbı kullanın.

**Örnek: Kullanıcı sepetini güncelledikten 24 saat sonra terk edilmiş sepet hatırlatıcısı gönderme**

<Steps>
  <Step title="Etkinlik gerçekleştiğinde zaman damgasını sakla">
    Kullanıcı sepetini güncellediğinde, mevcut zamanı Unix zaman damgası (saniye cinsinden) olarak kaydedin:

    ```javascript theme={null}
    // SDK örneği
    const timestampSeconds = String(Math.floor(Date.now() / 1000));
    OneSignal.User.addTag("cart_updated_at", timestampSeconds);
    ```

    <Warning>
      Saniye (10 basamak) kullanın, milisaniye (13 basamak) değil.
    </Warning>
  </Step>

  <Step title="Segment oluştur">
    1. **Audience** > **Segments**'e gidin
    2. **User Tag** filtresi ekleyin
    3. **Key**'i `cart_updated_at` olarak ayarlayın
    4. **Time Elapsed Greater Than**'i seçin
    5. **Value**'yu `1` gün (veya `24` saat veya `86400` saniye) olarak ayarlayın

    <Frame caption="24 saatten fazla önce sepetini terk eden kullanıcılar için segment">
      <img src="https://mintcdn.com/onesignal/BIUS_wdfwITxcuxQ/images/segments/time-elapsed-greater-than.png?fit=max&auto=format&n=BIUS_wdfwITxcuxQ&q=85&s=fd95aaf5b4ff3d4ebf594af867a594c8" alt="Time Elapsed Greater Than kullanan segment" width="1311" height="617" data-path="images/segments/time-elapsed-greater-than.png" />
    </Frame>
  </Step>

  <Step title="Üst sınır ekle (Önerilen)">
    Üst sınır olmadan kullanıcılar segmentte sonsuza dek kalırlar. Pencere oluşturmak için ikinci bir filtre ekleyin:

    * **Time Elapsed Greater Than** `24` saat
    * **Time Elapsed Less Than** `48` saat

    Artık kullanıcılar sadece etkinlikten 24-48 saat sonra segmentte kalırlar.

    <Frame caption="24-48 saatlik penceresi olan segment">
      <img src="https://mintcdn.com/onesignal/BIUS_wdfwITxcuxQ/images/segments/time-elapsed-greater-less-than.png?fit=max&auto=format&n=BIUS_wdfwITxcuxQ&q=85&s=3cb973d5b0252683e9f804e4b04a37b4" alt="Hem Time Elapsed Greater Than hem de Less Than kullanan segment" width="1292" height="715" data-path="images/segments/time-elapsed-greater-less-than.png" />
    </Frame>
  </Step>

  <Step title="Segmenti Journey'de kullan">
    Mesajlaşmayı otomatikleştirmek için segmentinizi hedefleyen bir [Journey](./journeys-overview) oluşturun.
  </Step>
</Steps>

***

## Gelecekteki bir etkinlikten önce mesaj gönderme

Randevu veya yenileme gibi **gelecekteki bir tarihten önce** kullanıcılara mesaj göndermek için bu kalıbı kullanın.

1. Gelecekteki tarihi Unix zaman damgası etiketi olarak saklayın (örn., `'future_date': '1739145600'`)
2. **Time Elapsed Greater Than** ve istediğiniz giriş zamanını negatif değer olarak kullanarak segment oluşturun
   * Örnek: `-2` gün (veya `-172800` saniye)

<Frame caption="Yaklaşan etkinliği olan kullanıcılar için segment">
  <img src="https://mintcdn.com/onesignal/BIUS_wdfwITxcuxQ/images/segments/time-elapsed-greater-than-negative-value.png?fit=max&auto=format&n=BIUS_wdfwITxcuxQ&q=85&s=bea6fe1e5d4a2d3349fe05674946b910" alt="Negatif değerle Time Elapsed Greater Than kullanan segment" width="1291" height="618" data-path="images/segments/time-elapsed-greater-than-negative-value.png" />
</Frame>

3. Aynı **Time Elapsed Greater Than** operatörünü daha yakın zamanın negatif değeriyle üst sınır eklemek için kullanın
   * Örnek: `-1` gün (veya `-86400` saniye)

<Frame caption="Üst sınırı olan segment">
  <img src="https://mintcdn.com/onesignal/BIUS_wdfwITxcuxQ/images/segments/time-elapsed-greater-than-negative-value-upper-limit.png?fit=max&auto=format&n=BIUS_wdfwITxcuxQ&q=85&s=406246bb0136f1997ababc06a638408f" alt="Negatif değer ve üst sınırla Time Elapsed Greater Than kullanan segment" width="1286" height="703" data-path="images/segments/time-elapsed-greater-than-negative-value-upper-limit.png" />
</Frame>

### Örnek: Doğum günü mesajları

Her kullanıcının **bir sonraki yaklaşan doğum gününü** zaman damgası olarak saklayarak doğum günü mesajları gönderin.

<Steps>
  <Step title="Bir sonraki doğum günü zaman damgasını sakla">
    Kullanıcının bir sonraki doğum gününü hesaplayın ve saklayın:

    ```javascript theme={null}
    function getNextBirthday(month, day) {
      // month: 0-11 (Jan=0), day: 1-31
      const now = new Date();
      let birthday = new Date(now.getFullYear(), month, day);

      if (birthday <= now) {
        birthday = new Date(now.getFullYear() + 1, month, day);
      }
      
      return String(Math.floor(birthday.getTime() / 1000));
    }

    // Örnek: 15 Ocak doğum günü
    OneSignal.User.addTag("birthday", getNextBirthday(0, 15));
    ```
  </Step>

  <Step title="Doğum günü segmenti oluştur">
    * **User Tag**: `birthday`
    * **Time Elapsed Greater Than**: `0` saniye

    Doğum günü zaman damgası geçtiğinde kullanıcılar segmente girer.

    <Frame caption="Doğum günü segmenti">
      <img src="https://mintcdn.com/onesignal/BIUS_wdfwITxcuxQ/images/segments/birthday-segment.png?fit=max&auto=format&n=BIUS_wdfwITxcuxQ&q=85&s=6f431d2f592779f74a5b4e27045ad984" alt="Time Elapsed Greater Than 0 kullanan doğum günü segmenti" width="1287" height="602" data-path="images/segments/birthday-segment.png" />
    </Frame>
  </Step>

  <Step title="Tekrarlayan Journey kurma">
    1. Doğum günü segmentinizi hedefleyen bir [Journey](./journeys-overview) oluşturun
    2. Kullanıcıların gelecek yıl yeniden girebilmesi için yeniden girişi **52 hafta** olarak ayarlayın
    3. Gönderdikten sonra `birthday` etiketini gelecek yılın tarihine güncelleyin (backend'inizde veya Journey'de)
  </Step>
</Steps>

<Note>
  Mümkün olduğunda kullanıcının yerel saat dilimini kullanarak doğum günü zaman damgalarını hesaplayın. Sadece sunucu zamanını kullanmak, mesajların beklenenden erken veya geç gönderilmesine neden olabilir.
</Note>

<Warning>
  Mesajların yıldan yıla doğru kalmasını istiyorsanız, mesajı gönderdikten sonra kullanıcının `birthday` etiketini bir sonraki doğum gününe güncelleyin (örneğin, backend'inizde veya Journey adımında). Bunu yaparsanız, bunun yerine [Özel Etkinlikler](./custom-events) kullanmak daha kolay olabilir.
</Warning>

<Check>
  Doğum günü mesajları kullanıcının `birthday` etiketi tarihi civarında kullanıcılara gönderilecektir.
</Check>

***

## SSS

### Matematik nasıl çalışır? (teknik detaylar)

Zaman Operatörleri, sabit tarihler yerine **göreceli, hareketli pencereler** oluşturmanızı sağlamak için mevcuttur.

OneSignal geçen zamanı şu formülü kullanarak hesaplar:

```
time_elapsed = current_time - tag_timestamp
```

* **Geçmiş zaman damgaları** → pozitif değerler
* **Gelecekteki zaman damgaları** → negatif değerler

**Operatörler:**

* `Time Elapsed Greater Than X`: `elapsed > X` olduğunda eşleşir
* `Time Elapsed Less Than X`: `elapsed < X` olduğunda eşleşir

**Gelecekteki zaman damgaları neden `Less Than` ile hemen eşleşir:**

Herhangi bir negatif sayı herhangi bir pozitif sayıdan küçüktür. Bu nedenle `time_elapsed_lt 2 days` (172,800 saniye) gelecekteki 30 günlük zaman damgasıyla eşleşir çünkü:

```
-2,592,000 < 172,800  →  true (eşleşir)
```

Gelecekteki zaman damgaları her zaman negatif geçen zaman ürettiği için, yaklaşan bir etkinlikten önce kullanıcıların segmentlere ne zaman girip çıkması gerektiğini tanımlamak için **negatif değerler kullanmalısınız**. Pozitif değerler gelecekteki bir tarihten *önceki* zamanı temsil edemez.

### Nasıl test edebilirim?

1. Harici ID, Abonelik ID, E-posta veya telefon numarası ile kullanıcınızı bulun. Kullanıcınızı bulmayla ilgili ayrıntılar için [Test aboneliklerini bulma ve ayarlama](./test-users)'ya bakın.
2. Mevcut tarih ve gelecekteki tarih (şu andan 5 dakika sonra) için saniye cinsinden zaman damgası alın.
3. 'current\_time' ve 'future\_time' anahtarları ve saniye cinsinden zaman damgaları değerleri olan iki etiket ayarlayın.
4. Aşağıdaki filtrelerle `current_time` segmenti oluşturun:
   * **User Tag**: `current_time` **Time Elapsed Greater Than**: `2` dakika
   * VE **User Tag**: `current_time` **Time Elapsed Less Than**: `5` dakika
5. Aşağıdaki filtrelerle `future_time` segmenti oluşturun:
   * **User Tag**: `future_time` **Time Elapsed Greater Than**: `-5` dakika
   * VE **User Tag**: `future_time` **Time Elapsed Less Than**: `-2` dakika

Kullanıcınızı şöyle görmelisiniz:

* Mevcut zaman tarihinden 2 dakika sonra `current_time` segmentine girer ve mevcut zaman tarihinden 5 dakika sonra segmentten çıkar.
* Gelecekteki zaman tarihinden 5 dakika önce `future_time` segmentine girer ve gelecekteki zaman tarihinden 2 dakika önce segmentten çıkar.

***
