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:
| Tipe | Deskripsi |
|---|---|
| Kirim alert via server SMTP ke satu atau beberapa alamat penerima | |
| Webhook | Kirim payload JSON ke HTTP endpoint kustom milik Anda |
| Telegram | Kirim pesan ke grup atau channel melalui Telegram Bot |
| Discord | Post 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:
| Field | Keterangan |
|---|---|
SMTP Host | Hostname server SMTP, misalnya smtp.gmail.com |
SMTP Port | Port SMTP, biasanya 587 (TLS) atau 465 (SSL) |
Username | Username untuk autentikasi SMTP |
Password | Password atau App Password untuk autentikasi SMTP |
Alamat Pengirim | Alamat email pengirim, misalnya alerts@example.com |
Alamat Penerima | Satu atau beberapa alamat penerima, dipisahkan koma |
Template Subjek | Template 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:
| Field | Keterangan |
|---|---|
Endpoint URL | URL tujuan pengiriman, harus dapat diakses oleh server Lenz |
Method | HTTP method: POST (default) atau PUT |
Headers | Header tambahan opsional, misalnya untuk autentikasi |
Contoh header autentikasi:
Authorization: Bearer your-secret-token
X-Api-Key: your-api-keyPastikan 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:
| Field | Keterangan |
|---|---|
Bot Token | Token bot dari BotFather, format 123456789:ABCdef... |
Chat ID | ID chat tujuan, misalnya -100123456789 untuk grup |
Cara mendapatkan Bot Token:
- Buka Telegram dan cari
@BotFather - Kirim perintah
/newbotdan ikuti instruksi - 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>/getUpdatesdan cari nilaichat.id - Untuk channel: Gunakan
@usernamechannel (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:
| Field | Keterangan |
|---|---|
Webhook URL | URL webhook Discord, format https://discord.com/api/webhooks/... |
Cara membuat Discord Webhook:
- Buka Pengaturan Channel di server Discord Anda
- Pilih tab Integrations → Webhooks
- Klik New Webhook, beri nama, dan pilih channel tujuan
- 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:
| Variabel | Keterangan | Contoh |
|---|---|---|
{{severity}} | Tingkat keparahan alert | CRITICAL |
{{stream_name}} | Nama stream/kamera | Gate A - Main Entrance |
{{label}} | Label event yang terdeteksi | VIP Detected |
{{timestamp}} | Waktu kejadian | 2026-01-26 14:30:00 |
{{alert_rule}} | Nama alert rule | VIP Detection |
{{event_id}} | ID unik event | evt_123456 |
{{status}} | Status event | match |
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:
{
"severity": "{{severity}}",
"stream_name": "{{stream_name}}",
"label": "{{label}}",
"timestamp": "{{timestamp}}",
"alert_rule": "{{alert_rule}}"
}Contoh payload nyata yang akan diterima endpoint Anda:
{
"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:
| Header | Nilai |
|---|---|
Content-Type | application/json |
| Header kustom | Header 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
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.tsconst 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.jsPastikan 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:
| Method | Endpoint | Deskripsi |
|---|---|---|
GET | /api/notification-channels | Daftar semua channel |
POST | /api/notification-channels | Buat channel baru |
GET | /api/notification-channels/:id | Detail channel |
PUT | /api/notification-channels/:id | Perbarui channel |
DELETE | /api/notification-channels/:id | Hapus channel |
POST | /api/notification-channels/:id/test | Kirim notifikasi uji |
GET | /api/notification-channels/template-variables | Daftar variabel template |
GET | /api/notification-queue/stats | Statistik antrian |
GET | /api/notification-queue/dead-letter | Daftar Dead Letter Queue |
POST | /api/notification-queue/:id/retry | Retry item dari Dead Letter |
GET | /api/notification-logs | Log pengiriman notifikasi |