---
title: Şablon Sistemi - Dinamik Bildirim İçeriği
sidebarTitle: Şablonlar
description: Değişkenler, ifadeler ve sistem değerleriyle dinamik bildirim şablonları oluşturun; net uyarı mesajları için en iyi uygulamalarla birlikte.
---

# Echobell'de Şablonlar

Echobell'deki şablonlar, bildirim başlıklarınıza ve gövdelerinize değişkenler ekleyerek dinamik ve bağlam açısından zengin bildirimler oluşturmanızı sağlar. Bu güçlü özellik, tetikleyici verisine göre uyarlanan kişiselleştirilmiş ve bilgilendirici uyarılar üretir; genel bildirimleri eyleme geçirilebilir bilgiye dönüştürür.

"Uyarı tetiklendi" gibi genel bir mesaj almak yerine şablonlar sayesinde "Üretim sunucusunun CPU'su %95" ya da "Derleme #142 dağıtım aşamasında başarısız oldu" gibi belirli bildirimler oluşturabilirsiniz; böylece ek araştırma yapmanıza gerek kalmadan bağlamı anında edinirsiniz.

## Temel Şablon Sözdizimi

Echobell şablonlarında değişkenleri çift süslü parantez içine alarak kullanabilirsiniz:

```
{{variableName}}
```

Bir kanal tetiklendiğinde bu değişkenler, tetikleyiciyle aktarılan gerçek değerlerle değiştirilir. Örneğin başlık şablonunuz `You have received ${{amount}}` ise ve kanalı `amount` değeri 100 olacak şekilde tetiklerseniz, oluşan bildirim `You have received $100` olarak görüntülenir.

## Gelişmiş Şablon İfadeleri

Echobell şablonları, daha karmaşık senaryolar için çeşitli ifadeleri destekler:

- Nesne Özelliklerine Erişme

```
{{user.name}}
{{data["value"]}}
```

- Dizi Öğelerine Erişme

```
{{items[0]}}
```

- Karşılaştırma Operatörlerini Kullanma

```
{{status == "active"}}
{{age > 18}}
```

- Mantıksal Operatörler

```
{{isSubscribed && !isPaused}}
{{isUrgent || isHighPriority}}
```

Tüm standart operatörler desteklenir: `==`, `!=`, `<`, `>`, `<=`, `>=`, `&&`, `||` ve `!`.

## Farklı Tetikleyicilerden Gelen Şablon Değişkenleri

### Webhook Tetikleyicileri

Webhook ile tetiklerken değişkenleri şu yollarla sağlayabilirsiniz:

1. **Sorgu dizesi parametreleri**:

   ```http
   GET https://hook.echobell.one/t/<channel-token>?amount=100&status=complete
   ```

2. **JSON gövdesi** (POST istekleri için):

   ```http
   POST https://hook.echobell.one/t/<channel-token>
   Content-Type: application/json

   {
     "amount": 100,
     "status": "complete",
     "user": {
       "name": "John",
       "id": 12345
     }
   }
   ```

3. **Özel değişkenler**:
   - `externalLink`: Bildirim kayıtlarında tıklanabilir bir bağlantı sağlar
   - `bodyAsText`: `Content-Type` değeri `text/plain` ise istek gövdesinin düz metin içeriği
   - `header`: HTTP istek başlıklarına erişim sağlar (örneğin `{{header["content-type"]}}`)

### E-posta Tetikleyicileri

Bir kanal e-posta ile tetiklendiğinde şu değişkenler otomatik olarak kullanılabilir:

- `from`: Gönderenin e-posta adresi
- `to`: Alıcının e-posta adresi
- `subject`: E-postanın konu satırı
- `text`: E-postanın düz metin içeriği
- `html`: E-postanın HTML içeriği

## Şablon Kullanım Senaryoları

### Karşılaştırmalar ve Boolean Değerler

Karşılaştırma veya mantıksal operatör kullanan ifadeler, boolean sonuçlarını `true` ya da `false` metni olarak görüntüler:

```
Payment over $1000: {{amount > 1000}}
High priority: {{isUrgent || isImportant}}
```

