Nodeflux Central
Notification Channels

Notification Channels

Konfigurasi tujuan pengiriman alert — Email, Webhook, Telegram, dan Discord — untuk sistem notifikasi Lenz Dashboard.

Pengenalan

Sebuah Alert Rule memutuskan kapan sesuatu penting. Notification Channel memutuskan ke mana kabarnya dikirim — ke grup Telegram tim jaga, ke inbox supervisor, atau ke sistem lain lewat webhook. Keduanya sengaja dipisah: channel dibuat sekali, lalu dipakai ulang oleh berapa pun rule.

Tanpa channel, alert tetap menyala sebagai toast di dashboard dan tetap tercatat di Alert History — yang hilang hanya kabar ke orang yang sedang tidak menatap layar.

Halaman Notification Channels: (1) ringkasan antrean — pesan terkirim hari ini, pesan gagal, dan pesan menunggu, (2) Lihat log membuka riwayat pengiriman, (3) pencarian nama channel, (4) Tambah Channel membuka wizard tiga langkah, (5) satu kartu per channel berisi nama, provider, status aktif, tombol Test, dan menu aksi.
Halaman Notification Channels: (1) ringkasan antrean — pesan terkirim hari ini, pesan gagal, dan pesan menunggu, (2) Lihat log membuka riwayat pengiriman, (3) pencarian nama channel, (4) Tambah Channel membuka wizard tiga langkah, (5) satu kartu per channel berisi nama, provider, status aktif, tombol Test, dan menu aksi.

Lenz mendukung empat tipe channel:

TipeDeskripsi
EmailKirim alert via server SMTP ke satu atau beberapa alamat penerima
WebhookKirim payload JSON ke HTTP endpoint kustom milik Anda
TelegramKirim pesan ke grup atau channel melalui Telegram Bot
DiscordPost pesan ke channel Discord via Discord Webhook

Channel bersifat independen dari Alert Rule — Anda membuat channel sekali, lalu menghubungkannya ke banyak rule sesuai kebutuhan.

Untuk mengakses halaman ini, navigasi ke Konfigurasi → Notification Channels di sidebar Lenz. Diperlukan izin notifications.


Cara Menggunakan

Menambah Channel Baru

Wizard terdiri dari tiga langkah yang terbuka berurutan: Pilih Provider → Konfigurasi Koneksi → Template Kustom.

Pilih provider

Langkah 1 — Pilih Provider: (1) Telegram mengirim ke grup atau channel bot, (2) Discord mem-posting ke channel server, (3) Email mengirim lewat server SMTP, (4) Webhook memanggil HTTP endpoint Anda sendiri. Pilihan ini menentukan field yang muncul di Konfigurasi Koneksi.
Langkah 1 — Pilih Provider: (1) Telegram mengirim ke grup atau channel bot, (2) Discord mem-posting ke channel server, (3) Email mengirim lewat server SMTP, (4) Webhook memanggil HTTP endpoint Anda sendiri. Pilihan ini menentukan field yang muncul di Konfigurasi Koneksi.

Klik Tambah Channel di toolbar. Langkah pertama menampilkan empat kartu provider; pilihan ini menentukan field apa saja yang muncul di langkah berikutnya, jadi tidak dapat diubah dengan mudah setelah channel tersimpan.

Klik Lanjut.

Konfigurasi koneksi

Langkah 2 — Konfigurasi Koneksi untuk provider Webhook: (1) Nama Channel (maksimal 32 karakter) beserta toggle Aktif, (2) Endpoint URL dan metode POST atau PUT, (3) Tambah Header menambahkan header HTTP, misalnya Authorization untuk endpoint yang terlindungi.
Langkah 2 — Konfigurasi Koneksi untuk provider Webhook: (1) Nama Channel (maksimal 32 karakter) beserta toggle Aktif, (2) Endpoint URL dan metode POST atau PUT, (3) Tambah Header menambahkan header HTTP, misalnya Authorization untuk endpoint yang terlindungi.

Semua provider meminta dua hal yang sama: Nama Channel (maksimal 32 karakter, dipakai sebagai label di wizard Alert Rule) dan toggle Aktif. Sisanya berbeda per provider.

