Nodeflux Central
Notification Channels

Notification Channels

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

Pengenalan

Notification Channel adalah tujuan pengiriman alert yang dikonfigurasi di Lenz Dashboard. Setiap kali sebuah Alert Rule terpicu — misalnya saat wajah terdeteksi di kamera tertentu — sistem akan mengirimkan notifikasi ke seluruh channel yang terhubung dengan rule tersebut.

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.


Tipe Channel

Email (SMTP)

Kirim notifikasi ke satu atau beberapa alamat email melalui server SMTP yang Anda konfigurasi sendiri.

Konfigurasi yang diperlukan:

FieldKeterangan
SMTP HostHostname server SMTP, misalnya smtp.gmail.com
SMTP PortPort SMTP, biasanya 587 (TLS) atau 465 (SSL)
UsernameUsername untuk autentikasi SMTP
PasswordPassword atau App Password untuk autentikasi SMTP
Alamat PengirimAlamat email pengirim, misalnya alerts@example.com
Alamat PenerimaSatu atau beberapa alamat penerima, dipisahkan koma
Template SubjekTemplate teks untuk baris subjek email

Field opsional: CC, BCC, dan opsi use_tls untuk mengaktifkan enkripsi TLS.

Jika menggunakan Gmail, aktifkan App Password di pengaturan keamanan akun Google Anda, lalu gunakan App Password tersebut sebagai nilai Password. Gmail tidak mengizinkan password utama untuk akses SMTP aplikasi pihak ketiga.

Webhook (HTTP Endpoint Kustom)

Kirim payload JSON ke URL HTTP/HTTPS yang Anda tentukan. Cocok untuk integrasi dengan sistem internal, SIEM, atau platform monitoring lainnya.

Konfigurasi yang diperlukan:

FieldKeterangan
Endpoint URLURL tujuan pengiriman, harus dapat diakses oleh server Lenz
MethodHTTP method: POST (default) atau PUT
HeadersHeader tambahan opsional, misalnya untuk autentikasi

Contoh header autentikasi:

Authorization: Bearer your-secret-token
X-Api-Key: your-api-key

Pastikan endpoint URL dapat dijangkau dari server tempat Lenz berjalan. Jika menggunakan URL lokal (localhost), endpoint tersebut harus berada di jaringan yang sama dengan server Lenz.

Telegram Bot

Kirim notifikasi ke grup Telegram, channel publik, atau chat pribadi melalui Telegram Bot API.

Konfigurasi yang diperlukan:

FieldKeterangan
Bot TokenToken bot dari BotFather, format 123456789:ABCdef...
Chat IDID chat tujuan, misalnya -100123456789 untuk grup

Cara mendapatkan Bot Token:

  1. Buka Telegram dan cari @BotFather
  2. Kirim perintah /newbot dan ikuti instruksi
  3. Salin token yang diberikan BotFather

Cara mendapatkan Chat ID:

  • Untuk grup: Tambahkan bot ke grup, kirim pesan, lalu kunjungi https://api.telegram.org/bot<TOKEN>/getUpdates dan cari nilai chat.id
  • Untuk channel: Gunakan @username channel (misalnya @namaChannel) atau ID numerik

Bot wajib sudah ditambahkan ke grup atau channel sebagai member sebelum Anda dapat mengirim pesan. Untuk mengirim ke grup privat, bot juga harus memiliki izin untuk mengirim pesan.

Discord Webhook

Kirim notifikasi ke channel Discord melalui Discord Webhook URL yang dibuat langsung dari pengaturan server Discord Anda.

Konfigurasi yang diperlukan:

FieldKeterangan
Webhook URLURL webhook Discord, format https://discord.com/api/webhooks/...

Cara membuat Discord Webhook:

  1. Buka Pengaturan Channel di server Discord Anda
  2. Pilih tab Integrations → Webhooks
  3. Klik New Webhook, beri nama, dan pilih channel tujuan
  4. Klik Copy Webhook URL dan tempelkan ke form Lenz