Echobell şablonları satır içi if/else (üçlü operatör) mantığını **desteklemez**. Farklı durumlarda farklı içerik göndermek için tetiklemeleri yönlendirmek üzere kanal [Koşullarını](/docs/conditions) kullanın ya da ham değerleri doğrudan yerleştirin.

### Kanal Koşulları

Şablonları bildirim içeriğinde kullanmanın yanı sıra, kanalın gelişmiş ayarlarında bildirimlerin hiç gönderilip gönderilmeyeceğini belirleyen **Koşullar** tanımlayabilirsiniz. Bu koşullar aynı ifade sözdizimini kullanır (süslü parantezler olmadan).

Örneğin yalnızca belirli bir eşiğin üzerindeki tutarlar için bildirim göndermek üzere:

```
amount > 100
```

## Bağlantı Şablonları

Bildirim kayıtlarında tıklanabilir bağlantılar oluşturmak için kanalın gelişmiş ayarlarında özel bir bağlantı şablonu yapılandırın:

```
https://dashboard.example.com/orders/{{orderId}}
```

Bir bağlantı şablonu ayarlanmadıysa varsayılan olarak `externalLink` değişkeninin değeri kullanılır.

## Sistem Zamanı Değişkenleri (UTC)

Bu değişkenler şablonlarda (ve koşullarda) her zaman kullanılabilir ve UTC olarak hesaplanır.

Aşağıdaki değerler doğrudan (düz olarak) enjekte edilir ve adlarıyla kullanılabilir:

- `year`, `month` (1–12)
- `dayOfMonth`, `dayOfWeek` (0–6, Pazar = 0)
- `hour` (0–23), `minute`, `second`
- `date` (`YYYY-MM-DD`), `time` (`HH:mm:ss`)
- `iso`: ISO‑8601 zaman damgası (örneğin `2025-05-06T12:34:56.789Z`)

Diğer değerler **yalnızca** `sys.` ad alanı altında kullanılabilir (düz adlar olarak enjekte edilmezler):

- `sys.timezone`: Her zaman `"UTC"`
- `sys.now`: ISO‑8601 zaman damgası (`iso` ile aynı değer)
- `sys.epochMs`, `sys.epochSeconds`: Unix epoch'tan bu yana geçen süre (sayı)
- `sys.monthName`: Ay adı (`January`–`December`)
- `sys.dayOfWeekName`: Gün adı (`Sunday`–`Saturday`)

`sys.` ad alanı ayrıca tüm düz değerleri de yansıtır (örneğin `sys.year`, `sys.hour`).

Örnekler:

```
Sent at {{date}} {{time}} {{sys.timezone}}
Today is {{sys.dayOfWeekName}}, {{sys.monthName}} {{dayOfMonth}}, {{year}}
Epoch: {{sys.epochSeconds}}
```

## En İyi Uygulamalar

### Eksik Değişkenleri Ele Alın
Echobell'de **varsayılan değer operatörü yoktur**. `||` operatörü tamamen mantıksaldır; her iki tarafı da boolean olarak değerlendirir ve `true` ya da `false` üretir. Yani `{{username || "Anonymous User"}}` ifadesi kullanıcı adını veya yedek metni değil, birebir `true` ya da `false` metnini görüntüler.

Bir değişken eksik olduğunda `{{variable}}` yalnızca boş bir metin olarak işlenir. Etiketlerinizi, değer boş olsa bile anlaşılır kalacak şekilde tasarlayın:

```
User: {{username}}
Server: {{serverName}}
Errors detected: {{errorCount}}
```

Değerin kesinlikle bulunmasını istiyorsanız, bir şablon yedeğine güvenmek yerine onu tetikleyici yükünde açıkça gönderin.

### Bilgilendirici Şablonlar
Bildirimlerin ek bağlam gerektirmeden eyleme geçirilebilir olması için şablonlarınıza temel bilgileri ekleyin:

**İyi Örnekler:**
```
Title: {{service}} {{status}} on {{environment}}
Body: {{errorMessage}} at {{timestamp}}
Action required: {{recommendedAction}}
```

