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
trueolarak 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.
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ör | Açıklama | Örnek |
|---|---|---|
== | Eşittir | status == "active" |
!= | Eşit değildir | status != "inactive" |
! | Mantıksal DEĞİL | !isCompleted |
< | Küçüktür | count < 10 |
> | Büyüktür | price > 99.99 |
<= | Küçük veya eşittir | battery <= 20 |
>= | Büyük veya eşittir | confidence >= 0.95 |
&& | Mantıksal VE | isAdmin && isActive |
|| | Mantıksal VEYA | isError || isWarning |
Koşul Değişkenleri
Bir kanal webhook ile tetiklendiğinde şunlara erişebilirsiniz:
- URL'deki sorgu parametreleri
- POST isteklerinden gelen JSON gövdesi
headernesnesi üzerinden HTTP başlıkları
E-posta tetikleyicileri için şunlara erişebilirsiniz:
from: E-postayı gönderenin adresito: Alıcının adresisubject: E-postanın konu satırıtext: Düz metin gövde içeriğihtml: 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–12dayOfMonth: Ayın günü1–31dayOfWeek: Haftanın günü0–6(Pazar = 0)hour: Günün saati0–23minute: Dakika0–59second: Saniye0–59date:YYYY-MM-DDmetnitime:HH:mm:ssmetniiso: Geçerli zaman, ISO‑8601 metni olarak (örneğin2025-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"metnisys.now: Geçerli zaman, ISO‑8601 metni olarak (isoile 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–Decembersys.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:
- Normal değerlerle test edin - Koşulların beklenen senaryolarda çalıştığını doğrulayın
- Sınır durumlarını test edin - Tam olarak eşik değerinde ne olur?
- Eksik değişkenlerle test edin - Koşul, olmayan veriyi nasıl ele alıyor?
- Beklenmedik türlerle test edin - Bir sayı metin olarak gönderilirse ne olur?
- 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 deNumber()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,truesonucunu verir (100 > 20). - Sayısal olmayan değerler: Bir
<,>,<=veya>=karşılaştırmasının herhangi bir tarafı sayı değilseNumber()sonucuNaNolur ve karşılaştırma her zamanfalsedöner. - Eşitlik ve karşılaştırma:
==ve!=gevşek eşitlik kullanır (bu nedenlecount == "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"ilestatus == "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:
- İstenmeyen bildirimleri koşullarla filtreleyin
- Önemli bildirimleri şablonlarla biçimlendirin
- 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:
- Koşulu basitleştirin - Her seferinde tek bir karşılaştırmayla test edin
- Değişken adlarını kontrol edin - Tam olarak eşleştiklerinden emin olun (büyük/küçük harfe duyarlı)
- Veri türlerini doğrulayın - Değişken türlerini onaylamak için test webhook'ları kullanın
- Boolean mantığını test edin - Karmaşık koşulları daha küçük parçalara bölün
- Operatör önceliğini gözden geçirin - Amacınızı netleştirmek için parantez kullanın
- Yazım hatalarını kontrol edin -
header["Content-Type"]değilheader["content-type"]
İlgili Dokümantasyon
- Şablon Kılavuzu - Bildirim içeriğini değişkenlerle biçimlendirin
- Webhook Entegrasyonu - Değişkenleri HTTP istekleriyle aktarın
- E-posta Tetikleyicileri - E-posta tetikleyicilerinden gelen değişkenler
- Başlarken - Koşullu ilk kanalınızı kurun
Sonraki Adımlar
Artık koşulları anladığınıza göre:
- Akıllı izleme uyarıları oluşturun - Altyapı uyarılarını filtreleyin
- CI/CD bildirimlerini kurun - Yalnızca önemli derleme olaylarında uyarı alın
- Zamana dayalı uyarıları yapılandırın - Mesai saatleri filtresi
- Tüm özellikleri keşfedin - Echobell'in başka neler yapabildiğini görün
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.