Webhook — satu-satunya provider yang seluruh konfigurasinya diisi di sini:

  • Endpoint URL — alamat HTTP yang akan dipanggil. Wajib diisi.
  • Method — POST (bawaan) atau PUT.
  • Headers (opsional) — pasangan nama dan nilai header. Klik Tambah Header untuk menambah baris. Di sinilah Anda menaruh Authorization bila endpoint Anda terlindungi.

Telegram, Discord, dan Email — kredensialnya tidak diketik di sini, melainkan diambil dari Credential tersimpan (lihat bagian berikutnya). Email menambahkan satu bagian lagi, Komposisi Email:

  • Alamat Pengirim — alamat yang muncul sebagai pengirim. Wajib diisi.
  • Alamat Penerima — satu atau beberapa alamat, dipisahkan koma.

Klik Lanjut.

Sesuaikan template pesan

Langkah ketiga menentukan isi pesan. Editor menyediakan tab Edit dan Pratinjau, tombol Sisipkan Variabel untuk menaruh placeholder di posisi kursor, dan Reset ke default untuk kembali ke template bawaan provider.

Bentuk editornya mengikuti provider: Webhook dan Discord memakai editor JSON dengan tombol Format untuk merapikan struktur, sementara Telegram dan Email memakai editor teks dengan toolbar format (tebal, miring, tautan). Khusus Email ada field tambahan Template Subjek di atas editor, yang juga menerima placeholder.

Placeholder yang tersedia:

VariabelIsiContoh
{{severity}}Tipe Peringatan dari Alert RuleCRITICAL
{{stream_name}}Nama stream atau kamera sumberGate A - Main Entrance
{{label}}Label event yang terdeteksiUnauthorized Person
{{timestamp}}Waktu kejadian2026-04-30 08:15:22
{{alert_rule}}Nama Alert Rule yang menyalaWajah Tidak Dikenal di Lobi
{{event_id}}ID event pemicu1780473522-a6d87102
{{status}}Status hasil pengenalanUNKNOWN
{{image_url}}URL gambar eventhttps://…/event.jpg

Daftar di atas selalu tersedia. Set variabel yang lebih lengkap per tipe event dapat diambil lewat GET /api/notification-channels/template-variables?event_type=alert_history; tombol Sisipkan Variabel mengisi daftarnya dari endpoint tersebut.

Klik Buat Channel.

Uji sebelum dipakai

Kartu channel punya tombol kirim di sebelah menu tiga titik yang mengirim satu pesan percobaan. Tombol ini hanya aktif ketika channel berstatus Aktif.

Kirim test sekali sebelum menghubungkan channel ke Alert Rule — jauh lebih mudah memperbaiki kredensial sekarang daripada mencari tahu mengapa alert semalam tidak sampai.

Hubungkan ke Alert Rule

Channel tidak mengirim apa pun dengan sendirinya. Buka Alert Rules, buat atau edit sebuah rule, dan pilih channel ini di langkah Notifikasi. Satu channel dapat dipakai oleh berapa pun rule, dan satu rule dapat mengirim ke beberapa channel sekaligus.

Credential untuk Telegram, Discord, dan Email

Provider Telegram, Discord, dan Email tidak meminta token di form channel. (1) Pilih Credential yang sudah tersimpan, atau klik tombol + di sebelahnya untuk membuat credential baru tanpa meninggalkan wizard. Satu credential dapat dipakai ulang oleh beberapa channel.
Provider Telegram, Discord, dan Email tidak meminta token di form channel. (1) Pilih Credential yang sudah tersimpan, atau klik tombol + di sebelahnya untuk membuat credential baru tanpa meninggalkan wizard. Satu credential dapat dipakai ulang oleh beberapa channel.

Token bot, URL webhook Discord, dan kredensial SMTP tidak disimpan pada channel, melainkan pada Credential tersendiri yang dapat dipakai ulang oleh beberapa channel. Pada langkah Konfigurasi Koneksi, pilih credential dari dropdown, atau klik tombol + di sebelahnya untuk membuat credential baru tanpa meninggalkan wizard. Ikon pensil di sebelahnya membuka credential terpilih untuk diubah.

Setiap tipe credential meminta field yang berbeda:

FieldKeterangan
NamaLabel credential, contoh Bot Telegram SOC
Bot TokenToken dari BotFather, format 123456789:ABCdef...
Chat IDID grup atau channel tujuan, contoh -1001234567890

