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.

Spam przez telefon

Witamy w XXI w., witamy w roku 2020! Tematem będzie telefoniczny spam. Przygoda z dziś, świeżutka. Zadzwonił telefon, służbowy. Już po numerze wiedziałem, że reklama[1], ale – mimo, że akurat miałem spotkanie w firmie – odebrałem posłuchać, cóż to za garnki czy inna prezentacja tym razem. Zresztą szybciej odebrać niż ma mi brzęczeć, albo zadzwonić za chwilę drugi raz.

Powitał mnie wyluzowany, optymistyczny i lekko entuzjastyczny głos telemarketera, który zaczął coś o wypoczynku. Ten typ, co to słysząc go wiesz, że ciężko będzie przerwać i powiedzieć, że nie jesteś zainteresowany.

Oczywiście nie byłem zainteresowany, ale fart chciał, że coś nam jakby przerwało, nim zdążyłem wyrazić brak zainteresowania. W słuchawce zrobiło się na moment głucho. Wystarczająco, by rozmówca to zauważył, powiedział, że chyba coś przerwało i wrócił. Chyba znowu przerwało, powiedziałem „halo?” i… rozmówca zaczął jakby od początku ostatniego zdania. Ten sam ton, ta sama treść.

No cóż, monotonna praca, wystudiowany układ, czyta ze skryptu. Aż przykro słuchać jak się człowiek marnuje odczytując spam. Tylko, że powiedziałem „halo?” raz jeszcze i… sytuacja się dokładnie powtórzyła. Znowu identyczny tekst, identyczna intonacja. Nabrałem podejrzeń, zacząłem mówić „halo?” i… po paru próbach miałem pewność. To nie człowiek, tylko automat.

Taki nietrywialny, z podpiętym rozpoznawaniem mowy i rozbudowanym skryptem. Słowo kluczowe „halo?” powodowało powrót na początek akapitu. Po dojściu do odpowiedniego momentu chciał potwierdzić, że chodzi o województwo wielkopolskie i ewidentnie czekał na input od użytkownika.

W każdym razie wygląda, że kolejny zawód, w tym przypadku telemarketera, przejmują komputery i sztuczna inteligencja. Zresztą, czytanie przez automaty staje się coraz popularniejsze. Ostatnio prezentację Piotra Koniecznego (tak, tego z niebezpiecznik.pl) na Infoshare także czytał syntezator i nawet nieźle to wychodziło, poza lekko irytującym akcentem. Może będzie o tym wpis, jak się pobawię.

Niemniej co innego synteza mowy z tekstu czyli text to speech, a co innego rozpoznawanie mowy osoby do której się dzwoni czyli speech recognition. Być może nie tylko z prostym skryptem, ale sztuczną inteligencją. W każdym razie następnym razem gdy zadzwoni do was telemarketer, polecam poświecenie chwili na zabawę i przeprowadzenie testu Turinga.

[1] Polecam poczytać opisy, także sąsiednich numerów. Zresztą cała numeracja zaczynająca się od tych sześciu cyfr jest znana i „lubiana”.

UPDATE W rozmowie z czytelnikiem otrzymałem link do wykopu, gdzie jest dokładnie ta sama rozmowa, tylko „czytana” przez „kobietę”. Co zabawne, nabijają się ze słabej inteligencji „telemarketera”. Ach, gdyby wiedzieli, że to nie człowiek…
Zresztą czytam komentarze i nawet już ktoś o tym pisał w komentarzach osiem miesięcy temu. Niestety, użytkownicy Wykopu nie uwierzyli.

Oddzwanianie

Zauważyłem nieodebrane połączenie na jednym z numerów telefonów. Zwykle nie oddzwaniam na nieznane numery, bo albo pomyłka, albo telemarketer. Tym razem miałem jednak powód by przypuszczać, że kontakt był zasadny.

Rzut oka na numer – polska komórka, żadna zagranica. Szybkie sprawdzenie w sieci na portalach zajmujących się zbieraniem informacji o numerach – nienotowany, czyli prawdopodobnie nie telemarketer.

Dzwonię. Odebrał automat i poinformował, że rozmowa jest nagrywana i że dane są przetwarzane zgodnie z zasadami opisanymi na stronie – tu adres podał adres w domenie jednego z banków, zawierający słowo RODO. Czyli wszystko w porządku! Albo… właśnie nie w porządku. Czy podane dane zwiększają bezpieczeństwo? Nie ma informacji, kto jest administratorem danych osobowych, nie ma informacji przez kogo jest przetwarzane. Nie ma nawet jednoznacznej informacji do kogo się dodzwoniłem. Zresztą, w przypadku oszustwa informacja o nagrywaniu rozmowy, dane dotyczące zawartości strony itp. będą zgodne z prawdą i służyć będą tylko wzbudzeniu zaufania.

Owszem, korzystam z usług tego banku. I mają w nim podany ten numer telefonu. Ale to jeszcze o niczym nie świadczy… Tego typu dane oszust może zdobyć z różnych miejsc w sieci albo… po prostu zgadywać numery i podawać się za któryś z popularnych banków. Jeśli bank ma powiedzmy 5% udziału w rynku, to mniej więcej dla takiego odsetka numerów będzie to wyglądało OK. Zapewne przytłaczająca większość błędnych adresatów po prostu zignoruje próbę kontaktu, uzna za pomyłkę, albo nie będzie wiedziała komu zgłosić taką „dziwną sytuację”[1].

Rozłączam, się. Wiem już, o który bank chodzi, znam numer telefonu. Szukam numeru na stronie banku i w wyszukiwarkach. Nie występuje. Nie wygląda to dobrze, więc zakładam roboczo próbę oszustwa i z takim nastawieniem dzwonię ponownie.

Odbiera osoba, która przedstawia się jako pracownik banku. Ja się nie przedstawiam, informuję tylko, że dzwonię, bo miałem nieodebrane połączenie. Moje pierwsze pytanie: jak mogę potwierdzić, że faktycznie jest pracownikiem banku i że to numer należący do banku. Jest nieco zaskoczona, ale podaje informacje, gdzie po zalogowaniu do banku znajdę jej dane i numer.

Proszę o chwilę cierpliwości. Loguję się do banku i sprawdzam w podanym miejscu. Faktycznie, dane się zgadzają. Dziękuję, przedstawiam się i kontynuujemy rozmowę.

Oczywiście dałem znać, czemu uznałem telefon/proces za podejrzany, ale nie bardzo wierzę w jego zmianę. Warto pamiętać, że jeśli sami nie nawiązujemy połączenia pod wybrany przez nas numer, np. wpisany ze strony internetowej instytucji, to nie mamy żadnej gwarancji, z kim rozmawiamy. Uważajmy więc w takiej sytuacji z podawaniem danych – bezpieczeństwo zależy w znacznej mierze od nas samych.

[1] Szczerze mówiąc, sam miałbym z tym problem – można próbować na infolinii instytucji, pod którą ktoś próbuje się podszyć, ale… różnie bywa ze zrozumieniem w czym problem.