Setiap webhook Discord terikat pada satu channel spesifik. Jika Anda ingin mengirim ke beberapa channel Discord yang berbeda, buat channel terpisah di Lenz untuk masing-masing webhook URL.


Cara Menggunakan

Tambah Channel Baru

Buka halaman Notification Channels

Navigasi ke Konfigurasi → Notification Channels di sidebar. Klik tombol Tambah Channel di pojok kanan atas.

Pilih tipe provider

Pilih salah satu dari empat provider yang tersedia: Email, Webhook, Telegram, atau Discord. Klik Lanjut.

Masukkan kredensial dan konfigurasi

Isi form konfigurasi sesuai tipe channel yang dipilih. Setiap tipe memiliki field yang berbeda (lihat bagian Tipe Channel di atas untuk detail field masing-masing).

Beri nama channel yang deskriptif, misalnya Alert Tim Security - Telegram atau Webhook SIEM Produksi.

Kustomisasi template pesan

Di langkah ketiga wizard, Anda dapat mengkustomisasi template pesan yang akan dikirimkan. Gunakan variabel dinamis berikut di dalam template:

VariabelKeteranganContoh
{{severity}}Tingkat keparahan alertCRITICAL
{{stream_name}}Nama stream/kameraGate A - Main Entrance
{{label}}Label event yang terdeteksiVIP Detected
{{timestamp}}Waktu kejadian2026-01-26 14:30:00
{{alert_rule}}Nama alert ruleVIP Detection
{{event_id}}ID unik eventevt_123456
{{status}}Status eventmatch

Klik Buat Channel untuk menyimpan.

Kirim test notifikasi

Setelah channel berhasil dibuat, Anda dapat mengujinya langsung dari daftar channel. Klik menu tiga titik pada kartu channel, lalu pilih Test. Sistem akan mengirimkan pesan uji ke channel tersebut menggunakan data sampel.

Tombol Test hanya aktif jika channel dalam status Aktif. Aktifkan channel terlebih dahulu jika belum aktif.

Hubungkan ke Alert Rule

Buka halaman Alert Rules, pilih rule yang ingin Anda konfigurasi, lalu di bagian Notifikasi tambahkan channel yang baru saja Anda buat. Satu alert rule dapat dihubungkan ke beberapa channel sekaligus.


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.ts (Hono + Bun)
import { Hono } from 'hono'

const app = new Hono()

// Validasi token sederhana via header
const EXPECTED_TOKEN = process.env.WEBHOOK_SECRET ?? 'change-me'

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

  const payload = await c.req.json()

  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.

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

export default {
  port: 3000,
  fetch: app.fetch,
}

Jalankan dengan:

bun run webhook-receiver.ts
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.

Rate Limiting & Batching

Konfigurasi batas pengiriman dan penggabungan notifikasi dalam satu batch untuk mengurangi noise.


API Reference

Dokumentasi lengkap semua endpoint REST API tersedia di halaman terpisah, lengkap dengan skema request/response interaktif dan contoh untuk setiap provider.

Ringkasan endpoint:

MethodEndpointDeskripsi
GET/api/notification-channelsDaftar semua channel
POST/api/notification-channelsBuat channel baru
GET/api/notification-channels/:idDetail channel
PUT/api/notification-channels/:idPerbarui channel
DELETE/api/notification-channels/:idHapus channel
POST/api/notification-channels/:id/testKirim notifikasi uji
GET/api/notification-channels/template-variablesDaftar variabel template
GET/api/notification-queue/statsStatistik antrian
GET/api/notification-queue/dead-letterDaftar Dead Letter Queue
POST/api/notification-queue/:id/retryRetry item dari Dead Letter
GET/api/notification-logsLog pengiriman notifikasi

Tips & Troubleshooting


Selanjutnya

On this page