**Kaçının:**
```
Title: Alert
Body: Check logs
```

### Şablonları Kısa Tutun
Bildirimler, başlıklar ve gövdeler net ve öz olduğunda en iyi şekilde görüntülenir:

- **Başlıklar**: ideal olarak 3-8 kelime, en fazla 20 kelime
- **Gövdeler**: ideal olarak 1-3 cümle, metin yığınlarından kaçının
- **Öncelik**: En önemli bilgiyi başa koyun

iOS bildirim kısıtları:
- Başlık: daraltılmış görünümde yaklaşık 40 karakter görünür
- Gövde: daraltılmış görünümde yaklaşık 60 karakter, genişletildiğinde daha fazlası

### Tutarlı Adlandırma Kullanın
Kanallarınız arasında tutarlı bir değişken adlandırması sürdürün:

- Açık ve açıklayıcı adlar kullanın: `sn` değil `server_name`
- Bir kurala uyun: snake_case, camelCase veya kebab-case
- İlişkili kanallar arasında tutarlı olun
- Ekip üyeleri için beklenen değişkenleri belgeleyin

### İyice Test Edin
Şablonlarınızın beklendiği gibi işlendiğinden emin olmak için onları farklı değişken birleşimleriyle test edin:

1. Tüm değişkenler mevcutken test edin
2. İsteğe bağlı değişkenler eksikken test edin
3. Özel karakterler ve Unicode ile test edin
4. Çok uzun değerlerle test edin
5. Boş metinlerle test edin
6. Sayılar, boolean değerler, diziler ve nesnelerle test edin

### Okunabilir Bir Yapı Kurun
Bildirim içeriğinin kolayca taranabilmesi için biçimlendirmeden yararlanın:

```
🚨 Alert: {{alertName}}
━━━━━━━━━━━━━━━
Server: {{server}}
Metric: {{metric}}  
Value: {{value}}
Time: {{time}}
━━━━━━━━━━━━━━━
Details: {{message}}
```

Ya da basit etiketler kullanın:

```
Server: {{server}}
CPU Usage: {{cpu}}%
Memory: {{memory}}%
Status: {{status}}
```

### İfadelerden Yararlanın
Hesaplanmış değerleri ve karşılaştırma sonuçlarını göstermek için ifadeleri kullanın:

```
Title: {{service}} alert — critical: {{severity == "critical"}}
Body: {{metric}} is {{value}} (over threshold: {{value > threshold}})
```

Karşılaştırma ve mantıksal ifadeler `true` veya `false` olarak görüntülenir; anlam kazandırmak için bunları sabit etiket metniyle birlikte kullanın.

### Saat Dilimlerini Göz Önünde Bulundurun
Sistem zamanı değişkenlerinin UTC olduğunu unutmayın. Bunu belirtin ya da şablonlarınızda dönüştürün:

```
Alert triggered at {{time}} UTC
Triggered: {{date}} {{time}} (UTC)
```

## Yaygın Desenler ve Örnekler

### Sunucu İzleme
```
Title: {{hostname}} - {{metric}} Alert
Body: {{metric}} on {{hostname}} is at {{value}}{{unit}}
Threshold: {{threshold}}{{unit}}
Time: {{date}} {{time}}
```

### CI/CD Hatları
```
Title: {{repository}} - Build {{status}}
Body: Build #{{buildNumber}} {{status}} in {{duration}}s
Branch: {{branch}}
Commit: {{commit_message}}
Author: {{author}}
```

### E-ticaret
```
Title: New Order #{{orderNumber}}
Body: Customer: {{customerName}}
Items: {{itemCount}} items
Total: ${{totalAmount}}
Shipping: {{shippingAddress}}
```

### Hata Takibi
```
Title: {{errorType}} in {{service}}
Body: {{errorMessage}}
File: {{filename}}:{{lineNumber}}
User: {{userId}}
Environment: {{environment}}
```

## Gelişmiş Özellikler

