Sistem Templat - Isi Notifikasi yang Dinamis

Bangun templat notifikasi dinamis dengan variabel, ekspresi, dan nilai sistem - lengkap dengan praktik terbaik untuk pesan peringatan yang jelas.


Templat di Echobell memungkinkan Anda membuat notifikasi yang dinamis dan kaya konteks dengan menyisipkan variabel ke judul dan isi notifikasi. Fitur tangguh ini menghadirkan peringatan yang personal dan informatif, yang menyesuaikan diri dengan data pemicunya, sehingga notifikasi generik berubah menjadi informasi yang bisa langsung ditindaklanjuti.

Alih-alih menerima pesan generik "Alert triggered", templat memungkinkan Anda membuat notifikasi spesifik seperti "Production server CPU at 95%" atau "Build #142 failed in deploy stage" - memberi konteks langsung tanpa perlu penelusuran tambahan.

Sintaks Dasar Templat

Di templat Echobell, Anda bisa memakai variabel dengan membungkusnya dalam kurung kurawal ganda:

{{variableName}}

Saat sebuah saluran terpicu, variabel ini diganti dengan nilai sebenarnya yang dikirim lewat pemicu. Misalnya, kalau templat judul Anda adalah You have received ${{amount}} dan Anda memicu saluran itu dengan nilai amount sebesar 100, notifikasi yang dihasilkan akan tampil sebagai You have received $100.

Ekspresi Templat Tingkat Lanjut

Templat Echobell mendukung berbagai ekspresi untuk skenario yang lebih rumit:

  • Mengakses Properti Objek
{{user.name}}
{{data["value"]}}
  • Mengakses Elemen Array
{{items[0]}}
  • Memakai Operator Perbandingan
{{status == "active"}}
{{age > 18}}
  • Operator Logika
{{isSubscribed && !isPaused}}
{{isUrgent || isHighPriority}}

Semua operator standar didukung: ==, !=, <, >, <=, >=, &&, ||, dan !.

Variabel Templat dari Berbagai Pemicu

Pemicu Webhook

Saat memicu lewat webhook, Anda bisa menyediakan variabel melalui:

  1. Parameter query string:

    GET https://hook.echobell.one/t/<channel-token>?amount=100&status=complete
  2. Body JSON (untuk permintaan POST):

    POST https://hook.echobell.one/t/<channel-token>
    Content-Type: application/json
    
    {
      "amount": 100,
      "status": "complete",
      "user": {
        "name": "John",
        "id": 12345
      }
    }
  3. Variabel khusus:

    • externalLink: Menyediakan tautan yang bisa diklik di riwayat notifikasi
    • bodyAsText: Konten teks biasa dari body permintaan kalau Content-Type-nya text/plain
    • header: Memberi akses ke header permintaan HTTP (misalnya, {{header["content-type"]}})

Pemicu Email

Saat sebuah saluran terpicu lewat email, variabel berikut otomatis tersedia:

  • from: Alamat email pengirim
  • to: Alamat email penerima
  • subject: Baris subjek email
  • text: Konten teks biasa dari email
  • html: Konten HTML dari email

Kasus Penggunaan Templat

Perbandingan dan Boolean

Ekspresi yang memakai operator perbandingan atau logika merender hasil boolean-nya sebagai teks true atau false:

Payment over $1000: {{amount > 1000}}
High priority: {{isUrgent || isImportant}}

Templat Echobell tidak mendukung logika if/else sebaris (ternary). Untuk mengirim isi yang berbeda pada situasi yang berbeda, pakai Kondisi saluran untuk mengarahkan pemicunya, atau sisipkan nilai mentahnya secara langsung.

Kondisi Saluran

Selain memakai templat di isi notifikasi, Anda bisa menetapkan Kondisi di pengaturan lanjutan saluran yang menentukan apakah notifikasi perlu dikirim sama sekali. Kondisi ini memakai sintaks ekspresi yang sama (tanpa kurung kurawal).

Misalnya, untuk hanya mengirim notifikasi bagi jumlah yang lebih besar dari sebuah ambang batas:

amount > 100

Templat Tautan

Konfigurasikan templat tautan khusus di pengaturan lanjutan saluran untuk membuat tautan yang bisa diklik di riwayat notifikasi:

https://dashboard.example.com/orders/{{orderId}}

Kalau tidak ada templat tautan yang disetel, nilai variabel externalLink akan dipakai secara bawaan.

Variabel Waktu Sistem (UTC)

Variabel berikut selalu tersedia untuk templat (dan kondisi) dan dihitung dalam UTC.

