System szablonów - dynamiczna treść powiadomień
Twórz dynamiczne szablony powiadomień ze zmiennymi, wyrażeniami i wartościami systemowymi - plus dobre praktyki dla czytelnych komunikatów alertów.
Szablony w Echobell pozwalają tworzyć dynamiczne, bogate w kontekst powiadomienia dzięki wstawianiu zmiennych do tytułu i treści powiadomienia. Ta funkcja umożliwia budowanie spersonalizowanych i konkretnych alertów, które dopasowują się do danych z wyzwalacza, zamieniając ogólnikowe powiadomienia w informacje gotowe do działania.
Zamiast ogólnego komunikatu „Alert triggered” szablony pozwalają Ci otrzymać konkret w rodzaju „Production server CPU at 95%” albo „Build #142 failed in deploy stage” — od razu z kontekstem, bez konieczności dodatkowego sprawdzania.
Podstawowa składnia szablonów
W szablonach Echobell zmiennych używasz, otaczając je podwójnymi nawiasami klamrowymi:
{{variableName}}
Gdy kanał zostaje wyzwolony, te zmienne są zastępowane rzeczywistymi wartościami przekazanymi w wyzwoleniu. Na przykład jeśli szablon tytułu to You have received ${{amount}}, a kanał zostanie wyzwolony z wartością amount równą 100, powiadomienie wyświetli się jako You have received $100.
Zaawansowane wyrażenia w szablonach
Szablony Echobell obsługują szereg wyrażeń przydatnych w bardziej złożonych scenariuszach:
- Dostęp do właściwości obiektu
{{user.name}}
{{data["value"]}}
- Dostęp do elementów tablicy
{{items[0]}}
- Użycie operatorów porównania
{{status == "active"}}
{{age > 18}}
- Operatory logiczne
{{isSubscribed && !isPaused}}
{{isUrgent || isHighPriority}}
Obsługiwane są wszystkie standardowe operatory: ==, !=, <, >, <=, >=, &&, || oraz !.
Zmienne szablonu z różnych wyzwalaczy
Wyzwalacze webhook
Wyzwalając kanał webhookiem, możesz przekazać zmienne przez:
-
Parametry ciągu zapytania:
GET https://hook.echobell.one/t/<channel-token>?amount=100&status=complete -
Treść JSON (przy żądaniach POST):
POST https://hook.echobell.one/t/<channel-token> Content-Type: application/json { "amount": 100, "status": "complete", "user": { "name": "John", "id": 12345 } } -
Zmienne specjalne:
externalLink: tworzy klikalny odnośnik w historii powiadomieńbodyAsText: treść żądania w postaci zwykłego tekstu, jeśliContent-Typetotext/plainheader: daje dostęp do nagłówków żądania HTTP (np.{{header["content-type"]}})
Wyzwalacze e-mail
Gdy kanał jest wyzwalany e-mailem, automatycznie dostępne są następujące zmienne:
from: adres e-mail nadawcyto: adres e-mail odbiorcysubject: temat wiadomościtext: treść wiadomości w postaci zwykłego tekstuhtml: treść wiadomości w formacie HTML
Zastosowania szablonów
Porównania i wartości logiczne
Wyrażenia z operatorami porównania lub logicznymi renderują swój wynik logiczny jako tekst true albo false:
Payment over $1000: {{amount > 1000}}
High priority: {{isUrgent || isImportant}}
Szablony Echobell nie obsługują wbudowanej logiki if/else (operatora warunkowego). Aby wysyłać różną treść w różnych sytuacjach, użyj warunków kanału do rozdzielenia wyzwoleń albo wstaw surowe wartości bezpośrednio.
Warunki kanału
Poza szablonami treści powiadomienia możesz ustawić w zaawansowanych ustawieniach kanału warunki, które decydują o tym, czy powiadomienie w ogóle ma zostać wysłane. Warunki korzystają z tej samej składni wyrażeń (bez nawiasów klamrowych).
Na przykład, aby wysyłać powiadomienia tylko dla kwot powyżej progu:
amount > 100
Szablony odnośników
Skonfiguruj własny szablon odnośnika w zaawansowanych ustawieniach kanału, aby tworzyć klikalne odnośniki w historii powiadomień:
https://dashboard.example.com/orders/{{orderId}}
Jeśli szablon odnośnika nie jest ustawiony, domyślnie zostanie użyta wartość zmiennej externalLink.
Systemowe zmienne czasu (UTC)
Te zmienne są zawsze dostępne w szablonach (i warunkach), a ich wartości są wyliczane w strefie UTC.
Poniższe wartości są wstrzykiwane bezpośrednio (płasko) i można ich używać po nazwie:
year,month(1–12)dayOfMonth,dayOfWeek(0–6, niedziela = 0)hour(0–23),minute,seconddate(YYYY-MM-DD),time(HH:mm:ss)iso: znacznik czasu ISO‑8601 (np.2025-05-06T12:34:56.789Z)
Pozostałe wartości są dostępne wyłącznie w przestrzeni nazw sys. (nie są wstrzykiwane pod płaskimi nazwami):
sys.timezone: zawsze"UTC"sys.now: znacznik czasu ISO‑8601 (ta sama wartość coiso)sys.epochMs,sys.epochSeconds: bieżący czas liczony od epoki uniksowej (liczba)sys.monthName: nazwa miesiąca (January–December)sys.dayOfWeekName: nazwa dnia (Sunday–Saturday)
Przestrzeń nazw sys. odzwierciedla też każdą płaską wartość (np. sys.year, sys.hour).
Przykłady:
Sent at {{date}} {{time}} {{sys.timezone}}
Today is {{sys.dayOfWeekName}}, {{sys.monthName}} {{dayOfMonth}}, {{year}}
Epoch: {{sys.epochSeconds}}
Dobre praktyki
Obsługa brakujących zmiennych
Echobell nie ma operatora wartości domyślnej. Operator || jest czysto logiczny — traktuje obie strony jako wartości logiczne i renderuje true albo false. Zapis {{username || "Anonymous User"}} wyświetli więc dosłowny tekst true lub false, nigdy nazwę użytkownika ani tekst zastępczy.
Gdy zmiennej brakuje, {{variable}} renderuje się po prostu jako pusty ciąg. Zaprojektuj etykiety tak, aby pusta wartość nadal czytała się sensownie:
User: {{username}}
Server: {{serverName}}
Errors detected: {{errorCount}}
Jeśli potrzebujesz gwarantowanej wartości, wyślij ją jawnie w payloadzie wyzwalacza, zamiast liczyć na wartość zastępczą w szablonie.
Treściwe szablony
Umieszczaj w szablonach kluczowe informacje, aby powiadomienie od razu pozwalało działać, bez szukania dodatkowego kontekstu:
Dobre przykłady:
Title: {{service}} {{status}} on {{environment}}
Body: {{errorMessage}} at {{timestamp}}
Action required: {{recommendedAction}}
Unikaj:
Title: Alert
Body: Check logs
Pisz zwięźle
Powiadomienia wyglądają najlepiej, gdy tytuł i treść są jasne i konkretne:
- Tytuły: idealnie 3–8 słów, maksymalnie 20
- Treści: idealnie 1–3 zdania, bez ścian tekstu
- Priorytet: najważniejsze informacje na początku
Ograniczenia powiadomień w iOS:
- Tytuł: około 40 znaków widocznych w widoku zwiniętym
- Treść: około 60 znaków w widoku zwiniętym, więcej po rozwinięciu
Stosuj spójne nazewnictwo
Utrzymuj spójne nazwy zmiennych we wszystkich kanałach:
- Używaj jasnych, opisowych nazw:
server_name, a niesn - Trzymaj się jednej konwencji: snake_case, camelCase albo kebab-case
- Zachowuj spójność w powiązanych ze sobą kanałach
- Udokumentuj oczekiwane zmienne dla członków zespołu
Testuj dokładnie
Sprawdź swoje szablony z różnymi kombinacjami zmiennych, aby mieć pewność, że renderują się zgodnie z oczekiwaniami:
- Przetestuj z kompletem zmiennych
- Przetestuj z brakiem zmiennych opcjonalnych
- Przetestuj ze znakami specjalnymi i Unicode
- Przetestuj z bardzo długimi wartościami
- Przetestuj z pustymi ciągami
- Przetestuj z liczbami, wartościami logicznymi, tablicami i obiektami
Buduj czytelną strukturę
Formatuj treść powiadomienia tak, aby dało się ją szybko przejrzeć wzrokiem:
🚨 Alert: {{alertName}}
━━━━━━━━━━━━━━━
Server: {{server}}
Metric: {{metric}}
Value: {{value}}
Time: {{time}}
━━━━━━━━━━━━━━━
Details: {{message}}
Albo używaj prostych etykiet:
Server: {{server}}
CPU Usage: {{cpu}}%
Memory: {{memory}}%
Status: {{status}}
Wykorzystuj wyrażenia
Używaj wyrażeń, aby pokazywać wartości wyliczone i wyniki porównań:
Title: {{service}} alert — critical: {{severity == "critical"}}
Body: {{metric}} is {{value}} (over threshold: {{value > threshold}})
Wyrażenia porównania i logiczne renderują się jako true lub false; zestawiaj je ze stałym tekstem etykiety, aby nadać im sens.
Pamiętaj o strefach czasowych
Systemowe zmienne czasu podawane są w UTC. Zaznacz to w treści albo przelicz wartości w szablonie:
Alert triggered at {{time}} UTC
Triggered: {{date}} {{time}} (UTC)
Typowe wzorce i przykłady
Monitoring serwerów
Title: {{hostname}} - {{metric}} Alert
Body: {{metric}} on {{hostname}} is at {{value}}{{unit}}
Threshold: {{threshold}}{{unit}}
Time: {{date}} {{time}}
Procesy 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}}
Śledzenie błędów
Title: {{errorType}} in {{service}}
Body: {{errorMessage}}
File: {{filename}}:{{lineNumber}}
User: {{userId}}
Environment: {{environment}}
Funkcje zaawansowane
Szablony odnośników
Skonfiguruj własny szablon odnośnika w zaawansowanych ustawieniach kanału, aby tworzyć klikalne odnośniki w historii powiadomień:
https://dashboard.example.com/orders/{{orderId}}
https://grafana.example.com/d/{{dashboardId}}
https://github.com/{{repo}}/actions/runs/{{runId}}
Jeśli szablon odnośnika nie jest ustawiony, domyślnie zostanie użyta wartość zmiennej externalLink. To wygodny sposób na szybkie przejście z powiadomienia prosto do właściwego pulpitu, logów czy dokumentacji.
Pokazywanie wartości wyliczonych
Szablony nie potrafią rozgałęziać logiki operatorem warunkowym (? :), nie ma też operatora łączenia napisów (+). Zamiast tego wstawiaj wartości i wyniki porównań bezpośrednio, a jako etykiet używaj stałego tekstu:
Online: {{isOnline}}
High severity: {{severity > 5}}
Errors detected: {{count}}
Wyrażenia porównania renderują się jako true lub false. Aby wysyłać naprawdę różne komunikaty w różnych sytuacjach, rozdzielaj wyzwolenia warunkami kanału, zamiast rozgałęziać logikę w jednym szablonie.
Warunki kanału
Poza szablonami treści powiadomienia możesz ustawić w zaawansowanych ustawieniach kanału warunki, które decydują o tym, czy powiadomienie w ogóle ma zostać wysłane. Warunki korzystają z tej samej składni wyrażeń (bez nawiasów klamrowych).
Na przykład, aby wysyłać powiadomienia tylko dla kwot powyżej progu:
amount > 100
status == "critical"
temperature > 30 && location == "datacenter"
Zapobiega to zmęczeniu alertami, odfiltrowując mniej istotne zdarzenia jeszcze przed wysłaniem powiadomienia. Więcej w przewodniku po warunkach.
Powiązana dokumentacja
- Integracja przez webhooki — dowiedz się, jak przekazywać zmienne przez webhooki
- Wyzwalacze e-mail — zmienne dostępne przy wyzwalaczach e-mail
- Warunki — filtruj powiadomienia wyrażeniami warunkowymi
- Pierwsze kroki — skonfiguruj swój pierwszy kanał z szablonami
Rozwiązywanie problemów
Szablon nie podstawia zmiennych:
- Sprawdź, czy nazwy zmiennych zgadzają się dokładnie (wielkość liter ma znaczenie)
- Upewnij się, że zmienne są przekazywane w wyzwalaczu webhook lub e-mail
- Zacznij od prostych zmiennych, a złożoność dokładaj później
Zmienne wyświetlają się jako puste:
- Potwierdź, że zmienna faktycznie występuje w danych wyzwalacza
- Poszukaj literówek w nazwach zmiennych
- Sprawdź strukturę JSON przy właściwościach zagnieżdżonych
Błędy w wyrażeniach:
- Zweryfikuj składnię, zaczynając od prostych wyrażeń
- Zadbaj o poprawne odstępy wokół operatorów
- Sprawdź, czy dostęp do właściwości używa poprawnej składni
Potrzebujesz pomocy? Zajrzyj do centrum wsparcia lub napisz na echobell@weelone.com.
Szablony to skuteczny sposób na tworzenie dynamicznych, treściwych powiadomień, które dają odbiorcom dokładnie te informacje, których potrzebują, i to wtedy, gdy są potrzebne. Zacznij od zwykłego podstawiania zmiennych, a potem stopniowo dodawaj wyrażenia i logikę warunkową, budując coraz bardziej dopracowany system powiadomień.