Czemu zdecydowałem się na wysyłanie powiadomień via Telegram? Kiedyś wysyłałem SMSy z powiadomieniami, nawet zrobiłem skrypt do wygodnej wysyłki SMSów z CLI. Czasy trochę się zmieniły, telefony zostały zastąpione smartfonami. Po co płacić za SMSy, kiedy można wysłać powiadomienie inaczej, w dodatku za darmo? Wybrałem powiadomienia wysyłane przez Telegram.
Oczywiście istnieją inne metody. Zawsze można było wysyłać maile, które są co prawda darmowe, ale z założenia miewają opóźnienia. No i niekoniecznie chcemy dostawać powiadomienie na telefonie o każdym mailu. Gdy rozpoznawałem temat obiecująco wyglądały natywne powiadomienia push na telefon, ale ich uruchomienie nie jest proste. I nie do końca są darmowe, jak widać.
Znajomi zachwalali Telegram i jego możliwości, jeśli chodzi o tworzenie botów. Nawet kiedyś podchodziłem do uruchomienia bota Telegram, ale wydało mi się to wtedy skomplikowane. I samo stworzenie bota, i sama interakcja. Czyli wysłanie komendy, by coś wykonał i odesłał wynik. Dodatkowo nie ma czegoś takiego jak prywatny bot, a uwierzytelnianie czy też sprawdzanie nadawcy trzeba robić samodzielnie. Przynajmniej tak wyczytałem w necie. Może jestem przewrażliwiony, ale za bardzo to wszystko pachniało mi RCE. No i w końcu stawianie bota, gdy zależy tylko na prostych powiadomieniach, to overkill.
Wczoraj odświeżyłem temat i… okazało się, że wysłanie powiadomienia przez Telegram jest proste. I w sumie nie potrzeba żadnych bibliotek, by wysłać powiadomienie – wystarczy tak naprawdę curl.
Przygotowanie wysyłki powiadomień przez Telegram
Aby wysyłać wiadomości, potrzebne są nam dwie rzeczy: TOKEN oraz CHATID.
- Korzystając z bota BotFather w Telegramie stwórz swojego bota[1] (/newbot)
- Zapisz otrzymany TOKEN (np. 1234567890:AABBccddeeff-ABCDEFGHIJabcdefghi12)
- Znajdź swojego bota, wpis /start
- Przejdź na
https://api.telegram.org/bot<yourtoken>/getUpdates
W naszym przypadku nahttps://api.telegram.org/bot1234567890:AABBccddeeff-ABCDEFGHIJabcdefghi12/getUpdates
- Znajdź ciąg „id” dla „from” (np. „id”:723456789). Wartość jest szukanym CHATID.
Wysyłka powiadomień przez Telegram
Najprostszym wariantem wysłania powiadomienia jest wywołanie curl w postaci
curl "https://api.telegram.org/botTOKEN/sendMessage?chat_id=CHATID&parse_mode=Markdown&text=WIADOMOŚĆ"
Czyli na przykład, dla powyższych danych uzyskanych podczas konfiguracji
curl "https://api.telegram.org/bot1234567890:AABBccddeeff-ABCDEFGHIJabcdefghi12/sendMessage?chat_id=723456789&parse_mode=Markdown&text=to jest test śćżń ĄŁĘĆ https://zakr.es/"
Po wydaniu tego polecenia powinniśmy otrzymać na w kliencie Telegram telefonie wiadomość. Dodatkowo z klikalnym linkiem.
Nieco bardziej eleganckie, użyteczne i tylko odrobinę bardziej skomplikowane jest wysyłanie przy pomocy Pythona i biblioteki requests. Zostało ono opisane opisane we wpisie How to create a telegram bot and send messages with Python, który był bezpośrednią inspiracją tego wpisu. Znajdziecie tam również dokładną, ilustrowaną instrukcję konfiguracji bota. A o samych botach Telegram może będzie innym razem.
[1] Owszem, miało być bez bota. Ale się nie da – bot musi być. Nie musi obsługiwać żadnych komend ani wdawać się w interakcje, ale ten twór jest tak naprawdę telegramowym botem.
W sumie to pytanie: do czego używasz tego bota Telegrama?
Powiadomień, znaczy, bo bota jako bota nie ma. Do tego wszystkiego, do czego używałem lub używam SMSów i maili. Monitoring systemów głównie. Wiem, że prywatne i hobbystyczne, ale lubię jak działa. Kiedyś nie miałem nic, potem dorobiłem monitoring czy maszyna/strona żyje. Teraz zagęściłem zasoby (VPS wypchany kontenerami) i mam prosty monitoring proaktywny (np. zajętość dysku, RAM) i działa bardzo fajnie. Daje znać o potencjalnych problemach na długo nim maszyna padnie. Może kiedyś opiszę.
Także powiadomienia o innych rzeczach sprawdzanych własnymi skryptami. Np. o pojawieniu się pewnych informacji na innych stronach. O podłączeniu określonego urządzenia do sieci domowej. Takie trochę ITTT. Jak ktoś gra na giełdzie czy kryptowalutach mógłby sobie zapiąć alerty na kurs.
A wysyłam sobie różne powiadomienia, takie dla których email to za wolno/za mało inwazyjnie. Generalnie: zamiast SMSów.
A dałoby się zrobić tak, żeby wysyłać zainteresowanym czytelnikom powiadomienia o nowych wpisach przez Telegram zamiast RSS? (A może nie „zamiast” tylko „równolegle z”). Jeżeli tak, jak wyglądałaby kwestia sybskrypcji? Osobny kanał? Temat w sumie ciekawy.
Technicznie to na pewno by się dało. Ale nie chce mi się pisać tego. Tj. w ogóle nie czuję potrzeby.
Zresztą chyba bardziej „telegramowo” byłoby założyć kanał na Telegramie dla bloga i tam wysyłać powiadomienia o nowych.
Tak czy inaczej, obie rzeczy wydaje się potrafić ten plugin: https://wordpress.org/plugins/wptelegram/