Nilai-nilai berikut disuntikkan langsung (datar) dan bisa dipakai lewat namanya:

  • year, month (1–12)
  • dayOfMonth, dayOfWeek (0–6, Minggu = 0)
  • hour (0–23), minute, second
  • date (YYYY-MM-DD), time (HH:mm:ss)
  • iso: Stempel waktu ISO‑8601 (misalnya, 2025-05-06T12:34:56.789Z)

Nilai lain hanya tersedia di bawah namespace sys. (nilai-nilai ini tidak disuntikkan sebagai nama datar):

  • sys.timezone: Selalu "UTC"
  • sys.now: Stempel waktu ISO‑8601 (nilainya sama dengan iso)
  • sys.epochMs, sys.epochSeconds: Waktu saat ini terhitung sejak Unix epoch (angka)
  • sys.monthName: Nama bulan (JanuaryDecember)
  • sys.dayOfWeekName: Nama hari (SundaySaturday)

Namespace sys. juga mencerminkan setiap nilai datar (misalnya sys.year, sys.hour).

Contoh:

Sent at {{date}} {{time}} {{sys.timezone}}
Today is {{sys.dayOfWeekName}}, {{sys.monthName}} {{dayOfMonth}}, {{year}}
Epoch: {{sys.epochSeconds}}

Praktik Terbaik

Menangani Variabel yang Hilang

Echobell tidak punya operator nilai bawaan. Operator || murni bersifat logika — operator itu mengevaluasi kedua sisinya sebagai boolean lalu merender true atau false. Jadi {{username || "Anonymous User"}} merender teks literal true atau false, bukan username maupun string cadangannya.

Saat sebuah variabel tidak ada, {{variable}} cukup dirender sebagai string kosong. Rancang label Anda supaya nilai yang kosong pun tetap terbaca jelas:

User: {{username}}
Server: {{serverName}}
Errors detected: {{errorCount}}

Kalau Anda butuh nilai yang pasti ada, kirimkan nilainya secara eksplisit di payload pemicu, bukan mengandalkan nilai cadangan di templat.

Templat yang Informatif

Sertakan informasi penting di templat Anda agar notifikasinya bisa langsung ditindaklanjuti tanpa perlu konteks tambahan:

Contoh Bagus:

Title: {{service}} {{status}} on {{environment}}
Body: {{errorMessage}} at {{timestamp}}
Action required: {{recommendedAction}}

Hindari:

Title: Alert
Body: Check logs

Buat Templat Tetap Ringkas

Notifikasi tampil paling baik saat judul dan isinya jelas dan langsung ke inti:

  • Judul: 3-8 kata itu ideal, maksimal 20 kata
  • Isi: 1-3 kalimat itu ideal, hindari teks yang bertele-tele
  • Prioritas: Taruh informasi terpenting di awal

Batasan notifikasi iOS:

  • Judul: sekitar 40 karakter yang terlihat pada tampilan ringkas
  • Isi: sekitar 60 karakter pada tampilan ringkas, lebih banyak saat dibentangkan

Gunakan Penamaan yang Konsisten

Jaga konsistensi penamaan variabel di seluruh saluran Anda:

  • Pakai nama yang jelas dan deskriptif: server_name, bukan sn
  • Ikuti satu konvensi: snake_case, camelCase, atau kebab-case
  • Konsisten di antara saluran-saluran yang saling terkait
  • Dokumentasikan variabel yang diharapkan untuk anggota tim

Uji Secara Menyeluruh

Uji templat Anda dengan berbagai kombinasi variabel untuk memastikan hasil render-nya sesuai harapan:

  1. Uji dengan semua variabel tersedia
  2. Uji dengan variabel opsional yang tidak ada
  3. Uji dengan karakter khusus dan Unicode
  4. Uji dengan nilai yang sangat panjang
  5. Uji dengan string kosong
  6. Uji dengan angka, boolean, array, dan objek

Susun agar Mudah Dibaca

Gunakan pemformatan agar isi notifikasi mudah dipindai:

🚨 Alert: {{alertName}}
━━━━━━━━━━━━━━━
Server: {{server}}
Metric: {{metric}}  
Value: {{value}}
Time: {{time}}
━━━━━━━━━━━━━━━
Details: {{message}}

Atau pakai label sederhana:

Server: {{server}}
CPU Usage: {{cpu}}%
Memory: {{memory}}%
Status: {{status}}

Manfaatkan Ekspresi

Gunakan ekspresi untuk menampilkan nilai hasil hitungan dan hasil perbandingan:

