Kondisi Saluran - Penyaringan Notifikasi yang Cerdas
Saring notifikasi Echobell dengan ekspresi kondisional: operator, aturan berbasis waktu, dan praktik terbaik untuk menekan kelelahan peringatan.
Kondisi saluran adalah ekspresi tangguh yang menentukan kapan notifikasi perlu dikirim. Dengan menetapkan kondisi pada saluran Anda, Anda bisa menyaring notifikasi berdasarkan isi variabel atau header HTTP, sehingga pelanggan hanya menerima peringatan yang relevan. Ini penting untuk mengurangi kelelahan akibat peringatan dan menjaga rasio sinyal terhadap derau tetap tinggi di sistem notifikasi Anda.
Anggap kondisi sebagai penjaga gerbang notifikasi Anda - kondisi mengevaluasi data pemicu yang masuk dan hanya meloloskan notifikasi saat kriteria tertentu terpenuhi.
Memahami Kondisi
Kondisi adalah ekspresi yang menghasilkan nilai true atau false. Saat sebuah saluran terpicu:
- Kalau kondisi tidak disetel (kosong), notifikasi dikirim ke semua pelanggan.
- Kalau kondisi disetel, notifikasi hanya dikirim saat ekspresinya menghasilkan
true.
Menulis Kondisi
Kondisi ditulis sebagai ekspresi tanpa pembungkus {{}} yang dipakai di templat. Contohnya:
status == "active"
Kondisi ini hanya akan meloloskan notifikasi saat variabel status bernilai "active".
Kasus Penggunaan Umum
Berikut beberapa contoh praktis pemakaian kondisi:
Pemeriksaan Variabel Dasar
amount > 100
Hanya memberi tahu saat variabel "amount" lebih besar dari 100.
message != ""
Hanya memberi tahu saat variabel "message" tidak kosong.
isUrgent == true
Hanya memberi tahu saat variabel "isUrgent" bernilai true.
Memeriksa Header HTTP
Anda bisa mengakses header HTTP memakai variabel khusus header:
header["x-webhook-source"] == "grafana"
Hanya memberi tahu saat header sumber khusus persis bernilai "grafana".
header["content-type"] == "application/json"
Hanya memberi tahu saat content type-nya JSON.
header["x-priority"] == "high"
Hanya memberi tahu saat header prioritas khusus disetel ke "high".
Kondisi Kompleks
Anda bisa menggabungkan beberapa kondisi memakai operator logika:
(temperature > 30 || pressure > 100) && status == "monitoring"
Hanya memberi tahu saat suhu melebihi 30 atau tekanan melebihi 100, dan statusnya "monitoring".
environment == "production" && (errorLevel == "critical" || errorLevel == "high")
Hanya memberi tahu untuk kesalahan tingkat kritis atau tinggi di environment produksi.
Operator yang Didukung
Operator berikut didukung dalam ekspresi kondisi:
| Operator | Deskripsi | Contoh |
|---|---|---|
== | Sama dengan | status == "active" |
!= | Tidak sama dengan | status != "inactive" |
! | NOT logika | !isCompleted |
< | Kurang dari | count < 10 |
> | Lebih dari | price > 99.99 |
<= | Kurang dari atau sama | battery <= 20 |
>= | Lebih dari atau sama | confidence >= 0.95 |
&& | AND logika | isAdmin && isActive |
|| | OR logika | isError || isWarning |
Variabel Kondisi
Saat sebuah saluran terpicu lewat webhook, Anda bisa mengakses:
- Parameter query dari URL
- Body JSON dari permintaan POST
- Header HTTP lewat objek
header
Untuk pemicu email, Anda bisa mengakses:
from: Alamat pengirim emailto: Alamat penerimasubject: Baris subjek emailtext: Isi email dalam teks biasahtml: Isi email dalam HTML
Variabel Waktu Sistem (UTC)
Variabel baca-saja berikut selalu tersedia baik di kondisi maupun templat. Semua nilainya dihitung dalam UTC.
Nilai-nilai berikut disuntikkan langsung (datar) dan bisa dipakai lewat namanya:
year: Tahun 4 digit (angka)month: Nomor bulan1–12dayOfMonth: Tanggal1–31dayOfWeek: Hari dalam pekan0–6(Minggu = 0)hour: Jam0–23minute: Menit0–59second: Detik0–59date: StringYYYY-MM-DDtime: StringHH:mm:ssiso: Waktu saat ini sebagai string ISO‑8601 (misalnya,2025-05-06T12:34:56.789Z)
Nilai tambahan hanya tersedia di bawah namespace sys. (nilai-nilai ini tidak disuntikkan sebagai nama datar):
sys.timezone: String konstan"UTC"sys.now: Waktu saat ini sebagai string ISO‑8601 (nilainya sama denganiso)sys.epochMs: Milidetik sejak Unix epoch (angka)sys.epochSeconds: Detik sejak Unix epoch (angka)sys.monthName: Nama bulanJanuary–Decembersys.dayOfWeekName: Nama hariSunday–Saturday
Namespace sys. juga mencerminkan setiap nilai datar (misalnya sys.year, sys.hour).
Contoh:
// Hari kerja pukul 09.00–17.00 UTC
hour >= 9 && hour < 17 && dayOfWeek >= 1 && dayOfWeek <= 5
// Hanya akhir pekan
dayOfWeek == 0 || dayOfWeek == 6
// Hari pertama tiap bulan tepat di awal jam
dayOfMonth == 1 && minute == 0
Praktik Terbaik
Mulai dari yang Sederhana
Mulailah dengan kondisi dasar lalu tambahkan kerumitannya sesuai kebutuhan:
Tahap 1: Mulai dengan satu kondisi
temperature > 30
Tahap 2: Tambahkan operator logika
temperature > 30 && location == "server-room"
Tahap 3: Tambahkan logika bersarang
(temperature > 30 || humidity > 80) && location == "server-room" && status == "monitoring"
Uji Secara Menyeluruh
Uji kondisi Anda dengan berbagai masukan untuk memastikan semuanya bekerja sesuai harapan:
- Uji dengan nilai normal - Pastikan kondisinya bekerja pada skenario yang diharapkan
- Uji kasus batas - Apa yang terjadi tepat pada nilai ambang batas?
- Uji dengan variabel yang hilang - Bagaimana kondisi itu menangani data yang tidak ada?
- Uji dengan tipe yang tak terduga - Bagaimana kalau angka dikirim sebagai string?
- Pakai webhook uji coba - Kirim pemicu uji coba dengan berbagai kombinasi data
Dokumentasikan Kondisi Anda
Tambahkan penjelasan di kolom catatan saluran Anda untuk menerangkan kondisi yang rumit:
Catatan Saluran:
Kondisi: (cpu > 80 && memory > 90) || diskSpace < 10
Kondisi ini memicu peringatan saat:
- CPU di atas 80% DAN memori di atas 90%
- ATAU saat ruang disk turun di bawah 10GB
Dengan begitu anggota tim bisa memahami logika peringatannya tanpa harus membedah ekspresinya.
Perhatikan Kasus Batas
Antisipasi variabel yang hilang atau nilai yang tak terduga:
- Variabel yang hilang: Variabel yang tidak terdefinisi dievaluasi sebagai kosong/false - pastikan logika Anda menanganinya
- Perbandingan numerik:
<,>,<=, dan>=mengonversi kedua operandnya denganNumber(), jadi perbandingannya numerik, bukan leksikal."100" > "20"bernilaitrue(100 > 20), bukan mengikuti urutan leksikal. - Nilai non-numerik: Kalau salah satu sisi perbandingan
<,>,<=, atau>=bukan angka,Number()menghasilkanNaNdan perbandingannya selalufalse. - Kesamaan vs. perbandingan:
==dan!=memakai kesamaan longgar (jadicount == "5"cocok dengan angka 5), sedangkan operator pengurutan selalu membandingkan sebagai angka. - Peka huruf besar-kecil:
status == "Active"berbeda denganstatus == "active"
Cegah Badai Peringatan
Gunakan kondisi untuk mencegah notifikasi beruntun akibat masalah sesaat:
errorCount > 5 # Bukan sekadar errorCount > 0
cpuUsage > 90 # Bukan cpuUsage > 50
failureRate > 0.1 # Bukan sekadar hasFailures
Padukan dengan ambang batas yang tepat untuk menekan derau tanpa melewatkan kejadian kritis.
Gunakan Penyaringan Jam Kerja
Padukan tingkat keparahan dengan kondisi berbasis waktu:
severity == "critical" || (severity == "high" && hour >= 9 && hour < 17)
Dengan begitu peringatan kritis dikirim 24/7, sedangkan peringatan berprioritas tinggi hanya pada jam kerja.
Manfaatkan Pemeriksaan Header
Validasi sumber webhook untuk mencegah spam atau pemicu tanpa izin:
header["x-webhook-source"] == "grafana" || header["x-webhook-source"] == "prometheus"
Ini menambah lapisan keamanan dengan memeriksa asal permintaan.
Contoh Dunia Nyata
Pemantauan Server - Peringatan Bertingkat
# Hanya memberi peringatan saat CPU tinggi secara konsisten, bukan lonjakan sesaat
cpu > 80 && duration >= 300
E-commerce - Pesanan Bernilai Tinggi
# Hanya memberi tahu untuk pesanan di atas $500 atau pesanan yang ditandai penipuan
orderAmount > 500 || isFraudSuspected == true
Pengembangan - Kegagalan Build yang Kritis
# Beri peringatan hanya untuk kegagalan di branch main atau deployment yang gagal
(branch == "main" || branch == "master") && status == "failed"
IoT - Pemantauan Lingkungan
# Suhu ekstrem di luar rentang yang dapat diterima
temperature < 15 || temperature > 28
Keamanan - Percobaan Login yang Gagal
# Beberapa login gagal dari IP yang sama dalam waktu singkat
failedAttempts >= 3 && timeSinceFirst < 300
CI/CD - Pelacakan Deployment
# Hanya memberi tahu saat deploy ke produksi atau kegagalan di staging
(environment == "production") || (environment == "staging" && status == "failed")
Trading - Peringatan Harga
# Pergerakan harga signifikan yang melewati ambang batas
(priceChange > 5 || priceChange < -5) && volume > 1000000
Dukungan - Pelanggaran SLA
# Tiket yang mendekati atau melewati SLA
ticketAge > slaThreshold || priority == "urgent"
Pola Kondisi yang Umum
Peringatan Berbasis Ambang Batas
value > threshold
percentage >= 90
count < minimumRequired
Penyaringan Berbasis Status
status == "error" || status == "critical"
state != "healthy"
isActive == true
Penyaringan Berbasis Jendela Waktu
# Hanya jam kerja (09.00 - 17.00 UTC, Senin-Jumat)
hour >= 9 && hour < 17 && dayOfWeek >= 1 && dayOfWeek <= 5
# Hanya di luar jam kerja
hour < 9 || hour >= 17 || dayOfWeek == 0 || dayOfWeek == 6
# Jendela pemeliharaan akhir pekan
(dayOfWeek == 0 || dayOfWeek == 6) && hour >= 2 && hour < 6
Kondisi Multifaktor
# Gabungkan beberapa kriteria
severity == "high" && environment == "production" && region == "us-east-1"
# Kritis ATAU produksi dengan tingkat keparahan tinggi
severity == "critical" || (severity == "high" && environment == "production")
Pencocokan String
# Cocok persis (tidak ada operator "contains")
status == "error"
errorType == "database"
# Perbandingan string
environment == "production"
username != "test-user"
Memadukan Kondisi dengan Templat
Kondisi dan templat bekerja bersama untuk menghasilkan notifikasi yang cerdas dan kontekstual:
Kondisi (menyaring pemicu mana yang mengirim notifikasi):
temperature > 30 || humidity > 80
Templat (memformat isi notifikasi):
Title: {{location}} Environment Alert
Body: Temp: {{temperature}}°C, Humidity: {{humidity}}%
Pemisahan ini memungkinkan Anda:
- Menyaring notifikasi yang tidak diinginkan dengan kondisi
- Memformat notifikasi penting dengan templat
- Menyesuaikan isi notifikasi berdasarkan tingkat keparahannya
Pelajari selengkapnya tentang sintaks dan fitur templat.
Men-debug Kondisi
Kalau kondisi tidak bekerja seperti yang diharapkan:
- Sederhanakan kondisinya - Uji satu perbandingan saja lebih dulu
- Periksa nama variabel - Pastikan namanya sama persis (peka huruf besar-kecil)
- Verifikasi tipe data - Pakai webhook uji coba untuk memastikan tipe variabelnya
- Uji logika boolean - Pecah kondisi rumit menjadi bagian-bagian kecil
- Tinjau urutan operator - Gunakan tanda kurung untuk memperjelas maksudnya
- Periksa salah ketik -
header["content-type"], bukanheader["Content-Type"]
Dokumentasi Terkait
- Panduan Templat - Format isi notifikasi memakai variabel
- Integrasi Webhook - Kirim variabel lewat permintaan HTTP
- Pemicu Email - Variabel dari pemicu email
- Panduan Memulai - Siapkan saluran berkondisi pertama Anda
Langkah Berikutnya
Setelah Anda memahami kondisi:
- Buat peringatan pemantauan yang cerdas - Saring peringatan infrastruktur
- Siapkan notifikasi CI/CD - Beri peringatan hanya untuk peristiwa build yang penting
- Konfigurasikan peringatan berbasis waktu - Penyaringan jam kerja
- Jelajahi semua fitur - Temukan apa lagi yang bisa dilakukan Echobell
Dengan memakai kondisi secara efektif, Anda bisa menekan derau notifikasi dan memastikan pelanggan hanya menerima peringatan yang relevan dan bisa ditindaklanjuti. Mulailah dari kondisi sederhana lalu bangun logika penyaringan yang lebih canggih secara bertahap seiring kebutuhan Anda berkembang.