Kanal Koşulları - Akıllı Bildirim Filtreleme

Echobell bildirimlerini koşullu ifadelerle filtreleyin: operatörler, zamana dayalı kurallar ve uyarı yorgunluğunu azaltmak için en iyi uygulamalar.


Kanal koşulları, bildirimlerin ne zaman gönderileceğini belirleyen güçlü ifadelerdir. Kanalınıza koşullar tanımlayarak bildirimleri değişkenlerin veya HTTP başlıklarının içeriğine göre filtreleyebilir, abonelerin yalnızca kendileriyle ilgili uyarıları almasını sağlayabilirsiniz. Bu, uyarı yorgunluğunu azaltmak ve bildirim sisteminizde yüksek bir sinyal/gürültü oranını korumak için hayati önemdedir.

Koşulları bildirimlerinizin kapı bekçisi gibi düşünün: gelen tetikleyici verisini değerlendirir ve yalnızca belirli ölçütler karşılandığında bildirimlerin geçmesine izin verirler.

Koşulları Anlamak

Koşullar, true ya da false olarak değerlendirilen ifadelerdir. Bir kanal tetiklendiğinde:

  • Koşullar tanımlı değilse (boşsa), bildirimler tüm abonelere gönderilir.
  • Koşullar tanımlıysa, bildirimler yalnızca ifade true olarak değerlendirildiğinde gönderilir.

Koşul Yazma

Koşullar, şablonlarda kullanılan {{}} sarmalayıcıları olmadan ifade olarak yazılır. Örneğin:

status == "active"

Bu koşul, yalnızca status değişkeni "active" değerine eşit olduğunda bildirim gönderilmesine izin verir.

Yaygın Kullanım Senaryoları

Koşulları nasıl kullanabileceğinize dair bazı pratik örnekler:

Temel Değişken Kontrolleri

amount > 100

Yalnızca "amount" değişkeni 100'den büyük olduğunda bildir.

message != ""

Yalnızca "message" değişkeni boş olmadığında bildir.

isUrgent == true

Yalnızca "isUrgent" değişkeni true olduğunda bildir.

HTTP Başlıklarını Kontrol Etme

HTTP başlıklarına özel header değişkeniyle erişebilirsiniz:

header["x-webhook-source"] == "grafana"

Yalnızca özel bir kaynak başlığı tam olarak "grafana" ile eşleştiğinde bildir.

header["content-type"] == "application/json"

Yalnızca içerik türü JSON olduğunda bildir.

header["x-priority"] == "high"

Yalnızca özel bir öncelik başlığı "high" olarak ayarlandığında bildir.

Başlıklardaki tüm anahtarlar küçük harflidir.

Karmaşık Koşullar

Birden çok koşulu mantıksal operatörlerle birleştirebilirsiniz:

(temperature > 30 || pressure > 100) && status == "monitoring"

Yalnızca sıcaklık 30'u ya da basınç 100'ü aştığında ve durum "monitoring" olduğunda bildir.

environment == "production" && (errorLevel == "critical" || errorLevel == "high")

Yalnızca üretim ortamındaki kritik veya yüksek seviyeli hatalar için bildir.

Desteklenen Operatörler

Koşul ifadelerinde şu operatörler desteklenir:

OperatörAçıklamaÖrnek
==Eşittirstatus == "active"
!=Eşit değildirstatus != "inactive"
!Mantıksal DEĞİL!isCompleted
<Küçüktürcount < 10
>Büyüktürprice > 99.99
<=Küçük veya eşittirbattery <= 20
>=Büyük veya eşittirconfidence >= 0.95
&&Mantıksal VEisAdmin && isActive
||Mantıksal VEYAisError || isWarning

Koşul Değişkenleri

Bir kanal webhook ile tetiklendiğinde şunlara erişebilirsiniz:

  1. URL'deki sorgu parametreleri
  2. POST isteklerinden gelen JSON gövdesi
  3. header nesnesi üzerinden HTTP başlıkları

E-posta tetikleyicileri için şunlara erişebilirsiniz:

  • from: E-postayı gönderenin adresi
  • to: Alıcının adresi
  • subject: E-postanın konu satırı
  • text: Düz metin gövde içeriği
  • html: HTML gövde içeriği

Sistem Zamanı Değişkenleri (UTC)

