Linux i powiadomienia via Telegram – HOWTO

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.

logo Telegram
Źródło: https://www.freepnglogos.com/images/telegram-logo-944.html

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.

  1. Korzystając z bota BotFather w Telegramie stwórz swojego bota[1] (/newbot)
  2. Zapisz otrzymany TOKEN (np. 1234567890:AABBccddeeff-ABCDEFGHIJabcdefghi12)
  3. Znajdź swojego bota, wpis /start
  4. Przejdź na https://api.telegram.org/bot<yourtoken>/getUpdates
    W naszym przypadku na https://api.telegram.org/bot1234567890:AABBccddeeff-ABCDEFGHIJabcdefghi12/getUpdates
  5. 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.

Proporcja

Włączyłem wczoraj radio. Raz jedno, raz drugie. Czyli albo Radio Nowy Świat, albo Radio 357. Tak się złożyło, że w obu było o szczepieniach. Czy szczepimy dostatecznie szybko, czy plany są realne. Brano ilość zaszczepionych, prognozy, średnie. Mądre głowy tłumaczyły, że większe ośrodki mogą szczepić więcej. Że plan jest realny. Takie tam malowanie trawy na zielono.

Ekspertem od logistyki to ja nie jestem. Od zdrowia też zresztą nie. Od statystyki… no powiedzmy, że mam wykształcenie w tym kierunku. Ale tu nie potrzeba wielkiej nauki. Z faktami się nie dyskutuje, a żeby oszacować czas potrzebny na zaszczepienie wystarczy matematyka z zakresu szkoły bodajże średniej. Jeśli nie podstawowej. Czyli tytułowa proporcja.

Wczoraj podawano, że wykonano nieco ponad 300 tys. szczepień. W powiedzmy dwa tygodnie od rozpoczęcia. Przyjmijmy optymistycznie, że chcemy zaszczepić 20 milionów obywateli w Polsce. Czemu tylko tyle? Ano młodzieży nie szczepimy, nie wszyscy będą chcieli się zaszczepić. Części nie musimy na dobrą sprawę, bo zdążą nabyć odporność w sposób naturalny, tj. chorując. Zostańmy przy optymistycznych 20 milionach.

Zadanie maturalne mogłoby brzmieć: jeśli w ciągu dwóch tygodni wykonano 300 tys. osób, ile czasu potrzeba na zaszczepienie 20 milionów obywateli? Policzmy:
20 mln / 300 tys = x / 2
x = 133
133 tygodnie. Czyli dwa i pół roku.

A gdyby ktoś tak odpowiedział na lekcji, to siadaj, pała. Bowiem aby aktualnie używana szczepionka była skuteczna, potrzeba dwóch dawek. Czyli dwa razy więcej szczepień. Czyli dwa razy więcej czasu. To będzie pięć lat. Albo, jak kto woli, 2026.

Oczywiście, wiele rzeczy może się zmienić. Tempo szczepień może wzrosnąć. Może pojawić się szczepionka wymagająca tylko jednej dawki. Z drugiej strony mogą pojawić się problemy z dostawami/produkcją szczepionki. Natomiast patrząc na podstawie dostępnych, realnych danych, do oszacowania czasu potrzebnego na zaszczepienie wystarczy powyższa proporcja.

Gdyby ktoś nie wierzył w tak proste rozwiązania, to jest kalkulator szczepień. Można podać trochę danych i dowiemy się, kiedy mamy szansę na zaszczepienie. Podaje mniej optymistyczne dane, niż te powyżej. Wielką zaletą jest, że udostępnia dane o aktualnym tempie szczepień. Obecnie wynosi ono 208 tys. tygodniowo, więc niby przyspieszyło w stosunku do tego, co przyjąłem na podstawie podawanych wczoraj w radio danych.

UPDATE Dziś w radio afera, że liczba szczepień będzie zmniejszona. Bo dostawca nie dostarczy 360 tys. szczepionek tygodniowo, jak zapowiadał, tylko 176k. Czyli rząd planował wykonywać 850 tys. szczepień tygodniowo, dostając 360 tys. szczepionek? Jak?

