Przejdź do głównej zawartości

Gotowy workflow: poranny brief na Telegram

Gotowy workflow · po Module 2Czas czytania: ~10 minWdrożenie: ~20-30 min

Zamiast rano samemu sprawdzać prognozę pogody w osobnej aplikacji, dostajesz jedną wiadomość na Telegramie: dzisiejsza temperatura i szansa na opady. To gotowy, minimalny przykład takiego briefu do pobrania - złożysz go z czterech node'ów, które już częściowo znasz z Moduł 2: Interfejs i 1. workflow. Zero kluczy API, zero logowania OAuth - tylko import, kilka pól do uzupełnienia i aktywacja. Gotowiec łatwo rozbudować - pogodę możesz uzupełnić o kalendarz czy listę zadań, pokazuję jak w sekcji "Jak to rozbudować" niżej.

  • Poziom: wystarczy ukończony Moduł 2: Interfejs i 1. workflow - znasz kanwę, panel node'ów i umiesz aktywować workflow. Wyrażeń (Moduł 3) i OAuth2 (Moduł 4) tu nie potrzebujesz.
  • Działająca instancja n8n - Cloud albo self-hosted, patrz Moduł 1: Instalacja i hosting.
  • Konto Telegram - do założenia własnego bota przez BotFather (pokażę krok po kroku).
  • ~20-30 minut na import, uzupełnienie pól i pierwszy test.

Świadomie zero kluczy API do pogody i zero OAuth2 - Open-Meteo (dostawca prognozy) działa bez rejestracji, a jedyne poświadczenia w całym workflow to token bota Telegram.

Cztery node'y od triggera czasowego po wysyłkę wiadomości - dokładnie tyle potrzeba do porannego briefu.

Cały workflow w formacie JSON, gotowy do zaimportowania: poranny-brief-telegram.json.

  1. Pobierz plik poranny-brief-telegram.json (link wyżej).
  2. W edytorze n8n kliknij ikonę trzech kropek (...) w prawym górnym rogu paska nawigacji i wybierz Import from File, a następnie wskaż pobrany plik. Dokładny opis tej ścieżki znajdziesz w dokumentacji eksportu i importu.
  3. Uzupełnij trzy placeholdery, zanim uruchomisz workflow - patrz tabela niżej.
Placeholder Gdzie Co wpisać
TWOJA_SZEROKOSC node Pobierz pogodę (HTTP Request, pole URL) szerokość geograficzna Twojej miejscowości
TWOJA_DLUGOSC node Pobierz pogodę (HTTP Request, pole URL) długość geograficzna Twojej miejscowości
TWOJ_CHAT_ID node Wyślij na Telegram (Telegram, pole Chat ID) ID czatu, na który ma trafić brief

Na koniec podepnij pod node'em Telegram swoje credentials (bota założonego przez BotFather, patrz krok 4 niżej) - bez tego node zgłosi błąd uwierzytelniania przy pierwszym uruchomieniu.

Jeśli wolisz zbudować workflow od zera zamiast tylko edytować zaimportowany plik - poniżej masz każdy node z dokładnymi wartościami.

Dodaj node Schedule Trigger (tak samo jak w Moduł 2: Interfejs i 1. workflow). Ustaw Trigger Interval na Days, Trigger at Hour na 7, a Trigger at Minute na 0. Ten node wystartuje cały przepływ raz dziennie, o Twojej porannej porze.

Dodaj node HTTP Request, metoda GET, a w polu URL wklej:

https://api.open-meteo.com/v1/forecast?latitude=TWOJA_SZEROKOSC&longitude=TWOJA_DLUGOSC&daily=temperature_2m_max,temperature_2m_min,precipitation_sum&timezone=auto

Podmień TWOJA_SZEROKOSC i TWOJA_DLUGOSC na współrzędne swojej miejscowości - znajdziesz je np. w Google Maps (kliknij prawym przyciskiem na swoją lokalizację). Parametr daily mówi Open-Meteo, jakich wartości oczekujesz (maksymalna i minimalna temperatura dnia oraz suma opadów), a timezone=auto każe dopasować dobę do strefy czasowej wynikającej ze współrzędnych, a nie do UTC. Zero kluczy, zero rejestracji - tak działa dokumentacja API Open-Meteo dla użytku niekomercyjnego.

Nadaj node'owi czytelną nazwę Pobierz pogodę zamiast domyślnego "HTTP Request" - dokładnie tak nazywa się ten sam node w gotowym pliku JSON do importu, a i tak przyda Ci się w sekcji "Co może pójść nie tak" niżej. To ta sama zasada czytelnych nazw node'ów, którą poznałeś w Moduł 2: Interfejs i 1. workflow.