Bu salt okunur değişkenler hem koşullarda hem de şablonlarda her zaman kullanılabilir. Tüm değerler UTC olarak hesaplanır.

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

  • year: 4 haneli yıl (sayı)
  • month: Ay numarası 1–12
  • dayOfMonth: Ayın günü 1–31
  • dayOfWeek: Haftanın günü 0–6 (Pazar = 0)
  • hour: Günün saati 0–23
  • minute: Dakika 0–59
  • second: Saniye 0–59
  • date: YYYY-MM-DD metni
  • time: HH:mm:ss metni
  • iso: Geçerli zaman, ISO‑8601 metni olarak (örneğin 2025-05-06T12:34:56.789Z)

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

  • sys.timezone: Sabit "UTC" metni
  • sys.now: Geçerli zaman, ISO‑8601 metni olarak (iso ile aynı değer)
  • sys.epochMs: Unix epoch'tan bu yana geçen milisaniye (sayı)
  • sys.epochSeconds: Unix epoch'tan bu yana geçen saniye (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:

// Weekdays during 09:00–17:00 UTC
hour >= 9 && hour < 17 && dayOfWeek >= 1 && dayOfWeek <= 5

// Weekends only
dayOfWeek == 0 || dayOfWeek == 6

// First day of month at top of hour
dayOfMonth == 1 && minute == 0

En İyi Uygulamalar

Basit Başlayın

Temel koşullarla başlayın ve gerektikçe karmaşıklık ekleyin:

1. Aşama: Tek koşullarla başlayın

temperature > 30

2. Aşama: Mantıksal operatörler ekleyin

temperature > 30 && location == "server-room"

3. Aşama: İç içe mantık ekleyin

(temperature > 30 || humidity > 80) && location == "server-room" && status == "monitoring"

İyice Test Edin

Koşullarınızın beklendiği gibi çalıştığından emin olmak için onları çeşitli girdilerle test edin:

  1. Normal değerlerle test edin - Koşulların beklenen senaryolarda çalıştığını doğrulayın
  2. Sınır durumlarını test edin - Tam olarak eşik değerinde ne olur?
  3. Eksik değişkenlerle test edin - Koşul, olmayan veriyi nasıl ele alıyor?
  4. Beklenmedik türlerle test edin - Bir sayı metin olarak gönderilirse ne olur?
  5. Test webhook'ları kullanın - Farklı veri birleşimleriyle test tetiklemeleri gönderin

Koşullarınızı Belgeleyin

Karmaşık koşulları açıklamak için kanalınızın not alanına açıklamalar ekleyin:

Channel Note:
Condition: (cpu > 80 && memory > 90) || diskSpace < 10

This condition triggers alerts when:
- Both CPU is above 80% AND memory is above 90%
- OR when disk space drops below 10GB

Bu, ekip üyelerinin ifadeyi çözümlemek zorunda kalmadan uyarı mantığını anlamasına yardımcı olur.

Sınır Durumlarını Göz Önünde Bulundurun

Eksik değişkenleri veya beklenmedik değerleri hesaba katın:

  • Eksik değişkenler: Tanımsız değişkenler boş/false olarak değerlendirilir; mantığınızın bunu ele aldığından emin olun
  • Sayısal karşılaştırmalar: <, >, <= ve >= operatörleri her iki işleneni de Number() ile dönüştürür, yani sözlüksel değil sayısal karşılaştırma yaparlar. "100" > "20" ifadesi sözlük sırasına göre değil, true sonucunu verir (100 > 20).
  • Sayısal olmayan değerler: Bir <, >, <= veya >= karşılaştırmasının herhangi bir tarafı sayı değilse Number() sonucu NaN olur ve karşılaştırma her zaman false döner.
  • Eşitlik ve karşılaştırma: == ve != gevşek eşitlik kullanır (bu nedenle count == "5" ifadesi 5 sayısıyla eşleşir), sıralama operatörleri ise her zaman sayı olarak karşılaştırır.
  • Büyük/küçük harf duyarlılığı: status == "Active" ile status == "active" farklıdır

Uyarı Fırtınalarını Önleyin

Geçici sorunlar için arka arkaya bildirim gönderilmesini engellemek üzere koşulları kullanın:

errorCount > 5    # Not just errorCount > 0
cpuUsage > 90     # Not cpuUsage > 50
failureRate > 0.1 # Not just hasFailures

Kritik olayları kaçırmadan gürültüyü azaltmak için bunları uygun eşiklerle birleştirin.

Mesai Saatleri Filtresi Kullanın

Önem derecesini zamana dayalı koşullarla birleştirin:

severity == "critical" || (severity == "high" && hour >= 9 && hour < 17)

Bu, kritik uyarıları 7/24 gönderir; yüksek öncelikli uyarıları ise yalnızca mesai saatlerinde iletir.

Başlık Kontrollerinden Yararlanın