### Bağlantı Şablonları
Bildirim kayıtlarında tıklanabilir bağlantılar oluşturmak için kanalın gelişmiş ayarlarında özel bir **bağlantı şablonu** yapılandırın:

```
https://dashboard.example.com/orders/{{orderId}}
https://grafana.example.com/d/{{dashboardId}}
https://github.com/{{repo}}/actions/runs/{{runId}}
```

Bir bağlantı şablonu ayarlanmadıysa varsayılan olarak `externalLink` değişkeninin değeri kullanılır. Bu, ilgili panolara, günlüklere veya belgelere doğrudan bildirimden hızlıca erişmek için kullanışlıdır.

### Hesaplanmış Değerleri Gösterme
Şablonlar üçlü operatör (`? :`) mantığıyla dallanamaz ve bir metin birleştirme operatörü (`+`) yoktur. Bunun yerine değerleri ve karşılaştırma sonuçlarını doğrudan yerleştirin, etiketler için sabit metin kullanın:

```
Online: {{isOnline}}
High severity: {{severity > 5}}
Errors detected: {{count}}
```

Karşılaştırma ifadeleri `true` veya `false` olarak görüntülenir. Duruma göre gerçekten farklı mesajlar göndermek için tek bir şablon içinde dallanmak yerine tetiklemeleri kanal [Koşullarıyla](/docs/conditions) yönlendirin.

### Kanal Koşulları
Şablonları bildirim içeriğinde kullanmanın yanı sıra, kanalın gelişmiş ayarlarında bildirimlerin hiç gönderilip gönderilmeyeceğini belirleyen **[Koşullar](/docs/conditions)** tanımlayabilirsiniz. Bu koşullar aynı ifade sözdizimini kullanır (süslü parantezler olmadan).

Örneğin yalnızca belirli bir eşiğin üzerindeki tutarlar için bildirim göndermek üzere:

```
amount > 100
status == "critical"
temperature > 30 && location == "datacenter"
```

Bu, bildirimler gönderilmeden önce kritik olmayan olayları eleyerek uyarı yorgunluğunu önler. Daha fazlasını [Koşullar kılavuzumuzda](/docs/conditions) öğrenin.

## İlgili Dokümantasyon

- **[Webhook Entegrasyonu](/docs/webhook)** - Değişkenleri webhook'lar aracılığıyla nasıl aktaracağınızı öğrenin
- **[E-posta Tetikleyicileri](/docs/email-trigger)** - E-posta tetikleyicilerinden gelen değişkenler
- **[Koşullar](/docs/conditions)** - Bildirimleri koşullu ifadelerle filtreleyin
- **[Başlarken](/docs)** - Şablonlarla ilk kanalınızı kurun

## Sorun Giderme

**Şablon değişkenleri işlemiyor:**
- Değişken adlarının tam olarak eşleştiğini kontrol edin (büyük/küçük harfe duyarlı)
- Değişkenlerin webhook/e-posta tetikleyicisinde aktarıldığını doğrulayın
- Önce basit değişkenlerle test edin, ardından karmaşıklığı artırın

**Değişkenler boş görünüyor:**
- Değişkenin tetikleyici verisinde bulunduğunu onaylayın
- Değişken adlarında yazım hatası olup olmadığını kontrol edin
- İç içe özellikler için JSON yapısını doğrulayın

**İfade hataları:**
- Önce basit ifadelerle sözdizimini doğrulayın
- Operatörlerin doğru şekilde boşluklandığından emin olun
- Özellik erişiminin doğru sözdizimini kullandığını kontrol edin

Yardıma mı ihtiyacınız var? [Destek Merkezimizi](/docs/support) ziyaret edin veya echobell@weelone.com adresine yazın.

---

Şablonlar; kullanıcılara tam olarak ihtiyaç duydukları bilgiyi, ihtiyaç duydukları anda veren dinamik ve bilgilendirici bildirimler oluşturmanın güçlü bir yoludur. Basit değişken yerleştirmeyle başlayın, ardından gelişmiş bildirim sistemleri kurmak için kademeli olarak ifadeler ve koşullu mantık ekleyin.