Mendapatkan Bot Token: buka @BotFather di Telegram, kirim /newbot, ikuti instruksinya, lalu salin token yang diberikan.

Mendapatkan Chat ID: tambahkan bot ke grup tujuan, kirim satu pesan apa pun di grup itu, lalu buka https://api.telegram.org/bot<TOKEN>/getUpdates di browser dan baca nilai chat.id. ID grup selalu diawali tanda minus.

Bot harus sudah menjadi anggota grup atau channel tujuan sebelum dapat mengirim pesan. Menyimpan credential yang valid saja tidak cukup.

FieldKeterangan
NamaLabel credential, contoh Discord Ruang Kendali
Webhook URLURL webhook channel Discord, format https://discord.com/api/webhooks/...

Membuat Webhook URL: di Discord buka Server Settings → Integrations → Webhooks → New Webhook, pilih channel tujuan, lalu klik Copy Webhook URL.

FieldKeterangan
NamaLabel credential, contoh SMTP Kantor Pusat
SMTP HostHost server SMTP, contoh smtp.contoh.com
PortPort SMTP, umumnya 587 (STARTTLS) atau 465 (SSL/TLS)
UsernameUsername akun SMTP
PasswordPassword akun SMTP
Gunakan TLSAktifkan sesuai konfigurasi server SMTP Anda

Untuk Gmail, gunakan App Password, bukan password akun utama. Alamat pengirim dan penerima tidak disimpan di credential melainkan di channel, sehingga satu credential SMTP dapat melayani beberapa channel dengan penerima yang berbeda.

Memantau Pengiriman

Baris ringkasan di bagian atas halaman menjawab satu pertanyaan: apakah notifikasi benar-benar sampai?

  • terkirim hari ini — jumlah notifikasi yang berhasil dikirim sejak tengah malam.
  • pesan gagal — jumlah notifikasi yang sudah melewati batas percobaan ulang dan masuk ke Dead Letter Queue. Klik angkanya untuk membuka daftarnya dan mencoba ulang satu per satu. Angka yang terus bertambah hampir selalu berarti kredensial atau endpoint yang salah, bukan masalah sesaat.
  • menunggu — notifikasi yang masih dalam antrean. Angka kecil yang naik-turun itu normal; angka besar yang tidak pernah turun berarti antrean tersendat.

Tombol Refresh memuat ulang ketiga angka. Tombol Lihat log membuka dialog Log Notifikasi berisi riwayat pengiriman terakhir dengan kolom Channel, Tipe Event, Status (Terkirim, Gagal, Menunggu, Dead), Durasi, dan Waktu, beserta kode status dan isi respons dari server tujuan — tempat pertama yang harus dilihat ketika sebuah channel berhenti bekerja.

Mengubah dan Menonaktifkan Channel

Menu aksi pada kartu channel: Edit mengubah konfigurasi, Nonaktifkan menghentikan pengiriman tanpa menghapus konfigurasi, Hapus membuang channel. Tombol Test di sebelah menu mengirim satu pesan percobaan dan hanya aktif ketika channel berstatus Aktif.
Menu aksi pada kartu channel: Edit mengubah konfigurasi, Nonaktifkan menghentikan pengiriman tanpa menghapus konfigurasi, Hapus membuang channel. Tombol Test di sebelah menu mengirim satu pesan percobaan dan hanya aktif ketika channel berstatus Aktif.

Menu tiga titik pada setiap kartu berisi tiga aksi:

  • Edit — membuka kembali wizard dengan nilai tersimpan.
  • Nonaktifkan — menghentikan pengiriman tanpa menghapus konfigurasi. Alert Rule yang memakai channel ini tetap menyala dan tetap tercatat di Alert History; hanya pengiriman ke channel ini yang berhenti. Pilih Aktifkan pada menu yang sama untuk menyalakannya lagi.
  • Hapus — membuang channel. Rule yang memakainya tetap ada, tetapi kehilangan tujuan ini.

Untuk menghentikan notifikasi sementara — saat pemeliharaan, atau ketika satu kamera bermasalah dan membanjiri channel — gunakan Nonaktifkan, bukan Hapus. Kredensial dan template tetap tersimpan dan rule tidak perlu diedit.