Dodaj node Edit Fields (Set) i utwórz jedno pole tekstowe o nazwie wiadomosc. Jako wartość wpisz wyrażenie (przełącz pole w tryb Expression):

Dzień dobry! Dzisiejsza pogoda: od {{ $json.daily.temperature_2m_min[0] }}°C do {{ $json.daily.temperature_2m_max[0] }}°C, opady: {{ $json.daily.precipitation_sum[0] }} mm. Miłego dnia!

To najprostsza możliwa forma wyrażenia - {{ }} po prostu wstawia wartość pola z danych poprzedniego node'a w miejsce nawiasów. $json.daily.temperature_2m_min[0] czyta pierwszą (jedyną, bo pytamy tylko o dziś) wartość z tablicy temperature_2m_min w odpowiedzi Open-Meteo. Skąd biorą się takie ścieżki i co jeszcze można nimi zrobić, pokazuję w Moduł 3: Praca z danymi - tu wystarczy skopiować wzorzec.

  1. Otwórz w Telegramie rozmowę z @BotFather i wyślij komendę /newbot.
  2. Podaj nazwę bota (wyświetlaną w Telegramie) oraz jego nazwę użytkownika - musi mieć 5-32 znaki, składać się z liter łacińskich, cyfr i podkreśleń, i kończyć się na "bot".
  3. BotFather odpowie tokenem dostępu (Access Token) - długim ciągiem znaków. Skopiuj go, to jedyne poświadczenie, jakiego potrzebujesz w tym workflow.

Zweryfikowane w dokumentacji credentials Telegram w n8n oraz oficjalnej dokumentacji BotFather.

Zanim bot Cię odnajdzie, to Ty musisz odnaleźć jego rozmowę - Telegram wprost zastrzega, że boty nie mogą same rozpoczynać rozmowy z użytkownikiem, dopóki ten nie doda ich do grupy albo nie napisze do nich pierwszy. Otwórz w Telegramie czat ze swoim nowym botem i wyślij dowolną wiadomość, np. /start.

Następnie w przeglądarce otwórz adres (podmieniając TWÓJ_TOKEN na token od BotFather):

https://api.telegram.org/bot<TWÓJ_TOKEN>/getUpdates

W zwróconym JSON-ie znajdź pole chat i w nim id - to jest Twój Chat ID (liczba, czasem ujemna dla grup). Metoda getUpdates to standardowa część Telegram Bot API, nie coś specyficznego dla n8n.

Dodaj node Telegram, podłącz credentials z tokenem z kroku 4 (Access Token), ustaw Resource na Message i Operation na Send Message. W polu Chat ID wklej numer z kroku 5, a w polu Text wpisz wyrażenie {{ $json.wiadomosc }} - to pole złożone w poprzednim node.

Na koniec przełącz Active w prawym górnym rogu edytora - dokładnie ten sam przełącznik, który poznałeś w Moduł 2: Interfejs i 1. workflow. Bez aktywacji Schedule Trigger nie uruchomi się sam o 7:00 - zadziała tylko wtedy, gdy klikniesz Execute workflow ręcznie.

Bot milczy, mimo że workflow zakończył się bez błędu

