Alerty SMS z Uptime Kuma i Grafany z własnego numeru
Sprawdzone z dokumentacją:
W Uptime Kuma dodajesz powiadomienie typu Webhook: Post URL https://smsportal.app/api/v1/gateway/send-sms, Request Body ustawione na Custom Body z JSON-em recipients i message, a w Additional Headers x-api-key oraz Content-Type: application/json. Grafana 12 i Healthchecks.io robią to samo swoim webhookiem. Alert wychodzi SMS-em z Twojego telefonu z Androidem.
Czego potrzebujesz
- Uptime Kuma 1.23 lub nowszy (opcja Custom Body w powiadomieniu Webhook).
- Dla Grafany: Grafana 12 lub nowsza na własnym serwerze (Extra Headers i Custom Payload w kontakcie Webhook).
- Konto smsportal z podłączonym telefonem z Androidem i kartą SIM oraz klucz API (Klucze API → Wygeneruj klucz API).
- Narzędzie monitorujące działa poza serwerem, który pilnuje (inaczej padnie razem z nim).
Jak wysłać alert SMS z Uptime Kuma
Utwórz powiadomienie Webhook
W Uptime Kuma otwórz Settings → Notifications → Set Up Notification. Notification Type: Webhook, Friendly Name np.
SMS smsportal, Post URL:https://smsportal.app/api/v1/gateway/send-sms. Jeśli Twoja wersja ma pole HTTP Method, zostaw POST.Wklej własne ciało
W Request Body wybierz Custom Body i wklej szablon. Buduje krótki tekst
DOWN: nazwa - powódalboUP: ..., a filtrjsonzamienia go na poprawny ciąg JSON, więc cudzysłów w nazwie monitora nie zepsuje żądania. Tekst jest przycinany do 160 znaków.Custom Body{% capture text %}{% if heartbeatJSON %}{% if heartbeatJSON.status == 0 %}DOWN{% else %}UP{% endif %}: {{ monitorJSON.name }} - {{ heartbeatJSON.msg }}{% else %}{{ msg }}{% endif %}{% endcapture %} { "recipients": ["+48600100200"], "message": {{ text | strip | truncate: 160 | json }} }Dodaj nagłówki
Włącz Additional Headers i wklej JSON poniżej.
Content-Typejest potrzebny: Uptime Kuma wysyła Custom Body jako zwykły tekst bez typu JSON i bez tego nagłówka API nie odczyta pólrecipientsimessage.Additional Headers{ "x-api-key": "TWOJ_KLUCZ_API", "Content-Type": "application/json" }Przetestuj i przypisz do monitorów
Kliknij Test: przyjdzie SMS
SMS smsportal Testing. Zapisz. Default enabled włącza powiadomienie w nowych monitorach, a Apply on all existing monitors w istniejących. W monitorze ustaw Retries na 1 lub 2, żeby chwilowa czkawka nie budziła Cię w nocy.Grafana: kontakt Webhook
W Grafanie otwórz Alerting → Contact points → Add contact point, Integration: Webhook, URL jak wyżej. W Optional Webhook settings dodaj w Extra Headers nagłówek
x-api-keyz kluczem, a w Custom Payload wklej szablon do Payload Template. Kontakt podepnij w Notification policies. W Grafana Cloud Custom Payload nie jest jeszcze ogólnie dostępny: tam wyślij webhook do n8n i stamtąd SMS.Grafana: Payload Template{{ coll.Dict "recipients" (coll.Slice "+48600100200") "message" (printf "Grafana %s: %s" (toUpper .Status) .CommonLabels.alertname) | data.ToJSON }}Healthchecks.io: integracja Webhook
W projekcie otwórz Integrations → Webhook. W sekcji Execute when a check goes down wybierz POST, wpisz URL API i wypełnij Request Body oraz Request Headers (jeden nagłówek w linii). Sekcję dla stanu up możesz zostawić pustą.
$NAMEto nazwa checka: nie używaj w niej cudzysłowu, bo zepsuje JSON.Healthchecks.io: ciało i nagłówkiRequest Body: {"recipients": ["+48600100200"], "message": "Healthchecks: $NAME nie zgłosił się na czas"} Request Headers: x-api-key: TWOJ_KLUCZ_API Content-Type: application/json
Gotowe scenariusze
Sklep albo strona nie odpowiada
Monitor HTTP w Uptime Kuma sprawdza stronę co minutę. Po nieudanych próbach (Retries) wychodzi SMS
DOWN, a po naprawieUP. Uptime Kuma postaw na innym serwerze niż sklep, np. na małym VPS-ie.Grafana: dysk, błędy 5xx, kolejka
Reguła alertu w Grafanie (np. wolne miejsce poniżej 10%) wysyła SMS z nazwą alertu i stanem
FIRINGalboRESOLVED. Jeśli nie chcesz SMS-a o rozwiązaniu, włącz Disable resolved message w kontakcie.Nocna kopia zapasowa się nie zgłosiła
Skrypt kopii po udanym przebiegu wywołuje adres pingu Healthchecks.io. Gdy ping nie przyjdzie na czas, Healthchecks.io wysyła SMS. Dowiesz się rano, a nie w dniu, w którym kopia będzie potrzebna.
Błędy i rozwiązania
- Test zwraca 401
- Przyczyna: Brak nagłówka
x-api-key, błędny klucz albo nagłówekAuthorizationzamiastx-api-key. - Co zrobić: Sprawdź Additional Headers. Jeśli Uptime Kuma pisze
Additional Headers is not a valid JSON, popraw cudzysłowy i przecinki w JSON-ie. - Test zwraca 400
- Przyczyna: Brak
Content-Type: application/json, więc API nie widzi pól, albo w panelu nie ma włączonego telefonu. - Co zrobić: Dodaj
Content-Typedo Additional Headers (w Healthchecks.io do Request Headers). W panelu sprawdź, czy telefon jest włączony. - Test działa, ale przy awarii nie ma SMS-a
- Przyczyna: Powiadomienie nie jest zaznaczone w monitorze.
- Co zrobić: W edycji monitora zaznacz powiadomienie w sekcji Notifications albo użyj Apply on all existing monitors.
- W Grafanie nie ma Custom Payload ani Extra Headers
- Przyczyna: Grafana starsza niż 12 albo Grafana Cloud, gdzie Custom Payload nie jest jeszcze ogólnie dostępny.
- Co zrobić: Zaktualizuj Grafanę albo wyślij domyślny webhook do n8n, wyciągnij
titlei zbuduj SMS węzłem HTTP Request. - SMS przychodzi z dużym opóźnieniem albo wcale
- Przyczyna: Telefon-bramka był offline. Wiadomość czeka w kolejce do 72 godzin, a potem wygasa.
- Co zrobić: Trzymaj telefon na ładowarce, z wyłączoną optymalizacją baterii. Zostaw drugi kanał (e-mail, Telegram) w tym samym monitorze.
Najczęstsze pytania
Czy SMS dojdzie, gdy padnie mój serwer albo internet w biurze?
Tak, jeśli narzędzie monitorujące działa gdzie indziej. Telefon-bramka to osobne urządzenie na danych komórkowych, więc awaria serwera czy biurowego łącza go nie dotyczy. Musi mieć zasilanie i zasięg.
Czy to zastąpi pager albo system dyżurów?
Nie. Jeden telefon to jeden punkt awarii i nie ma eskalacji ani potwierdzania alertów. Traktuj SMS jako jeden z kanałów i dodaj drugi, np. e-mail albo Telegram.
Ile SMS-ów zużyją alerty?
Każda zmiana stanu to jeden SMS na odbiorcę (DOWN i UP to dwa). Pakiet Free ma 300 SMS-ów miesięcznie, Pro 3000. Ustaw Retries, żeby krótkie przerwy nie zjadały limitu. Za SMS płacisz operatorowi w ramach abonamentu karty SIM.
Czy mogę wysłać alert do kilku osób?
Tak. Wpisz kilka numerów w `recipients`, np. `["+48600100200", "+48600100201"]`. Każdy dostanie osobny SMS z Twojego numeru.
Dlaczego mój SMS ma tylko 70 znaków na część?
Polskie znaki albo emotka przełączają kodowanie na UCS-2 i limit spada ze 160 do 70 znaków na część. Szablon w przepisie unika emotek, ale nazwy monitorów z polskimi znakami nadal zmienią kodowanie.
Źródła
- Uptime Kuma: kod powiadomienia Webhook (GitHub)
- Grafana: Configure webhook notifications
- Healthchecks.io: Configuring Notifications
- Healthchecks.io: kod integracji Webhook (GitHub)
- smsportal: dokumentacja API
Więcej w poradnikach
Wyślij pierwszego SMS-a jeszcze dziś
Załóż darmowe konto, podłącz telefon i sprawdź, jak klienci reagują na wiadomości z Twojego numeru.