Kluby

Zainspirowany aktywnościami na czytanych blogach, zapisałem się ostatnio do klubów. Kluby są dwa: 512 KB oraz 250 KB. Pierwszy dotyczy rozmiaru strony nieskompresowanej, drugi – moim zdaniem istotniejszy – skompresowanej. Znaczy wykonana została optymalizacja WordPress.

Niby nic nowego, bo o optymalizacji strony i poprawnym działaniu na urządzeniach moblilnych pisałem już dawno. Jednak z WordPressa o rozmiarze nieskompresowanym mniejszym niż 512 KB jestem zadowolony. Tym bardziej, że chodzi o wersję z dodatkowymi statystykami Matomo. Okazuje się, że nie potrzeba żadnej magii, by osiągnąć taki wynik. Nawet motyw jest jeden z domyślnych.

Tak, to tylko główna. Poszczególne wpisy są nieco większe. Tak, nie mam obrazków we wpisach. Z obrazkami na głównej byłoby więcej. Z drugiej strony mógłbym zmniejszyć liczbę wpisów. Ale nie o to chodzi, przynajmniej mi. Nie musi być jak najmniej, ważne, by zwrócić uwagę na rozmiar przy zachowaniu wyglądu i funkcjonalności. Czyli żeby nie było bloatu.

Jeśli komuś naprawdę zależy na minimalizacji, to jedynym sensownym kierunkiem wydaje mi się strona statyczna. Statycznych generatorów stron/blogów jest wiele. Podzielone językami i licencjami, czyli dla każdego coś miłego. Do tego lekki motyw i wyniki są nieporównywalnie lepsze. Co można zobaczyć na przykładzie Wattmeter (geneza). Niestety, funkcjonalność jakby nie ta. Przede wszystkim brakuje sensownej możliwości spięcia komentarzy.

Swoją drogą fajnie widać, jak na przestrzeni lat zmieniają się narzędzia do badania optymalizacji strony. Kiedyś korzystałem z surowo wyglądającego webpagetest.org, teraz rządzi znacznie ładniejszy GTmetrix.

Puchną także same strony. Strona główna starego bloga (Jogger.pl) to 27 requestów, 227 KB skompresowane, 674 KB nieskompresowane. Jednak od obu tych wartości należałoby odjąć odpowiednio 152 KB oraz 461 KB związane z reklamami i widgetem wyszukiwarki Google. Czyli zostałoby 75 KB oraz 213 KB, przed jakąkolwiek optymalizacją. Ten blog ma 11 requestów i odpowiednio 102 KB i 334 KB, ale już po optymalizacji. Czyli jakąś połowę więcej.

Optymalizacja WordPress

Do odchudzania strony głównej, czyli optymalizacji WordPressa korzystałem z wtyczki Asset CleanUp. Więcej o polecanych/używanych wtyczkach WordPress pisałem pisałem tu, więc aktualizuję.

Gdyby ktoś chciał powalczyć samodzielnie to poniżej instrukcja, albo raczej krótkie wskazówki na temat tego, co ustawiłem w tej wtyczce. Nie jest to komplet zmian optymalizacyjnych, część rzeczy mogę robić w innych wtyczkach lub samym serwerze WWW. Czyli klasyczne YMMV, a każda zmiana wymaga testów.

  • Optimize CSS – wszystkie opcje włączone. Defer, minimize, cache.
  • Optimize JavaScript – nie dotykany.
  • HTML Source CleanUp – usunięte kilka tagów. Nie podaję które, bo mocno zależy od konfiguracji.
  • Google Fonts – włączone Remove Google Fonts. Widać różnicę w wyglądzie, ale na testach wyszło mi, że jest tylko odrobinę gorzej. Różnica w rozmiarze – znaczna.
  • CSS & JS Manager – ze strony głównej (i tylko z niej!) usunąłem ładowanie plugina Subscribe to Comments Reloaded. Jest potrzebny tylko na stronach wpisów. Podobny los spotkał tam jquery-core oraz jquery-migrate.