Title: {{service}} alert — critical: {{severity == "critical"}}
Body: {{metric}} is {{value}} (over threshold: {{value > threshold}})

Ekspresi perbandingan dan logika dirender sebagai true atau false; pasangkan dengan teks label statis agar maknanya tersampaikan.

Perhatikan Zona Waktu

Ingat bahwa variabel waktu sistem memakai UTC. Dokumentasikan hal ini atau konversikan di templat Anda:

Alert triggered at {{time}} UTC
Triggered: {{date}} {{time}} (UTC)

Pola dan Contoh Umum

Pemantauan Server

Title: {{hostname}} - {{metric}} Alert
Body: {{metric}} on {{hostname}} is at {{value}}{{unit}}
Threshold: {{threshold}}{{unit}}
Time: {{date}} {{time}}

Pipeline CI/CD

Title: {{repository}} - Build {{status}}
Body: Build #{{buildNumber}} {{status}} in {{duration}}s
Branch: {{branch}}
Commit: {{commit_message}}
Author: {{author}}

E-commerce

Title: New Order #{{orderNumber}}
Body: Customer: {{customerName}}
Items: {{itemCount}} items
Total: ${{totalAmount}}
Shipping: {{shippingAddress}}

Pelacakan Kesalahan

Title: {{errorType}} in {{service}}
Body: {{errorMessage}}
File: {{filename}}:{{lineNumber}}
User: {{userId}}
Environment: {{environment}}

Fitur Tingkat Lanjut

Templat Tautan

Konfigurasikan templat tautan khusus di pengaturan lanjutan saluran untuk membuat tautan yang bisa diklik di riwayat notifikasi:

https://dashboard.example.com/orders/{{orderId}}
https://grafana.example.com/d/{{dashboardId}}
https://github.com/{{repo}}/actions/runs/{{runId}}

Kalau tidak ada templat tautan yang disetel, nilai variabel externalLink akan dipakai secara bawaan. Ini berguna untuk memberi akses cepat ke dasbor, log, atau dokumentasi yang relevan langsung dari notifikasi.

Menampilkan Nilai Hasil Hitungan

Templat tidak bisa bercabang dengan logika ternary (? :), dan tidak ada operator penggabungan string (+). Sebagai gantinya, sisipkan nilai dan hasil perbandingan secara langsung, dengan teks statis sebagai labelnya:

Online: {{isOnline}}
High severity: {{severity > 5}}
Errors detected: {{count}}

Ekspresi perbandingan dirender sebagai true atau false. Untuk benar-benar mengirim pesan yang berbeda pada tiap situasi, arahkan pemicunya memakai Kondisi saluran, bukan dengan percabangan di dalam satu templat.

Kondisi Saluran

Selain memakai templat di isi notifikasi, Anda bisa menetapkan Kondisi di pengaturan lanjutan saluran yang menentukan apakah notifikasi perlu dikirim sama sekali. Kondisi ini memakai sintaks ekspresi yang sama (tanpa kurung kurawal).

Misalnya, untuk hanya mengirim notifikasi bagi jumlah yang lebih besar dari sebuah ambang batas:

amount > 100
status == "critical"
temperature > 30 && location == "datacenter"

Cara ini mencegah kelelahan akibat peringatan dengan menyaring peristiwa yang tidak kritis sebelum notifikasi dikirim. Pelajari selengkapnya di panduan Kondisi kami.

Dokumentasi Terkait

Pemecahan Masalah

Templat tidak merender variabel:

  • Periksa apakah nama variabelnya sama persis (peka huruf besar-kecil)
  • Pastikan variabelnya benar-benar dikirim di pemicu webhook/email
  • Uji dulu dengan variabel sederhana, baru tambahkan kerumitannya

Variabel tampil kosong:

  • Pastikan variabel itu ada di data pemicunya
  • Periksa apakah ada salah ketik pada nama variabel
  • Pastikan struktur JSON-nya benar untuk properti bersarang

Kesalahan ekspresi:

  • Validasi sintaksnya dulu dengan ekspresi sederhana
  • Pastikan operatornya diberi spasi dengan benar
  • Periksa apakah akses propertinya memakai sintaks yang benar

Butuh bantuan? Kunjungi Pusat Dukungan kami atau hubungi echobell@weelone.com.


Templat adalah cara ampuh untuk membuat notifikasi yang dinamis dan informatif, yang memberi pengguna tepat informasi yang mereka butuhkan, saat mereka membutuhkannya. Mulailah dari penggantian variabel sederhana, lalu tambahkan ekspresi dan logika kondisional secara bertahap untuk membangun sistem notifikasi yang canggih.