Webhook Payload Format

Bagian ini khusus untuk integrator yang membangun sistem penerima webhook.

Format JSON Default

Ketika sebuah alert terpicu dan channel Webhook aktif, Lenz mengirimkan request HTTP ke endpoint URL Anda dengan body JSON sesuai template yang dikonfigurasi. Template default untuk Webhook adalah:

Default webhook payload
{
  "severity": "{{severity}}",
  "stream_name": "{{stream_name}}",
  "label": "{{label}}",
  "timestamp": "{{timestamp}}",
  "alert_rule": "{{alert_rule}}"
}

Contoh payload nyata yang akan diterima endpoint Anda:

Contoh payload yang diterima
{
  "severity": "HIGH",
  "stream_name": "Gate A - Main Entrance",
  "label": "Unauthorized Person",
  "timestamp": "2026-04-30 08:15:22",
  "alert_rule": "Deteksi Orang Tidak Dikenal"
}

HTTP Headers

Request webhook dikirimkan dengan header berikut:

HeaderNilai
Content-Typeapplication/json
Header kustomHeader tambahan yang Anda konfigurasi di form

Saat ini Lenz tidak menambahkan signature header otomatis (seperti HMAC). Gunakan header kustom (misalnya Authorization: Bearer <token>) untuk memvalidasi keaslian request di sisi penerima.

Retry Policy

Sistem menggunakan mekanisme outbox queue dengan retry otomatis:

  • Jika endpoint mengembalikan HTTP status non-2xx, sistem akan mencoba ulang pengiriman
  • Retry dilakukan dengan jeda bertahap (exponential backoff)
  • Setelah mencapai batas maksimum percobaan, notifikasi dipindahkan ke Dead Letter Queue
  • Item di Dead Letter Queue dapat dilihat dan dicoba ulang secara manual dari halaman Notification Channels

Contoh Receiver Code

webhook-receiver.js (Express)
const express = require('express')
const app = express()

app.use(express.json())

const EXPECTED_TOKEN = process.env.WEBHOOK_SECRET || 'change-me'

app.post('/webhook/lenz', (req, res) => {
  // Validasi Authorization header
  const authHeader = req.headers['authorization']
  if (authHeader !== `Bearer ${EXPECTED_TOKEN}`) {
    return res.status(401).json({ ok: false, message: 'Unauthorized' })
  }

  const payload = req.body

  console.log('Alert diterima:', {
    severity: payload.severity,
    stream: payload.stream_name,
    label: payload.label,
    time: payload.timestamp,
    rule: payload.alert_rule,
  })

  // Proses alert sesuai kebutuhan Anda di sini
  // Contoh: simpan ke database, kirim ke Slack, dll.

  res.json({ ok: true, message: 'received' })
})

app.listen(3000, () => {
  console.log('Webhook receiver berjalan di port 3000')
})

Jalankan dengan:

node webhook-receiver.js

Pastikan endpoint Anda merespons dengan HTTP 200 sesegera mungkin. Proses yang membutuhkan waktu lama sebaiknya dikerjakan secara asynchronous agar tidak memicu timeout dari sisi Lenz.


Fitur Utama

Multi-provider

Dukung Email, Webhook, Telegram, dan Discord dalam satu antarmuka yang seragam.

Template Kustom

Sesuaikan format pesan dengan variabel dinamis dari data event yang terdeteksi.

Queue & Retry Otomatis

Notifikasi gagal akan dicoba ulang secara otomatis dengan mekanisme exponential backoff.

Dead Letter Queue

Notifikasi yang melebihi batas retry disimpan di DLQ dan dapat dicoba ulang secara manual.

Log Pengiriman

Riwayat lengkap setiap upaya pengiriman notifikasi, termasuk status, durasi, dan respons server.

Test Instan

Uji koneksi channel langsung dari dashboard tanpa perlu menunggu alert sungguhan.

Aktivasi/Deaktivasi

Matikan sementara channel tertentu tanpa menghapus konfigurasinya.

Credential Dapat Dipakai Ulang

Token Telegram, webhook Discord, dan kredensial SMTP disimpan terpisah dari channel sehingga satu credential dapat melayani beberapa channel.


Tips & Troubleshooting


Selanjutnya

On this page