Dział zatytułowany „Bot milczy, mimo że workflow zakończył się bez błędu”
  • Objaw: node Telegram kończy się błędem, a na Telegramie nic nie przychodzi.
  • Przyczyna: bot nigdy nie dostał od Ciebie wiadomości - Telegram wprost zastrzega, że boty nie mogą pierwsze pisać do użytkowników (błąd wygląda np. tak: Forbidden: bot can't initiate conversation with a user).
  • Naprawa: otwórz w Telegramie czat z botem i wyślij /start, dopiero potem uruchom workflow ponownie.

Brief nie przychodzi wcale, mimo że test ręczny działa

Dział zatytułowany „Brief nie przychodzi wcale, mimo że test ręczny działa”
  • Objaw: minęła 7:00, na Telegramie cisza, ale kliknięcie Execute workflow w edytorze działa bez zarzutu.
  • Przyczyna: workflow nie jest aktywny - Schedule Trigger reaguje samodzielnie dopiero po włączeniu workflow.
  • Naprawa: włącz przełącznik Active w prawym górnym rogu edytora (patrz krok 7 wyżej).
  • Objaw: wiadomość przychodzi np. o 13:00 zamiast o 7:00, mimo poprawnych ustawień w Schedule Trigger.
  • Przyczyna: strefa czasowa instancji n8n (zmienna GENERIC_TIMEZONE) różni się od Twojej lokalnej strefy.
  • Naprawa: ustaw GENERIC_TIMEZONE na poziomie instancji albo zmień strefę w Settings workflow (menu trzech kropek na kanwie) - patrz dokumentacja strefy czasowej.
  • Objaw: node Pobierz pogodę kończy się błędem albo zwraca dane bez pól temperature_2m_max / temperature_2m_min.
  • Przyczyna: w URL zostały niepodmienione placeholdery TWOJA_SZEROKOSC / TWOJA_DLUGOSC.
  • Naprawa: wpisz rzeczywiste współrzędne swojej miejscowości w polu URL node'a HTTP Request (nazwanego Pobierz pogodę - patrz krok 2 wyżej).

Ten workflow to celowo minimalny szkielet - masz gdzie go rozwijać, gdy przejdziesz dalej w kursie:

  • Dodaj wydarzenia z Google Calendar - node Google Calendar pokaże dzisiejsze spotkania obok pogody. Wymaga poświadczeń OAuth2, które omawiam w Moduł 4: Integracje i API.
  • Dodaj zadania z Todoist (albo innego menedżera zadań) - podobnie, osobny node i własne OAuth2/API - też temat Moduł 4: Integracje i API.
  • Podsumowanie AI zamiast sztywnego szablonu - zamiast ręcznie składanego tekstu, AI Agent może połączyć pogodę, kalendarz i zadania w jeden naturalny akapit. Pokazuję to w Moduł 6: AI i agenci.

Co warto zapamiętać

  • Cztery node'y - Schedule Trigger, HTTP Request, Edit Fields (Set) i Telegram - wystarczą na kompletny, codzienny brief.
  • Open-Meteo dostarcza prognozę bez klucza API i bez rejestracji przy użytku niekomercyjnym.
  • Bot Telegram nie może napisać pierwszy - zanim uruchomisz workflow, wyślij mu /start.
  • Chat ID znajdziesz przez metodę getUpdates Telegram Bot API, po wcześniejszej wiadomości do bota.
  • Godzina wysyłki zależy od strefy czasowej instancji (GENERIC_TIMEZONE) albo strefy ustawionej w Settings workflow.
  • Workflow trzeba aktywować (Active) - inaczej Schedule Trigger nigdy nie uruchomi się sam.

Ten przykład to jeden z wielu gotowców w kursie - zobacz wszystkie gotowe workflow, jeśli szukasz kolejnych inspiracji do wdrożenia od razu.

Częste pytania

Czy muszę już umieć wyrażenia (expressions), żeby złożyć ten workflow?

Nie - cały workflow używa jednego, bardzo prostego wyrażenia, które tylko wstawia trzy liczby z odpowiedzi API do tekstu wiadomości. Pełne wprowadzenie do wyrażeń, danych i pętli znajdziesz w Module 3: Praca z danymi.

Dlaczego mój bot nie wysyła wiadomości, mimo że workflow zakończył się bez błędu?

Najczęściej dlatego, że bot nigdy nie "poznał" Twojego czatu - Telegram nie pozwala botom pisać pierwszym do użytkownika. Otwórz w Telegramie rozmowę ze swoim botem, wyślij /start, a dopiero potem uruchom workflow ponownie.

Czy Open-Meteo jest naprawdę darmowe i nie wymaga klucza API?

Tak, do użytku niekomercyjnego (m.in. osobistych automatyzacji) Open-Meteo nie wymaga rejestracji ani klucza API - wystarczy zwykłe zapytanie GET ze współrzędnymi. Klucz i osobny adres API są potrzebne dopiero przy zastosowaniach komercyjnych.

Jak zmienić godzinę, o której przychodzi brief?

W node Schedule Trigger zmień pola Trigger at Hour i Trigger at Minute na dowolną porę. Godzina liczy się względem strefy czasowej instancji n8n (zmienna GENERIC_TIMEZONE) albo strefy ustawionej w Settings workflow - nie względem Twojej przeglądarki.

Czy mogę wysyłać brief na czat grupowy zamiast prywatnego?

Tak - dodaj bota do grupy i użyj ujemnego Chat ID grupy zamiast swojego prywatnego numeru. Reszta workflow zostaje bez zmian, bo node Telegram wysyła wiadomość na dowolny poprawny Chat ID, niezależnie czy to osoba, grupa czy kanał.

Co się stanie, jeśli zapomnę aktywować workflow?

Nic się nie wydarzy - Schedule Trigger nie uruchomi się sam, dopóki przełącznik Active w prawym górnym rogu edytora jest wyłączony. To ten sam mechanizm, który poznałeś w Module 2: Interfejs i 1. workflow.

made with ❤️ by aitomate.pl - Łukasz Podgórski