Spam'i veya yetkisiz tetiklemeleri önlemek için webhook kaynaklarını doğrulayın:

header["x-webhook-source"] == "grafana" || header["x-webhook-source"] == "prometheus"

Bu, isteğin kaynağını denetleyerek bir güvenlik katmanı ekler.

Gerçek Hayattan Örnekler

Sunucu İzleme - Kademeli Uyarılar

# Only alert when CPU is consistently high, not transient spikes
cpu > 80 && duration >= 300

E-ticaret - Yüksek Tutarlı Siparişler

# Only notify for orders above $500 or fraud-flagged orders
orderAmount > 500 || isFraudSuspected == true

Geliştirme - Kritik Derleme Hataları

# Alert only for main branch failures or failed deployments
(branch == "main" || branch == "master") && status == "failed"

IoT - Ortam İzleme

# Temperature extremes outside acceptable range
temperature < 15 || temperature > 28

Güvenlik - Başarısız Oturum Açma Denemeleri

# Multiple failed logins from same IP in short time
failedAttempts >= 3 && timeSinceFirst < 300

CI/CD - Dağıtım Takibi

# Only notify on production deploys or staging failures
(environment == "production") || (environment == "staging" && status == "failed")

Trading - Fiyat Uyarıları

# Significant price movements beyond threshold
(priceChange > 5 || priceChange < -5) && volume > 1000000

Destek - SLA İhlalleri

# Tickets approaching or exceeding SLA
ticketAge > slaThreshold || priority == "urgent"

Yaygın Koşul Desenleri

Eşiğe Dayalı Uyarı

value > threshold
percentage >= 90
count < minimumRequired

Duruma Dayalı Filtreleme

status == "error" || status == "critical"
state != "healthy"
isActive == true

Zaman Aralığına Göre Filtreleme

# Business hours only (9 AM - 5 PM UTC, Monday-Friday)
hour >= 9 && hour < 17 && dayOfWeek >= 1 && dayOfWeek <= 5

# After hours only
hour < 9 || hour >= 17 || dayOfWeek == 0 || dayOfWeek == 6

# Weekend maintenance windows
(dayOfWeek == 0 || dayOfWeek == 6) && hour >= 2 && hour < 6

Çok Etkenli Koşullar

# Combine multiple criteria
severity == "high" && environment == "production" && region == "us-east-1"

# Either critical OR production with high severity
severity == "critical" || (severity == "high" && environment == "production")

Metin Eşleştirme

# Exact match (there is no "contains" operator)
status == "error"
errorType == "database"

# String comparison
environment == "production"
username != "test-user"

Koşulları Şablonlarla Birleştirme

Koşullar ve şablonlar, akıllı ve bağlamsal bildirimler oluşturmak için birlikte çalışır:

Koşul (hangi tetiklemelerin bildirim göndereceğini filtreler):

temperature > 30 || humidity > 80

Şablon (bildirim içeriğini biçimlendirir):

Title: {{location}} Environment Alert
Body: Temp: {{temperature}}°C, Humidity: {{humidity}}%

Bu ayrım şunları yapmanızı sağlar:

  1. İstenmeyen bildirimleri koşullarla filtreleyin
  2. Önemli bildirimleri şablonlarla biçimlendirin
  3. Bildirim içeriğini önem derecesine göre uyarlayın

Şablon sözdizimi ve özellikleri hakkında daha fazla bilgi edinin.

Koşullarda Hata Ayıklama

Koşullar beklendiği gibi çalışmıyorsa:

  1. Koşulu basitleştirin - Her seferinde tek bir karşılaştırmayla test edin
  2. Değişken adlarını kontrol edin - Tam olarak eşleştiklerinden emin olun (büyük/küçük harfe duyarlı)
  3. Veri türlerini doğrulayın - Değişken türlerini onaylamak için test webhook'ları kullanın
  4. Boolean mantığını test edin - Karmaşık koşulları daha küçük parçalara bölün
  5. Operatör önceliğini gözden geçirin - Amacınızı netleştirmek için parantez kullanın
  6. Yazım hatalarını kontrol edin - header["Content-Type"] değil header["content-type"]

İlgili Dokümantasyon

Sonraki Adımlar

Artık koşulları anladığınıza göre:


Koşulları etkili biçimde kullanarak bildirim gürültüsünü azaltabilir ve abonelerin yalnızca kendileriyle ilgili ve eyleme geçirilebilir uyarıları almasını sağlayabilirsiniz. Basit koşullarla başlayın ve ihtiyaçlarınız geliştikçe kademeli olarak daha gelişmiş filtreleme mantığı kurun.