ntfy: własny darmowy system powiadomień

ntfy to prosta i darmowa usługa powiadomień PUSH oparta na protokole HTTP. Umożliwia wysyłanie powiadomień na telefon i komputer za pomocą skryptów z dowolnego systemu operacyjnego. Usługa działa całkowicie bez rejestracji i skomplikowanej konfiguracji. Jest to również oprogramowanie typu open source. Jako serwera pośredniczącego możesz używać darmowego ogólnodostępnego rozwiązania lub uruchomić własne rozwiązanie. Największym plusem ntfy jest możliwość wysyłania powiadomień PUSH na urządzenia mobilne lub pulpit komputera. Jak uruchomić własny serwer? W jaki sposób wysyłać powiadomienia ntfy? Sprawdzone sposoby znajdziecie poniżej.

Wpis nie ma na celu powielać świetnej dokumentacji projektu ntfy, chcielibyśmy Wam pokazać najprostszy sposób na wdrożenie powiadomień z użyciem darmowego publicznego i własnego serwera.
Jak działa ntfy ? Publikowanie wiadomości może odbywać się za pomocą metody PUT lub POST. Jak wiecie obie są szeroko dostępne w praktycznie każdym systemie operacyjnym, klient wysyła wiadomość na serwer do określonego tematu/wątku. Jeżeli temat/wątek jest subskrybowany przez klienta otrzymuje on wiadomość w tym temacie. Wiadomość może być tekstowa, z grafiką ikonami, linkami – co najważniejsze klient otrzymuje powiadomienie PUSH co w przypadku urządzeń mobilnych jest największym plusem (kto próbował zrobić własną aplikacje ten wie ile zabawy jest wymagane aby google czy apple pozwoliło na wysyłanie powiadomień na smartfona). Wspierany jest Android i iOS, wystarczy wybrać serwer, wskazać temat… Prawda że proste?

Darmowy serwer ma swoje ograniczenia, pamiętajcie też że każdy kto zna nazwę tematu waszych powiadomień może się w darmowej wersji do niego podłączyć.

Można również postawić swój hosting (dowolny vps, aws, azure czy własny onprem) i przekierować na niego domenę – wtedy z prywatnością jest lepiej ale dochodzą nam koszty utrzymania.

Dokumentacja całego projektu jest naprawdę świetna i to dzięki niej powstał ten wpis.

Przechodzimy na ntfy.sh i tworzymy sobie unikalny temat naszych powiadomień np sprawdzoneit nasz serwer to nttfy.sh adresem subskrypcji będzie więc ntfy.sh/sprawdzoneit

Po wprowadzeniu tego adresu w przeglądarce od razu widzimy zawartość naszego tematu, pierwszą wiadomość wyślemy właśnie tutaj:

aby włączyć powiadomienia w systemie Windows wystarczy ze zgodnie z komunikatem zezwolić na nie w naszej przeglądarce:

wysyłamy drugie powiadomienie i w naszym systemie operacyjnym otrzymujemy:

nasz temat na ntfy wygląda z powiadomieniami tak:

Jak wysłać powiadomienie z wiersza poleceń? W Linuxie bardzo prosto:

curl -d "Testowe powiadomienie" ntfy.sh/sprawdzoneit

i w naszym temacie pojawia się:

Zapomniałbym o kliencie mobilnym pobranym na nasze urządzenie mobilne, tam też subskrybujemy temat i w tej chwili mamy już:

Oczywiście powiadomienia były typu PUSH więc pojawiły się od razu w systemie naszego smartfona.

Wróćmy do wysyłania powiadomień z wiersza poleceń, pora na PowerShell:

#ntfy.sh PowerShell 

$uri = "https://ntfy.sh/sprawdzoneit"
$body = "Powiadomienie z PowerShell"              
Invoke-RestMethod -Method 'Post' -Uri $uri  -Body $body -UseBasicParsing

Powiadomienie PUSH:

a tak wygląda powiadomienie w naszym temacie:

Zatem podstawy za nami, wszystko działa błyskawicznie i naprawdę sprawnie, darmowy serwer ma pewne ograniczenia w tym dotyczące prywatności. Wystarczy jednak losowa nazwa tematu.

ntfy.sh ma jednak dużo więcej opcji, niektóre powiadomienia mogą być ciche, mogą zawierać odpowiednie tagi, obrazy czy link. I to właśnie tutaj pojawia się sens zastosowania tego narzędzia.

Przykładowo wykonujemy cyklicznie zadania backupu skryptem PowerShell, chcemy być poinformowani o ewentualnych błędach w jego wykonaniu. Zadania wykonane z powodzeniem mają być tylko ewidencjonowane w naszym temacie. Budzić i alarmować mają nas tylko problemy np z powodu braku miejsca.

Poniżej przykład takiego skryptu, wystarczy po naszym głównym poleceniu umieścić warunek sprawdzający poprawność wykonania. Poprzedzimy go niezbędnymi zmiennymi, zadania backupu z róznych środowisk możemy wrzucać w jeden temat identyfikując je nazwą klienta i jego maszyny. Sprawdzony przykład poniżej:

# send a massage confirmation with ntfy.sh
# sprawdzone.it


# skrypt backupu
#........


#client name form massage tag
$client = "client name"

#job name for massage body
$jobname = "backup sql"

#get machine name for massage title
$machine = $env:COMPUTERNAME

#make title for massage
$title = $machine


#test is job OK ?
 if ($? -eq $true)
     {
        #if OK
        $uri = "https://ntfy.sh/sprawdzoneit"
        $headers = @{ Title=$title
                      Priority="low"
                      Tags="$client, information_source" }
        $body = "Job: "+$jobname+" is OK go sleep!"              
        Invoke-RestMethod -Method 'Post' -Uri $uri -Headers $headers -Body $body -UseBasicParsing
     }
 else 
     {
        #if not OK
        $uri = "https://ntfy.sh/sprawdzoneit"
        $headers = @{ Title=$title
                      Priority="high"
                      Tags="$client, warning" }
        $body = $jobname+" is not OK, pls check!"              
        Invoke-RestMethod -Method 'Post' -Uri $uri -Headers $headers -Body $body -UseBasicParsing
     }

Jeżeli zadanie się wykona poprawnie w naszym temacie pojawi się następujące powiadomienie:

Jeżeli natomiast zadanie skończy się z błędem, wtedy nasz alert PUSH będzie „głośny”, telefon na pewno nas powiadomi:

Jak zauważyliście parametrów dotyczących definicji powiadomienia jest sporo – odsyłam raz jeszcze do dokumentacji. Rozwiązanie sprawdza się doskonale nawet w swoim darmowym wydaniu. Istnieją opcje logowania i zabezpieczeń, logowania czy przechowywania przesłanych załączników.