Rules
Rule adalah alur pemrosesan pesan: Input → Logic → Output. Rule juga satu-satunya jalan menyimpan pesan ke database. Menu: Otomasi → Rules.

Daftar rule
Section titled “Daftar rule”Kolom: Nama, Tag, Status (Enabled atau Disabled), Mode (Realtime atau Terjadwal), waktu dibuat dan diubah, serta hasil eksekusi terakhir. Tersedia pencarian, penyaring status (bawaan menampilkan semua status) dan mode, Buat rule, serta menu per baris (aktifkan/nonaktifkan, duplikat, hapus, lihat eksekusi).

Konsep
Section titled “Konsep”| Bagian | Peran |
|---|---|
| Input | Tepat satu Channel Subscriber: channel dan subtopik (mendukung wildcard + satu tingkat dan # banyak tingkat; kosong = semua subtopik). |
| Logic | Satu atau lebih node yang memutuskan apakah dan apa yang diteruskan: Bypass, Comparison, Lua, Go, Custom Node, Pemecah SenFlat v2. |
| Output | Satu atau lebih tujuan: Internal DB, Channel Publisher, Alarm, Alarm perangkat, E-Mail, Telegram, PostgreSQL, Webhook. |
Referensi lengkap tiap node: Node rule.
Aturan graf
Section titled “Aturan graf”- Graf berbentuk pohon: tepat 1 Input, minimal 1 Logic, minimal 1 Output (maksimal 40 node dan 20 output).
- Sambungan hanya Input → Logic, Logic → Logic, dan Logic → Output. Setiap node selain Input punya satu induk, sehingga tidak ada siklus atau penggabungan.
- Semua node harus terjangkau dari Input, dan setiap Logic harus punya anak.
- Logic yang berantai menerima hasil induknya sebagai
message.payload. - Output hanya berjalan bila logic induknya menghasilkan nilai yang meneruskan pesan (truthy).
Editor kanvas
Section titled “Editor kanvas”
Toolbar: Tambah Input, Tambah Logic, Tambah Output, Tambah jadwal, saklar Rule aktif, Simpan rule (atau Perbarui rule pada rule yang sudah ada), Batal, dan Test Rule. Anda juga bisa memilih layout Vertikal atau Horizontal, memperbesar/memperkecil, menyesuaikan tampilan, dan mengunci kanvas. Node baru otomatis tersambung ke node yang sedang dipilih. Klik node untuk membuka panel konfigurasinya. Tombol Perluas pada editor kode membuka editor besar di dialog (perubahan baru berlaku setelah Terapkan; tidak ada auto save).

Rule baru dan draf
Section titled “Rule baru dan draf”- Rule baru dibuat nonaktif.
- Rule yang belum lengkap boleh disimpan sebagai draf selama nonaktif, tetapi tidak bisa diaktifkan. Saklar Rule aktif terkunci selama graf belum lengkap, dan galat per node ditampilkan.
- Rule aktif yang diubah hingga tidak lengkap tersimpan dalam keadaan nonaktif.
Rule hanya memproses pesan baru
Section titled “Rule hanya memproses pesan baru”Rule memproses pesan yang diterima broker sejak rule itu diaktifkan. Pesan dari sebelum aktif tidak diproses ulang. Pesan yang masuk saat mesin rule sedang mati tetap diproses begitu hidup (selama masih dalam retensi aliran broker, sekitar satu jam).
Test Rule
Section titled “Test Rule”Test Rule menjalankan rule dengan payload contoh tanpa efek samping: logic berjalan sungguhan, tetapi output hanya menampilkan pratinjau (hasil render dan validasi). Kredensial tidak dibuka. Hasilnya tampil di tiap node. Dibutuhkan izin rule.write.

Output PostgreSQL punya tombol Uji koneksi yang memeriksa koneksi, tabel, kolom, dan hak INSERT dalam transaksi read-only, tanpa menulis apa pun.
Executions
Section titled “Executions”Tab Executions menampilkan jejak eksekusi 7 hari terakhir: waktu, status (ok, galat, tidak cocok), input, hasil logic, status tiap output, durasi, dan galat. Untuk menjaga ukuran, engine mencatat semua galat dan sampel eksekusi sukses per rule per menit. Gunakan tab ini saat pesan masuk tetapi tidak ada hasilnya.

Rule terjadwal
Section titled “Rule terjadwal”Tombol Tambah jadwal mengubah rule menjadi terjadwal: rule tidak lagi memproses pesan realtime, tetapi berjalan pada waktu yang Anda tentukan.
| Isian | Keterangan |
|---|---|
| Tanggal mulai dan Jam | Waktu dinding di zona yang Anda pilih, sehingga “tiap hari 08:00” tetap 08:00 setempat melewati pergantian waktu musim panas. |
| Zona waktu | Nama zona IANA, misalnya Asia/Jakarta. |
| Pengulangan | Tidak diulang (sekali), tiap menit, jam, hari, minggu, atau bulan. |
| Setiap | Kelipatan, misalnya setiap 2 jam. |
Pilih Terapkan jadwal untuk memasangnya di rule, lalu simpan rule.

Pada rule terjadwal:
- Input tetap Channel Subscriber, tetapi hanya menentukan channel sumber data historis.
- Kode Lua mendapat fungsi
query_last(nama, durasi)danquery_agg(nama, durasi, "avg|min|max|sum|count")untuk membaca data yang sudah tersimpan (durasi seperti"90s","10m","2h","7d"). Hasilnya{value, unit, time, count}ataunil. Pembacaan selalu dibatasi pada channel input dan izin Anda. - Pesan yang diproses berbentuk sintetis (
protocol = schedule, payload{scheduledFor}). - Jalankan sekarang (izin
rule.execute) meminta rule dijalankan dalam beberapa detik; jadwal berulang tidak berubah.
Batas eksekusi
Section titled “Batas eksekusi”- Kode logic: waktu eksekusi 500 ms per pesan.
- Kredensial output (kata sandi PostgreSQL, token Telegram, nilai header webhook) dienkripsi di server dan tidak pernah dikembalikan; saat menyunting, mengosongkan field mempertahankan nilai lama.
- Output jaringan (PostgreSQL, Webhook, Telegram) menolak alamat privat atau lokal kecuali administrator server mengizinkan (
RULES_ALLOW_PRIVATE_TARGETS). - Rule yang menulis ke channel lewat Channel Publisher dibatasi kedalaman rantai agar tidak berputar tanpa henti (pesan dengan hops ≥ 4 dibuang).
rule.read, rule.write, rule.delete, dan rule.execute, plus aksi alarm (alarm_*) pada rule. Membuat rule butuh izin baca pada channel inputnya.