3de8812e7fe962c5f478169029bc9370ece91eab
.obsidian/app.json
| ... | ... | @@ -0,0 +1,3 @@ |
| 1 | +{ |
|
| 2 | + "promptDelete": false |
|
| 3 | +} |
|
| ... | ... | \ No newline at end of file |
.obsidian/appearance.json
| ... | ... | @@ -0,0 +1 @@ |
| 1 | +{} |
|
| ... | ... | \ No newline at end of file |
.obsidian/core-plugins.json
| ... | ... | @@ -0,0 +1,33 @@ |
| 1 | +{ |
|
| 2 | + "file-explorer": true, |
|
| 3 | + "global-search": true, |
|
| 4 | + "switcher": true, |
|
| 5 | + "graph": true, |
|
| 6 | + "backlink": true, |
|
| 7 | + "canvas": true, |
|
| 8 | + "outgoing-link": true, |
|
| 9 | + "tag-pane": true, |
|
| 10 | + "footnotes": false, |
|
| 11 | + "properties": true, |
|
| 12 | + "page-preview": true, |
|
| 13 | + "daily-notes": true, |
|
| 14 | + "templates": true, |
|
| 15 | + "note-composer": true, |
|
| 16 | + "command-palette": true, |
|
| 17 | + "slash-command": false, |
|
| 18 | + "editor-status": true, |
|
| 19 | + "bookmarks": true, |
|
| 20 | + "markdown-importer": false, |
|
| 21 | + "zk-prefixer": false, |
|
| 22 | + "random-note": false, |
|
| 23 | + "outline": true, |
|
| 24 | + "word-count": true, |
|
| 25 | + "slides": false, |
|
| 26 | + "audio-recorder": false, |
|
| 27 | + "workspaces": false, |
|
| 28 | + "file-recovery": true, |
|
| 29 | + "publish": false, |
|
| 30 | + "sync": true, |
|
| 31 | + "bases": true, |
|
| 32 | + "webviewer": false |
|
| 33 | +} |
|
| ... | ... | \ No newline at end of file |
.obsidian/workspace.json
| ... | ... | @@ -0,0 +1,235 @@ |
| 1 | +{ |
|
| 2 | + "main": { |
|
| 3 | + "id": "5fe25e20fc615e15", |
|
| 4 | + "type": "split", |
|
| 5 | + "children": [ |
|
| 6 | + { |
|
| 7 | + "id": "ed31e4f56661a548", |
|
| 8 | + "type": "tabs", |
|
| 9 | + "children": [ |
|
| 10 | + { |
|
| 11 | + "id": "1e42444549bf026e", |
|
| 12 | + "type": "leaf", |
|
| 13 | + "state": { |
|
| 14 | + "type": "markdown", |
|
| 15 | + "state": { |
|
| 16 | + "file": "Modul 4 - Integracje z uslugami/1. Webhook.md", |
|
| 17 | + "mode": "source", |
|
| 18 | + "source": false |
|
| 19 | + }, |
|
| 20 | + "icon": "lucide-file", |
|
| 21 | + "title": "1. Webhook" |
|
| 22 | + } |
|
| 23 | + } |
|
| 24 | + ] |
|
| 25 | + } |
|
| 26 | + ], |
|
| 27 | + "direction": "vertical" |
|
| 28 | + }, |
|
| 29 | + "left": { |
|
| 30 | + "id": "02ec691b0bc841cf", |
|
| 31 | + "type": "split", |
|
| 32 | + "children": [ |
|
| 33 | + { |
|
| 34 | + "id": "fa6ca44f6da6a20d", |
|
| 35 | + "type": "tabs", |
|
| 36 | + "children": [ |
|
| 37 | + { |
|
| 38 | + "id": "5ca128c23f44ee36", |
|
| 39 | + "type": "leaf", |
|
| 40 | + "state": { |
|
| 41 | + "type": "file-explorer", |
|
| 42 | + "state": { |
|
| 43 | + "sortOrder": "alphabetical", |
|
| 44 | + "autoReveal": false |
|
| 45 | + }, |
|
| 46 | + "icon": "lucide-folder-closed", |
|
| 47 | + "title": "Przeglądarka plików" |
|
| 48 | + } |
|
| 49 | + }, |
|
| 50 | + { |
|
| 51 | + "id": "25ae1a9876377b5f", |
|
| 52 | + "type": "leaf", |
|
| 53 | + "state": { |
|
| 54 | + "type": "search", |
|
| 55 | + "state": { |
|
| 56 | + "query": "", |
|
| 57 | + "matchingCase": false, |
|
| 58 | + "explainSearch": false, |
|
| 59 | + "collapseAll": false, |
|
| 60 | + "extraContext": false, |
|
| 61 | + "sortOrder": "alphabetical" |
|
| 62 | + }, |
|
| 63 | + "icon": "lucide-search", |
|
| 64 | + "title": "Szukaj" |
|
| 65 | + } |
|
| 66 | + }, |
|
| 67 | + { |
|
| 68 | + "id": "407f83272683fb90", |
|
| 69 | + "type": "leaf", |
|
| 70 | + "state": { |
|
| 71 | + "type": "bookmarks", |
|
| 72 | + "state": {}, |
|
| 73 | + "icon": "lucide-bookmark", |
|
| 74 | + "title": "Ulubione" |
|
| 75 | + } |
|
| 76 | + } |
|
| 77 | + ] |
|
| 78 | + } |
|
| 79 | + ], |
|
| 80 | + "direction": "horizontal", |
|
| 81 | + "width": 300 |
|
| 82 | + }, |
|
| 83 | + "right": { |
|
| 84 | + "id": "066f3f1474fbf334", |
|
| 85 | + "type": "split", |
|
| 86 | + "children": [ |
|
| 87 | + { |
|
| 88 | + "id": "03e6e884d75cc5ee", |
|
| 89 | + "type": "tabs", |
|
| 90 | + "children": [ |
|
| 91 | + { |
|
| 92 | + "id": "62f3b2cf217ed2a1", |
|
| 93 | + "type": "leaf", |
|
| 94 | + "state": { |
|
| 95 | + "type": "backlink", |
|
| 96 | + "state": { |
|
| 97 | + "file": "Modul 2 - Wstep do n8n/Czym różni się trigger od akcji.md", |
|
| 98 | + "collapseAll": false, |
|
| 99 | + "extraContext": false, |
|
| 100 | + "sortOrder": "alphabetical", |
|
| 101 | + "showSearch": false, |
|
| 102 | + "searchQuery": "", |
|
| 103 | + "backlinkCollapsed": false, |
|
| 104 | + "unlinkedCollapsed": true |
|
| 105 | + }, |
|
| 106 | + "icon": "links-coming-in", |
|
| 107 | + "title": "Linki zwrotne do Czym różni się trigger od akcji" |
|
| 108 | + } |
|
| 109 | + }, |
|
| 110 | + { |
|
| 111 | + "id": "88d311d37d30bc7e", |
|
| 112 | + "type": "leaf", |
|
| 113 | + "state": { |
|
| 114 | + "type": "outgoing-link", |
|
| 115 | + "state": { |
|
| 116 | + "file": "Modul 2 - Wstep do n8n/Czym różni się trigger od akcji.md", |
|
| 117 | + "linksCollapsed": false, |
|
| 118 | + "unlinkedCollapsed": true |
|
| 119 | + }, |
|
| 120 | + "icon": "links-going-out", |
|
| 121 | + "title": "Łącza wychodzące z Czym różni się trigger od akcji" |
|
| 122 | + } |
|
| 123 | + }, |
|
| 124 | + { |
|
| 125 | + "id": "34c39f2bdc506c98", |
|
| 126 | + "type": "leaf", |
|
| 127 | + "state": { |
|
| 128 | + "type": "tag", |
|
| 129 | + "state": { |
|
| 130 | + "sortOrder": "frequency", |
|
| 131 | + "useHierarchy": true, |
|
| 132 | + "showSearch": false, |
|
| 133 | + "searchQuery": "" |
|
| 134 | + }, |
|
| 135 | + "icon": "lucide-tags", |
|
| 136 | + "title": "Tagi" |
|
| 137 | + } |
|
| 138 | + }, |
|
| 139 | + { |
|
| 140 | + "id": "7d3fe10a94a96a3d", |
|
| 141 | + "type": "leaf", |
|
| 142 | + "state": { |
|
| 143 | + "type": "all-properties", |
|
| 144 | + "state": { |
|
| 145 | + "sortOrder": "frequency", |
|
| 146 | + "showSearch": false, |
|
| 147 | + "searchQuery": "" |
|
| 148 | + }, |
|
| 149 | + "icon": "lucide-archive", |
|
| 150 | + "title": "Wszystkie atrybuty" |
|
| 151 | + } |
|
| 152 | + }, |
|
| 153 | + { |
|
| 154 | + "id": "afcb5652fc83df54", |
|
| 155 | + "type": "leaf", |
|
| 156 | + "state": { |
|
| 157 | + "type": "outline", |
|
| 158 | + "state": { |
|
| 159 | + "file": "Modul 2 - Wstep do n8n/Czym różni się trigger od akcji.md", |
|
| 160 | + "followCursor": false, |
|
| 161 | + "showSearch": false, |
|
| 162 | + "searchQuery": "" |
|
| 163 | + }, |
|
| 164 | + "icon": "lucide-list", |
|
| 165 | + "title": "Konspekt Czym różni się trigger od akcji" |
|
| 166 | + } |
|
| 167 | + } |
|
| 168 | + ] |
|
| 169 | + } |
|
| 170 | + ], |
|
| 171 | + "direction": "horizontal", |
|
| 172 | + "width": 300, |
|
| 173 | + "collapsed": true |
|
| 174 | + }, |
|
| 175 | + "left-ribbon": { |
|
| 176 | + "hiddenItems": { |
|
| 177 | + "switcher:Otwórz okno szybkiego wyboru": false, |
|
| 178 | + "graph:Otwórz graf": false, |
|
| 179 | + "canvas:Stwórz nową tablicę": false, |
|
| 180 | + "daily-notes:Otwórz codzienną notatkę": false, |
|
| 181 | + "templates:Wstaw szablon": false, |
|
| 182 | + "command-palette:Otwórz listę poleceń": false, |
|
| 183 | + "bases:Stwórz nową bazę danych": false |
|
| 184 | + } |
|
| 185 | + }, |
|
| 186 | + "active": "1e42444549bf026e", |
|
| 187 | + "lastOpenFiles": [ |
|
| 188 | + "Modul 6 - Warsztaty praktyczne/4. Telegram.md", |
|
| 189 | + "Modul 6 - Warsztaty praktyczne/3. Google Sheet.md", |
|
| 190 | + "Modul 6 - Warsztaty praktyczne/2. Pogoda.md", |
|
| 191 | + "Modul 6 - Warsztaty praktyczne/1. ChatBot.md", |
|
| 192 | + "Modul 5 - Implementacja agenta AI/4. Połączenie API i tokeny.md", |
|
| 193 | + "Modul 5 - Implementacja agenta AI/3. Rola promptu w agencie AI.md", |
|
| 194 | + "Modul 5 - Implementacja agenta AI/2. Rola modelu językowego.md", |
|
| 195 | + "Modul 5 - Implementacja agenta AI/1. Czym jest agent AI w kontekście automatyzacji.md", |
|
| 196 | + "Modul 4 - Integracje z uslugami/2.1 GCP Tworzenie porjektu.md", |
|
| 197 | + "Modul 4 - Integracje z uslugami/2. Warsztat GCP.md", |
|
| 198 | + "Modul 4 - Integracje z uslugami/1. Webhook.md", |
|
| 199 | + "Modul 3 - Budujemy pierwsza automatyzacje/Przesłanie pobranych danych do wskazanego miejsca (np. komunikator firmowy).md", |
|
| 200 | + "Modul 3 - Budujemy pierwsza automatyzacje/Utworzenie funkcji harmonogramu (Cron).md", |
|
| 201 | + "Modul 3 - Budujemy pierwsza automatyzacje/Pobranie danych z zewnętrznego serwisu.md", |
|
| 202 | + "Modul 3 - Budujemy pierwsza automatyzacje/Analiza działania i struktury danych.md", |
|
| 203 | + "Modul 2 - Wstep do n8n/Przegląd popularnych node’ów.md", |
|
| 204 | + "Modul 2 - Wstep do n8n/Po co nam n8n.md", |
|
| 205 | + "Modul 2 - Wstep do n8n/Jak działa przepływ (flow → node → dane → kolejny node).md", |
|
| 206 | + "Modul 2 - Wstep do n8n/Interfejs n8n i logika działania.md", |
|
| 207 | + "Modul 2 - Wstep do n8n/Czym różni się trigger od akcji.md", |
|
| 208 | + "Modul 1 - Wprowadzenie do automatyzacji i n8n/Przedstawienie narzędzia n8n.md", |
|
| 209 | + "Modul 1 - Wprowadzenie do automatyzacji i n8n/Jak przeprowadzić automatyzację bez umiejętności programowania.md", |
|
| 210 | + "Modul 1 - Wprowadzenie do automatyzacji i n8n/Czym są systemy automatyzacji no-code.md", |
|
| 211 | + "Modul 1 - Wprowadzenie do automatyzacji i n8n/Co to jest automatyzacja.md", |
|
| 212 | + "grafiki/m4_p1-webhook-title.png", |
|
| 213 | + "grafiki/Gemini_Generated_Image_hiodd9hiodd9hiod.png", |
|
| 214 | + "grafiki/m4_p9-gcp-api-biblioteki.png", |
|
| 215 | + "grafiki/Gemini_Generated_Image_mbs9qbmbs9qbmbs9.png", |
|
| 216 | + "grafiki/m4_p8-gcp-odbiorcy-oauth.png", |
|
| 217 | + "grafiki/Gemini_Generated_Image_uczh8luczh8luczh.png", |
|
| 218 | + "grafiki/m4_p7-gcp-gmail-konfiguracja.png", |
|
| 219 | + "grafiki/Gemini_Generated_Image_eznsuoeznsuoezns.png", |
|
| 220 | + "grafiki/m4_p6-gcp-redirect-uri.png", |
|
| 221 | + "grafiki/Gemini_Generated_Image_l8l89hl8l89hl8l8.png", |
|
| 222 | + "Modul 6 - Warsztaty praktyczne/5. Gemini.md", |
|
| 223 | + "Modul 6 - Warsztaty praktyczne/6. SSH.md", |
|
| 224 | + "Modul 6 - Warsztaty praktyczne/6. SSH", |
|
| 225 | + "Modul 6 - Warsztaty praktyczne/10. ", |
|
| 226 | + "Modul 6 - Warsztaty praktyczne/9. PDF converter", |
|
| 227 | + "Modul 6 - Warsztaty praktyczne/9. ", |
|
| 228 | + "Modul 6 - Warsztaty praktyczne/7. ", |
|
| 229 | + "Modul 6 - Warsztaty praktyczne/6. ", |
|
| 230 | + "Modul 6 - Warsztaty praktyczne/5. ", |
|
| 231 | + "Modul 6 - Warsztaty praktyczne/4. ", |
|
| 232 | + "Modul 6 - Warsztaty praktyczne/3. Sheet", |
|
| 233 | + "Modul 6 - Warsztaty praktyczne/1. ChatBot" |
|
| 234 | + ] |
|
| 235 | +} |
|
| ... | ... | \ No newline at end of file |
Modul 1 - Wprowadzenie do automatyzacji i n8n/Co to jest automatyzacja.md
| ... | ... | @@ -0,0 +1,17 @@ |
| 1 | + |
|
| 2 | +# Co to jest automatyzacja? |
|
| 3 | + |
|
| 4 | +Automatyzacja to proces, w którym powtarzalne zadania i czynności są wykonywane przez systemy lub narzędzia, zamiast przez człowieka. Celem automatyzacji jest oszczędność czasu, ograniczenie błędów oraz zwiększenie efektywności pracy. |
|
| 5 | + |
|
| 6 | +W praktyce automatyzacja polega na: |
|
| 7 | +- Przekazaniu rutynowych obowiązków maszynom lub oprogramowaniu, |
|
| 8 | +- Ustawieniu reguł, które uruchamiają określone działania automatycznie, |
|
| 9 | +- Integracji różnych narzędzi i usług, aby współpracowały bez ręcznej ingerencji. |
|
| 10 | + |
|
| 11 | +Przykłady automatyzacji w firmie: |
|
| 12 | +- Automatyczne wysyłanie powiadomień do zespołu, |
|
| 13 | +- Przenoszenie danych między systemami (np. z formularza do arkusza Google Sheets), |
|
| 14 | +- Tworzenie raportów i podsumowań bez udziału pracownika, |
|
| 15 | +- Wykrywanie i klasyfikacja zgłoszeń klientów przez AI. |
|
| 16 | + |
|
| 17 | +Automatyzacja nie wymaga programowania – dzięki narzędziom no-code (np. n8n) każdy może tworzyć własne automaty, nawet bez wiedzy technicznej. |
|
| ... | ... | \ No newline at end of file |
Modul 1 - Wprowadzenie do automatyzacji i n8n/Czym s\304\205 systemy automatyzacji no-code.md
| ... | ... | @@ -0,0 +1,58 @@ |
| 1 | + |
|
| 2 | + |
|
| 3 | + |
|
| 4 | +Wyobraź sobie, że chcesz zautomatyzować powtarzalne zadania w pracy, ale nie znasz programowania. Systemy no-code pozwalają Ci to zrobić za pomocą prostych, wizualnych narzędzi – wystarczy przeciągnąć odpowiednie bloki i połączyć je w logiczny przepływ. |
|
| 5 | + |
|
| 6 | +**Jak działają?** |
|
| 7 | +- Zamiast pisać kod, korzystasz z gotowych elementów (np. „wyślij e-mail”, „dodaj wiersz do arkusza”, „wyślij powiadomienie na Slacku”). |
|
| 8 | +- Łączysz je w sekwencje, które automatycznie wykonują zadania za Ciebie. |
|
| 9 | +- Możesz integrować różne aplikacje, nawet jeśli pochodzą od różnych producentów. |
|
| 10 | + |
|
| 11 | +--- |
|
| 12 | + |
|
| 13 | +### **Przykłady zastosowań no-code** |
|
| 14 | + |
|
| 15 | +- Automatyczne przesyłanie danych z formularza do arkusza Google Sheets. |
|
| 16 | +- Wysyłanie powiadomień do zespołu, gdy pojawi się nowe zgłoszenie. |
|
| 17 | +- Tworzenie raportów i zestawień bez udziału programisty. |
|
| 18 | +- Integracja narzędzi marketingowych, sprzedażowych i obsługi klienta. |
|
| 19 | +- Synchronizacja plików między różnymi usługami chmurowymi. |
|
| 20 | + |
|
| 21 | +--- |
|
| 22 | + |
|
| 23 | +### **Najpopularniejsze platformy no-code** |
|
| 24 | + |
|
| 25 | +- **Microsoft Power Automate** |
|
| 26 | + - Pozwala automatyzować procesy w ekosystemie Microsoft 365 (Outlook, SharePoint, Teams) i łączyć je z zewnętrznymi usługami. |
|
| 27 | + - Przykład: Automatyczne zapisywanie załączników z maila na SharePoint i powiadamianie zespołu na Teams. |
|
| 28 | + - Gotowe szablony ułatwiają start nawet osobom bez doświadczenia. |
|
| 29 | + |
|
| 30 | +- **Zapier** |
|
| 31 | + - Łączy ponad 5000 aplikacji i pozwala tworzyć „Zaps” – automatyczne przepływy uruchamiane przez wybrane zdarzenia. |
|
| 32 | + - Przykład: Po otrzymaniu nowego wpisu w Google Sheets, wyślij powiadomienie na Slacka. |
|
| 33 | + - Bardzo intuicyjny interfejs, idealny do prostych automatyzacji. |
|
| 34 | + |
|
| 35 | +- **Make (dawniej Integromat)** |
|
| 36 | + - Umożliwia budowanie złożonych automatyzacji z wieloma krokami, warunkami i transformacjami danych. |
|
| 37 | + - Przykład: Pobierz dane z API, przetwórz je i wyślij raport e-mailem. |
|
| 38 | + - Świetny wybór dla osób, które chcą tworzyć bardziej rozbudowane automatyzacje bez programowania. |
|
| 39 | + |
|
| 40 | +- **IFTTT (If This Then That)** |
|
| 41 | + - Proste reguły typu „jeśli X, to Y” – idealne do automatyzacji codziennych czynności i smart home. |
|
| 42 | + - Przykład: Jeśli wyślesz e-mail, automatycznie zapisz załącznik na Dysku Google. |
|
| 43 | + - Bardzo prosty interfejs, szybkie wdrożenie. |
|
| 44 | + |
|
| 45 | +- **n8n** |
|
| 46 | + - Otwarte narzędzie do automatyzacji i integracji, daje dużą elastyczność i kontrolę nad przepływami. |
|
| 47 | + - Przykład: Zbuduj automatyzację, która pobiera dane z różnych źródeł, przetwarza je i wysyła do wybranej aplikacji. |
|
| 48 | + - Możliwość wdrożenia lokalnie lub w chmurze – idealne dla firm dbających o bezpieczeństwo danych. |
|
| 49 | + |
|
| 50 | +--- |
|
| 51 | + |
|
| 52 | +### **Dlaczego warto korzystać z no-code?** |
|
| 53 | + |
|
| 54 | +- Oszczędność czasu i pieniędzy – nie musisz zatrudniać programisty. |
|
| 55 | +- Szybkie wdrożenie automatyzacji nawet przez osoby nietechniczne. |
|
| 56 | +- Łatwość modyfikacji i skalowania rozwiązań. |
|
| 57 | +- Integracja z wieloma popularnymi aplikacjami i usługami. |
|
| 58 | +- Większa innowacyjność i elastyczność w codziennej pracy. |
|
| ... | ... | \ No newline at end of file |
Modul 1 - Wprowadzenie do automatyzacji i n8n/Jak przeprowadzi\304\207 automatyzacj\304\231 bez umiej\304\231tno\305\233ci programowania.md
| ... | ... | @@ -0,0 +1,67 @@ |
| 1 | + |
|
| 2 | + |
|
| 3 | + |
|
| 4 | +Wyobraź sobie, że codziennie wykonujesz te same, powtarzalne czynności: kopiujesz dane, wysyłasz powiadomienia, generujesz raporty. Zamiast tracić czas na rutynę, możesz skorzystać z narzędzi no-code i sprawić, że te zadania wykonają się same – bez pisania ani jednej linijki kodu! |
|
| 5 | + |
|
| 6 | +--- |
|
| 7 | + |
|
| 8 | +### **Krok po kroku – jak zacząć?** |
|
| 9 | + |
|
| 10 | +1. **Zdefiniuj cel automatyzacji** |
|
| 11 | + - Zastanów się, które zadania są powtarzalne i zajmują najwięcej czasu (np. kopiowanie danych, wysyłanie powiadomień, generowanie raportów). |
|
| 12 | + - Przykład: Chcesz, aby nowe zgłoszenia z formularza trafiały automatycznie do arkusza Google Sheets. |
|
| 13 | + |
|
| 14 | +2. **Wybierz narzędzie no-code** |
|
| 15 | + - Przykłady: n8n, Zapier, Make, Power Automate, IFTTT. |
|
| 16 | + - Sprawdź, które narzędzie najlepiej integruje się z Twoimi aplikacjami (np. Gmail, Google Sheets, Slack). |
|
| 17 | + - Wiele z nich oferuje gotowe szablony – możesz zacząć od prostych automatyzacji i stopniowo je rozbudowywać. |
|
| 18 | + |
|
| 19 | +3. **Zaprojektuj przepływ pracy** |
|
| 20 | + - Skorzystaj z interfejsu „przeciągnij i upuść”. |
|
| 21 | + - Dodaj bloki: wejście (np. nowy e-mail), akcja (np. dodaj wiersz do arkusza), wyjście (np. wyślij powiadomienie). |
|
| 22 | + - Połącz je w logiczną sekwencję. |
|
| 23 | + - Przykład: Po otrzymaniu nowego maila z załącznikiem, zapisz plik na Dysku Google i wyślij powiadomienie na Slacku. |
|
| 24 | + |
|
| 25 | +4. **Przetestuj automatyzację** |
|
| 26 | + - Uruchom przepływ i sprawdź, czy działa zgodnie z oczekiwaniami. |
|
| 27 | + - W razie potrzeby popraw ustawienia lub dodaj kolejne kroki. |
|
| 28 | + - Testuj różne scenariusze, aby mieć pewność, że automatyzacja działa niezawodnie. |
|
| 29 | + |
|
| 30 | +5. **Wdrażaj i rozwijaj** |
|
| 31 | + - Po udanym teście możesz wdrożyć automatyzację na stałe. |
|
| 32 | + - Dodawaj kolejne integracje i usprawnienia według potrzeb. |
|
| 33 | + - Monitoruj efekty i modyfikuj przepływy, gdy pojawią się nowe potrzeby. |
|
| 34 | + |
|
| 35 | +--- |
|
| 36 | + |
|
| 37 | +### **Przykład praktyczny** |
|
| 38 | + |
|
| 39 | +Załóżmy, że chcesz automatycznie zapisywać załączniki z maila na Dysku Google i informować zespół na Slacku: |
|
| 40 | + |
|
| 41 | +- Wybierasz narzędzie (np. Zapier). |
|
| 42 | +- Ustawiasz trigger: „nowy e-mail z załącznikiem”. |
|
| 43 | +- Dodajesz akcję: „zapisz załącznik na Dysku Google”. |
|
| 44 | +- Dodajesz kolejną akcję: „wyślij powiadomienie na Slacku”. |
|
| 45 | +- Testujesz i gotowe! |
|
| 46 | + |
|
| 47 | +Możesz rozbudować ten przepływ o kolejne kroki, np. automatyczne przypisanie zadania w Asanie lub wysłanie podsumowania do Google Sheets. |
|
| 48 | + |
|
| 49 | +--- |
|
| 50 | + |
|
| 51 | +### **Dlaczego warto?** |
|
| 52 | + |
|
| 53 | +- Oszczędzasz czas i eliminujesz rutynę. |
|
| 54 | +- Nie musisz znać programowania. |
|
| 55 | +- Możesz szybko wdrażać nowe pomysły i usprawnienia. |
|
| 56 | +- Automatyzacja jest dostępna dla każdego! |
|
| 57 | +- Zyskujesz więcej czasu na kreatywne i rozwojowe zadania. |
|
| 58 | + |
|
| 59 | +--- |
|
| 60 | + |
|
| 61 | +### **Wskazówki praktyczne** |
|
| 62 | + |
|
| 63 | +- Zacznij od prostych automatyzacji i stopniowo je rozbudowuj. |
|
| 64 | +- Korzystaj z gotowych szablonów dostępnych w narzędziach no-code. |
|
| 65 | +- Testuj automatyzacje na małej próbce danych, zanim wdrożysz je na większą skalę. |
|
| 66 | +- Dokumentuj swoje przepływy, aby łatwo je modyfikować w przyszłości. |
|
| 67 | +- Nie bój się eksperymentować – większość narzędzi no-code jest bardzo intuicyjna! |
|
| ... | ... | \ No newline at end of file |
Modul 1 - Wprowadzenie do automatyzacji i n8n/Przedstawienie narz\304\231dzia n8n.md
| ... | ... | @@ -0,0 +1,103 @@ |
| 1 | + |
|
| 2 | + |
|
| 3 | +n8n to nowoczesne, otwarte narzędzie do automatyzacji procesów i integracji aplikacji, które pozwala tworzyć zaawansowane przepływy pracy bez programowania. |
|
| 4 | + |
|
| 5 | +--- |
|
| 6 | + |
|
| 7 | +### **Czym jest n8n?** |
|
| 8 | + |
|
| 9 | +- To platforma typu no-code/low-code, która umożliwia łączenie różnych aplikacji, usług i systemów w automatyczne przepływy (workflows). |
|
| 10 | +- Pozwala na integrację z ponad 300 aplikacjami (np. Gmail, Slack, Google Sheets, Discord, Twitter, API REST). |
|
| 11 | +- Umożliwia budowanie logiki warunkowej, przetwarzanie danych, obsługę pętli i wiele więcej – wszystko w intuicyjnym, graficznym edytorze. |
|
| 12 | +- Jest dostępna jako aplikacja webowa, którą możesz uruchomić lokalnie, na serwerze lub w chmurze. |
|
| 13 | + |
|
| 14 | +--- |
|
| 15 | + |
|
| 16 | +### **Jak uruchomić n8n?** |
|
| 17 | + |
|
| 18 | +1. **Lokalnie na komputerze** |
|
| 19 | + - Wymagania: Node.js (zalecana wersja 18+), npm lub yarn. |
|
| 20 | + - Instalacja: |
|
| 21 | + ```bash |
|
| 22 | + npm install n8n -g |
|
| 23 | + n8n start |
|
| 24 | + ``` |
|
| 25 | + - Po uruchomieniu edytor dostępny jest pod adresem http://localhost:5678 |
|
| 26 | + |
|
| 27 | +2. **W kontenerze Docker** |
|
| 28 | + - Najprostszy sposób na uruchomienie n8n na serwerze lub VPS: |
|
| 29 | + ```bash |
|
| 30 | + docker run -it --rm -p 5678:5678 n8nio/n8n |
|
| 31 | + ``` |
|
| 32 | + - Możesz też skorzystać z gotowych plików docker-compose. |
|
| 33 | + |
|
| 34 | +3. **W chmurze (n8n.cloud)** |
|
| 35 | + - Dostępna jest wersja SaaS – nie wymaga instalacji, wystarczy założyć konto na stronie https://n8n.io |
|
| 36 | + |
|
| 37 | +--- |
|
| 38 | + |
|
| 39 | +### **Licencja n8n** |
|
| 40 | + |
|
| 41 | +- n8n jest dostępne na licencji [Fair Code](https://faircode.io/), która pozwala na darmowe użycie do celów niekomercyjnych i testowych. |
|
| 42 | +- Wersja open-source jest dostępna na GitHubie: https://github.com/n8n-io/n8n |
|
| 43 | +- W przypadku wdrożeń komercyjnych (np. w firmie, dla klientów) wymagane jest wykupienie licencji lub korzystanie z n8n.cloud. |
|
| 44 | + |
|
| 45 | +--- |
|
| 46 | + |
|
| 47 | +### **Dlaczego warto wybrać n8n?** |
|
| 48 | + |
|
| 49 | +- Bardzo duża elastyczność i możliwość rozbudowy przepływów. |
|
| 50 | +- Otwartość – możesz samodzielnie hostować i modyfikować narzędzie. |
|
| 51 | +- Integracje z popularnymi aplikacjami i API. |
|
| 52 | +- Aktywna społeczność i bogata dokumentacja. |
|
| 53 | +- Możliwość automatyzacji zadań, które w innych narzędziach są płatne lub ograniczone. |
|
| 54 | + |
|
| 55 | +--- |
|
| 56 | + |
|
| 57 | +### **Przykładowe zastosowania n8n** |
|
| 58 | + |
|
| 59 | +- Automatyczne pobieranie danych z różnych źródeł i generowanie raportów. |
|
| 60 | +- Wysyłanie powiadomień do zespołu na Slacku po pojawieniu się nowego zgłoszenia. |
|
| 61 | +- Integracja systemów CRM, e-mail, social media i narzędzi marketingowych. |
|
| 62 | +- Przetwarzanie plików, synchronizacja danych, obsługa webhooków. |
|
| 63 | + |
|
| 64 | +--- |
|
| 65 | + |
|
| 66 | +### **Automatyzacja w praktyce – jak działa n8n?** |
|
| 67 | + |
|
| 68 | +n8n pozwala tworzyć automatyczne przepływy pracy (workflows), które łączą różne aplikacje i usługi bez potrzeby programowania. Każdy workflow składa się z tzw. "node'ów" – bloków, które wykonują konkretne zadania (np. pobierają dane, wysyłają e-mail, przetwarzają pliki, komunikują się z API). |
|
| 69 | + |
|
| 70 | +**Jak wygląda proces automatyzacji w n8n?** |
|
| 71 | + |
|
| 72 | +1. **Wybierasz trigger** – czyli zdarzenie, które uruchamia workflow (np. nowy e-mail, webhook, określony czas). |
|
| 73 | +2. **Dodajesz kolejne kroki** – np. pobranie danych z Google Sheets, przetworzenie ich, wysłanie powiadomienia na Slacku. |
|
| 74 | +3. **Łączysz node'y w graficznym edytorze** – wszystko odbywa się metodą "przeciągnij i upuść". |
|
| 75 | +4. **Testujesz i uruchamiasz automatyzację** – możesz obserwować przebieg procesu i analizować wyniki. |
|
| 76 | + |
|
| 77 | +--- |
|
| 78 | + |
|
| 79 | +### **Przykład workflow w n8n** |
|
| 80 | + |
|
| 81 | +Załóżmy, że chcesz: |
|
| 82 | +- Automatycznie pobierać nowe zgłoszenia z formularza Google Forms, |
|
| 83 | +- Zapisywać je w arkuszu Google Sheets, |
|
| 84 | +- Wysyłać powiadomienie do zespołu na Slacku. |
|
| 85 | + |
|
| 86 | +W n8n: |
|
| 87 | +- Ustawiasz trigger: nowy wpis w Google Forms (np. przez webhook lub integrację z Google Sheets). |
|
| 88 | +- Dodajesz node: zapis danych do Google Sheets. |
|
| 89 | +- Dodajesz node: wysłanie wiadomości na Slacku. |
|
| 90 | +- Łączysz wszystko w jeden workflow i uruchamiasz. |
|
| 91 | + |
|
| 92 | +--- |
|
| 93 | + |
|
| 94 | +### **n8n a inne narzędzia** |
|
| 95 | + |
|
| 96 | +- n8n daje większą elastyczność niż typowe platformy no-code, bo pozwala na rozbudowaną logikę, pętle, warunki, obsługę API i własne skrypty. |
|
| 97 | +- Możesz hostować n8n samodzielnie, co daje pełną kontrolę nad danymi i kosztami. |
|
| 98 | +- Wersja open-source jest darmowa do użytku niekomercyjnego, a licencja Fair Code pozwala na testy i naukę bez opłat. |
|
| 99 | + |
|
| 100 | +--- |
|
| 101 | + |
|
| 102 | +**Podsumowanie:** |
|
| 103 | +n8n to narzędzie, które pozwala każdemu – bez programowania – zautomatyzować pracę, połączyć różne systemy i tworzyć własne rozwiązania integracyjne. Dzięki otwartości, elastyczności i bogatej dokumentacji, n8n jest świetnym wyborem zarówno dla początkujących, jak i zaawansowanych użytkowników. |
Modul 2 - Wstep do n8n/Czym r\303\263\305\274ni si\304\231 trigger od akcji.md
| ... | ... | @@ -0,0 +1,53 @@ |
| 1 | + |
|
| 2 | + |
|
| 3 | + |
|
| 4 | +W n8n (i innych narzędziach automatyzacji) przepływ pracy składa się z różnych bloków, które pełnią określone funkcje. Najważniejsze z nich to **trigger** i **akcja**. |
|
| 5 | + |
|
| 6 | +--- |
|
| 7 | + |
|
| 8 | +### **Trigger – co to jest?** |
|
| 9 | + |
|
| 10 | +Trigger to element, który uruchamia cały workflow. Jest punktem startowym automatyzacji – reaguje na określone zdarzenie lub warunek. |
|
| 11 | + |
|
| 12 | +**Przykłady triggerów:** |
|
| 13 | +- Otrzymanie nowego e-maila |
|
| 14 | +- Dodanie nowego wiersza do arkusza Google Sheets |
|
| 15 | +- Otrzymanie webhooka (np. z formularza na stronie) |
|
| 16 | +- Określony czas (np. codziennie o 8:00) |
|
| 17 | + |
|
| 18 | +W n8n trigger to pierwszy node w workflow, który „wybudza” automatyzację do działania. |
|
| 19 | + |
|
| 20 | +--- |
|
| 21 | + |
|
| 22 | +### **Akcja – co to jest?** |
|
| 23 | + |
|
| 24 | +Akcja to zadanie, które jest wykonywane po uruchomieniu workflow przez trigger. Może być ich wiele w jednym przepływie – każda akcja realizuje konkretną funkcję. |
|
| 25 | + |
|
| 26 | +**Przykłady akcji:** |
|
| 27 | +- Wysłanie powiadomienia na Slacku |
|
| 28 | +- Dodanie rekordu do bazy danych |
|
| 29 | +- Przetworzenie pliku i zapisanie go na Dysku Google |
|
| 30 | +- Wysłanie e-maila z podsumowaniem |
|
| 31 | + |
|
| 32 | +W n8n akcje to kolejne node'y, które wykonują zadania po wyzwoleniu przez trigger. |
|
| 33 | + |
|
| 34 | +--- |
|
| 35 | + |
|
| 36 | +### **Przykład praktyczny** |
|
| 37 | + |
|
| 38 | +Załóżmy, że chcesz: |
|
| 39 | +- Po otrzymaniu nowego zgłoszenia z formularza (trigger: webhook) |
|
| 40 | +- Dodać dane do arkusza Google Sheets (akcja) |
|
| 41 | +- Wysłać powiadomienie do zespołu na Slacku (akcja) |
|
| 42 | + |
|
| 43 | +Workflow w n8n: |
|
| 44 | +1. **Trigger:** Webhook odbiera zgłoszenie |
|
| 45 | +2. **Akcja:** Dodaj dane do Google Sheets |
|
| 46 | +3. **Akcja:** Wyślij wiadomość na Slacku |
|
| 47 | + |
|
| 48 | +--- |
|
| 49 | + |
|
| 50 | +**Podsumowanie:** |
|
| 51 | +- **Trigger** uruchamia workflow, reaguje na zdarzenie |
|
| 52 | +- **Akcja** wykonuje konkretne zadanie po wyzwoleniu przez trigger |
|
| 53 | +- Dzięki temu możesz budować automatyzacje, które reagują na różne sytuacje i realizują dowolne działania! |
|
| ... | ... | \ No newline at end of file |
Modul 2 - Wstep do n8n/Interfejs n8n i logika dzia\305\202ania.md
| ... | ... | @@ -0,0 +1,42 @@ |
| 1 | + |
|
| 2 | + |
|
| 3 | +# Interfejs n8n i logika działania |
|
| 4 | + |
|
| 5 | + |
|
| 6 | +n8n oferuje intuicyjny, graficzny interfejs, który pozwala na łatwe projektowanie automatyzacji bez programowania. Wszystko odbywa się metodą „przeciągnij i upuść”, a każdy element workflow jest widoczny na diagramie. |
|
| 7 | + |
|
| 8 | +--- |
|
| 9 | + |
|
| 10 | +### **Główne elementy interfejsu n8n** |
|
| 11 | + |
|
| 12 | +- **Canvas (płótno)** – główna przestrzeń robocza, na której budujesz workflow, dodajesz i łączysz node'y. |
|
| 13 | +- **Node'y (bloki)** – każdy node to pojedyncza akcja, trigger lub operacja na danych. Node'y mają różne typy: integracje z aplikacjami, logika, przetwarzanie danych. |
|
| 14 | +- **Panel właściwości** – po kliknięciu node'a możesz skonfigurować jego ustawienia (np. dane wejściowe, parametry, autoryzację). |
|
| 15 | +- **Menu boczne** – dostęp do listy node'ów, ustawień workflow, historii uruchomień, dokumentacji. |
|
| 16 | +- **Przyciski uruchamiania/testowania** – pozwalają uruchomić workflow, przetestować go na żywo i zobaczyć wyniki. |
|
| 17 | + |
|
| 18 | +--- |
|
| 19 | + |
|
| 20 | +### **Logika działania workflow w n8n** |
|
| 21 | + |
|
| 22 | +1. **Trigger** – workflow zaczyna się od triggera, który reaguje na zdarzenie (np. nowy e-mail, webhook, określony czas). |
|
| 23 | +2. **Przepływ danych** – dane przechodzą przez kolejne node'y, gdzie są przetwarzane, filtrowane, modyfikowane. |
|
| 24 | +3. **Akcje** – workflow wykonuje zadania, np. wysyła powiadomienia, zapisuje dane, komunikuje się z API. |
|
| 25 | +4. **Warunki i pętle** – możesz dodawać logikę warunkową (if/else), pętle, rozgałęzienia, aby workflow był bardziej zaawansowany. |
|
| 26 | +5. **Wynik** – na końcu workflow możesz zobaczyć rezultat działania, np. raport, wiadomość, zapisane dane. |
|
| 27 | + |
|
| 28 | +--- |
|
| 29 | + |
|
| 30 | +### **Przykład prostego workflow w n8n** |
|
| 31 | + |
|
| 32 | +- **Trigger:** Otrzymanie nowego zgłoszenia przez webhook |
|
| 33 | +- **Node:** Przetwarzanie danych (np. sprawdzenie poprawności) |
|
| 34 | +- **Node:** Dodanie danych do Google Sheets |
|
| 35 | +- **Node:** Wysłanie powiadomienia na Slacku |
|
| 36 | + |
|
| 37 | +Każdy krok jest widoczny na diagramie, możesz go testować, modyfikować i rozbudowywać według potrzeb. |
|
| 38 | + |
|
| 39 | +--- |
|
| 40 | + |
|
| 41 | +**Podsumowanie:** |
|
| 42 | +Interfejs n8n jest przejrzysty i elastyczny, a logika działania workflow pozwala na budowanie zarówno prostych, jak i bardzo zaawansowanych automatyzacji – wszystko bez programowania! |
|
| ... | ... | \ No newline at end of file |
Modul 2 - Wstep do n8n/Jak dzia\305\202a przep\305\202yw (flow \342\206\222 node \342\206\222 dane \342\206\222 kolejny node).md
| ... | ... | @@ -0,0 +1,88 @@ |
| 1 | + |
|
| 2 | + |
|
| 3 | + |
|
| 4 | + |
|
| 5 | +W n8n każdy workflow to sekwencja połączonych ze sobą node'ów, przez które przepływają dane. Zrozumienie tego mechanizmu jest kluczowe dla tworzenia efektywnych automatyzacji. |
|
| 6 | + |
|
| 7 | +--- |
|
| 8 | + |
|
| 9 | +### **Podstawowa logika przepływu** |
|
| 10 | + |
|
| 11 | +Workflow w n8n działa w sposób sekwencyjny: |
|
| 12 | + |
|
| 13 | +1. **Trigger uruchamia workflow** – pierwszym elementem jest zawsze trigger (np. webhook, harmonogram, nowy e-mail) |
|
| 14 | +2. **Dane trafiają do pierwszego node'a** – trigger przekazuje dane wejściowe (input) do następnego node'a |
|
| 15 | +3. **Node przetwarza dane** – każdy node wykonuje swoją funkcję: pobiera, modyfikuje, filtruje lub wysyła dane |
|
| 16 | +4. **Dane płyną do kolejnego node'a** – wyjście (output) jednego node'a staje się wejściem (input) następnego |
|
| 17 | +5. **Workflow kończy się** – gdy wszystkie node'y wykonają swoje zadania lub gdy nie ma już kolejnych kroków |
|
| 18 | + |
|
| 19 | +--- |
|
| 20 | + |
|
| 21 | +### **Jak wyglądają dane między node'ami?** |
|
| 22 | + |
|
| 23 | +Dane w n8n przechodzą w formacie **JSON**. Każdy node może: |
|
| 24 | +- Odczytać dane z poprzedniego kroku |
|
| 25 | +- Przetworzyć je (np. wyfiltrować, połączyć, przekształcić) |
|
| 26 | +- Przekazać je dalej do kolejnego node'a |
|
| 27 | + |
|
| 28 | +**Przykład:** |
|
| 29 | +```json |
|
| 30 | +{ |
|
| 31 | + "name": "Jan Kowalski", |
|
| 32 | + "email": "jan@example.com", |
|
| 33 | + "status": "aktywny" |
|
| 34 | +} |
|
| 35 | +``` |
|
| 36 | + |
|
| 37 | +Taki obiekt może być przekazywany między node'ami i każdy z nich może operować na tych danych. |
|
| 38 | + |
|
| 39 | +--- |
|
| 40 | + |
|
| 41 | +### **Praktyczny przykład przepływu** |
|
| 42 | + |
|
| 43 | +Załóżmy workflow, który: |
|
| 44 | +1. Odbiera zgłoszenie z formularza (webhook) |
|
| 45 | +2. Zapisuje dane do Google Sheets |
|
| 46 | +3. Wysyła powiadomienie na Slacku |
|
| 47 | + |
|
| 48 | +**Przepływ danych:** |
|
| 49 | + |
|
| 50 | +**Node 1: Webhook (trigger)** |
|
| 51 | +- Odbiera dane z formularza |
|
| 52 | +- Output: `{ "name": "Anna", "message": "Problem z logowaniem" }` |
|
| 53 | + |
|
| 54 | +**Node 2: Google Sheets** |
|
| 55 | +- Input: dane z webhooka |
|
| 56 | +- Akcja: dodaje wiersz do arkusza |
|
| 57 | +- Output: potwierdzenie zapisu |
|
| 58 | + |
|
| 59 | +**Node 3: Slack** |
|
| 60 | +- Input: dane z webhooka i potwierdzenie z Google Sheets |
|
| 61 | +- Akcja: wysyła wiadomość "Nowe zgłoszenie od Anna: Problem z logowaniem" |
|
| 62 | +- Output: potwierdzenie wysłania |
|
| 63 | + |
|
| 64 | +--- |
|
| 65 | + |
|
| 66 | +### **Kluczowe zasady przepływu danych** |
|
| 67 | + |
|
| 68 | +- **Każdy node widzi dane z poprzedniego kroku** – możesz odwołać się do nich za pomocą wyrażeń `{{ $json.nazwa_pola }}` |
|
| 69 | +- **Dane mogą się rozgałęziać** – jeden node może przekazać dane do wielu następnych node'ów (np. różne ścieżki w zależności od warunku) |
|
| 70 | +- **Można filtrować i transformować dane** – node'y typu "Set", "Function", "Filter" pozwalają modyfikować strukturę i zawartość danych |
|
| 71 | +- **Testowanie jest kluczowe** – n8n pozwala uruchomić workflow krok po kroku i zobaczyć, jakie dane przepływają przez każdy node |
|
| 72 | + |
|
| 73 | +--- |
|
| 74 | + |
|
| 75 | +### **Rozgałęzienia i warunki** |
|
| 76 | + |
|
| 77 | +Przepływ nie musi być liniowy. Możesz użyć node'a **IF** do rozgałęzienia: |
|
| 78 | + |
|
| 79 | +``` |
|
| 80 | +Webhook → IF (sprawdź status) |
|
| 81 | + ├─ Jeśli "pilne" → Slack + Email |
|
| 82 | + └─ Jeśli "normalne" → Google Sheets |
|
| 83 | +``` |
|
| 84 | + |
|
| 85 | +--- |
|
| 86 | + |
|
| 87 | +**Podsumowanie:** |
|
| 88 | +Przepływ w n8n to sekwencja połączonych node'ów, przez które dane przechodzą od triggera aż do końcowego działania. Każdy node przetwarza dane i przekazuje je dalej, co pozwala na budowanie zarówno prostych, jak i bardzo złożonych automatyzacji. |
|
| ... | ... | \ No newline at end of file |
Modul 2 - Wstep do n8n/Po co nam n8n.md
| ... | ... | @@ -0,0 +1,68 @@ |
| 1 | + |
|
| 2 | + |
|
| 3 | +W świecie pełnym różnych narzędzi do automatyzacji (Zapier, Make, Power Automate) warto zadać pytanie: dlaczego właśnie n8n? Co sprawia, że to narzędzie wyróżnia się na tle konkurencji? |
|
| 4 | + |
|
| 5 | +--- |
|
| 6 | + |
|
| 7 | +### **Otwartość i kontrola nad danymi** |
|
| 8 | + |
|
| 9 | +n8n jest **open-source**, co oznacza, że: |
|
| 10 | +- Masz pełną kontrolę nad swoimi danymi – możesz hostować n8n lokalnie lub na własnym serwerze |
|
| 11 | +- Nie musisz martwić się o limity, cenzurę czy zmiany w polityce prywatności dostawcy |
|
| 12 | +- Możesz modyfikować kod źródłowy i dostosować narzędzie do swoich potrzeb |
|
| 13 | +- Nie jesteś uzależniony od zewnętrznego dostawcy SaaS |
|
| 14 | + |
|
| 15 | +--- |
|
| 16 | + |
|
| 17 | +### **Elastyczność i zaawansowane możliwości** |
|
| 18 | + |
|
| 19 | +W przeciwieństwie do typowych platform no-code, n8n oferuje: |
|
| 20 | +- **Zaawansowaną logikę** – warunki, pętle, rozgałęzienia, funkcje JavaScript |
|
| 21 | +- **Integrację z API** – łatwy dostęp do dowolnych usług przez HTTP Request |
|
| 22 | +- **Przetwarzanie danych** – node'y do filtrowania, transformacji, łączenia danych |
|
| 23 | +- **Możliwość tworzenia własnych node'ów** – jeśli czegoś brakuje, możesz to dodać |
|
| 24 | + |
|
| 25 | +--- |
|
| 26 | + |
|
| 27 | +### **Oszczędność kosztów** |
|
| 28 | + |
|
| 29 | +- Zapier, Make i inne narzędzia SaaS pobierają opłaty za każde uruchomienie workflow (tzw. "tasks" lub "operations") |
|
| 30 | +- n8n self-hosted jest **darmowe** – płacisz tylko za hosting (VPS, serwer lokalny) |
|
| 31 | +- Dla małych i średnich firm to ogromna oszczędność, szczególnie przy dużej liczbie automatyzacji |
|
| 32 | + |
|
| 33 | +--- |
|
| 34 | + |
|
| 35 | +### **Bogata biblioteka integracji** |
|
| 36 | + |
|
| 37 | +n8n oferuje ponad 300 gotowych integracji z popularnymi usługami: |
|
| 38 | +- Gmail, Google Sheets, Google Drive |
|
| 39 | +- Slack, Discord, Telegram |
|
| 40 | +- Notion, Airtable, Trello |
|
| 41 | +- OpenAI, Anthropic, Hugging Face |
|
| 42 | +- API REST, Webhooks, Cron |
|
| 43 | + |
|
| 44 | +I wiele, wiele więcej. |
|
| 45 | + |
|
| 46 | +--- |
|
| 47 | + |
|
| 48 | +### **Dla kogo jest n8n?** |
|
| 49 | + |
|
| 50 | +- **Dla firm**, które chcą zachować kontrolę nad danymi i obniżyć koszty automatyzacji |
|
| 51 | +- **Dla developerów**, którzy potrzebują elastyczności i możliwości rozbudowy |
|
| 52 | +- **Dla entuzjastów automatyzacji**, którzy chcą tworzyć zaawansowane workflow bez ograniczeń |
|
| 53 | +- **Dla osób uczących się** – n8n to świetne narzędzie do nauki automatyzacji i integracji |
|
| 54 | + |
|
| 55 | +--- |
|
| 56 | + |
|
| 57 | +### **Przykładowe scenariusze użycia n8n** |
|
| 58 | + |
|
| 59 | +- Automatyczne pobieranie danych z różnych źródeł i generowanie raportów |
|
| 60 | +- Integracja systemów CRM, e-mail, social media i narzędzi marketingowych |
|
| 61 | +- Budowa własnych botów i asystentów AI |
|
| 62 | +- Synchronizacja danych między aplikacjami |
|
| 63 | +- Automatyzacja procesów biznesowych bez angażowania zespołu IT |
|
| 64 | + |
|
| 65 | +--- |
|
| 66 | + |
|
| 67 | +**Podsumowanie:** |
|
| 68 | +n8n to narzędzie dla osób, które cenią **otwartość, elastyczność i kontrolę**. Dzięki niemu możesz budować zaawansowane automatyzacje bez ograniczeń, oszczędzając czas i pieniądze. To platforma, która rośnie razem z Twoimi potrzebami. |
|
| ... | ... | \ No newline at end of file |
Modul 2 - Wstep do n8n/Przegl\304\205d popularnych node\342\200\231\303\263w.md
| ... | ... | @@ -0,0 +1,78 @@ |
| 1 | + |
|
| 2 | + |
|
| 3 | + |
|
| 4 | + |
|
| 5 | + |
|
| 6 | + |
|
| 7 | +W n8n znajdziesz setki node'ów do integracji z różnymi usługami. Poniżej przedstawiam top 10 najpopularniejszych node'ów, ze szczególnym uwzględnieniem ekosystemu Google. |
|
| 8 | + |
|
| 9 | +--- |
|
| 10 | + |
|
| 11 | +### **1. Google Sheets** |
|
| 12 | +- Odczyt danych (Get Rows) |
|
| 13 | +- Dodawanie nowych wierszy (Append Row) |
|
| 14 | +- Aktualizacja i usuwanie danych |
|
| 15 | +- Przykład: automatyczne zapisywanie zgłoszeń z formularza do arkusza |
|
| 16 | + |
|
| 17 | +### **2. Google Drive** |
|
| 18 | +- Pobieranie plików |
|
| 19 | +- Przesyłanie nowych dokumentów |
|
| 20 | +- Tworzenie folderów |
|
| 21 | +- Przykład: automatyczne archiwizowanie załączników z maila |
|
| 22 | + |
|
| 23 | +### **3. Google Calendar** |
|
| 24 | +- Tworzenie wydarzeń |
|
| 25 | +- Odczyt i aktualizacja spotkań |
|
| 26 | +- Przykład: automatyczne dodawanie spotkań na podstawie zgłoszeń |
|
| 27 | + |
|
| 28 | +### **4. Google Gmail** |
|
| 29 | +- Wysyłanie e-maili |
|
| 30 | +- Odczyt wiadomości |
|
| 31 | +- Przesyłanie załączników |
|
| 32 | +- Przykład: automatyczne powiadomienia o nowych zgłoszeniach |
|
| 33 | + |
|
| 34 | +### **5. Google Contacts** |
|
| 35 | +- Dodawanie i aktualizacja kontaktów |
|
| 36 | +- Odczyt listy kontaktów |
|
| 37 | +- Przykład: synchronizacja kontaktów z CRM |
|
| 38 | + |
|
| 39 | +### **6. Google Cloud Storage** |
|
| 40 | +- Przesyłanie i pobieranie plików |
|
| 41 | +- Zarządzanie bucketami |
|
| 42 | +- Przykład: backup plików z workflow |
|
| 43 | + |
|
| 44 | +### **7. Google Tasks** |
|
| 45 | +- Tworzenie i aktualizacja zadań |
|
| 46 | +- Odczyt listy zadań |
|
| 47 | +- Przykład: automatyczne generowanie zadań na podstawie zgłoszeń |
|
| 48 | + |
|
| 49 | +### **8. Google Analytics** |
|
| 50 | +- Pobieranie statystyk |
|
| 51 | +- Analiza ruchu na stronie |
|
| 52 | +- Przykład: raportowanie wyników kampanii marketingowych |
|
| 53 | + |
|
| 54 | + |
|
| 55 | +### **9. HTTP Request** |
|
| 56 | +- Najbardziej uniwersalny node w n8n – pozwala na komunikację z dowolnym API (GET, POST, PUT, DELETE) |
|
| 57 | +- Umożliwia pobieranie, wysyłanie, aktualizowanie i usuwanie danych w zewnętrznych serwisach |
|
| 58 | +- Przykład: pobieranie danych o pogodzie, wysyłanie zgłoszeń do CRM, integracja z niestandardowymi usługami |
|
| 59 | + |
|
| 60 | +### **10. Slack** |
|
| 61 | +- Wysyłanie wiadomości na kanały i do użytkowników |
|
| 62 | +- Powiadomienia o nowych zgłoszeniach, raportach, błędach |
|
| 63 | +- Przykład: automatyczne informowanie zespołu o nowych zadaniach, przesyłanie raportów, alerty systemowe |
|
| 64 | + |
|
| 65 | +--- |
|
| 66 | + |
|
| 67 | +### **Przykładowy workflow z node'ami Google** |
|
| 68 | + |
|
| 69 | +1. **Trigger:** Webhook odbiera zgłoszenie z formularza |
|
| 70 | +2. **Google Sheets:** Zapisuje dane zgłoszenia |
|
| 71 | +3. **Google Drive:** Archiwizuje załącznik |
|
| 72 | +4. **Google Calendar:** Dodaje spotkanie |
|
| 73 | +5. **Google Gmail:** Wysyła potwierdzenie do klienta |
|
| 74 | + |
|
| 75 | +--- |
|
| 76 | + |
|
| 77 | +**Podsumowanie:** |
|
| 78 | +Node'y Google w n8n pozwalają na pełną automatyzację pracy z dokumentami, pocztą, kalendarzem, plikami i danymi. Dzięki nim możesz zbudować workflow, który zintegruje wszystkie kluczowe usługi Google w jednym miejscu – bez programowania. |
|
| ... | ... | \ No newline at end of file |
Modul 3 - Budujemy pierwsza automatyzacje/Analiza dzia\305\202ania i struktury danych.md
| ... | ... | @@ -0,0 +1,157 @@ |
| 1 | +# Analiza działania i struktury danych |
|
| 2 | + |
|
| 3 | + |
|
| 4 | + |
|
| 5 | +Kluczem do efektywnego tworzenia automatyzacji w n8n jest zrozumienie, jak dane przepływają między node'ami i jak je analizować. n8n oferuje wbudowane narzędzia do debugowania i inspekcji danych. |
|
| 6 | + |
|
| 7 | +--- |
|
| 8 | + |
|
| 9 | +### **Jak wyglądają dane w n8n?** |
|
| 10 | + |
|
| 11 | +Dane w n8n przechodzą w formacie **JSON** (JavaScript Object Notation). Każdy node: |
|
| 12 | +- Przyjmuje dane wejściowe (input) |
|
| 13 | +- Przetwarza je |
|
| 14 | +- Zwraca dane wyjściowe (output) |
|
| 15 | + |
|
| 16 | +**Przykład struktury danych:** |
|
| 17 | +```json |
|
| 18 | +{ |
|
| 19 | + "name": "Anna Kowalska", |
|
| 20 | + "email": "anna@example.com", |
|
| 21 | + "age": 28, |
|
| 22 | + "active": true, |
|
| 23 | + "tags": ["vip", "newsletter"] |
|
| 24 | +} |
|
| 25 | +``` |
|
| 26 | + |
|
| 27 | +--- |
|
| 28 | + |
|
| 29 | +### **Inspekcja danych w node'dzie** |
|
| 30 | + |
|
| 31 | +Po uruchomieniu workflow możesz zobaczyć dane w każdym node'dzie: |
|
| 32 | + |
|
| 33 | +1. Kliknij na node, który chcesz zbadać |
|
| 34 | +2. W prawym panelu zobaczysz: |
|
| 35 | + - **Input**: dane wejściowe z poprzedniego node'a |
|
| 36 | + - **Output**: dane wyjściowe, które node przekazuje dalej |
|
| 37 | +3. Możesz rozwinąć obiekty JSON i zobaczyć szczegółową strukturę |
|
| 38 | + |
|
| 39 | +--- |
|
| 40 | + |
|
| 41 | +### **Dostęp do danych w wyrażeniach** |
|
| 42 | + |
|
| 43 | +W n8n możesz odwoływać się do danych za pomocą wyrażeń: |
|
| 44 | + |
|
| 45 | +**Składnia:** |
|
| 46 | +- `{{ $json.pole }}` – odwołanie do pola z obecnego node'a |
|
| 47 | +- `{{ $node["Nazwa Node"].json.pole }}` – odwołanie do danych z konkretnego node'a |
|
| 48 | +- `{{ $item(0).$json.pole }}` – odwołanie do pierwszego elementu (jeśli dane są w tablicy) |
|
| 49 | + |
|
| 50 | +**Przykłady:** |
|
| 51 | +```javascript |
|
| 52 | +// Pobierz imię |
|
| 53 | +{{ $json.name }} |
|
| 54 | + |
|
| 55 | +// Pobierz pierwszy tag |
|
| 56 | +{{ $json.tags[0] }} |
|
| 57 | + |
|
| 58 | +// Połącz dane |
|
| 59 | +{{ $json.name }} - {{ $json.email }} |
|
| 60 | + |
|
| 61 | +// Odwołanie do innego node'a |
|
| 62 | +{{ $node["HTTP Request"].json.temperature }} |
|
| 63 | +``` |
|
| 64 | + |
|
| 65 | +--- |
|
| 66 | + |
|
| 67 | +### **Node'y do przetwarzania danych** |
|
| 68 | + |
|
| 69 | +**1. Set (ustawianie wartości)** |
|
| 70 | +- Tworzenie nowych pól |
|
| 71 | +- Modyfikacja istniejących danych |
|
| 72 | +- Usuwanie niepotrzebnych pól |
|
| 73 | + |
|
| 74 | +**2. Filter (filtrowanie)** |
|
| 75 | +- Przepuszczenie tylko tych danych, które spełniają warunek |
|
| 76 | +- Przykład: tylko użytkownicy starsi niż 18 lat |
|
| 77 | + |
|
| 78 | +**3. Split In Batches (dzielenie na partie)** |
|
| 79 | +- Podział dużych zbiorów danych na mniejsze grupy |
|
| 80 | +- Przydatne przy limitach API |
|
| 81 | + |
|
| 82 | +**4. Merge (łączenie danych)** |
|
| 83 | +- Połączenie danych z różnych źródeł |
|
| 84 | +- Np. dane użytkownika + dane zamówień |
|
| 85 | + |
|
| 86 | +**5. Function (kod JavaScript)** |
|
| 87 | +- Zaawansowane przetwarzanie przez własny kod |
|
| 88 | +- Przykład: złożone obliczenia, formatowanie |
|
| 89 | + |
|
| 90 | +--- |
|
| 91 | + |
|
| 92 | +### **Przykład praktyczny: analiza odpowiedzi API** |
|
| 93 | + |
|
| 94 | +Załóżmy, że pobierasz dane użytkowników z API: |
|
| 95 | + |
|
| 96 | +**Odpowiedź API:** |
|
| 97 | +```json |
|
| 98 | +{ |
|
| 99 | + "users": [ |
|
| 100 | + {"id": 1, "name": "Jan", "status": "active"}, |
|
| 101 | + {"id": 2, "name": "Anna", "status": "inactive"}, |
|
| 102 | + {"id": 3, "name": "Piotr", "status": "active"} |
|
| 103 | + ] |
|
| 104 | +} |
|
| 105 | +``` |
|
| 106 | + |
|
| 107 | +**Zadanie:** Wyciągnij tylko aktywnych użytkowników |
|
| 108 | + |
|
| 109 | +**Workflow:** |
|
| 110 | + |
|
| 111 | +1. **HTTP Request** – pobierz dane |
|
| 112 | +2. **Function** – wyciągnij tablicę users: |
|
| 113 | +```javascript |
|
| 114 | +return items[0].json.users.map(user => ({json: user})); |
|
| 115 | +``` |
|
| 116 | +3. **Filter** – filtruj po status: |
|
| 117 | + - Warunek: `{{ $json.status }}` equals `active` |
|
| 118 | +4. **Set** – przygotuj finalną listę |
|
| 119 | + |
|
| 120 | +--- |
|
| 121 | + |
|
| 122 | +### **Debugowanie workflow** |
|
| 123 | + |
|
| 124 | +**Uruchamianie krok po kroku:** |
|
| 125 | +- Kliknij na konkretny node i użyj "Execute Node" |
|
| 126 | +- Zobacz output i sprawdź, czy dane są poprawne |
|
| 127 | + |
|
| 128 | +**Logowanie danych:** |
|
| 129 | +- Dodaj node **Function** z kodem: |
|
| 130 | +```javascript |
|
| 131 | +console.log($json); |
|
| 132 | +return items; |
|
| 133 | +``` |
|
| 134 | +- Logi zobaczysz w konsoli serwera n8n |
|
| 135 | + |
|
| 136 | +**Użyj node'a "No Operation (do nothing)":** |
|
| 137 | +- Dodaj go na końcu, aby zobaczyć finalne dane bez wykonywania akcji |
|
| 138 | + |
|
| 139 | +--- |
|
| 140 | + |
|
| 141 | +### **Najczęstsze problemy** |
|
| 142 | + |
|
| 143 | +**Problem 1: "Cannot read property of undefined"** |
|
| 144 | +- Sprawdź, czy pole faktycznie istnieje w danych |
|
| 145 | +- Użyj operatora `?.` dla bezpiecznego dostępu: `{{ $json.user?.name }}` |
|
| 146 | + |
|
| 147 | +**Problem 2: Tablica zamiast obiektu** |
|
| 148 | +- Jeśli dane są w tablicy, użyj `$json[0].pole` |
|
| 149 | + |
|
| 150 | +**Problem 3: Brak danych w node'dzie** |
|
| 151 | +- Upewnij się, że poprzedni node zwrócił dane |
|
| 152 | +- Sprawdź, czy workflow został uruchomiony w całości |
|
| 153 | + |
|
| 154 | +--- |
|
| 155 | + |
|
| 156 | +**Podsumowanie:** |
|
| 157 | +Analiza danych to fundament pracy z n8n. Dzięki inspekcji output'ów, wyrażeniom i node'om do przetwarzania możesz precyzyjnie kontrolować przepływ i transformację danych w swoich automatyzacjach. |
|
| ... | ... | \ No newline at end of file |
Modul 3 - Budujemy pierwsza automatyzacje/Pobranie danych z zewn\304\231trznego serwisu.md
| ... | ... | @@ -0,0 +1,68 @@ |
| 1 | + |
|
| 2 | + |
|
| 3 | +# Pobieranie danych z zewnętrznego serwisu |
|
| 4 | + |
|
| 5 | +Pobieranie danych z zewnętrznych serwisów to jeden z najczęstszych scenariuszy automatyzacji w n8n. Dzięki temu możesz integrować swoje workflow z dowolną usługą internetową, systemem lub aplikacją. |
|
| 6 | + |
|
| 7 | +--- |
|
| 8 | + |
|
| 9 | +### **Jak można pobierać dane z zewnętrznych serwisów?** |
|
| 10 | + |
|
| 11 | +#### 1. **Node HTTP Request** |
|
| 12 | +Najbardziej uniwersalny sposób. Pozwala na komunikację z dowolnym API (GET, POST, PUT, DELETE). |
|
| 13 | +- Wybierz metodę (najczęściej GET do pobierania danych) |
|
| 14 | +- Podaj adres URL API |
|
| 15 | +- Dodaj parametry, nagłówki, autoryzację jeśli wymaga tego serwis |
|
| 16 | +- Przetwarzaj odpowiedź (najczęściej w formacie JSON) |
|
| 17 | + |
|
| 18 | +**Przykład:** |
|
| 19 | +Pobranie danych o pogodzie z OpenWeatherMap: |
|
| 20 | +- URL: `https://api.openweathermap.org/data/2.5/weather?q=Warsaw&appid=TWÓJ_KLUCZ_API&units=metric` |
|
| 21 | +- Wynik: JSON z informacjami o temperaturze, wilgotności, opisie pogody |
|
| 22 | + |
|
| 23 | +#### 2. **Dedykowane node'y integracyjne** |
|
| 24 | +W n8n znajdziesz gotowe node'y do najpopularniejszych serwisów: |
|
| 25 | +- Google Sheets, Gmail, Drive |
|
| 26 | +- Slack, Discord, Teams |
|
| 27 | +- Airtable, Notion, Trello |
|
| 28 | +- Bazy danych (MySQL, PostgreSQL, MongoDB) |
|
| 29 | +- Serwisy e-commerce, CRM, social media |
|
| 30 | + |
|
| 31 | +Node'y te mają uproszczoną konfigurację i automatycznie obsługują autoryzację oraz formatowanie danych. |
|
| 32 | + |
|
| 33 | +#### 3. **Webhook** |
|
| 34 | +Możesz skonfigurować node Webhook, który odbiera dane wysyłane z zewnętrznego serwisu (np. formularz na stronie, system zgłoszeń, inna aplikacja). |
|
| 35 | +- Ustaw endpoint webhooka w n8n |
|
| 36 | +- Skonfiguruj zewnętrzny serwis, aby wysyłał dane do tego adresu |
|
| 37 | +- Dane pojawią się w workflow i mogą być dalej przetwarzane |
|
| 38 | + |
|
| 39 | +#### 4. **Integracja przez OAuth2 lub API Key** |
|
| 40 | +Wiele serwisów wymaga autoryzacji: |
|
| 41 | +- API Key – klucz w nagłówku lub parametrze |
|
| 42 | +- OAuth2 – logowanie przez konto Google, Facebook, Microsoft |
|
| 43 | +- Basic Auth – login i hasło |
|
| 44 | + |
|
| 45 | +n8n obsługuje te metody w node'ach HTTP Request oraz dedykowanych integracjach. |
|
| 46 | + |
|
| 47 | +--- |
|
| 48 | + |
|
| 49 | +### **Praktyczny workflow: pobieranie danych z API i zapis do Google Sheets** |
|
| 50 | + |
|
| 51 | +1. **HTTP Request** – pobierz dane z API (np. lista użytkowników) |
|
| 52 | +2. **Set** – wyciągnij interesujące Cię pola |
|
| 53 | +3. **Google Sheets** – zapisz dane do arkusza |
|
| 54 | +4. **Slack** – wyślij powiadomienie o nowym wpisie |
|
| 55 | + |
|
| 56 | +--- |
|
| 57 | + |
|
| 58 | +### **Wskazówki praktyczne** |
|
| 59 | +- Sprawdź dokumentację API, z którego chcesz pobierać dane |
|
| 60 | +- Testuj zapytania w node HTTP Request – zobacz, jak wygląda odpowiedź |
|
| 61 | +- Używaj node'ów Set i Function do przetwarzania i filtrowania danych |
|
| 62 | +- Zwracaj uwagę na limity API (rate limits) |
|
| 63 | +- Dbaj o bezpieczeństwo kluczy API i danych |
|
| 64 | + |
|
| 65 | +--- |
|
| 66 | + |
|
| 67 | +**Podsumowanie:** |
|
| 68 | +W n8n możesz pobierać dane z dowolnego serwisu – przez HTTP Request, dedykowane node'y, webhooki czy integracje z autoryzacją. To otwiera ogromne możliwości automatyzacji i integracji w Twoich workflow. |
|
| ... | ... | \ No newline at end of file |
Modul 3 - Budujemy pierwsza automatyzacje/Przes\305\202anie pobranych danych do wskazanego miejsca (np. komunikator firmowy).md
| ... | ... | @@ -0,0 +1,180 @@ |
| 1 | + |
|
| 2 | + |
|
| 3 | +# Przesłanie pobranych - kanły odbiorcze |
|
| 4 | + |
|
| 5 | + |
|
| 6 | + |
|
| 7 | +Po pobraniu i przetworzeniu danych często chcesz je wysłać do konkretnego miejsca – komunikatora firmowego (Slack, Discord, Teams), arkusza, bazy danych lub e-maila. n8n oferuje dedykowane node'y do najpopularniejszych serwisów. |
|
| 8 | + |
|
| 9 | +--- |
|
| 10 | + |
|
| 11 | +### **Najpopularniejsze komunikatory w n8n** |
|
| 12 | + |
|
| 13 | +**1. Slack** |
|
| 14 | +- Wysyłanie wiadomości na kanały |
|
| 15 | +- Wiadomości prywatne |
|
| 16 | +- Aktualizowanie wiadomości |
|
| 17 | +- Reakcje, wątki |
|
| 18 | + |
|
| 19 | +**2. Discord** |
|
| 20 | +- Wysyłanie wiadomości na serwery/kanały |
|
| 21 | +- Embedy (bogate wiadomości z grafiką) |
|
| 22 | +- Webhooki |
|
| 23 | + |
|
| 24 | +**3. Microsoft Teams** |
|
| 25 | +- Wiadomości do kanałów |
|
| 26 | +- Powiadomienia |
|
| 27 | +- Karty adaptacyjne |
|
| 28 | + |
|
| 29 | +**4. Telegram** |
|
| 30 | +- Boty |
|
| 31 | +- Wiadomości do użytkowników/grup |
|
| 32 | +- Inline keyboards |
|
| 33 | + |
|
| 34 | +--- |
|
| 35 | + |
|
| 36 | +### **Przykład 1: Wysyłanie danych na Slacka** |
|
| 37 | + |
|
| 38 | +Załóżmy, że pobierasz dane o pogodzie i chcesz wysłać je na kanał Slack. |
|
| 39 | + |
|
| 40 | +**Krok 1: Przygotuj dane** |
|
| 41 | +- Użyj node **HTTP Request**, aby pobrać dane o pogodzie |
|
| 42 | +- Przykładowy output: |
|
| 43 | +```json |
|
| 44 | +{ |
|
| 45 | + "city": "Warsaw", |
|
| 46 | + "temperature": 15.2, |
|
| 47 | + "description": "cloudy" |
|
| 48 | +} |
|
| 49 | +``` |
|
| 50 | + |
|
| 51 | +**Krok 2: Dodaj node Slack** |
|
| 52 | +1. Dodaj node: **Slack** |
|
| 53 | +2. Wybierz akcję: **Post Message** |
|
| 54 | +3. Wybierz kanał (np. `#general`) |
|
| 55 | +4. Wpisz wiadomość: |
|
| 56 | +``` |
|
| 57 | +Pogoda w {{ $json.city }}: |
|
| 58 | +Temperatura: {{ $json.temperature }}°C |
|
| 59 | +Opis: {{ $json.description }} |
|
| 60 | +``` |
|
| 61 | + |
|
| 62 | +**Krok 3: Uruchom workflow** |
|
| 63 | +- Slack otrzyma wiadomość: |
|
| 64 | +``` |
|
| 65 | +Pogoda w Warsaw: |
|
| 66 | +Temperatura: 15.2°C |
|
| 67 | +Opis: cloudy |
|
| 68 | +``` |
|
| 69 | + |
|
| 70 | +--- |
|
| 71 | + |
|
| 72 | +### **Przykład 2: Wysyłanie embeda na Discorda** |
|
| 73 | + |
|
| 74 | +Discord obsługuje bogate wiadomości (embedy) z grafiką, kolorami i polami. |
|
| 75 | + |
|
| 76 | +**Krok 1: Dodaj node Discord** |
|
| 77 | +1. Dodaj node: **Discord** |
|
| 78 | +2. Wybierz akcję: **Send Message** |
|
| 79 | +3. Podaj Webhook URL (utwórz go w ustawieniach kanału Discord) |
|
| 80 | + |
|
| 81 | +**Krok 2: Przygotuj embed** |
|
| 82 | +W polu "Message" wybierz tryb JSON i wpisz: |
|
| 83 | +```json |
|
| 84 | +{ |
|
| 85 | + "embeds": [ |
|
| 86 | + { |
|
| 87 | + "title": "Nowe zgłoszenie", |
|
| 88 | + "description": "{{ $json.message }}", |
|
| 89 | + "color": 3447003, |
|
| 90 | + "fields": [ |
|
| 91 | + { |
|
| 92 | + "name": "Autor", |
|
| 93 | + "value": "{{ $json.name }}", |
|
| 94 | + "inline": true |
|
| 95 | + }, |
|
| 96 | + { |
|
| 97 | + "name": "Email", |
|
| 98 | + "value": "{{ $json.email }}", |
|
| 99 | + "inline": true |
|
| 100 | + } |
|
| 101 | + ], |
|
| 102 | + "timestamp": "{{ $now }}" |
|
| 103 | + } |
|
| 104 | + ] |
|
| 105 | +} |
|
| 106 | +``` |
|
| 107 | + |
|
| 108 | +--- |
|
| 109 | + |
|
| 110 | +### **Przykład 3: Wysyłanie do Microsoft Teams** |
|
| 111 | + |
|
| 112 | +**Krok 1: Uzyskaj Webhook URL** |
|
| 113 | +- W Teams przejdź do kanału → Connectors → Incoming Webhook |
|
| 114 | +- Skopiuj URL |
|
| 115 | + |
|
| 116 | +**Krok 2: Dodaj node HTTP Request** |
|
| 117 | +1. Metoda: **POST** |
|
| 118 | +2. URL: (wklej webhook URL) |
|
| 119 | +3. Body (JSON): |
|
| 120 | +```json |
|
| 121 | +{ |
|
| 122 | + "@type": "MessageCard", |
|
| 123 | + "title": "Nowy raport", |
|
| 124 | + "text": "Dane zostały zaktualizowane: {{ $json.summary }}" |
|
| 125 | +} |
|
| 126 | +``` |
|
| 127 | + |
|
| 128 | +--- |
|
| 129 | + |
|
| 130 | +### **Formatowanie wiadomości** |
|
| 131 | + |
|
| 132 | +**Markdown w Slack:** |
|
| 133 | +``` |
|
| 134 | +*pogrubienie* |
|
| 135 | +_kursywa_ |
|
| 136 | +~przekreślenie~ |
|
| 137 | +`kod` |
|
| 138 | +```quote``` |
|
| 139 | +``` |
|
| 140 | + |
|
| 141 | +**Mentions w Slack:** |
|
| 142 | +- Użytkownik: `<@USER_ID>` |
|
| 143 | +- Kanał: `<#CHANNEL_ID>` |
|
| 144 | +- Wszyscy: `<!channel>` |
|
| 145 | + |
|
| 146 | +**Kolory w Discord embed:** |
|
| 147 | +- Czerwony: 15158332 |
|
| 148 | +- Zielony: 3066993 |
|
| 149 | +- Niebieski: 3447003 |
|
| 150 | + |
|
| 151 | +--- |
|
| 152 | + |
|
| 153 | +### **Obsługa błędów i powiadomień** |
|
| 154 | + |
|
| 155 | +Możesz wysyłać powiadomienia o błędach: |
|
| 156 | + |
|
| 157 | +**Workflow:** |
|
| 158 | +1. Dodaj node **Error Trigger** (uruchamia się przy błędzie) |
|
| 159 | +2. Połącz z node'm Slack/Discord |
|
| 160 | +3. Wiadomość: |
|
| 161 | +``` |
|
| 162 | +⚠️ Błąd w workflow "{{ $workflow.name }}": |
|
| 163 | +{{ $json.error.message }} |
|
| 164 | +``` |
|
| 165 | + |
|
| 166 | +--- |
|
| 167 | + |
|
| 168 | +### **Inne miejsc docelowych dla danych** |
|
| 169 | + |
|
| 170 | +- **Email** – node Gmail, SendGrid, SMTP |
|
| 171 | +- **Google Sheets** – zapis do arkusza |
|
| 172 | +- **Airtable** – dodawanie rekordów |
|
| 173 | +- **Notion** – tworzenie stron/baz danych |
|
| 174 | +- **Database** – MySQL, PostgreSQL, MongoDB |
|
| 175 | +- **Webhook** – wysyłanie do dowolnego endpointu |
|
| 176 | + |
|
| 177 | +--- |
|
| 178 | + |
|
| 179 | +**Podsumowanie:** |
|
| 180 | +Wysyłanie danych to ostatni, ale kluczowy krok automatyzacji. Dzięki dedykowanym node'om możesz łatwo integrować n8n z komunikatorami, arkuszami, bazami danych i wieloma innymi usługami – wszystko bez konieczności ręcznego przesyłania informacji. |
|
| ... | ... | \ No newline at end of file |
Modul 3 - Budujemy pierwsza automatyzacje/Utworzenie funkcji harmonogramu (Cron).md
| ... | ... | @@ -0,0 +1,30 @@ |
| 1 | +# Utworzenie funkcji harmonogramu (Cron) |
|
| 2 | + |
|
| 3 | + |
|
| 4 | + |
|
| 5 | +--- |
|
| 6 | + |
|
| 7 | +## Harmonogram (Cron) w n8n – wyjaśnienie |
|
| 8 | + |
|
| 9 | +W n8n harmonogram (Cron) pozwala automatycznie uruchamiać workflow w określonych odstępach czasu – np. codziennie, co godzinę, w wybrane dni tygodnia lub miesiąca. Dzięki temu możesz zautomatyzować cykliczne zadania bez ręcznego uruchamiania. |
|
| 10 | + |
|
| 11 | +### Jak to działa w n8n? |
|
| 12 | +- Używasz node'a **Schedule** (lub **Cron**), który jest punktem startowym workflow. |
|
| 13 | +- W node'cie ustawiasz regułę Cron, np. `0 8 * * 1-5` (każdy dzień roboczy o 8:00). |
|
| 14 | +- Po wyzwoleniu node Schedule uruchamia kolejne kroki workflow – np. pobranie danych, wysłanie raportu, synchronizację z API. |
|
| 15 | + |
|
| 16 | +#### Przykłady zastosowań: |
|
| 17 | +- Codzienne pobieranie danych z zewnętrznego serwisu i zapisywanie do bazy. |
|
| 18 | +- Automatyczne wysyłanie raportów sprzedażowych co poniedziałek. |
|
| 19 | +- Regularne sprawdzanie statusu systemów i powiadamianie zespołu na Slacku. |
|
| 20 | + |
|
| 21 | +#### Zalety: |
|
| 22 | +- Pełna automatyzacja cyklicznych procesów. |
|
| 23 | +- Elastyczność – możesz ustawić dowolny harmonogram. |
|
| 24 | +- Integracja z dowolnymi node'ami n8n (API, e-mail, komunikatory, bazy danych). |
|
| 25 | + |
|
| 26 | +--- |
|
| 27 | + |
|
| 28 | +**Podsumowanie:** |
|
| 29 | +Node harmonogramu (Cron) w n8n to kluczowy element do budowy automatyzacji, które mają działać regularnie i bez udziału człowieka. Pozwala na precyzyjne planowanie i uruchamianie workflow w dowolnych odstępach czasu. |
|
| 30 | + |
Modul 4 - Integracje z uslugami/1. Webhook.md
| ... | ... | @@ -0,0 +1,264 @@ |
| 1 | + |
|
| 2 | + |
|
| 3 | +# Webhook w n8n |
|
| 4 | + |
|
| 5 | +Webhook to jeden z najpotężniejszych i najczęściej używanych mechanizmów w automatyzacji. Zrozumienie jego działania otwiera drzwi do nieograniczonych możliwości integracji. |
|
| 6 | + |
|
| 7 | +--- |
|
| 8 | + |
|
| 9 | +## Czym jest webhook? |
|
| 10 | + |
|
| 11 | +Webhook to endpoint HTTP (unikalny adres URL), który odbiera dane wysyłane z zewnętrznych źródeł w czasie rzeczywistym. To jak "odbiornik" czekający na wiadomości z zewnątrz. |
|
| 12 | + |
|
| 13 | +**Prosta analogia:** |
|
| 14 | +Wyobraź sobie skrzynkę pocztową z konkretnym adresem. Każdy, kto zna ten adres, może wysłać do niej list. Webhook działa podobnie – to adres, na który inne aplikacje mogą wysyłać dane. |
|
| 15 | + |
|
| 16 | +**Technicznie:** |
|
| 17 | +- Webhook = URL endpoint w Twojej aplikacji (n8n) |
|
| 18 | +- Zewnętrzny serwis wysyła żądanie HTTP POST na ten URL |
|
| 19 | +- Twoja aplikacja otrzymuje dane i może je przetworzyć |
|
| 20 | + |
|
| 21 | +--- |
|
| 22 | + |
|
| 23 | +## Jak działa webhook? |
|
| 24 | + |
|
| 25 | +### **Tradycyjne API vs Webhook** |
|
| 26 | + |
|
| 27 | +**Tradycyjne API (polling):** |
|
| 28 | +``` |
|
| 29 | +Twoja aplikacja: "Hej API, masz coś dla mnie?" |
|
| 30 | +API: "Nie." |
|
| 31 | +[5 sekund później] |
|
| 32 | +Twoja aplikacja: "Hej API, masz coś dla mnie?" |
|
| 33 | +API: "Nie." |
|
| 34 | +[5 sekund później] |
|
| 35 | +Twoja aplikacja: "Hej API, masz coś dla mnie?" |
|
| 36 | +API: "Tak! Oto dane." |
|
| 37 | +``` |
|
| 38 | +Musisz ciągle pytać, czy są nowe dane. To nieefektywne. |
|
| 39 | + |
|
| 40 | +**Webhook (push):** |
|
| 41 | +``` |
|
| 42 | +Webhook: [czeka cicho] |
|
| 43 | +API: "Hej! Mam nowe dane dla Ciebie!" [wysyła dane na webhook] |
|
| 44 | +Webhook: "Dzięki! Zaczynam przetwarzanie." |
|
| 45 | +``` |
|
| 46 | +API samo przesyła dane, gdy coś się wydarzy. Efektywne i w czasie rzeczywistym. |
|
| 47 | + |
|
| 48 | +--- |
|
| 49 | + |
|
| 50 | +## Rola webhooka w n8n |
|
| 51 | + |
|
| 52 | +W n8n webhook pełni kluczową rolę jako **trigger** – punkt startowy workflow. |
|
| 53 | + |
|
| 54 | +### **Webhook jako trigger:** |
|
| 55 | + |
|
| 56 | +1. **Tworzysz node Webhook** w workflow |
|
| 57 | +2. **n8n generuje unikalny URL** (np. `https://twoj-n8n.com/webhook/abc123`) |
|
| 58 | +3. **Konfigurujesz zewnętrzny serwis**, aby wysyłał dane na ten URL |
|
| 59 | +4. **Gdy dane dotrą, workflow się uruchamia** automatycznie |
|
| 60 | + |
|
| 61 | +--- |
|
| 62 | + |
|
| 63 | +## Do czego służy webhook? |
|
| 64 | + |
|
| 65 | +### **1. Formularze kontaktowe** |
|
| 66 | +Gdy ktoś wypełni formularz na stronie: |
|
| 67 | +``` |
|
| 68 | +Formularz → Webhook → n8n → Google Sheets + Email + Slack |
|
| 69 | +``` |
|
| 70 | + |
|
| 71 | +### **2. Systemy zgłoszeń** |
|
| 72 | +Nowe zgłoszenie od klienta: |
|
| 73 | +``` |
|
| 74 | +System → Webhook → n8n → CRM + Powiadomienie + Ticket |
|
| 75 | +``` |
|
| 76 | + |
|
| 77 | +### **3. Powiadomienia z innych aplikacji** |
|
| 78 | +GitHub, Stripe, Shopify, WordPress – setki usług obsługuje webhooki: |
|
| 79 | +``` |
|
| 80 | +GitHub (nowy commit) → Webhook → n8n → Slack (powiadomienie zespołu) |
|
| 81 | +``` |
|
| 82 | + |
|
| 83 | +### **4. Integracja między systemami** |
|
| 84 | +Połączenie dwóch aplikacji, które same nie potrafią się komunikować: |
|
| 85 | +``` |
|
| 86 | +System A → Webhook → n8n → System B |
|
| 87 | +``` |
|
| 88 | + |
|
| 89 | +### **5. Automatyzacja procesów biznesowych** |
|
| 90 | +``` |
|
| 91 | +E-commerce (nowe zamówienie) → Webhook → n8n → |
|
| 92 | + → Aktualizacja magazynu |
|
| 93 | + → Wysyłka faktury |
|
| 94 | + → Powiadomienie do zespołu |
|
| 95 | +``` |
|
| 96 | + |
|
| 97 | +--- |
|
| 98 | + |
|
| 99 | +## Typy webhooków w n8n |
|
| 100 | + |
|
| 101 | +### **1. Production Webhook** |
|
| 102 | +- Stały, unikalny URL |
|
| 103 | +- Używany w środowisku produkcyjnym |
|
| 104 | +- Workflow musi być aktywny (włączony) |
|
| 105 | +- Dane są przetwarzane automatycznie |
|
| 106 | + |
|
| 107 | +### **2. Test Webhook** |
|
| 108 | +- Tymczasowy URL do testowania |
|
| 109 | +- Używany podczas budowy workflow |
|
| 110 | +- Ważny tylko podczas sesji testowej |
|
| 111 | +- Pozwala zobaczyć, jakie dane przychodzą |
|
| 112 | + |
|
| 113 | +--- |
|
| 114 | + |
|
| 115 | +## Jak stworzyć webhook w n8n? |
|
| 116 | + |
|
| 117 | +### **Krok 1: Dodaj node Webhook** |
|
| 118 | +1. W workflow kliknij "+" |
|
| 119 | +2. Wybierz **Webhook** (Trigger) |
|
| 120 | +3. Ustaw metodę HTTP (najczęściej **POST**) |
|
| 121 | +4. Opcjonalnie: ustaw własną ścieżkę (np. `/kontakt`) |
|
| 122 | + |
|
| 123 | +### **Krok 2: Skopiuj URL** |
|
| 124 | +n8n wygeneruje URL, np.: |
|
| 125 | +``` |
|
| 126 | +https://twoj-n8n.com/webhook/a1b2c3d4-e5f6-7890-abcd-ef1234567890 |
|
| 127 | +``` |
|
| 128 | + |
|
| 129 | +### **Krok 3: Skonfiguruj źródło danych** |
|
| 130 | +W zewnętrznej aplikacji (formularz, CRM, inna usługa): |
|
| 131 | +- Znajdź opcję "Webhook" lub "Integration" |
|
| 132 | +- Wklej skopiowany URL |
|
| 133 | +- Ustaw metodę: POST |
|
| 134 | +- Zapisz |
|
| 135 | + |
|
| 136 | +### **Krok 4: Testuj** |
|
| 137 | +1. W n8n kliknij **"Listen for Test Webhook"** |
|
| 138 | +2. Wyślij testowe dane z zewnętrznej aplikacji |
|
| 139 | +3. Zobaczysz dane w n8n |
|
| 140 | +4. Buduj dalszą część workflow |
|
| 141 | + |
|
| 142 | +--- |
|
| 143 | + |
|
| 144 | +## Przykład: formularz kontaktowy |
|
| 145 | + |
|
| 146 | +**Formularz HTML:** |
|
| 147 | +```html |
|
| 148 | +<form action="https://twoj-n8n.com/webhook/abc123" method="POST"> |
|
| 149 | + <input name="name" placeholder="Imię" required> |
|
| 150 | + <input name="email" type="email" placeholder="Email" required> |
|
| 151 | + <textarea name="message" placeholder="Wiadomość" required></textarea> |
|
| 152 | + <button type="submit">Wyślij</button> |
|
| 153 | +</form> |
|
| 154 | +``` |
|
| 155 | + |
|
| 156 | +**Workflow w n8n:** |
|
| 157 | +``` |
|
| 158 | +Webhook (odbiera dane) |
|
| 159 | + ↓ |
|
| 160 | +Set (formatuje dane) |
|
| 161 | + ↓ |
|
| 162 | +Google Sheets (zapisuje zgłoszenie) |
|
| 163 | + ↓ |
|
| 164 | +Discord (powiadomienie do zespołu) |
|
| 165 | + ↓ |
|
| 166 | +HTTP Request (odpowiedź do użytkownika: "Dziękujemy!") |
|
| 167 | +``` |
|
| 168 | + |
|
| 169 | +**Dane otrzymane przez webhook:** |
|
| 170 | +```json |
|
| 171 | +{ |
|
| 172 | + "body": { |
|
| 173 | + "name": "Jan Kowalski", |
|
| 174 | + "email": "jan@example.com", |
|
| 175 | + "message": "Chciałbym uzyskać więcej informacji..." |
|
| 176 | + } |
|
| 177 | +} |
|
| 178 | +``` |
|
| 179 | + |
|
| 180 | +--- |
|
| 181 | + |
|
| 182 | +## Bezpieczeństwo webhooków |
|
| 183 | + |
|
| 184 | +### **1. Używaj HTTPS** |
|
| 185 | +Zawsze korzystaj z szyfrowanego połączenia (https://). |
|
| 186 | + |
|
| 187 | +### **2. Weryfikuj źródło** |
|
| 188 | +Niektóre usługi wysyłają sygnaturę lub token weryfikacyjny: |
|
| 189 | +``` |
|
| 190 | +X-Signature: abc123... |
|
| 191 | +``` |
|
| 192 | +Możesz sprawdzić to w node'dzie Function. |
|
| 193 | + |
|
| 194 | +### **3. Ukryj URL** |
|
| 195 | +Nie publikuj URL webhooka publicznie – traktuj go jak hasło. |
|
| 196 | + |
|
| 197 | +### **4. Waliduj dane** |
|
| 198 | +Sprawdzaj, czy otrzymane dane są poprawne, zanim je przetworzysz. |
|
| 199 | + |
|
| 200 | +--- |
|
| 201 | + |
|
| 202 | +## Debugowanie webhooków |
|
| 203 | + |
|
| 204 | +### Problem: Webhook nie odbiera danych |
|
| 205 | +Sprawdź, czy workflow jest aktywny (włączony) |
|
| 206 | +Sprawdź URL – czy jest poprawnie wklejony w zewnętrznej aplikacji |
|
| 207 | +Sprawdź metodę HTTP (POST/GET) |
|
| 208 | +Sprawdź logi serwera n8n |
|
| 209 | + |
|
| 210 | +### Problem: Dane przychodzą, ale są puste |
|
| 211 | +Sprawdź format danych (JSON, form-data, XML) |
|
| 212 | +Sprawdź nagłówek Content-Type |
|
| 213 | +Zobacz, co faktycznie przychodzi w Input node'a Webhook |
|
| 214 | + |
|
| 215 | +### Narzędzia pomocnicze: |
|
| 216 | +- Postman – wysyłanie testowych żądań HTTP |
|
| 217 | +- curl – testowanie z linii komend |
|
| 218 | +- webhook.site – inspekcja przychodzących danych |
|
| 219 | + |
|
| 220 | +--- |
|
| 221 | + |
|
| 222 | +## Zalety webhooków |
|
| 223 | + |
|
| 224 | +Reakcja w czasie rzeczywistym – dane są przetwarzane natychmiast |
|
| 225 | +Efektywność – nie musisz ciągle odpytywać API (polling) |
|
| 226 | +Uniwersalność – prawie każda usługa obsługuje webhooki |
|
| 227 | +Prostota – łatwa konfiguracja, nie wymaga programowania |
|
| 228 | +Skalowalność – możesz obsługiwać tysiące zdarzeń |
|
| 229 | + |
|
| 230 | +--- |
|
| 231 | + |
|
| 232 | +## Wady webhooków |
|
| 233 | + |
|
| 234 | +Wymaga publicznego URL – n8n musi być dostępny z internetu |
|
| 235 | +Bezpieczeństwo – musisz chronić endpoint przed nadużyciami |
|
| 236 | +Brak gwarancji dostarczenia – jeśli serwer n8n jest wyłączony, dane mogą zostać utracone |
|
| 237 | +Debugowanie – trudniej testować niż scheduled workflows |
|
| 238 | + |
|
| 239 | +--- |
|
| 240 | + |
|
| 241 | +## Kiedy używać webhooka? |
|
| 242 | + |
|
| 243 | +Gdy potrzebujesz reakcji w czasie rzeczywistym |
|
| 244 | +Gdy integrujesz usługi, które wysyłają powiadomienia |
|
| 245 | +Gdy budujesz API endpoint dla zewnętrznych aplikacji |
|
| 246 | +Gdy łączysz formularze, systemy zgłoszeń, e-commerce |
|
| 247 | + |
|
| 248 | +**Nie używaj webhooka, gdy:** |
|
| 249 | +Chcesz regularnie odpytywać API (użyj Schedule Trigger) |
|
| 250 | +Źródło danych nie obsługuje webhooków (użyj HTTP Request w pętli) |
|
| 251 | + |
|
| 252 | +--- |
|
| 253 | + |
|
| 254 | +## Podsumowanie |
|
| 255 | + |
|
| 256 | +Webhook to fundamentalny mechanizm w automatyzacji i integracji. W n8n pełni rolę **triggera w czasie rzeczywistym**, który odbiera dane z zewnętrznych źródeł i uruchamia workflow. |
|
| 257 | + |
|
| 258 | +**Zapamiętaj:** |
|
| 259 | +- Webhook = URL endpoint odbierający dane |
|
| 260 | +- Działa na zasadzie "push" (usługa wysyła dane sama) |
|
| 261 | +- To najczęstszy sposób integracji aplikacji webowych |
|
| 262 | +- Umożliwia budowanie zaawansowanych automatyzacji bez programowania |
|
| 263 | + |
|
| 264 | +Teraz możesz tworzyć workflow, które reagują natychmiast na wydarzenia w innych systemach – formularze, zgłoszenia, zamówienia, powiadomienia i wiele więcej! |
Modul 4 - Integracje z uslugami/2. Warsztat GCP.md
| ... | ... | @@ -0,0 +1,199 @@ |
| 1 | + |
|
| 2 | + |
|
| 3 | +Ten warsztat przeprowadzi Cię przez pełną integrację n8n z usługami Google Cloud Platform. Nauczysz się łączyć z Google Sheets, autoryzować przez OAuth2, pobierać i zapisywać dane oraz budować kompletny workflow z webhookiem i powiadomieniami. |
|
| 4 | + |
|
| 5 | +--- |
|
| 6 | + |
|
| 7 | +## 1. Połączenie z Google Sheets |
|
| 8 | + |
|
| 9 | +Google Sheets to jedno z najpopularniejszych narzędzi do współdzielenia i przechowywania danych w chmurze. W n8n możesz: |
|
| 10 | +- Odczytywać dane z arkuszy |
|
| 11 | +- Dodawać nowe wiersze |
|
| 12 | +- Aktualizować i usuwać dane |
|
| 13 | +- Wyszukiwać konkretne rekordy |
|
| 14 | + |
|
| 15 | +**Wymagania:** |
|
| 16 | +- Konto Google |
|
| 17 | +- Arkusz Google Sheets (może być pusty na start) |
|
| 18 | +- Konfiguracja OAuth2 w Google Cloud Console |
|
| 19 | + |
|
| 20 | +--- |
|
| 21 | + |
|
| 22 | +## 2. Autoryzacja przez Google OAuth |
|
| 23 | + |
|
| 24 | +OAuth2 to bezpieczny standard autoryzacji, który pozwala aplikacjom (takim jak n8n) uzyskać dostęp do Twoich danych Google bez udostępniania hasła. |
|
| 25 | + |
|
| 26 | +**Jak działa OAuth2?** |
|
| 27 | +1. Aplikacja (n8n) prosi o pozwolenie dostępu |
|
| 28 | +2. Logujesz sie do GCP |
|
| 29 | +3. Potwierdzasz uprawnienia |
|
| 30 | +4. Google generuje token dostępu |
|
| 31 | +5. n8n używa tokenu do komunikacji z API Google |
|
| 32 | + |
|
| 33 | +**Zalety:** |
|
| 34 | +- Bezpieczeństwo – nie udostępniasz hasła |
|
| 35 | +- Kontrola – możesz odwołać dostęp w każdej chwili |
|
| 36 | +- Zakres uprawnień – aplikacja ma dostęp tylko do tego, co zatwierdzisz |
|
| 37 | + |
|
| 38 | +--- |
|
| 39 | + |
|
| 40 | +## 3. Czym jest Client ID i Client Secret |
|
| 41 | + |
|
| 42 | +To para kluczy, które identyfikują Twoją aplikację w systemie OAuth2. |
|
| 43 | + |
|
| 44 | +**Client ID:** |
|
| 45 | +- Publiczny identyfikator aplikacji |
|
| 46 | +- Mówi Google, która aplikacja próbuje się połączyć |
|
| 47 | +- Przykład: `123456789-abc.apps.googleusercontent.com` |
|
| 48 | + |
|
| 49 | +**Client Secret:** |
|
| 50 | +- Tajny klucz aplikacji |
|
| 51 | +- Służy do weryfikacji autentyczności żądań |
|
| 52 | +- **Nigdy nie udostępniaj go publicznie!** |
|
| 53 | + |
|
| 54 | +**Jak je uzyskać?** |
|
| 55 | +1. Przejdź do [Google Cloud Console](https://console.cloud.google.com) |
|
| 56 | +2. Utwórz nowy projekt (lub wybierz istniejący) |
|
| 57 | +3. Włącz API (Google Sheets API, Gmail API, Drive API) |
|
| 58 | +4. Przejdź do "Credentials" → "Create Credentials" → "OAuth 2.0 Client ID" |
|
| 59 | +5. Wybierz typ: "Web application" |
|
| 60 | +6. Dodaj Redirect URI: `https://twoja-domena-n8n.com/rest/oauth2-credential/callback` |
|
| 61 | +7. Skopiuj Client ID i Client Secret |
|
| 62 | + |
|
| 63 | +--- |
|
| 64 | + |
|
| 65 | +## 4. Ustawienie połączenia OAuth2 w n8n |
|
| 66 | + |
|
| 67 | +**Krok po kroku:** |
|
| 68 | + |
|
| 69 | +1. **W n8n dodaj credentials:** |
|
| 70 | + - Przejdź do Settings → Credentials |
|
| 71 | + - Kliknij "Add Credential" |
|
| 72 | + - Wybierz "Google OAuth2 API" |
|
| 73 | + |
|
| 74 | +2. **Wypełnij dane:** |
|
| 75 | + - Client ID: (skopiuj z Google Cloud Console) |
|
| 76 | + - Client Secret: (skopiuj z Google Cloud Console) |
|
| 77 | + - Scope: wybierz odpowiednie uprawnienia (np. `https://www.googleapis.com/auth/spreadsheets`) |
|
| 78 | + |
|
| 79 | +3. **Autoryzuj:** |
|
| 80 | + - Kliknij "Connect" |
|
| 81 | + - Zaloguj się na konto Google |
|
| 82 | + - Potwierdź uprawnienia |
|
| 83 | + |
|
| 84 | +4. **Zapisz credentials:** |
|
| 85 | + - Nadaj nazwę (np. "Google Sheets - Konto firmowe") |
|
| 86 | + - Zapisz |
|
| 87 | + |
|
| 88 | +Teraz możesz używać tych credentials w node'ach Google Sheets, Gmail, Drive itd. |
|
| 89 | + |
|
| 90 | +--- |
|
| 91 | + |
|
| 92 | +## 5. Integracja API na podstawie Google Cloud |
|
| 93 | + |
|
| 94 | +Google Cloud oferuje setki API do różnych usług. Aby z nich korzystać: |
|
| 95 | + |
|
| 96 | +**1. Włącz API w Google Cloud Console:** |
|
| 97 | +- Google Sheets API |
|
| 98 | +- Gmail API |
|
| 99 | +- Google Drive API |
|
| 100 | +- Google Calendar API |
|
| 101 | +- i wiele innych |
|
| 102 | + |
|
| 103 | +**2. Upewnij się, że OAuth2 ma odpowiednie zakresy (scopes):** |
|
| 104 | +- Sheets: `https://www.googleapis.com/auth/spreadsheets` |
|
| 105 | +- Gmail: `https://www.googleapis.com/auth/gmail.modify` |
|
| 106 | +- Drive: `https://www.googleapis.com/auth/drive` |
|
| 107 | + |
|
| 108 | +**3. Użyj odpowiedniego node'a w n8n:** |
|
| 109 | +- Wybierz credentials, które skonfigurowałeś |
|
| 110 | +- Wybierz operację (Get, Create, Update, Delete) |
|
| 111 | +- Uzupełnij parametry |
|
| 112 | + |
|
| 113 | +--- |
|
| 114 | + |
|
| 115 | +## 6. Odczyt danych z arkusza (Get Rows) |
|
| 116 | + |
|
| 117 | +**Node: Google Sheets → Get Rows** |
|
| 118 | + |
|
| 119 | +**Przykład:** |
|
| 120 | +Masz arkusz z listą klientów i chcesz pobrać wszystkie dane. |
|
| 121 | + |
|
| 122 | +**Konfiguracja:** |
|
| 123 | +1. Wybierz credentials |
|
| 124 | +2. Wybierz arkusz (Spreadsheet) |
|
| 125 | +3. Wybierz zakładkę (Sheet) |
|
| 126 | +4. Opcjonalnie: ustaw zakres (Range), np. `A1:D100` |
|
| 127 | +5. Uruchom node |
|
| 128 | + |
|
| 129 | +**Output:** |
|
| 130 | +```json |
|
| 131 | +[ |
|
| 132 | + {"Imię": "Jan", "Email": "jan@example.com", "Status": "aktywny"}, |
|
| 133 | + {"Imię": "Anna", "Email": "anna@example.com", "Status": "nieaktywny"} |
|
| 134 | +] |
|
| 135 | +``` |
|
| 136 | + |
|
| 137 | +**Wskazówki:** |
|
| 138 | +- Dane są zwracane jako tablica obiektów |
|
| 139 | +- Pierwsza linia arkusza to nagłówki kolumn |
|
| 140 | +- Możesz filtrować dane node'm **Filter** lub **Function** |
|
| 141 | + |
|
| 142 | +--- |
|
| 143 | + |
|
| 144 | +## 7. Dodanie nowego wiersza (Append Row) |
|
| 145 | + |
|
| 146 | +**Node: Google Sheets → Append Row** |
|
| 147 | + |
|
| 148 | +**Przykład:** |
|
| 149 | +Zapisujesz nowe zgłoszenie z formularza do arkusza. |
|
| 150 | + |
|
| 151 | +**Konfiguracja:** |
|
| 152 | +1. Wybierz credentials |
|
| 153 | +2. Wybierz arkusz i zakładkę |
|
| 154 | +3. Podaj dane do zapisania: |
|
| 155 | + - Możesz ręcznie wpisać wartości |
|
| 156 | + - Lub użyć wyrażeń: `{{ $json.name }}`, `{{ $json.email }}` |
|
| 157 | + |
|
| 158 | +**Przykład danych:** |
|
| 159 | +``` |
|
| 160 | +Kolumna A: {{ $json.name }} |
|
| 161 | +Kolumna B: {{ $json.email }} |
|
| 162 | +Kolumna C: {{ $json.message }} |
|
| 163 | +Kolumna D: {{ $now }} |
|
| 164 | +``` |
|
| 165 | + |
|
| 166 | +**Output:** |
|
| 167 | +Wiersz zostanie dodany na końcu arkusza. |
|
| 168 | + |
|
| 169 | +**Wskazówki:** |
|
| 170 | +- Upewnij się, że kolejność kolumn odpowiada strukturze arkusza |
|
| 171 | +- Możesz użyć node'a **Set** do przygotowania danych przed zapisem |
|
| 172 | + |
|
| 173 | +--- |
|
| 174 | + |
|
| 175 | +## 8. Testowe pobranie danych z Gmaila lub Drive przez API |
|
| 176 | + |
|
| 177 | +### **Gmail - odczyt wiadomości** |
|
| 178 | + |
|
| 179 | +**Node: Gmail → Get Messages** |
|
| 180 | + |
|
| 181 | +1. Wybierz credentials |
|
| 182 | +2. Ustaw filtry (np. tylko nieprzeczytane, od konkretnego nadawcy) |
|
| 183 | +3. Uruchom node |
|
| 184 | + |
|
| 185 | +**Output:** |
|
| 186 | +Lista wiadomości e-mail z treścią, załącznikami, nadawcą itd. |
|
| 187 | + |
|
| 188 | +### **Google Drive - lista plików** |
|
| 189 | + |
|
| 190 | +**Node: Google Drive → List** |
|
| 191 | + |
|
| 192 | +1. Wybierz credentials |
|
| 193 | +2. Opcjonalnie: ustaw folder |
|
| 194 | +3. Ustaw filtry (np. tylko pliki PDF) |
|
| 195 | + |
|
| 196 | +**Output:** |
|
| 197 | +Lista plików z metadanymi (nazwa, ID, typ, data utworzenia) |
|
| 198 | + |
|
| 199 | +--- |
Modul 4 - Integracje z uslugami/2.1 GCP Tworzenie porjektu.md
| ... | ... | @@ -0,0 +1,340 @@ |
| 1 | + |
|
| 2 | + |
|
| 3 | +## Krok 1: Wejdź do Google Cloud Console |
|
| 4 | + |
|
| 5 | +Przejdź do [Google Cloud Console](https://console.cloud.google.com) i zaloguj się na swoje konto Google. |
|
| 6 | + |
|
| 7 | +--- |
|
| 8 | + |
|
| 9 | +## Krok 2: Wybierz projekt |
|
| 10 | + |
|
| 11 | +W górnym lewym rogu ekranu, obok logo Google Cloud, znajdziesz rozwijane menu wyboru projektu. |
|
| 12 | + |
|
| 13 | +**Co zobaczysz:** |
|
| 14 | +- Nazwę obecnego projektu (jeśli już jakiś masz) |
|
| 15 | +- Możliwość przełączania się między projektami |
|
| 16 | +- Opcję **"Utwórz projekt"** (NEW PROJECT) |
|
| 17 | + |
|
| 18 | +Kliknij na to menu, aby otworzyć okno wyboru projektu. |
|
| 19 | + |
|
| 20 | + |
|
| 21 | + |
|
| 22 | + |
|
| 23 | + |
|
| 24 | +--- |
|
| 25 | + |
|
| 26 | +## Krok 3: Utwórz nowy projekt |
|
| 27 | + |
|
| 28 | + |
|
| 29 | + |
|
| 30 | +W oknie wyboru projektów kliknij przycisk **"NEW PROJECT"** lub **"Utwórz projekt"**. |
|
| 31 | + |
|
| 32 | +**Formularz tworzenia projektu:** |
|
| 33 | + |
|
| 34 | +1. **Nazwa projektu** (Project name) |
|
| 35 | + - Podaj dowolną nazwę, np. `n8n-integracja`, `Automatyzacja-Google`, `MojaFirma-API` |
|
| 36 | + - Nazwa powinna być opisowa i łatwa do zapamiętania |
|
| 37 | + |
|
| 38 | +2. **Organizacja** (Organization) – opcjonalne |
|
| 39 | + - Jeśli masz konto Google Workspace, możesz przypisać projekt do organizacji |
|
| 40 | + - Jeśli pracujesz indywidualnie, zostaw domyślną opcję "No organization" |
|
| 41 | + |
|
| 42 | +3. **Lokalizacja** (Location) – opcjonalne |
|
| 43 | + - Wybierz folder, jeśli organizujesz projekty hierarchicznie |
|
| 44 | + - Możesz pominąć, jeśli nie używasz folderów |
|
| 45 | + |
|
| 46 | +**Ważne:** |
|
| 47 | +- Każdy projekt ma unikalny **Project ID**, który jest generowany automatycznie na podstawie nazwy |
|
| 48 | +- Project ID może być edytowany przed utworzeniem projektu |
|
| 49 | +- Po utworzeniu projektu, ID nie może być zmienione |
|
| 50 | + |
|
| 51 | + |
|
| 52 | + |
|
| 53 | + |
|
| 54 | +--- |
|
| 55 | + |
|
| 56 | +## Krok 4: Kliknij "CREATE" (Utwórz) |
|
| 57 | + |
|
| 58 | +Po wypełnieniu nazwy projektu kliknij przycisk **"CREATE"** lub **"Utwórz"**. |
|
| 59 | + |
|
| 60 | +Google Cloud utworzy projekt i przekieruje Cię do jego dashboardu. Proces może zająć kilka sekund. |
|
| 61 | + |
|
| 62 | +--- |
|
| 63 | + |
|
| 64 | +## Krok 5: Ekran zgody |
|
| 65 | + |
|
| 66 | + |
|
| 67 | + |
|
| 68 | +Po utworzeniu projektu Google Cloud Platform może wyświetlić **ekran zgody OAuth** (OAuth Consent Screen). Jest to kluczowy krok, jeśli planujesz integrować zewnętrzne aplikacje (jak n8n) z usługami Google. |
|
| 69 | + |
|
| 70 | +### **Czym jest ekran zgody?** |
|
| 71 | + |
|
| 72 | +Ekran zgody to strona, którą widzą użytkownicy, gdy aplikacja (np. n8n) prosi o dostęp do ich danych Google (np. Gmail, Google Sheets, Drive). |
|
| 73 | + |
|
| 74 | +**Co zawiera ekran zgody:** |
|
| 75 | +- Nazwę aplikacji |
|
| 76 | +- Logo aplikacji (opcjonalnie) |
|
| 77 | +- Informacje o tym, do jakich danych aplikacja chce uzyskać dostęp |
|
| 78 | +- Linki do polityki prywatności i warunków użytkowania |
|
| 79 | +- Przycisk "Zezwól" lub "Odrzuć" |
|
| 80 | + |
|
| 81 | +### **Dlaczego to ważne?** |
|
| 82 | + |
|
| 83 | +Bez skonfigurowania ekranu zgody nie będziesz mógł: |
|
| 84 | +- Autoryzować n8n przez OAuth2 |
|
| 85 | +- Uzyskać dostępu do Google Sheets, Gmail, Drive i innych usług Google |
|
| 86 | +- Tworzyć automatyzacji łączących się z Twoim kontem Google |
|
| 87 | + |
|
| 88 | +### **Konfiguracja ekranu zgody** |
|
| 89 | + |
|
| 90 | + |
|
| 91 | + |
|
| 92 | +Po przejściu do sekcji **"OAuth consent screen"**, zobaczysz opcje wyboru typu użytkowników oraz przycisk **"Rozpocznij"** lub **"Get Started"**. |
|
| 93 | + |
|
| 94 | +**Kliknij przycisk "Rozpocznij"**, aby przejść do formularza konfiguracji ekranu zgody. W następnym kroku wypełnisz szczegółowe informacje o aplikacji i zakresach uprawnień. |
|
| 95 | + |
|
| 96 | +--- |
|
| 97 | + |
|
| 98 | +## Krok 6: Tworzenie aplikacji |
|
| 99 | + |
|
| 100 | + |
|
| 101 | + |
|
| 102 | +Po skonfigurowaniu ekranu zgody następnym krokiem jest utworzenie **aplikacji OAuth 2.0** w Google Cloud Platform. To właśnie ta aplikacja będzie reprezentować n8n i umożliwi mu dostęp do Twoich usług Google. |
|
| 103 | + |
|
| 104 | +### **Czym jest aplikacja w kontekście GCP?** |
|
| 105 | + |
|
| 106 | +W Google Cloud Platform **aplikacja** to zestaw credentials (danych uwierzytelniających), które pozwalają zewnętrznym narzędziom (jak n8n) łączyć się z Twoimi usługami Google przez OAuth 2.0. |
|
| 107 | + |
|
| 108 | +**Kluczowe elementy aplikacji:** |
|
| 109 | +- **Client ID** – publiczny identyfikator aplikacji, który mówi Google, która aplikacja próbuje się połączyć |
|
| 110 | +- **Client Secret** – tajny klucz aplikacji, służący do weryfikacji autentyczności żądań (nigdy nie udostępniaj go publicznie!) |
|
| 111 | +- **Redirect URIs** – adresy URL, na które Google może wysyłać odpowiedzi po autoryzacji (np. `https://twoja-domena-n8n.com/rest/oauth2-credential/callback`) |
|
| 112 | +- **Scopes (zakresy uprawnień)** – lista usług Google, do których aplikacja może uzyskać dostęp (np. Google Sheets, Gmail, Drive) |
|
| 113 | + |
|
| 114 | +### **Dlaczego potrzebujesz aplikacji?** |
|
| 115 | + |
|
| 116 | +Bez utworzenia aplikacji OAuth 2.0: |
|
| 117 | +- n8n nie będzie mogło się autoryzować w Google |
|
| 118 | +- Nie uzyskasz Client ID i Client Secret potrzebnych do konfiguracji credentials w n8n |
|
| 119 | +- Nie będziesz mógł tworzyć automatyzacji łączących się z Google Sheets, Gmail, Drive itd. |
|
| 120 | + |
|
| 121 | +### **Proces tworzenia aplikacji** |
|
| 122 | + |
|
| 123 | +W następnych krokach: |
|
| 124 | +1. Przejdziesz do sekcji **"Credentials"** w Google Cloud Console |
|
| 125 | +2. Wybierzesz **"Create Credentials"** → **"OAuth 2.0 Client ID"** |
|
| 126 | +3. Określisz typ aplikacji (najczęściej **"Web application"**) |
|
| 127 | +4. Dodasz Redirect URI (adres callback z n8n) |
|
| 128 | +5. Skopiujesz Client ID i Client Secret do n8n |
|
| 129 | + |
|
| 130 | +--- |
|
| 131 | + |
|
| 132 | +## Krok 7: Wybór typu odbiorców |
|
| 133 | + |
|
| 134 | + |
|
| 135 | + |
|
| 136 | +Podczas konfiguracji ekranu zgody OAuth musisz wybrać **typ odbiorców** (User Type), który określa, kto będzie mógł korzystać z Twojej aplikacji. |
|
| 137 | + |
|
| 138 | +### **Wewnętrzny (Internal)** |
|
| 139 | + |
|
| 140 | +Dostęp tylko dla użytkowników z Twojej organizacji Google Workspace. Nie musisz przesyłać aplikacji do weryfikacji przez Google. Wybierz tę opcję, jeśli automatyzacje mają być używane wyłącznie w Twojej firmie. |
|
| 141 | + |
|
| 142 | +### **Z zewnątrz (External)** |
|
| 143 | + |
|
| 144 | +Każdy użytkownik testowy posiadający konto Google może uzyskać dostęp. Twoja aplikacja będzie działała w trybie testowym i dostępna tylko dla użytkowników, których dodasz do listy użytkowników testowych. Gdy aplikacja będzie gotowa do środowiska produkcyjnego, może być konieczne przesłanie jej do weryfikacji przez Google. Wybierz tę opcję, jeśli chcesz korzystać z automatyzacji na osobistym koncie Google lub udostępnić aplikację szerszemu gronu użytkowników. |
|
| 145 | + |
|
| 146 | +**Dla celów integracji n8n z osobistym kontem Google lub małego zespołu wystarczy opcja "Z zewnątrz" (External) z dodaniem swojego emaila jako użytkownika testowego.** |
|
| 147 | + |
|
| 148 | +--- |
|
| 149 | + |
|
| 150 | +## Krok 8: Dane kontaktowe administratora aplikacji |
|
| 151 | + |
|
| 152 | + |
|
| 153 | + |
|
| 154 | +Po wybraniu typu odbiorców musisz podać **dane kontaktowe administratora aplikacji**. To informacje, które Google będzie wyświetlać użytkownikom na ekranie zgody oraz wykorzystywać do komunikacji w przypadku problemów z aplikacją. |
|
| 155 | + |
|
| 156 | +**Wymagane dane:** |
|
| 157 | +- **Adres email administratora** – Twój adres email, na który Google może wysyłać powiadomienia dotyczące aplikacji |
|
| 158 | +- **Nazwa aplikacji** – nazwa wyświetlana użytkownikom podczas autoryzacji (np. "n8n Automatyzacja", "Moja Firma - Integracje") |
|
| 159 | + |
|
| 160 | +**Opcjonalne dane:** |
|
| 161 | +- **Logo aplikacji** – możesz dodać własne logo, które będzie wyświetlane na ekranie zgody |
|
| 162 | +- **Link do polityki prywatności** – jeśli aplikacja jest publiczna lub używana przez zewnętrznych użytkowników |
|
| 163 | +- **Link do warunków użytkowania** – dla aplikacji publicznych |
|
| 164 | + |
|
| 165 | +Po wypełnieniu tych danych kliknij **"Zapisz i kontynuuj"** lub **"Save and Continue"**, aby przejść do kolejnego kroku konfiguracji. |
|
| 166 | + |
|
| 167 | +--- |
|
| 168 | + |
|
| 169 | + |
|
| 170 | + |
|
| 171 | +--- |
|
| 172 | +Krok 9. Przejdz do danych logowania |
|
| 173 | + |
|
| 174 | + |
|
| 175 | + |
|
| 176 | +--- |
|
| 177 | + |
|
| 178 | +## 10. Dane logowania w GCP przy tworzeniu aplikacji |
|
| 179 | + |
|
| 180 | +Dane logowania (credentials) w Google Cloud Platform to zestaw informacji, które pozwalają Twojej aplikacji (np. n8n) bezpiecznie łączyć się z usługami Google. Są one niezbędne do autoryzacji i komunikacji przez OAuth2. |
|
| 181 | + |
|
| 182 | +**Główne elementy danych logowania:** |
|
| 183 | +- **Client ID** – publiczny identyfikator Twojej aplikacji. Informuje Google, która aplikacja próbuje się połączyć. |
|
| 184 | +- **Client Secret** – tajny klucz, który potwierdza autentyczność aplikacji. Nigdy nie udostępniaj go publicznie! |
|
| 185 | +- **Redirect URI** – adres URL, na który Google przekieruje użytkownika po udanej autoryzacji. Musi być zgodny z konfiguracją w n8n. |
|
| 186 | + |
|
| 187 | +**Po co są potrzebne?** |
|
| 188 | +- Umożliwiają bezpieczne logowanie i autoryzację użytkowników. |
|
| 189 | +- Pozwalają aplikacji uzyskać dostęp do wybranych usług Google (np. Gmail, Sheets, Drive). |
|
| 190 | +- Są wymagane do skonfigurowania integracji OAuth2 w n8n. |
|
| 191 | + |
|
| 192 | +**Jak je uzyskać?** |
|
| 193 | +1. Po utworzeniu aplikacji w GCP przejdź do sekcji "Credentials". |
|
| 194 | +2. Wybierz "Create Credentials" → "OAuth 2.0 Client ID". |
|
| 195 | +3. Skopiuj wygenerowany Client ID i Client Secret. |
|
| 196 | +4. Wprowadź je w konfiguracji node'a n8n (np. Google Sheets, Gmail). |
|
| 197 | + |
|
| 198 | +**Podsumowanie:** |
|
| 199 | +Dane logowania to klucz do bezpiecznej integracji n8n z Google. Dzięki nim Twoje workflow może automatycznie pobierać, zapisywać i przetwarzać dane z usług Google zgodnie z uprawnieniami nadanymi przez użytkownika. |
|
| 200 | + |
|
| 201 | + |
|
| 202 | + |
|
| 203 | +--- |
|
| 204 | + |
|
| 205 | +## Wyjaśnienie pól przy tworzeniu identyfikatora klienta OAuth w GCP |
|
| 206 | + |
|
| 207 | +Na etapie tworzenia identyfikatora klienta OAuth w Google Cloud Platform musisz wypełnić kilka kluczowych pól: |
|
| 208 | + |
|
| 209 | +**Typ aplikacji** |
|
| 210 | +- Wybierz "Aplikacja internetowa" – to najczęstszy wybór dla integracji z n8n, która działa jako web service. |
|
| 211 | + |
|
| 212 | +**Nazwa** |
|
| 213 | +- Nazwa klienta OAuth 2.0. Służy tylko do identyfikacji w konsoli Google, nie jest widoczna dla użytkowników. Możesz wpisać np. "n8n Integracja". |
|
| 214 | + |
|
| 215 | +**Autoryzowane źródła JavaScript** |
|
| 216 | +- Te URI są wymagane tylko, jeśli Twoja aplikacja korzysta z autoryzacji bezpośrednio z przeglądarki (np. SPA). W przypadku n8n najczęściej możesz zostawić puste. |
|
| 217 | + |
|
| 218 | +**Autoryzowane identyfikatory URI przekierowania** |
|
| 219 | +- To najważniejsze pole dla integracji z n8n! |
|
| 220 | +- Musisz tu podać adres, na który Google przekieruje użytkownika po udanej autoryzacji OAuth2. |
|
| 221 | +- W n8n jest to adres callback, np.: |
|
| 222 | + - `https://twoja-domena-n8n.com/rest/oauth2-credential/callback` |
|
| 223 | + - Jeśli używasz n8n lokalnie: `http://localhost:5678/rest/oauth2-credential/callback` |
|
| 224 | +- Bez poprawnego URI nie będzie możliwe dokończenie procesu autoryzacji – Google wyświetli błąd (jak na obrazku: "Identyfikator URI nie może być pusty"). |
|
| 225 | +- Możesz dodać wiele URI, jeśli masz kilka środowisk (produkcyjne, testowe). |
|
| 226 | + |
|
| 227 | +**Uwaga:** |
|
| 228 | +- Po dodaniu URI, Google automatycznie doda domeny do ekranu zgody OAuth jako "domeny autoryzowane". |
|
| 229 | +- Zmiany mogą zacząć obowiązywać po kilku minutach do kilku godzin. |
|
| 230 | + |
|
| 231 | +**Podsumowanie:** |
|
| 232 | +- Najważniejsze dla n8n jest poprawne podanie identyfikatora URI przekierowania – bez tego integracja nie zadziała. |
|
| 233 | +- Pozostałe pola możesz skonfigurować według własnych potrzeb, ale dla n8n najczęściej wystarczy podstawowa konfiguracja. |
|
| 234 | + |
|
| 235 | +11. Wpradzenie danych do n8n |
|
| 236 | + |
|
| 237 | + |
|
| 238 | + |
|
| 239 | +--- |
|
| 240 | + |
|
| 241 | +Na przesłanym obrazie widzisz okno konfiguracji połączenia Gmail OAuth2 w n8n |
|
| 242 | + |
|
| 243 | +- **OAuth Redirect URL** |
|
| 244 | + - Adres URL, na który Google przekieruje użytkownika po autoryzacji. |
|
| 245 | + - Ten adres należy skopiować i wkleić w konfiguracji aplikacji w Google Cloud Platform (pole "Autoryzowane identyfikatory URI przekierowania"). |
|
| 246 | + - Przykład: `https://n8n.sodmin.pt/rest/oauth2-credential/callback` |
|
| 247 | + |
|
| 248 | +- **Client ID** |
|
| 249 | + - Publiczny identyfikator aplikacji wygenerowany w Google Cloud Platform. |
|
| 250 | + - Pozwala Google rozpoznać, która aplikacja próbuje się połączyć. |
|
| 251 | + - Wymagane do poprawnej autoryzacji. |
|
| 252 | + |
|
| 253 | +- **Client Secret** |
|
| 254 | + - Tajny klucz aplikacji wygenerowany w Google Cloud Platform. |
|
| 255 | + - Służy do weryfikacji autentyczności żądań. |
|
| 256 | + - Nigdy nie udostępniaj go publicznie! |
|
| 257 | + |
|
| 258 | +- **Allowed HTTP Request Domains** |
|
| 259 | + - Określa, do jakich domen n8n może wysyłać żądania HTTP w ramach tego połączenia. |
|
| 260 | + - Domyślnie ustawione na "All" (wszystkie domeny dozwolone). |
|
| 261 | + - Możesz ograniczyć do wybranych domen dla większego bezpieczeństwa. |
|
| 262 | + |
|
| 263 | +- **Enterprise plan users can pull in credentials from external vaults** |
|
| 264 | + - Informacja dla użytkowników wersji Enterprise – mogą pobierać dane logowania z zewnętrznych sejfów (vaults). |
|
| 265 | + |
|
| 266 | +- **Save** |
|
| 267 | + - Przycisk zapisujący konfigurację połączenia. |
|
| 268 | + |
|
| 269 | +Każde z tych pól jest niezbędne do poprawnej integracji Gmaila z n8n przez OAuth2. Prawidłowe wypełnienie gwarantuje bezpieczne i stabilne połączenie z usługą Google. |
|
| 270 | + |
|
| 271 | + |
|
| 272 | + |
|
| 273 | +--- |
|
| 274 | + |
|
| 275 | +## 12. Klient OAuth został utworzony – co oznaczają te dane? |
|
| 276 | + |
|
| 277 | +Na załączonym obrazie widzisz podsumowanie utworzenia klienta OAuth w Google Cloud Platform. Otrzymujesz dwie kluczowe informacje: |
|
| 278 | + |
|
| 279 | +- **Identyfikator klienta (Client ID)** |
|
| 280 | + - To publiczny identyfikator Twojej aplikacji. Pozwala Google rozpoznać, która aplikacja próbuje się połączyć z usługami Google. |
|
| 281 | + - Wprowadzasz go w konfiguracji n8n, aby powiązać workflow z konkretną aplikacją Google. |
|
| 282 | + |
|
| 283 | +- **Tajny klucz klienta (Client Secret)** |
|
| 284 | + - To prywatny, poufny klucz, który służy do weryfikacji autentyczności Twojej aplikacji. |
|
| 285 | + - Jest niezbędny do bezpiecznej komunikacji między n8n a Google – potwierdza, że żądania pochodzą od zaufanej aplikacji. |
|
| 286 | + - **Nigdy nie udostępniaj tego klucza publicznie!** |
|
| 287 | + - Po czerwcu 2025 r. nie będzie można ponownie wyświetlić ani pobrać tego klucza po zamknięciu okna – musisz go skopiować i bezpiecznie przechowywać. |
|
| 288 | + |
|
| 289 | +**Dlaczego te dane są tak ważne?** |
|
| 290 | +- **Identyfikator klienta** pozwala Google rozpoznać Twoją aplikację i powiązać ją z uprawnieniami, które nadajesz. |
|
| 291 | +- **Tajny klucz klienta** chroni przed nieautoryzowanym dostępem – tylko aplikacja posiadająca ten klucz może uzyskać dostęp do Twoich danych przez OAuth2. |
|
| 292 | +- Utrata lub ujawnienie tajnego klucza może narazić Twoje konto na nieautoryzowany dostęp – zawsze przechowuj go w bezpiecznym miejscu. |
|
| 293 | + |
|
| 294 | +**Podsumowanie:** |
|
| 295 | +- Te dwie pozycje są fundamentem bezpiecznej integracji n8n z Google. Bez nich nie skonfigurujesz połączenia OAuth2 i nie uzyskasz dostępu do usług Google z poziomu workflow. |
|
| 296 | + |
|
| 297 | + |
|
| 298 | + |
|
| 299 | +--- |
|
| 300 | + |
|
| 301 | +## Kim są odbiorcy ekranu zgody OAuth? |
|
| 302 | + |
|
| 303 | +Odbiorcy ekranu zgody OAuth to użytkownicy, którzy mogą autoryzować aplikację i udzielić jej dostępu do swoich danych Google. W GCP możesz określić: |
|
| 304 | + |
|
| 305 | +- **Użytkownicy testowi** – osoby dodane ręcznie na ekranie zgody OAuth. Tylko oni mogą korzystać z aplikacji w trybie testowym. |
|
| 306 | +- **Użytkownicy wewnętrzni** – jeśli wybierzesz typ "Internal", dostęp mają tylko członkowie Twojej organizacji Google Workspace. |
|
| 307 | +- **Użytkownicy zewnętrzni** – jeśli aplikacja przejdzie weryfikację Google, dostęp mogą uzyskać wszyscy użytkownicy Google. |
|
| 308 | + |
|
| 309 | +**Dlaczego to ważne?** |
|
| 310 | +- W trybie testowym (najczęściej na początku integracji) tylko użytkownicy testowi mogą autoryzować aplikację – musisz dodać swój adres e-mail na ekranie zgody. |
|
| 311 | +- W produkcji (po weryfikacji) aplikacja może być dostępna dla szerszego grona odbiorców. |
|
| 312 | +- Odbiorcy ekranu zgody decydują, kto faktycznie może korzystać z Twojej integracji n8n z Google. |
|
| 313 | + |
|
| 314 | + |
|
| 315 | +13. Przejdz do bibliteki interfejsów API i włącz potrzebne interfejsy |
|
| 316 | + |
|
| 317 | + |
|
| 318 | +--- |
|
| 319 | + |
|
| 320 | +## Czym są biblioteki interfejsów API w GCP? |
|
| 321 | + |
|
| 322 | +Biblioteki interfejsów API (API Libraries) w Google Cloud Platform to zestaw usług, które musisz aktywować, aby Twoja aplikacja mogła korzystać z wybranych funkcji Google (np. kalendarza, poczty, dysku). Bez ich włączenia integracja z n8n nie będzie działać poprawnie. |
|
| 323 | + |
|
| 324 | +**Jakie biblioteki trzeba włączyć dla n8n?** |
|
| 325 | + |
|
| 326 | +Aby zintegrować n8n z najpopularniejszymi usługami Google, musisz aktywować następujące biblioteki API w konsoli GCP: |
|
| 327 | + |
|
| 328 | +- Google Calendar API |
|
| 329 | +- Gmail API |
|
| 330 | +- Google Drive API |
|
| 331 | + |
|
| 332 | +**Jak to zrobić?** |
|
| 333 | +1. Przejdź do konsoli Google Cloud Platform. |
|
| 334 | +2. Wybierz swój projekt. |
|
| 335 | +3. Wejdź w sekcję "APIs & Services" → "Library". |
|
| 336 | +4. Wyszukaj powyższe usługi i kliknij "Enable" (Włącz). |
|
| 337 | + |
|
| 338 | +**Dlaczego to ważne?** |
|
| 339 | +- Bez aktywacji odpowiednich bibliotek API Twoja aplikacja nie uzyska dostępu do danych Google. |
|
| 340 | +- Włączenie API jest wymagane do poprawnej autoryzacji i działania node'ów n8n (np. pobierania maili, wydarzeń z kalendarza, plików z dysku). |
Modul 5 - Implementacja agenta AI/1. Czym jest agent AI w kontek\305\233cie automatyzacji.md
| ... | ... | @@ -0,0 +1,270 @@ |
| 1 | + |
|
| 2 | + |
|
| 3 | +# Czym jest agent AI w kontekście automatyzacji? |
|
| 4 | + |
|
| 5 | +Agent AI to inteligentny system, który potrafi samodzielnie podejmować decyzje, wykonywać zadania i reagować na zmieniające się warunki – bez konieczności ręcznego sterowania przez człowieka. W przeciwieństwie do tradycyjnych automatyzacji, które działają według z góry określonych reguł, agent AI potrafi analizować kontekst, rozumieć język naturalny i dostosowywać swoje działania do sytuacji. |
|
| 6 | + |
|
| 7 | +--- |
|
| 8 | + |
|
| 9 | +## **Czym różni się agent AI od zwykłej automatyzacji?** |
|
| 10 | + |
|
| 11 | +| **Tradycyjna automatyzacja** | **Agent AI** | |
|
| 12 | +|------------------------------|--------------| |
|
| 13 | +| Działa według stałych reguł (jeśli X, to Y) | Analizuje kontekst i podejmuje decyzje | |
|
| 14 | +| Wymaga precyzyjnego programowania | Rozumie język naturalny i intent użytkownika | |
|
| 15 | +| Nie radzi sobie z nietypowymi sytuacjami | Potrafi dostosować się do nowych warunków | |
|
| 16 | +| Wykonuje tylko to, co zaprogramowano | Może planować wieloetapowe działania | |
|
| 17 | + |
|
| 18 | +**Przykład:** |
|
| 19 | +- **Zwykła automatyzacja:** Gdy otrzymasz e-mail z fakturą, zapisz ją do folderu "Faktury". |
|
| 20 | +- **Agent AI:** Gdy otrzymasz e-mail, przeanalizuj jego treść, zdecyduj czy to faktura, wyciągnij dane (kwota, termin płatności), zapisz plik w odpowiednim folderze, a jeśli termin płatności jest bliski – wyślij przypomnienie. |
|
| 21 | + |
|
| 22 | +--- |
|
| 23 | + |
|
| 24 | +## **Jak działa agent AI?** |
|
| 25 | + |
|
| 26 | +Agent AI składa się z kilku kluczowych elementów: |
|
| 27 | + |
|
| 28 | +1. **Zdolność do rozumienia języka naturalnego (NLP)** |
|
| 29 | + - Agent potrafi czytać i interpretować tekst (e-maile, dokumenty, czaty) |
|
| 30 | + - Rozumie intencję użytkownika, nawet jeśli zapytanie nie jest precyzyjne |
|
| 31 | + |
|
| 32 | +2. **Pamięć i kontekst** |
|
| 33 | + - Agent pamięta wcześniejsze interakcje i dane |
|
| 34 | + - Może odwoływać się do historii rozmów lub poprzednich akcji |
|
| 35 | + |
|
| 36 | +3. **Zdolność do podejmowania decyzji** |
|
| 37 | + - Agent analizuje dostępne informacje i wybiera najlepsze działanie |
|
| 38 | + - Potrafi zarządzać niepewnością i priorytetami |
|
| 39 | + |
|
| 40 | +4. **Wykonywanie akcji przez narzędzia (tools)** |
|
| 41 | + - Agent nie tylko analizuje dane – faktycznie wykonuje zadania |
|
| 42 | + - Może korzystać z różnych API, aplikacji i systemów |
|
| 43 | + |
|
| 44 | +--- |
|
| 45 | + |
|
| 46 | +## **Narzędzia (tools) – klucz do mocy agenta AI** |
|
| 47 | + |
|
| 48 | +Narzędzia to funkcje, które agent może wywoływać, aby wykonywać konkretne zadania. Bez narzędzi agent byłby tylko "mówcą" – mógłby analizować i rozmawiać, ale nie mógłby niczego zrobić. |
|
| 49 | + |
|
| 50 | +### **Przykłady narzędzi, które można podpiąć do agenta AI:** |
|
| 51 | + |
|
| 52 | +#### **1. Narzędzia do komunikacji** |
|
| 53 | +- **Slack / Discord / Teams** |
|
| 54 | + - Wysyłanie wiadomości do kanałów |
|
| 55 | + - Tworzenie powiadomień |
|
| 56 | + - Odpowiadanie na zapytania użytkowników |
|
| 57 | + |
|
| 58 | +- **Email (Gmail, Outlook)** |
|
| 59 | + - Wysyłanie i odbieranie e-maili |
|
| 60 | + - Tworzenie wersji roboczych wiadomości |
|
| 61 | + - Kategoryzowanie i filtrowanie korespondencji |
|
| 62 | + |
|
| 63 | +- **SMS / WhatsApp** |
|
| 64 | + - Wysyłanie powiadomień SMS |
|
| 65 | + - Automatyczne odpowiedzi na wiadomości |
|
| 66 | + |
|
| 67 | +#### **2. Narzędzia do zarządzania danymi** |
|
| 68 | +- **Google Sheets / Excel** |
|
| 69 | + - Odczytywanie i zapisywanie danych |
|
| 70 | + - Tworzenie raportów |
|
| 71 | + - Wyszukiwanie i filtrowanie rekordów |
|
| 72 | + |
|
| 73 | +- **Bazy danych (PostgreSQL, MySQL, MongoDB)** |
|
| 74 | + - Wykonywanie zapytań SQL |
|
| 75 | + - Dodawanie, aktualizowanie i usuwanie rekordów |
|
| 76 | + - Generowanie analiz |
|
| 77 | + |
|
| 78 | +- **Airtable / Notion** |
|
| 79 | + - Zarządzanie projektami |
|
| 80 | + - Tworzenie i aktualizowanie zadań |
|
| 81 | + - Organizowanie dokumentacji |
|
| 82 | + |
|
| 83 | +#### **3. Narzędzia do pracy z plikami** |
|
| 84 | +- **Google Drive / Dropbox** |
|
| 85 | + - Pobieranie i przesyłanie plików |
|
| 86 | + - Tworzenie folderów |
|
| 87 | + - Udostępnianie dokumentów |
|
| 88 | + |
|
| 89 | +- **PDF Tools** |
|
| 90 | + - Wyciąganie tekstu z PDF |
|
| 91 | + - Łączenie i dzielenie plików PDF |
|
| 92 | + - Konwersja dokumentów |
|
| 93 | + |
|
| 94 | +- **OCR (Optical Character Recognition)** |
|
| 95 | + - Rozpoznawanie tekstu na obrazach i skanach |
|
| 96 | + - Przetwarzanie faktur i dokumentów |
|
| 97 | + |
|
| 98 | +#### **4. Narzędzia do integracji z systemami biznesowymi** |
|
| 99 | +- **CRM (Salesforce, HubSpot)** |
|
| 100 | + - Dodawanie i aktualizowanie kontaktów |
|
| 101 | + - Tworzenie szans sprzedaży (opportunities) |
|
| 102 | + - Zarządzanie pipeline'em sprzedażowym |
|
| 103 | + |
|
| 104 | +- **ERP (SAP, Odoo)** |
|
| 105 | + - Zarządzanie zamówieniami |
|
| 106 | + - Kontrola stanów magazynowych |
|
| 107 | + - Tworzenie faktur |
|
| 108 | + |
|
| 109 | +- **HR (BambooHR, Workday)** |
|
| 110 | + - Zarządzanie urloPami |
|
| 111 | + - Onboarding nowych pracowników |
|
| 112 | + - Generowanie raportów kadrowych |
|
| 113 | + |
|
| 114 | +#### **5. Narzędzia do automatyzacji zadań** |
|
| 115 | +- **Kalendarz (Google Calendar, Outlook Calendar)** |
|
| 116 | + - Tworzenie spotkań |
|
| 117 | + - Sprawdzanie dostępności |
|
| 118 | + - Wysyłanie zaproszeń |
|
| 119 | + |
|
| 120 | +- **Task Management (Asana, Trello, Monday.com)** |
|
| 121 | + - Tworzenie zadań |
|
| 122 | + - Przypisywanie osób odpowiedzialnych |
|
| 123 | + - Śledzenie postępów |
|
| 124 | + |
|
| 125 | +- **Zapier / Make** |
|
| 126 | + - Łączenie różnych aplikacji |
|
| 127 | + - Uruchamianie złożonych automatyzacji |
|
| 128 | + |
|
| 129 | +#### **6. Narzędzia do wyszukiwania i analizy informacji** |
|
| 130 | +- **Web Scraping** |
|
| 131 | + - Pobieranie danych ze stron internetowych |
|
| 132 | + - Monitorowanie zmian na stronach |
|
| 133 | + - Zbieranie informacji konkurencyjnych |
|
| 134 | + |
|
| 135 | +- **API REST** |
|
| 136 | + - Komunikacja z zewnętrznymi serwisami |
|
| 137 | + - Pobieranie danych w czasie rzeczywistym |
|
| 138 | + - Integracja z niestandardowymi systemami |
|
| 139 | + |
|
| 140 | +- **SQL Query Tools** |
|
| 141 | + - Wykonywanie zapytań do baz danych |
|
| 142 | + - Generowanie raportów analitycznych |
|
| 143 | + - Tworzenie dashboardów |
|
| 144 | + |
|
| 145 | +#### **7. Narzędzia do przetwarzania danych** |
|
| 146 | +- **Code Interpreter / Python Executor** |
|
| 147 | + - Wykonywanie skryptów Python |
|
| 148 | + - Przetwarzanie i analiza danych |
|
| 149 | + - Tworzenie wykresów i wizualizacji |
|
| 150 | + |
|
| 151 | +- **JSON / XML Parser** |
|
| 152 | + - Przetwarzanie złożonych struktur danych |
|
| 153 | + - Konwersja formatów |
|
| 154 | + - Walidacja danych |
|
| 155 | + |
|
| 156 | +- **Text Processing** |
|
| 157 | + - Podsumowywanie tekstów |
|
| 158 | + - Tłumaczenie dokumentów |
|
| 159 | + - Ekstrakcja kluczowych informacji |
|
| 160 | + |
|
| 161 | +#### **8. Narzędzia do obsługi klienta** |
|
| 162 | +- **Ticketing Systems (Zendesk, Freshdesk)** |
|
| 163 | + - Tworzenie zgłoszeń |
|
| 164 | + - Odpowiadanie na tickety |
|
| 165 | + - Eskalacja problemów |
|
| 166 | + |
|
| 167 | +- **Chatbots (Intercom, Drift)** |
|
| 168 | + - Automatyczne odpowiedzi na pytania klientów |
|
| 169 | + - Przekierowanie do odpowiedniego działu |
|
| 170 | + - Zbieranie feedbacku |
|
| 171 | + |
|
| 172 | +- **Knowledge Base Search** |
|
| 173 | + - Wyszukiwanie w bazie wiedzy |
|
| 174 | + - Odpowiadanie na FAQ |
|
| 175 | + - Sugerowanie artykułów pomocy |
|
| 176 | + |
|
| 177 | +--- |
|
| 178 | + |
|
| 179 | +## **Jak agent AI wykorzystuje narzędzia?** |
|
| 180 | + |
|
| 181 | +Agent AI działa w następujący sposób: |
|
| 182 | + |
|
| 183 | +1. **Odbiera zadanie lub zapytanie** |
|
| 184 | + - Np. "Przeanalizuj ostatnie 50 e-maili i znajdź wszystkie faktury, które wymagają pilnej płatności" |
|
| 185 | + |
|
| 186 | +2. **Analizuje, jakie narzędzia są potrzebne** |
|
| 187 | + - Agent wie, że musi użyć narzędzia do odczytu e-maili (Gmail API) |
|
| 188 | + - Następnie narzędzia do analizy tekstu (OCR + NLP) |
|
| 189 | + - I wreszcie narzędzia do zapisu (Google Sheets) |
|
| 190 | + |
|
| 191 | +3. **Wykonuje sekwencję akcji** |
|
| 192 | + - Pobiera e-maile z ostatnich 7 dni |
|
| 193 | + - Analizuje każdy e-mail i załączniki |
|
| 194 | + - Wyciąga kwoty, terminy płatności i dane kontrahentów |
|
| 195 | + - Zapisuje wyniki do arkusza |
|
| 196 | + - Wysyła powiadomienie na Slacku z listą pilnych płatności |
|
| 197 | + |
|
| 198 | +4. **Raportuje wynik** |
|
| 199 | + - "Znalazłem 3 faktury wymagające płatności w ciągu 48h. Szczegóły w arkuszu 'Pilne faktury'. Wysłałem powiadomienie do zespołu finansowego." |
|
| 200 | + |
|
| 201 | +--- |
|
| 202 | + |
|
| 203 | +## **Przykładowe zastosowania agenta AI w n8n** |
|
| 204 | + |
|
| 205 | +### **1. Agent obsługi klienta** |
|
| 206 | +**Narzędzia:** |
|
| 207 | +- Gmail (odbiór i wysyłanie e-maili) |
|
| 208 | +- Knowledge Base Search (wyszukiwanie w bazie wiedzy) |
|
| 209 | +- Zendesk (tworzenie ticketów) |
|
| 210 | +- Slack (powiadomienia dla zespołu) |
|
| 211 | + |
|
| 212 | +**Działanie:** |
|
| 213 | +Agent automatycznie odpowiada na e-maile klientów, wyszukuje rozwiązania w bazie wiedzy, a jeśli nie znajdzie odpowiedzi – tworzy ticket i powiadamia zespół. |
|
| 214 | + |
|
| 215 | +### **2. Agent analityczny** |
|
| 216 | +**Narzędzia:** |
|
| 217 | +- Google Sheets (odczyt danych sprzedażowych) |
|
| 218 | +- SQL Database (zapytania do bazy produkcyjnej) |
|
| 219 | +- Python Executor (analiza i wizualizacja) |
|
| 220 | +- Slack (wysyłanie raportów) |
|
| 221 | + |
|
| 222 | +**Działanie:** |
|
| 223 | +Co rano agent pobiera dane sprzedażowe, wykonuje analizy, generuje wykresy i wysyła raport do zespołu zarządzającego. |
|
| 224 | + |
|
| 225 | +### **3. Agent HR** |
|
| 226 | +**Narzędzia:** |
|
| 227 | +- Gmail (odbiór CV) |
|
| 228 | +- Google Calendar (planowanie rozmów rekrutacyjnych) |
|
| 229 | +- Notion (baza kandydatów) |
|
| 230 | +- Slack (powiadomienia dla rekruterów) |
|
| 231 | + |
|
| 232 | +**Działanie:** |
|
| 233 | +Agent automatycznie przetwarza CV, wyciąga kluczowe informacje, dodaje kandydatów do bazy, a następnie proponuje terminy rozmów kwalifikacyjnych. |
|
| 234 | + |
|
| 235 | +### **4. Agent finansowy** |
|
| 236 | +**Narzędzia:** |
|
| 237 | +- Gmail (odbiór faktur) |
|
| 238 | +- OCR (rozpoznawanie tekstu na fakturach) |
|
| 239 | +- Google Sheets (rejestr płatności) |
|
| 240 | +- Bank API (sprawdzanie salda i wykonywanie płatności) |
|
| 241 | +- Slack (powiadomienia o pilnych płatnościach) |
|
| 242 | + |
|
| 243 | +**Działanie:** |
|
| 244 | +Agent automatycznie przetwarza faktury, wyciąga dane, rejestruje w systemie, sprawdza saldo i wykonuje płatności lub powiadamia o konieczności dopłaty. |
|
| 245 | + |
|
| 246 | +--- |
|
| 247 | + |
|
| 248 | +## **Zalety używania agentów AI w automatyzacji** |
|
| 249 | + |
|
| 250 | +✅ **Inteligentne decyzje** – agent potrafi analizować kontekst i reagować elastycznie |
|
| 251 | +✅ **Rozumienie języka naturalnego** – możesz komunikować się z agentem jak z człowiekiem |
|
| 252 | +✅ **Wielozadaniowość** – agent może wykonywać złożone, wieloetapowe procesy |
|
| 253 | +✅ **Skalowalność** – jeden agent może obsługiwać setki zadań równocześnie |
|
| 254 | +✅ **Oszczędność czasu** – automatyzacja zadań, które wcześniej wymagały ręcznej pracy |
|
| 255 | + |
|
| 256 | +--- |
|
| 257 | + |
|
| 258 | +## **Podsumowanie** |
|
| 259 | + |
|
| 260 | +Agent AI to przełom w automatyzacji – zamiast sztywnych reguł, mamy inteligentny system zdolny do samodzielnego rozwiązywania problemów. Kluczem do jego mocy są **narzędzia (tools)**, które pozwalają agentowi faktycznie działać – wysyłać e-maile, zapisywać dane, wykonywać płatności, generować raporty i wiele więcej. |
|
| 261 | + |
|
| 262 | +W n8n możesz budować agentów AI, którzy łączą siłę sztucznej inteligencji z praktycznymi integracjami biznesowymi – tworząc automatyzacje, które wcześniej były nieosiągalne. |
|
| 263 | + |
|
| 264 | +--- |
|
| 265 | + |
|
| 266 | +**W kolejnych modułach dowiesz się:** |
|
| 267 | +- Jak zbudować własnego agenta AI w n8n |
|
| 268 | +- Jak podłączać narzędzia i definiować ich działanie |
|
| 269 | +- Jak trenować agenta i dostosowywać jego zachowanie |
|
| 270 | +- Jakie są najlepsze praktyki w projektowaniu agentów AI |
Modul 5 - Implementacja agenta AI/2. Rola modelu j\304\231zykowego.md
| ... | ... | @@ -0,0 +1,247 @@ |
| 1 | + |
|
| 2 | + |
|
| 3 | +# Rola modelu językowego w agencie AI |
|
| 4 | + |
|
| 5 | +Model językowy to "mózg" agenta AI – to on odpowiada za rozumienie języka naturalnego, analizowanie kontekstu, podejmowanie decyzji i generowanie odpowiedzi. Bez modelu językowego agent byłby tylko zestawem sztywnych reguł – z nim staje się inteligentnym systemem zdolnym do elastycznego rozwiązywania problemów. |
|
| 6 | + |
|
| 7 | +--- |
|
| 8 | + |
|
| 9 | +## **Do czego służy model językowy w agencie AI?** |
|
| 10 | + |
|
| 11 | +### **1. Rozumienie języka naturalnego (NLU – Natural Language Understanding)** |
|
| 12 | + |
|
| 13 | +Model językowy analizuje tekst i rozumie jego znaczenie, intencję oraz kontekst. |
|
| 14 | + |
|
| 15 | +**Przykłady:** |
|
| 16 | +- Użytkownik pisze: *"Chcę sprawdzić, czy ktoś odpowiedział na mojego ostatniego e-maila do działu sprzedaży"* |
|
| 17 | +- Model rozumie: |
|
| 18 | + - Akcja: sprawdzenie e-maili |
|
| 19 | + - Kontekst: ostatni wysłany e-mail |
|
| 20 | + - Odbiorca: dział sprzedaży |
|
| 21 | + - Cel: znalezienie odpowiedzi |
|
| 22 | + |
|
| 23 | +### **2. Ekstrakcja informacji** |
|
| 24 | + |
|
| 25 | +Model potrafi wyciągać konkretne dane z nieustrukturyzowanego tekstu. |
|
| 26 | + |
|
| 27 | +**Przykłady:** |
|
| 28 | +- Z e-maila: *"Prosimy o przesłanie faktury na kwotę 2500 zł do 15 grudnia 2025"* |
|
| 29 | +- Model wyciąga: |
|
| 30 | + - Typ dokumentu: faktura |
|
| 31 | + - Kwota: 2500 zł |
|
| 32 | + - Termin: 15 grudnia 2025 |
|
| 33 | + |
|
| 34 | +### **3. Podejmowanie decyzji** |
|
| 35 | + |
|
| 36 | +Model analizuje dostępne informacje i wybiera najlepsze działanie. |
|
| 37 | + |
|
| 38 | +**Przykład:** |
|
| 39 | +- Sytuacja: Otrzymano e-mail z prośbą o informacje o produkcie |
|
| 40 | +- Model decyduje: |
|
| 41 | + - Czy może odpowiedzieć sam (jeśli ma informacje w bazie wiedzy) |
|
| 42 | + - Czy powinien przekazać do człowieka (jeśli pytanie jest złożone) |
|
| 43 | + - Czy powinien zebrać więcej danych przed odpowiedzią |
|
| 44 | + |
|
| 45 | +### **4. Wybór i wywoływanie narzędzi (tools)** |
|
| 46 | + |
|
| 47 | +Model decyduje, które narzędzia użyć do wykonania zadania. |
|
| 48 | + |
|
| 49 | +**Przykład:** |
|
| 50 | +- Zapytanie: *"Wyślij raport sprzedażowy z ostatniego tygodnia do zespołu managementu"* |
|
| 51 | +- Model wybiera narzędzia: |
|
| 52 | + 1. Google Sheets – pobranie danych sprzedażowych |
|
| 53 | + 2. Python – wygenerowanie wykresu |
|
| 54 | + 3. Gmail – wysłanie e-maila z raportem |
|
| 55 | + |
|
| 56 | +### **5. Generowanie odpowiedzi** |
|
| 57 | + |
|
| 58 | +Model tworzy naturalnie brzmiące odpowiedzi dostosowane do kontekstu. |
|
| 59 | + |
|
| 60 | +**Przykład:** |
|
| 61 | +- Dane: Faktura nr 123/2025, kwota 3500 zł, termin płatności: 10 grudnia |
|
| 62 | +- Model generuje: *"Faktura nr 123/2025 na kwotę 3500 zł została zarejestrowana. Termin płatności upływa 10 grudnia – to za 5 dni. Czy mam wysłać przypomnienie do działu finansowego?"* |
|
| 63 | + |
|
| 64 | +### **6. Zarządzanie kontekstem i pamięcią** |
|
| 65 | + |
|
| 66 | +Model pamięta wcześniejsze interakcje i odwołuje się do nich. |
|
| 67 | + |
|
| 68 | +**Przykład:** |
|
| 69 | +- Użytkownik (1): *"Pokaż mi faktury z listopada"* |
|
| 70 | +- Agent: *"Znalazłem 12 faktur z listopada. Łączna kwota: 45 000 zł"* |
|
| 71 | +- Użytkownik (2): *"A ile z nich jest niezapłaconych?"* |
|
| 72 | +- Agent (pamięta kontekst): *"5 faktur na łączną kwotę 18 500 zł pozostaje niezapłaconych"* |
|
| 73 | + |
|
| 74 | +--- |
|
| 75 | + |
|
| 76 | +## **Popularne modele językowe używane w agentach AI** |
|
| 77 | + |
|
| 78 | +### **OpenAI – rodzina modeli GPT** |
|
| 79 | + |
|
| 80 | +#### **GPT-4o (GPT-4 Optimized)** |
|
| 81 | +- **Opis:** Najnowsza, zoptymalizowana wersja GPT-4, łącząca szybkość z wysoką jakością |
|
| 82 | +- **Mocne strony:** |
|
| 83 | + - Szybsze niż GPT-4, tańsze w użyciu |
|
| 84 | + - Bardzo dobre rozumienie kontekstu |
|
| 85 | + - Świetne w złożonym rozumowaniu |
|
| 86 | + - Obsługa text + obrazy |
|
| 87 | +- **Zastosowania w agentach:** |
|
| 88 | + - Analiza dokumentów i obrazów (faktury, umowy, diagramy) |
|
| 89 | + - Złożone zadania wymagające logicznego myślenia |
|
| 90 | + - Obsługa klienta z kontekstem wizualnym |
|
| 91 | + |
|
| 92 | +#### **GPT-4 Turbo** |
|
| 93 | +- **Opis:** Szybsza i tańsza wersja GPT-4 z większym oknem kontekstowym (128k tokenów) |
|
| 94 | +- **Mocne strony:** |
|
| 95 | + - Bardzo duże okno kontekstowe (może przetworzyć długie dokumenty) |
|
| 96 | + - Dobra jakość przy niższych kosztach |
|
| 97 | + - Szybka odpowiedź |
|
| 98 | +- **Zastosowania w agentach:** |
|
| 99 | + - Analiza długich dokumentów (raporty, umowy, protokoły) |
|
| 100 | + - Agenci wymagający dużej pamięci kontekstowej |
|
| 101 | + - Zadania wymagające przetwarzania wielu źródeł jednocześnie |
|
| 102 | + |
|
| 103 | +#### **GPT-3.5 Turbo** |
|
| 104 | +- **Opis:** Starszy, tańszy model, wciąż bardzo popularny |
|
| 105 | +- **Mocne strony:** |
|
| 106 | + - Niski koszt użycia |
|
| 107 | + - Szybka odpowiedź |
|
| 108 | + - Wystarczający do prostych zadań |
|
| 109 | +- **Zastosowania w agentach:** |
|
| 110 | + - Proste automaty odpowiedzi (chatboty FAQ) |
|
| 111 | + - Klasyfikacja tekstu |
|
| 112 | + - Generowanie prostych raportów |
|
| 113 | + |
|
| 114 | +#### **GPT-4o-mini** |
|
| 115 | +- **Opis:** Najmniejszy i najtańszy model z rodziny GPT-4, zoptymalizowany pod kątem kosztów |
|
| 116 | +- **Mocne strony:** |
|
| 117 | + - Bardzo niski koszt |
|
| 118 | + - Szybka odpowiedź |
|
| 119 | + - Nadal lepsza jakość niż GPT-3.5 |
|
| 120 | +- **Zastosowania w agentach:** |
|
| 121 | + - Masowa klasyfikacja (e-maile, tickety) |
|
| 122 | + - Proste ekstrakcje danych |
|
| 123 | + - Wstępne filtrowanie przed użyciem droższych modeli |
|
| 124 | + |
|
| 125 | +--- |
|
| 126 | + |
|
| 127 | +### **Google – rodzina modeli Gemini** |
|
| 128 | + |
|
| 129 | +#### **Gemini 1.5 Pro** |
|
| 130 | +- **Opis:** Najpotężniejszy model Google z ogromnym oknem kontekstowym (do 2 milionów tokenów) |
|
| 131 | +- **Mocne strony:** |
|
| 132 | + - **Gigantyczne okno kontekstowe** – może przetworzyć całe książki, wielogodzinne nagrania audio/wideo |
|
| 133 | + - Multimodalność (text, obrazy, audio, wideo) |
|
| 134 | + - Świetne rozumowanie i analiza |
|
| 135 | + - Bardzo dobre w zadaniach wymagających długoterminowej pamięci |
|
| 136 | +- **Zastosowania w agentach:** |
|
| 137 | + - Analiza całych projektów (setek plików jednocześnie) |
|
| 138 | + - Przetwarzanie długich nagrań wideo/audio |
|
| 139 | + - Agenci wymagający bardzo długiej pamięci kontekstowej |
|
| 140 | + - Analiza wielowątkowych rozmów i dokumentacji |
|
| 141 | + |
|
| 142 | +#### **Gemini 1.5 Flash** |
|
| 143 | +- **Opis:** Szybsza i tańsza wersja Gemini, zoptymalizowana pod kątem wydajności |
|
| 144 | +- **Mocne strony:** |
|
| 145 | + - Bardzo szybka odpowiedź |
|
| 146 | + - Niższy koszt niż Pro |
|
| 147 | + - Wciąż duże okno kontekstowe (do 1 miliona tokenów) |
|
| 148 | + - Multimodalność |
|
| 149 | +- **Zastosowania w agentach:** |
|
| 150 | + - Szybkie chatboty obsługi klienta |
|
| 151 | + - Real-time analiza strumieni danych |
|
| 152 | + - Agenci wymagający małych opóźnień |
|
| 153 | + - Masowe przetwarzanie z dobrą jakością |
|
| 154 | + |
|
| 155 | +#### **Gemini 1.0 Pro** |
|
| 156 | +- **Opis:** Starszy model Google, wciąż dostępny i użyteczny |
|
| 157 | +- **Mocne strony:** |
|
| 158 | + - Solidna jakość |
|
| 159 | + - Niższy koszt |
|
| 160 | + - Stabilne API |
|
| 161 | +- **Zastosowania w agentach:** |
|
| 162 | + - Standardowe zadania NLP |
|
| 163 | + - Proste agenty konwersacyjne |
|
| 164 | + - Klasyfikacja i ekstrakcja danych |
|
| 165 | + |
|
| 166 | +--- |
|
| 167 | + |
|
| 168 | +## **Porównanie: OpenAI vs Google Gemini** |
|
| 169 | + |
|
| 170 | +| **Cecha** | **OpenAI (GPT)** | **Google (Gemini)** | |
|
| 171 | +|-----------|------------------|---------------------| |
|
| 172 | +| **Jakość rozumowania** | Bardzo wysoka (GPT-4o, GPT-4 Turbo) | Bardzo wysoka (Gemini 1.5 Pro) | |
|
| 173 | +| **Okno kontekstowe** | Do 128k tokenów (GPT-4 Turbo) | **Do 2M tokenów (Gemini 1.5 Pro)** | |
|
| 174 | +| **Multimodalność** | Text + obrazy (GPT-4o) | Text + obrazy + audio + wideo | |
|
| 175 | +| **Szybkość** | Szybka (GPT-4o, GPT-3.5) | Bardzo szybka (Gemini Flash) | |
|
| 176 | +| **Koszt** | Średni do wysoki | Niższy (szczególnie Flash) | |
|
| 177 | +| **Stabilność API** | Bardzo dobra | Dobra, szybko się rozwija | |
|
| 178 | +| **Ekosystem narzędzi** | Bardzo rozbudowany | Rozwijający się | |
|
| 179 | + |
|
| 180 | +--- |
|
| 181 | + |
|
| 182 | +## **Jak wybrać model dla swojego agenta?** |
|
| 183 | + |
|
| 184 | +### **Wybierz GPT-4o lub Gemini 1.5 Pro, jeśli:** |
|
| 185 | +- Potrzebujesz najwyższej jakości rozumowania |
|
| 186 | +- Agent ma wykonywać złożone zadania wymagające logiki |
|
| 187 | +- Budzet pozwala na wyższe koszty |
|
| 188 | +- Chcesz przetwarzać obrazy, dokumenty wizualne |
|
| 189 | + |
|
| 190 | +### **Wybierz GPT-4 Turbo, jeśli:** |
|
| 191 | +- Potrzebujesz dużego okna kontekstowego (długie dokumenty) |
|
| 192 | +- Agent ma przetwarzać wiele źródeł jednocześnie |
|
| 193 | +- Szukasz dobrego balansu między jakością a kosztem |
|
| 194 | + |
|
| 195 | +### **Wybierz Gemini 1.5 Flash, jeśli:** |
|
| 196 | +- Potrzebujesz bardzo szybkich odpowiedzi |
|
| 197 | +- Agent ma obsługiwać duży ruch użytkowników |
|
| 198 | +- Chcesz niskie koszty przy dobrej jakości |
|
| 199 | +- Potrzebujesz multimodalności (audio/wideo) |
|
| 200 | + |
|
| 201 | +### **Wybierz GPT-3.5 Turbo lub GPT-4o-mini, jeśli:** |
|
| 202 | +- Budżet jest ograniczony |
|
| 203 | +- Zadania są proste (klasyfikacja, FAQ, proste ekstrakcje) |
|
| 204 | +- Agent ma działać masowo (tysiące zapytań dziennie) |
|
| 205 | + |
|
| 206 | +--- |
|
| 207 | + |
|
| 208 | +## **Model językowy w n8n** |
|
| 209 | + |
|
| 210 | +W n8n możesz używać modeli językowych przez: |
|
| 211 | + |
|
| 212 | +1. **AI Agent Node** – gotowy węzeł do tworzenia agentów AI |
|
| 213 | +2. **OpenAI Node** – bezpośrednia integracja z GPT |
|
| 214 | +3. **Google AI Node** – integracja z Gemini |
|
| 215 | +4. **HTTP Request Node** – własne wywołania API do modeli |
|
| 216 | + |
|
| 217 | +**Przykład konfiguracji w n8n:** |
|
| 218 | +``` |
|
| 219 | +1. Trigger (Webhook lub Email) |
|
| 220 | +2. AI Agent Node |
|
| 221 | + - Model: GPT-4o lub Gemini 1.5 Flash |
|
| 222 | + - Tools: Gmail, Google Sheets, Slack |
|
| 223 | + - Instrukcja: "Jesteś agentem obsługi klienta..." |
|
| 224 | +3. Response Node |
|
| 225 | +``` |
|
| 226 | + |
|
| 227 | +--- |
|
| 228 | + |
|
| 229 | +## **Podsumowanie** |
|
| 230 | + |
|
| 231 | +Model językowy to serce agenta AI – bez niego agent nie mógłby rozumieć języka naturalnego, podejmować decyzji ani generować odpowiedzi. Wybór odpowiedniego modelu zależy od: |
|
| 232 | + |
|
| 233 | +- **Złożoności zadań** (proste vs złożone rozumowanie) |
|
| 234 | +- **Wymagań kontekstowych** (krótkie vs długie dokumenty) |
|
| 235 | +- **Budżetu** (niski vs wysoki koszt) |
|
| 236 | +- **Szybkości** (real-time vs batch processing) |
|
| 237 | +- **Multimodalności** (tylko text vs text+obraz+audio+wideo) |
|
| 238 | + |
|
| 239 | +Najpopularniejsze wybory to **GPT-4o** (OpenAI) dla uniwersalnej wysokiej jakości oraz **Gemini 1.5 Flash** (Google) dla szybkich i tanich aplikacji z dużym kontekstem. |
|
| 240 | + |
|
| 241 | +--- |
|
| 242 | + |
|
| 243 | +**W kolejnym module dowiesz się:** |
|
| 244 | +- Jak skonfigurować model językowy w n8n |
|
| 245 | +- Jak zoptymalizować prompty dla agentów AI |
|
| 246 | +- Jak zarządzać kosztami API modeli językowych |
|
| 247 | +- Jak testować i monitorować działanie agentów AI |
Modul 5 - Implementacja agenta AI/3. Rola promptu w agencie AI.md
| ... | ... | @@ -0,0 +1,404 @@ |
| 1 | +### **Jak AI interpretuje zapytania?** |
|
| 2 | + |
|
| 3 | + |
|
| 4 | + |
|
| 5 | +- **Tokenizacja** – Model dzieli zapytanie na mniejsze jednostki językowe zwane tokenami – mogą to być słowa, części słów lub znaki interpunkcyjne. To pierwszy krok przetwarzania tekstu. |
|
| 6 | +- **Analiza wzorców językowych** – AI rozpoznaje wzorce, schematy gramatyczne i struktury zdaniowe na podstawie danych treningowych. Nie rozumie znaczenia, ale identyfikuje układy znane z przeszłych danych. |
|
| 7 | +- **Kontekst bieżący** – Model analizuje pełen kontekst rozmowy lub zapytania – uwzględnia wcześniejsze wiadomości, dane wejściowe oraz ciągłość tematu, aby lepiej dopasować odpowiedź. |
|
| 8 | +- **Dopasowywanie do celu i stylu** – AI stara się wygenerować odpowiedź zgodną z wykrytym celem użytkownika oraz dostosowaną do zadanego stylu, np. formalnego, technicznego, humorystycznego itp. |
|
| 9 | +- **Brak zrozumienia „prawdziwego świata"** – AI nie posiada świadomości ani wiedzy o rzeczywistości – jego odpowiedzi mogą być logiczne i przekonujące, ale niekoniecznie prawdziwe. Bazują wyłącznie na danych tekstowych. |
|
| 10 | +</div> |
|
| 11 | + |
|
| 12 | +--- |
|
| 13 | + |
|
| 14 | + |
|
| 15 | +<div align="center"> |
|
| 16 | + |
|
| 17 | +### **Attention** |
|
| 18 | + |
|
| 19 | + |
|
| 20 | +Mechanizm **attention** pozwala modelowi skupić się na najważniejszych częściach tekstu podczas przetwarzania i generowania odpowiedzi. |
|
| 21 | + |
|
| 22 | +Jak działa? |
|
| 23 | + |
|
| 24 | +Gdy AI analizuje token (słowo lub jego fragment), nie rozpatruje go w izolacji. Zamiast tego: |
|
| 25 | + |
|
| 26 | +- Patrzy na wszystkie inne tokeny w zdaniu lub kontekście. |
|
| 27 | +- Dla każdego z nich oblicza wagę, czyli jak bardzo jest on istotny w danym momencie. |
|
| 28 | + |
|
| 29 | +To się dzieje równolegle – AI analizuje **wszystkie relacje między tokenami** naraz. |
|
| 30 | + |
|
| 31 | +**Przykład praktyczny:** |
|
| 32 | + |
|
| 33 | +Zdanie: |
|
| 34 | + |
|
| 35 | +„Kasia powiedziała Oli, że jej zeszyt jest brudny." |
|
| 36 | + |
|
| 37 | +Słowo „jej" jest niejednoznaczne – czy chodzi o zeszyt Kasi, czy Oli? |
|
| 38 | + |
|
| 39 | +Mechanizm attention pozwala modelowi „spojrzeć" na całe zdanie, by określić, do kogo „jej" się odnosi – może „skupić uwagę" na „Oli", jeśli kontekst tego wymaga. |
|
| 40 | + |
|
| 41 | +**Attention** stara się rozpoznać kontekst danego słowa wśród innych słów. |
|
| 42 | + |
|
| 43 | +</div> |
|
| 44 | + |
|
| 45 | +--- |
|
| 46 | + |
|
| 47 | + |
|
| 48 | +<div align="center"> |
|
| 49 | + |
|
| 50 | +### **Czym jest „temperature" w promptowaniu AI?** |
|
| 51 | + |
|
| 52 | + |
|
| 53 | + |
|
| 54 | +Temperatura określa poziom kreatywności i losowości w odpowiedzi. |
|
| 55 | + |
|
| 56 | +LLMy nie tworzą odpowiedzi z góry zaprogramowanych. Zamiast tego przewidują kolejne słowa na podstawie prawdopodobieństwa. |
|
| 57 | + |
|
| 58 | +Na przykład: |
|
| 59 | + |
|
| 60 | +"Kiedy pada deszcz, zabieram ze sobą..." |
|
| 61 | + |
|
| 62 | +Model oblicza: |
|
| 63 | + |
|
| 64 | +85% szans: „parasol” |
|
| 65 | +10% szans: „kurtkę” |
|
| 66 | +3% szans: „uśmiech” |
|
| 67 | +2% szans: „pieska” |
|
| 68 | + |
|
| 69 | +- Jeśli **temperatura = 0**: Model zawsze wybierze najbardziej przewidywalną odpowiedź („parasol") – odpowiedzi są spójne, bezpieczne, powtarzalne |
|
| 70 | +- Jeśli **temperatura = 1**: Model czasem wybierze mniej typowe słowa („uśmiech", „pieska") – odpowiedzi są bardziej różnorodne i kreatywne |
|
| 71 | + |
|
| 72 | +Zadanie: |
|
| 73 | +Przygotuj jeden prosty prompt (np. „Napisz krótki opis jesiennego lasu” albo „Wymyśl nazwę dla kawiarni”). Następnie uruchom go kilkukrotnie przy różnych wartościach **temperature**: |
|
| 74 | +- **0.0** |
|
| 75 | +- **0.3** |
|
| 76 | +- **0.7** |
|
| 77 | +- **1.0** |
|
| 78 | + |
|
| 79 | +Porównaj otrzymane odpowiedzi i zastanów się: |
|
| 80 | +- Jak zmienił się styl, spójność i kreatywność odpowiedzi w zależności od wartości _temperature_? |
|
| 81 | +- Które odpowiedzi były najbardziej przewidywalne, a które zaskakujące? |
|
| 82 | +- Przy której wartości uzyskałeś efekt najlepiej pasujący do Twojego celu? |
|
| 83 | + |
|
| 84 | +Na końcu zapisz swoje wnioski i przygotuj krótkie podsumowanie do omówienia na forum grupy. |
|
| 85 | +</div> |
|
| 86 | + |
|
| 87 | +--- |
|
| 88 | + |
|
| 89 | +<div align="center"> |
|
| 90 | + |
|
| 91 | +### **Efekt dżina – dlaczego precyzja promptu jest kluczowa?** |
|
| 92 | + |
|
| 93 | + |
|
| 94 | + |
|
| 95 | +</div> |
|
| 96 | + |
|
| 97 | +Wyobraź sobie, że korzystasz z modelu językowego jak z magicznego dżina spełniającego życzenia. Jeśli powiesz: „Chcę nowe auto”, dżin może zinterpretować to na wiele sposobów – niekoniecznie tak, jak oczekujesz. Przykład: |
|
| 98 | + |
|
| 99 | +> Proszę dżina o nowe auto. Zamiast natychmiastowego pojawienia się samochodu, dżin sprawia, że mój ojciec kupuje nowe auto, potem umiera, a ja dziedziczę ten samochód. Życzenie spełnione – ale nie w taki sposób, jak chciałem! |
|
| 100 | + |
|
| 101 | +**Co pokazuje ta metafora?** |
|
| 102 | + |
|
| 103 | +- Modele językowe (podobnie jak dżin) nie „czytają w myślach” i nie domyślają się naszych intencji. |
|
| 104 | +- Odpowiedź będzie zgodna z literalnym znaczeniem promptu, nawet jeśli nie o to nam chodziło. |
|
| 105 | +- Brak precyzji prowadzi do nieoczekiwanych, czasem absurdalnych rezultatów. |
|
| 106 | + |
|
| 107 | +**Wniosek:** |
|
| 108 | + |
|
| 109 | +Im bardziej precyzyjny, jednoznaczny i szczegółowy prompt, tym większa szansa, że model AI wygeneruje odpowiedź zgodną z naszymi oczekiwaniami. Warto zawsze doprecyzować: |
|
| 110 | +- Kto/co ma być podmiotem działania |
|
| 111 | +- Jaki jest cel i kontekst |
|
| 112 | +- Jakiego efektu oczekujemy |
|
| 113 | + |
|
| 114 | +Dzięki temu unikniemy „efektu dżina” i otrzymamy dokładnie to, czego potrzebujemy. |
|
| 115 | + |
|
| 116 | +___ |
|
| 117 | +## Precyzja promptu w agentach AI |
|
| 118 | + |
|
| 119 | + |
|
| 120 | + |
|
| 121 | +W przypadku klasycznych modeli językowych każde zapytanie możemy doskonalić w trakcie rozmowy – przez iterację, doprecyzowanie, poprawienie błędów. **Założeniem agenta AI jest minimalizacja naszej pracy i kontaktu do absolutnego minimum**. Dążymy do sytuacji, w której wystarczy np. wrzucić notatki ze spotkania, a agent sam wykonuje całą pracę – analizuje, kategoryzuje, tworzy raporty, wysyła powiadomienia. Brak iteracji oznacza, że **prompt musi być precyzyjny od samego początku**, bo agent działa autonomicznie bez naszej korekty. |
|
| 122 | + |
|
| 123 | +**Konsekwencje nieprecyzyjnego promptu:** |
|
| 124 | + |
|
| 125 | +**Agent obsługi klienta bez jasnych granic:** |
|
| 126 | +``` |
|
| 127 | +Prompt: |
|
| 128 | +„Odpowiadaj na pytania klientów" |
|
| 129 | +``` |
|
| 130 | + |
|
| 131 | +>**Problem:** Agent może zacząć udzielać informacji, których nie powinien (np. o wynagrodzeniach pracowników, planach biznesowych firmy), lub obiecywać rzeczy, których firma nie może zrealizować. |
|
| 132 | + |
|
| 133 | + **Agent z precyzyjnym promptem:** |
|
| 134 | +``` |
|
| 135 | +Prompt: „Jesteś asystentem obsługi klienta. Odpowiadasz TYLKO na pytania dotyczące: statusu zamówienia, terminów dostawy, procedur zwrotu. Jeśli klient pyta o coś innego, uprzejmie przekieruj go do odpowiedniego działu. NIE podawaj informacji o cenach hurtowych, rabatach specjalnych ani wewnętrznych procesach firmy." |
|
| 136 | +``` |
|
| 137 | +> Efekt: Agent działa w ściśle określonych ramach, chroniąc firmę przed błędami i wyciekami informacji. |
|
| 138 | + |
|
| 139 | +--- |
|
| 140 | +## Halucynacje – największe zagrożenie w agentach AI |
|
| 141 | + |
|
| 142 | + |
|
| 143 | + |
|
| 144 | +### Czym są halucynacje AI? |
|
| 145 | + |
|
| 146 | +**Halucynacje** to sytuacja, w której model językowy generuje informacje, które brzmią przekonująco, ale są całkowicie nieprawdziwe lub wymyślone. |
|
| 147 | + |
|
| 148 | +**Przykłady halucynacji:** |
|
| 149 | +- Agent podaje nieistniejące numery polis ubezpieczeniowych |
|
| 150 | +- Cytuje regulacje prawne, które nie istnieją |
|
| 151 | +- Twierdzi, że firma oferuje usługi, których nie ma w ofercie |
|
| 152 | +- Generuje fikcyjne dane klientów lub zamówień |
|
| 153 | + |
|
| 154 | +### Dlaczego halucynacje są szczególnie niebezpieczne w agentach AI? |
|
| 155 | + |
|
| 156 | +W zwykłej rozmowie z ChatGPT użytkownik **wie**, że rozmawia z AI i może zweryfikować informacje. **Agent AI działa w imieniu firmy** – klienci, kandydaci czy partnerzy biznesowi mogą przyjąć jego odpowiedzi za prawdę, co prowadzi do: |
|
| 157 | + |
|
| 158 | +- Utraty zaufania klientów |
|
| 159 | +- Problemów prawnych (np. złamanie umów, wprowadzenie w błąd) |
|
| 160 | +- Strat finansowych (np. obietnice rabatów, których firma nie może zrealizować) |
|
| 161 | +- Uszkodzenia reputacji marki |
|
| 162 | + |
|
| 163 | +--- |
|
| 164 | + |
|
| 165 | +## Przykład halucynacji - skrzedełka wieprzowe |
|
| 166 | + |
|
| 167 | + |
|
| 168 | + |
|
| 169 | +**Prompt użytkownika:** |
|
| 170 | +``` |
|
| 171 | +Podaj przepis na wieprzowe skrzydełka |
|
| 172 | +``` |
|
| 173 | + |
|
| 174 | +**Odpowiedź modelu językowego:** |
|
| 175 | + |
|
| 176 | +```SQL |
|
| 177 | +Oto prosty i smaczny przepis na wieprzowe skrzydełka, bez jajek i bez sosu sojowego: |
|
| 178 | + |
|
| 179 | +Wieprzowe skrzydełka pieczone w aromatycznej marynacie |
|
| 180 | + |
|
| 181 | +Składniki (na ok. 1 kg skrzydełek wieprzowych): |
|
| 182 | + |
|
| 183 | +- 1 kg skrzydełek wieprzowych |
|
| 184 | +- 3 ząbki czosnku, przeciśnięte |
|
| 185 | +- 1 łyżeczka soli |
|
| 186 | +- 1 łyżeczka słodkiej papryki |
|
| 187 | +- 1 łyżeczka wędzonej papryki (opcjonalnie, ale polecam) |
|
| 188 | +- 1/2 łyżeczki ostrej papryki |
|
| 189 | +- 1 łyżeczka majeranku |
|
| 190 | +- 1 łyżeczka miodu albo syropu klonowego |
|
| 191 | +- 2 łyżki oleju |
|
| 192 | +- 1 łyżka octu jabłkowego |
|
| 193 | +- pieprz do smaku |
|
| 194 | + |
|
| 195 | +Przygotowanie: |
|
| 196 | + |
|
| 197 | +1. Wymieszaj wszystkie składniki marynaty w misce. |
|
| 198 | +2. Dodaj skrzydełka, dokładnie obtocz i odstaw minimum na 2 godziny (najlepiej na noc). |
|
| 199 | +3. Rozgrzej piekarnik do 180°C. |
|
| 200 | +4. Ułóż skrzydełka na blasze lub w naczyniu żaroodpornym. |
|
| 201 | +5. Piecz 60-80 minut, co jakiś czas polewając je wytapiającym się sosem. |
|
| 202 | +6. Pod koniec możesz zwiększyć temperaturę do 200°C na 10 minut, żeby były bardziej przypieczone. |
|
| 203 | + |
|
| 204 | +Podanie: |
|
| 205 | +Najlepsze z pieczonymi ziemniakami, surówką z kiszonej kapusty albo świeżą bułką i ogórkiem kiszonym. |
|
| 206 | + |
|
| 207 | +Chcesz wersję pikantną, słodką, albo w stylu BBQ (bez soi)? |
|
| 208 | +``` |
|
| 209 | + |
|
| 210 | +Model AI może wygenerować szczegółowy przepis na „wieprzowe skrzydełka", mimo że **świnie nie mają skrzydeł**. Odpowiedź będzie brzmiała przekonująco – z listą składników, czasem pieczenia, temperaturą – ale będzie całkowicie zmyślona, bo taki produkt nie istnieje. |
|
| 211 | + |
|
| 212 | +**Co to pokazuje?** |
|
| 213 | + |
|
| 214 | +Model nie rozumie rzeczywistości – generuje tekst na podstawie statystycznych wzorców. Jeśli prompt brzmi sensownie językowo, model wyprodukuje odpowiedź, nawet jeśli jest absurdalna. W agencie AI taka halucynacja może prowadzić do poważnych konsekwencji biznesowych. |
|
| 215 | + |
|
| 216 | +--- |
|
| 217 | + |
|
| 218 | +## Przykład literalnej interpretacji promptu |
|
| 219 | + |
|
| 220 | +**Prompt użytkownika:** |
|
| 221 | +``` |
|
| 222 | +Stwórz obraz ryby pływającej po wodzie |
|
| 223 | +``` |
|
| 224 | + |
|
| 225 | + |
|
| 226 | + |
|
| 227 | +**Co się stało?** |
|
| 228 | + |
|
| 229 | +Model zinterpretował prompt **dosłownie** – zamiast poprawić błąd ortograficzny („wodze" zamiast „wodzie"), wygenerował obraz ryby pływającej po **wodzy** (element uprzęży końskiej). To pokazuje, że model nie rozumie intencji – wykonuje polecenie literalnie, nawet jeśli jest absurdalne. |
|
| 230 | + |
|
| 231 | +**Konsekwencje w agentach AI:** |
|
| 232 | + |
|
| 233 | +Nawet małe odstępstwo od normy, użycie skrótu myślowego czy slangu może spowodować, że model językowy wykona nasze polecenie dosłownie, generując niepożądane lub błędne wyniki. Dlatego precyzja promptu jest kluczowa. |
|
| 234 | + |
|
| 235 | +--- |
|
| 236 | + |
|
| 237 | +## Ton i styl w komunikacji agenta AI |
|
| 238 | + |
|
| 239 | +Precyzja promptu to nie tylko treść – to także **sposób komunikacji**. Agent może mieć dostęp do wszystkich danych i idealną logikę działania, ale jeśli komunikuje się w niewłaściwy sposób, może: |
|
| 240 | + |
|
| 241 | +- **Zniechęcić klientów** – zbyt formalny ton w sytuacji wymagającej empatii |
|
| 242 | +- **Stracić autorytet** – zbyt swobodny ton w kontekście profesjonalnym |
|
| 243 | +- **Wprowadzić zamieszanie** – niejasny lub zbyt techniczny język dla przeciętnego użytkownika |
|
| 244 | +- **Zaszkodzić wizerunkowi marki** – niespójny ton z wartościami firmy |
|
| 245 | + |
|
| 246 | +**Ton i styl to nie ozdoba – to narzędzie biznesowe**, które bezpośrednio wpływa na doświadczenie użytkownika i postrzeganie organizacji. |
|
| 247 | + |
|
| 248 | +--- |
|
| 249 | + |
|
| 250 | +## Kluczowe wymiary tonu w promptach dla agentów AI |
|
| 251 | + |
|
| 252 | +### 1. **Formalność (Formalny ↔ Swobodny)** |
|
| 253 | + |
|
| 254 | +**Ton formalny:** |
|
| 255 | +- Używany w: komunikacji B2B, dokumentach prawnych, oficjalnej korespondencji |
|
| 256 | +- Cechy: pełne zdania, brak skrótów, oficjalne formuły grzecznościowe |
|
| 257 | + |
|
| 258 | +**Przykład promptu:** |
|
| 259 | +``` |
|
| 260 | +Komunikuj się w sposób profesjonalny i formalny. Używaj pełnych zdań, unikaj skrótów i kolokwializmów. Zwracaj się do użytkowników per „Szanowny Panie/Pani" lub „Pan/Pani". Kończ odpowiedzi uprzejmym zwrotem: „Pozostaję do dyspozycji w razie pytań." |
|
| 261 | +``` |
|
| 262 | + |
|
| 263 | +**Ton swobodny:** |
|
| 264 | +- Używany w: marketingu skierowanym do młodszej grupy, social media, startupy |
|
| 265 | +- Cechy: krótkie zdania, bezpośredni styl, emoji (z umiarem) |
|
| 266 | + |
|
| 267 | +**Przykład promptu:** |
|
| 268 | +``` |
|
| 269 | +Komunikuj się w sposób przyjazny i bezpośredni. Używaj prostego języka, krótkich zdań. Możesz używać zwrotów typu „Hej!", „Super!" czy „Daj znać, jeśli masz pytania". Zachowaj entuzjazm, ale nie przesadzaj z emoji. |
|
| 270 | +``` |
|
| 271 | + |
|
| 272 | +--- |
|
| 273 | + |
|
| 274 | +### 2. **Empatyczność (Neutralny ↔ Empatyczny)** |
|
| 275 | + |
|
| 276 | +**Ton neutralny:** |
|
| 277 | +- Używany w: przekazywaniu faktów, raportach, systemach informacyjnych |
|
| 278 | +- Cechy: obiektywny, bezstronny, skupiony na danych |
|
| 279 | + |
|
| 280 | +**Przykład promptu:** |
|
| 281 | +``` |
|
| 282 | +Odpowiadaj w sposób rzeczowy i obiektywny. Podawaj fakty i konkretne informacje bez dodawania emocjonalnych komentarzy. Unikaj fraz typu „rozumiem Twoje zmartwienie" – skup się na rozwiązaniu problemu. |
|
| 283 | +``` |
|
| 284 | + |
|
| 285 | +**Ton empatyczny:** |
|
| 286 | +- Używany w: obsłudze klienta, sytuacjach konfliktowych, reklamacjach |
|
| 287 | +- Cechy: uznanie emocji użytkownika, zapewnienie wsparcia |
|
| 288 | + |
|
| 289 | +**Przykład promptu:** |
|
| 290 | +``` |
|
| 291 | +Komunikuj się w sposób empatyczny i wspierający. Jeśli klient wyraża frustrację lub niezadowolenie, zacznij od uznania jego emocji: „Rozumiem Twoje zaniepokojenie" lub „Przykro mi, że tak się stało". Następnie przedstaw rozwiązanie i zapewnij o dalszym wsparciu. |
|
| 292 | +``` |
|
| 293 | + |
|
| 294 | +--- |
|
| 295 | + |
|
| 296 | +### 3. **Szczegółowość (Zwięzły ↔ Szczegółowy)** |
|
| 297 | + |
|
| 298 | +**Ton zwięzły:** |
|
| 299 | +- Używany w: czatbotach, szybkich odpowiedziach, FAQ |
|
| 300 | +- Cechy: krótkie, konkretne, na temat |
|
| 301 | + |
|
| 302 | +**Przykład promptu:** |
|
| 303 | +``` |
|
| 304 | +Odpowiadaj krótko i na temat. Maksymalnie 2-3 zdania. Jeśli użytkownik potrzebuje więcej informacji, zapytaj: „Czy chcesz, żebym rozwinął ten temat?" |
|
| 305 | +``` |
|
| 306 | + |
|
| 307 | +**Ton szczegółowy:** |
|
| 308 | +- Używany w: raportach, instrukcjach, edukacji |
|
| 309 | +- Cechy: rozwinięte wyjaśnienia, przykłady, kontekst |
|
| 310 | + |
|
| 311 | +**Przykład promptu:** |
|
| 312 | +``` |
|
| 313 | +Odpowiadaj w sposób szczegółowy i wyczerpujący. Podawaj kontekst, wyjaśniaj krok po kroku, dodawaj przykłady. Upewnij się, że użytkownik otrzymał pełny obraz tematu. |
|
| 314 | +``` |
|
| 315 | + |
|
| 316 | +--- |
|
| 317 | + |
|
| 318 | +### 4. **Techniczność (Przystępny ↔ Ekspercki)** |
|
| 319 | + |
|
| 320 | +**Ton przystępny:** |
|
| 321 | +- Używany w: komunikacji z osobami nietechnicznymi, edukacji podstawowej |
|
| 322 | +- Cechy: unikanie żargonu, proste analogie |
|
| 323 | + |
|
| 324 | +**Przykład promptu:** |
|
| 325 | +``` |
|
| 326 | +Wyjaśniaj pojęcia w prosty sposób, bez używania żargonu technicznego. Jeśli musisz użyć specjalistycznego terminu, wyjaśnij go od razu. Używaj analogii i przykładów z życia codziennego. |
|
| 327 | +``` |
|
| 328 | + |
|
| 329 | +**Ton ekspercki:** |
|
| 330 | +- Używany w: komunikacji B2B technicznej, dokumentacji, dla specjalistów |
|
| 331 | +- Cechy: precyzyjne terminy branżowe, szczegóły techniczne |
|
| 332 | + |
|
| 333 | +**Przykład promptu:** |
|
| 334 | +``` |
|
| 335 | +Komunikuj się na poziomie eksperckim. Używaj precyzyjnych terminów technicznych, zakładając, że odbiorca ma wiedzę specjalistyczną. Podawaj szczegóły implementacyjne i odniesienia do standardów branżowych. |
|
| 336 | +``` |
|
| 337 | + |
|
| 338 | +--- |
|
| 339 | + |
|
| 340 | +## Jak zdefiniować ton w prompcie dla agenta? |
|
| 341 | + |
|
| 342 | +### Szablon definiowania tonu: |
|
| 343 | + |
|
| 344 | +``` |
|
| 345 | +Jesteś [rola agenta] w [kontekst organizacji]. |
|
| 346 | + |
|
| 347 | +Ton komunikacji: [formalny/swobodny], [empatyczny/neutralny], [zwięzły/szczegółowy], [przystępny/ekspercki] |
|
| 348 | + |
|
| 349 | +Zasady stylu: |
|
| 350 | +1. [Określ, jak zaczynać odpowiedzi] |
|
| 351 | +2. [Określ, jakiego języka używać] |
|
| 352 | +3. [Określ, czego unikać] |
|
| 353 | +4. [Określ, jak kończyć odpowiedzi] |
|
| 354 | + |
|
| 355 | +Przykładowe odpowiedzi w odpowiednim tonie: |
|
| 356 | +- [Przykład 1] |
|
| 357 | +- [Przykład 2] |
|
| 358 | +``` |
|
| 359 | + |
|
| 360 | +--- |
|
| 361 | + |
|
| 362 | +### Przykład gotowego promptu dla agenta HR: |
|
| 363 | + |
|
| 364 | +``` |
|
| 365 | +Jesteś asystentem HR w firmie technologicznej zajmującej się tworzeniem oprogramowania. |
|
| 366 | + |
|
| 367 | +Ton komunikacji: profesjonalny, ale przyjazny | empatyczny | umiarkowanie szczegółowy | przystępny |
|
| 368 | + |
|
| 369 | +Zasady stylu: |
|
| 370 | +1. Zaczynaj odpowiedzi od „Dziękuję za kontakt" lub „Dziękuję za pytanie" |
|
| 371 | +2. Używaj prostego języka, unikaj żargonu technicznego (chyba że kandydat o to pyta) |
|
| 372 | +3. Unikaj obietnic, których firma nie może spełnić (np. „Na pewno dostaniesz pracę") |
|
| 373 | +4. Kończ odpowiedzi: „Chętnie odpowiem na dodatkowe pytania!" lub „Powodzenia w procesie rekrutacji!" |
|
| 374 | + |
|
| 375 | +Przykładowe odpowiedzi: |
|
| 376 | +- Pytanie o wymagania: „Dziękuję za zainteresowanie stanowiskiem. Poszukujemy osoby z [lista wymagań]. Jeśli spełniasz te kryteria, zapraszamy do aplikowania!" |
|
| 377 | +- Pytanie o proces: „Nasz proces rekrutacji składa się z trzech etapów: [opis]. Każdy etap trwa około [czas]. Chętnie odpowiem na dodatkowe pytania!" |
|
| 378 | +``` |
|
| 379 | + |
|
| 380 | +--- |
|
| 381 | + |
|
| 382 | +## Podsumowanie – precyzja promptu i ton w agentach AI |
|
| 383 | + |
|
| 384 | +**Kluczowe zasady budowania skutecznych agentów AI:** |
|
| 385 | + |
|
| 386 | +1. **Precyzja treści promptu** |
|
| 387 | + - Określ jasne granice działania agenta |
|
| 388 | + - Zdefiniuj, co agent może i czego nie może robić |
|
| 389 | + - Zapewnij dostęp do wiarygodnych danych, aby minimalizować halucynacje |
|
| 390 | + |
|
| 391 | +2. **Precyzja tonu i stylu** |
|
| 392 | + - Zdefiniuj ton na czterech wymiarach: formalność, empatyczność, szczegółowość, techniczność |
|
| 393 | + - Podaj konkretne przykłady odpowiedzi w odpowiednim tonie |
|
| 394 | + - Testuj agenta w różnych scenariuszach, aby upewnić się, że ton jest spójny |
|
| 395 | + |
|
| 396 | +3. **Konsekwencje biznesowe** |
|
| 397 | + - Nieprecyzyjny prompt lub niewłaściwy ton prowadzi do utraty zaufania klientów |
|
| 398 | + - Może skutkować problemami prawnymi, stratami finansowymi i uszkodzeniem reputacji |
|
| 399 | + - Dobrze zaprojektowany agent to inwestycja w wizerunek i efektywność firmy |
|
| 400 | + |
|
| 401 | +**Wniosek:** Precyzja promptu – zarówno w treści, jak i w tonie – to fundamentalna różnica między agentem, który wspiera firmę, a agentem, który może jej zaszkodzić. |
|
| 402 | + |
|
| 403 | +--- |
|
| 404 | + |
Modul 5 - Implementacja agenta AI/4. Po\305\202\304\205czenie API i tokeny.md
| ... | ... | @@ -0,0 +1,283 @@ |
| 1 | + |
|
| 2 | + |
|
| 3 | + |
|
| 4 | +<div align="center"> |
|
| 5 | + |
|
| 6 | +### **ChatGPT w przeglądarce vs ChatGPT API – kluczowe różnice** |
|
| 7 | + |
|
| 8 | +</div> |
|
| 9 | + |
|
| 10 | +| **Aspekt** | **ChatGPT w przeglądarce** | **ChatGPT API** | |
|
| 11 | +| ------------------- | -------------------------------------------------------- | ----------------------------------------------- | |
|
| 12 | +| **Dostęp** | Przez chat.openai.com | Przez kod (n8n, Python, Node.js) | |
|
| 13 | +| **Model kontroli** | Ograniczony (temperatura, długość) | Pełna kontrola parametrów | |
|
| 14 | +| **Koszt** | Abonament: ~$20/miesiąc (Plus) lub darmowy | Pay-per-use: płacisz za tokeny | |
|
| 15 | +| **Limity tokenów** | Ukryte, zależne od wersji | Jawne, konfigurowane (4k, 8k, 128k) | |
|
| 16 | +| **Funkcje** | UI, historia konwersacji, DALL-E, przeglądanie internetu | Surowe API, brak UI | |
|
| 17 | +| **Integracja** | Brak | Pełna integracja z aplikacjami | |
|
| 18 | +| **Historia** | Automatycznie zapisywana | Musisz zarządzać samodzielnie | |
|
| 19 | +| **Dane treningowe** | Mogą być używane (można wyłączyć) | Nie są używane do treningu | |
|
| 20 | +| **Prywatność** | Standardowa | Większa (dane nie są przechowywane) | |
|
| 21 | +| **Rate limiting** | Niewidoczne dla użytkownika | Limity żądań/minutę (RPM) i tokeny/minutę (TPM) | |
|
| 22 | + |
|
| 23 | +--- |
|
| 24 | + |
|
| 25 | + |
|
| 26 | +<div align="center"> |
|
| 27 | + |
|
| 28 | +### **Limity tokenów w popularnych modelach** |
|
| 29 | + |
|
| 30 | +</div> |
|
| 31 | + |
|
| 32 | +**OpenAI GPT:** |
|
| 33 | + |
|
| 34 | +| Model | Limit tokenów | Przybliżony ekwiwalent | |
|
| 35 | +|-------|---------------|------------------------| |
|
| 36 | +| GPT-3.5-turbo | 4,096 | ~3,000 słów / 6 stron A4 | |
|
| 37 | +| GPT-3.5-turbo-16k | 16,384 | ~12,000 słów / 24 strony A4 | |
|
| 38 | +| GPT-4 | 8,192 | ~6,000 słów / 12 stron A4 | |
|
| 39 | +| GPT-4-32k | 32,768 | ~24,000 słów / 48 stron A4 | |
|
| 40 | +| GPT-4-turbo | 128,000 | ~96,000 słów / 192 strony A4 | |
|
| 41 | +| GPT-4o | 128,000 | ~96,000 słów / 192 strony A4 | |
|
| 42 | +| **GPT-5** | **128,000** | **~96,000 słów / 192 strony A4** | |
|
| 43 | +| **GPT-5 mini** | **128,000** | **~96,000 słów / 192 strony A4** | |
|
| 44 | +| **GPT-5 nano** | **128,000** | **~96,000 słów / 192 strony A4** | |
|
| 45 | + |
|
| 46 | +**Inne modele:** |
|
| 47 | + |
|
| 48 | +- **Claude 3 (Anthropic):** do 200,000 tokenów (~150,000 słów) |
|
| 49 | +- **Gemini 1.5 Pro (Google):** do 2,000,000 tokenów (~1,500,000 słów) |
|
| 50 | +- **Llama 3 (Meta):** 8,192 tokenów (~6,000 słów) |
|
| 51 | + |
|
| 52 | +**Uwaga:** Limit obejmuje **prompt + odpowiedź**! |
|
| 53 | + |
|
| 54 | +**Przykład:** |
|
| 55 | +- Prompt: 1000 tokenów |
|
| 56 | +- Odpowiedź: 500 tokenów |
|
| 57 | +- **Razem: 1500 tokenów zużytych z limitu 4096** |
|
| 58 | + |
|
| 59 | +--- |
|
| 60 | + |
|
| 61 | + |
|
| 62 | +<div align="center"> |
|
| 63 | + |
|
| 64 | +### **Jak działa rozliczanie w API?** |
|
| 65 | + |
|
| 66 | +</div> |
|
| 67 | + |
|
| 68 | +**Model cenowy: Pay-per-token** |
|
| 69 | + |
|
| 70 | +Płacisz za każdy token, który przetworzysz – zarówno w prompcie (input) jak i odpowiedzi (output). |
|
| 71 | + |
|
| 72 | +**Ceny OpenAI API (przykładowe, aktualne na listopad 2024):** |
|
| 73 | + |
|
| 74 | +| Model | Input (za 1M tokenów) | Output (za 1M tokenów) | |
|
| 75 | +|-------|----------------------|------------------------| |
|
| 76 | +| GPT-3.5-turbo | $0.50 | $1.50 | |
|
| 77 | +| GPT-4 | $30.00 | $60.00 | |
|
| 78 | +| GPT-4-turbo | $10.00 | $30.00 | |
|
| 79 | +| GPT-4o | $5.00 | $15.00 | |
|
| 80 | + |
|
| 81 | +**Przykład kalkulacji kosztu:** |
|
| 82 | + |
|
| 83 | +Zapytanie: |
|
| 84 | +- Prompt: 500 tokenów (input) |
|
| 85 | +- Odpowiedź: 300 tokenów (output) |
|
| 86 | + |
|
| 87 | +**GPT-3.5-turbo:** |
|
| 88 | +- Input: 500 × $0.50 / 1,000,000 = $0.00025 |
|
| 89 | +- Output: 300 × $1.50 / 1,000,000 = $0.00045 |
|
| 90 | +- **Razem: $0.0007 (około 0.07 centa)** |
|
| 91 | + |
|
| 92 | +**GPT-4:** |
|
| 93 | +- Input: 500 × $30 / 1,000,000 = $0.015 |
|
| 94 | +- Output: 300 × $60 / 1,000,000 = $0.018 |
|
| 95 | +- **Razem: $0.033 (około 3.3 centa)** |
|
| 96 | + |
|
| 97 | +**Dla 1000 zapytań:** |
|
| 98 | +- GPT-3.5: ~$0.70 |
|
| 99 | +- GPT-4: ~$33 |
|
| 100 | + |
|
| 101 | +**Wniosek:** GPT-4 jest **~47× droższy** niż GPT-3.5! |
|
| 102 | + |
|
| 103 | +--- |
|
| 104 | + |
|
| 105 | + |
|
| 106 | +<div align="center"> |
|
| 107 | + |
|
| 108 | +### **GPT-5 – najbardziej zaawansowany model OpenAI** |
|
| 109 | + |
|
| 110 | +</div> |
|
| 111 | + |
|
| 112 | +**GPT-5** to najinteligentniejszy model OpenAI, specjalnie wytrenowany do: |
|
| 113 | + |
|
| 114 | +✅ **Generowania kodu, debugowania i refaktoryzacji** |
|
| 115 | +✅ **Ścisłego podążania za instrukcjami** |
|
| 116 | +✅ **Długiego kontekstu i wywoływania narzędzi (tool calling)** |
|
| 117 | +✅ **Zadań agentowych (agentic tasks)** |
|
| 118 | + |
|
| 119 | +**Tokeny w GPT-5:** |
|
| 120 | +- **Limit kontekstu: 128,000 tokenów** (identycznie jak GPT-4o/GPT-4-turbo) |
|
| 121 | +- Dotyczy wszystkich wariantów: `gpt-5`, `gpt-5-mini`, `gpt-5-nano` |
|
| 122 | +- Model używa **reasoning tokens** – wewnętrzny "łańcuch myśli" przed odpowiedzią |
|
| 123 | +- Możliwość przekazywania Chain of Thought (CoT) między turami konwersacji |
|
| 124 | + |
|
| 125 | +**Warianty modeli GPT-5:** |
|
| 126 | + |
|
| 127 | +| Model | Najlepsze dla | Reasoning effort | |
|
| 128 | +|-------|---------------|------------------| |
|
| 129 | +| `gpt-5` | Złożone rozumowanie, szeroką wiedzę, kod, zadania agentowe | `minimal`, `low`, `medium`, `high` | |
|
| 130 | +| `gpt-5-mini` | Równowaga między kosztem, szybkością i możliwościami | `minimal`, `low`, `medium` | |
|
| 131 | +| `gpt-5-nano` | Zadania o wysokiej przepustowości, proste instrukcje, klasyfikacja | `minimal`, `low` | |
|
| 132 | + |
|
| 133 | +--- |
|
| 134 | + |
|
| 135 | + |
|
| 136 | +<div align="center"> |
|
| 137 | + |
|
| 138 | +### **Podsumowanie** |
|
| 139 | + |
|
| 140 | +</div> |
|
| 141 | + |
|
| 142 | +| **Aspekt** | **ChatGPT w przeglądarce** | **API** | |
|
| 143 | +|------------|----------------------------|---------| |
|
| 144 | +| **Najlepsze dla** | Użytkowników końcowych, eksploracji | Deweloperów, automatyzacji | |
|
| 145 | +| **Koszt** | $0 lub $20/miesiąc (flat rate) | Pay-per-token (zmienne) | |
|
| 146 | +| **Kontrola** | Ograniczona | Pełna | |
|
| 147 | +| **Zarządzanie tokenami** | Automatyczne | Manualne | |
|
| 148 | +| **Integracja** | Brak | Pełna | |
|
| 149 | + |
|
| 150 | +**Kluczowe wnioski:** |
|
| 151 | + |
|
| 152 | +1. **Tokeny = pieniądze** – każdy token w API kosztuje |
|
| 153 | +2. **Wybieraj model świadomie** – GPT-4 jest 47× droższy niż GPT-3.5 |
|
| 154 | +3. **Optymalizuj prompty** – krótsze = tańsze |
|
| 155 | +4. **Monitoruj zużycie** – unikaj niespodzianek na fakturze |
|
| 156 | +5. **ChatGPT Plus opłacalny dla power users** – 9600+ wiadomości/m za $20 |
|
| 157 | +6. **API lepsze dla aplikacji** – pełna kontrola i integracja |
|
| 158 | + |
|
| 159 | +**Decyzja:** Przeglądarka dla ludzi, API dla robotów! |
|
| 160 | + |
|
| 161 | +--- |
|
| 162 | + |
|
| 163 | +## Optymalizacja promptu pod kątem kosztów API |
|
| 164 | + |
|
| 165 | +Każde wywołanie agenta AI generuje koszty – zwykle płacimy za liczbę **tokenów** (jednostek tekstu) przetwarzanych przez model. Im dłuższy prompt i odpowiedź, tym wyższy koszt. |
|
| 166 | + |
|
| 167 | +### Jak zmniejszyć koszty obsługi agenta? |
|
| 168 | + |
|
| 169 | +#### 1. **Zwięzłość promptu** |
|
| 170 | + |
|
| 171 | +**Źle:** |
|
| 172 | +``` |
|
| 173 | +Jesteś asystentem obsługi klienta w firmie zajmującej się sprzedażą elektroniki. Odpowiadasz na pytania klientów dotyczące produktów, zamówień, dostaw, zwrotów, reklamacji i wszelkich innych zagadnień związanych z obsługą klienta. Twoja rola polega na udzielaniu szczegółowych, pomocnych i przystępnych odpowiedzi, które rozwiązują problemy klientów. Zawsze bądź uprzejmy, empatyczny i profesjonalny. Jeśli klient jest niezadowolony, przeproś i zaproponuj rozwiązanie. Jeśli nie znasz odpowiedzi, przekieruj klienta do odpowiedniego działu. |
|
| 174 | +``` |
|
| 175 | + |
|
| 176 | +**Dobrze:** |
|
| 177 | +``` |
|
| 178 | +Jesteś asystentem obsługi klienta w sklepie elektroniki. Odpowiadasz na pytania o produkty, zamówienia, dostawy i zwroty. Ton: uprzejmy i pomocny. Jeśli nie znasz odpowiedzi, przekieruj do właściwego działu. |
|
| 179 | +``` |
|
| 180 | + |
|
| 181 | +**Oszczędność:** ~70 tokenów na każde wywołanie |
|
| 182 | + |
|
| 183 | +--- |
|
| 184 | + |
|
| 185 | +#### 2. **Ograniczenie długości odpowiedzi** |
|
| 186 | + |
|
| 187 | +Dodaj w prompcie: |
|
| 188 | +``` |
|
| 189 | +Odpowiadaj zwięźle – maksymalnie 3-4 zdania. Jeśli użytkownik potrzebuje więcej informacji, zapyta. |
|
| 190 | +``` |
|
| 191 | + |
|
| 192 | +**Efekt:** Krótsze odpowiedzi = mniej tokenów = niższe koszty |
|
| 193 | + |
|
| 194 | +--- |
|
| 195 | + |
|
| 196 | +#### 3. **Unikanie powtórzeń w prompcie** |
|
| 197 | + |
|
| 198 | +Zamiast: |
|
| 199 | +``` |
|
| 200 | +Jeśli klient pyta o zwrot, odpowiedz X. |
|
| 201 | +Jeśli klient pyta o reklamację, odpowiedz Y. |
|
| 202 | +Jeśli klient pyta o wymianę, odpowiedz Z. |
|
| 203 | +``` |
|
| 204 | + |
|
| 205 | +Użyj: |
|
| 206 | +``` |
|
| 207 | +Polityka zwrotów: [krótki opis]. Stosuj ją do pytań o zwrot, reklamację i wymianę. |
|
| 208 | +``` |
|
| 209 | + |
|
| 210 | +--- |
|
| 211 | + |
|
| 212 | +#### 4. **Wykorzystanie cache'owania (w ChatGPT API)** |
|
| 213 | + |
|
| 214 | +W przypadku powtarzających się fragmentów promptu (np. zasad firmy, listy produktów), wykorzystaj mechanizm **Prompt Caching**, który zmniejsza koszty o 50-90% dla powtarzalnych elementów. |
|
| 215 | + |
|
| 216 | +**Więcej informacji:** |
|
| 217 | +- [ChatGPT API – dokumentacja oficjalna](https://platform.openai.com/docs/guides/chat) |
|
| 218 | +- [Pricing – koszty tokenów](https://openai.com/api/pricing/) |
|
| 219 | + |
|
| 220 | +--- |
|
| 221 | + |
|
| 222 | +#### 5. **Wybór modelu** |
|
| 223 | + |
|
| 224 | +Nie zawsze potrzebujesz najdroższego modelu. Dla prostych zadań (FAQ, powitania) możesz użyć tańszych modeli: |
|
| 225 | + |
|
| 226 | +- **GPT-4** – droższy, ale najbardziej zaawansowany |
|
| 227 | +- **GPT-4o mini** – tańszy, wystarczający dla większości zadań |
|
| 228 | +- **GPT-3.5 Turbo** – najtańszy, dobry dla prostych odpowiedzi |
|
| 229 | + |
|
| 230 | +**Strategia:** Używaj droższego modelu tylko tam, gdzie jest naprawdę potrzebny (np. złożone analizy, decyzje biznesowe). |
|
| 231 | + |
|
| 232 | +--- |
|
| 233 | + |
|
| 234 | +#### 6. **Monitorowanie zużycia tokenów** |
|
| 235 | + |
|
| 236 | +Regularnie sprawdzaj zużycie tokenów w panelu OpenAI: |
|
| 237 | +- Śledź liczbę tokenów na zapytanie |
|
| 238 | +- Identyfikuj prompty, które generują zbyt długie odpowiedzi |
|
| 239 | +- Optymalizuj te, które generują największe koszty |
|
| 240 | + |
|
| 241 | +**Narzędzie:** [OpenAI Usage Dashboard](https://platform.openai.com/usage) |
|
| 242 | + |
|
| 243 | +--- |
|
| 244 | + |
|
| 245 | +### Przykładowe koszty (na podstawie cennika OpenAI) |
|
| 246 | + |
|
| 247 | +**GPT-4o:** |
|
| 248 | +- Input: $2.50 za 1M tokenów |
|
| 249 | +- Output: $10.00 za 1M tokenów |
|
| 250 | + |
|
| 251 | +**GPT-4o mini:** |
|
| 252 | +- Input: $0.15 za 1M tokenów |
|
| 253 | +- Output: $0.60 za 1M tokenów |
|
| 254 | + |
|
| 255 | +**Przykład:** |
|
| 256 | +Jeśli agent obsługuje 10,000 zapytań dziennie, a każde zapytanie to 100 tokenów promptu + 150 tokenów odpowiedzi: |
|
| 257 | + |
|
| 258 | +**GPT-4o:** |
|
| 259 | +- Input: 10,000 × 100 = 1M tokenów = $2.50 |
|
| 260 | +- Output: 10,000 × 150 = 1.5M tokenów = $15.00 |
|
| 261 | +- **Razem dziennie: $17.50 | miesięcznie: ~$525** |
|
| 262 | + |
|
| 263 | +**GPT-4o mini:** |
|
| 264 | +- Input: 10,000 × 100 = 1M tokenów = $0.15 |
|
| 265 | +- Output: 10,000 × 150 = 1.5M tokenów = $0.90 |
|
| 266 | +- **Razem dziennie: $1.05 | miesięcznie: ~$31.50** |
|
| 267 | + |
|
| 268 | +**Oszczędność:** ~$494/miesiąc przez wybór tańszego modelu dla prostych zadań! |
|
| 269 | + |
|
| 270 | +--- |
|
| 271 | + |
|
| 272 | +## Podsumowanie – koszty i optymalizacja |
|
| 273 | + |
|
| 274 | +**Kluczowe wnioski:** |
|
| 275 | + |
|
| 276 | +1. **Tokeny = pieniądze** – każdy token w API kosztuje |
|
| 277 | +2. **Wybieraj model świadomie** – GPT-4 jest droższy niż GPT-4o mini |
|
| 278 | +3. **Optymalizuj prompty** – krótsze = tańsze |
|
| 279 | +4. **Monitoruj zużycie** – unikaj niespodzianek na fakturze |
|
| 280 | +5. **ChatGPT Plus opłacalny dla power users** – 9600+ wiadomości/m za $20 |
|
| 281 | +6. **API lepsze dla aplikacji** – pełna kontrola i integracja |
|
| 282 | +7. **Zwięzłość promptu** – może zaoszczędzić setki dolarów miesięcznie |
|
| 283 | +8. **Cache'owanie** – wykorzystuj mechanizmy optymalizacyjne API |
Modul 6 - Warsztaty praktyczne/1. ChatBot.md
| ... | ... | @@ -0,0 +1,117 @@ |
| 1 | +```json |
|
| 2 | +{ |
|
| 3 | + "name": "1. ChatBot", |
|
| 4 | + "nodes": [ |
|
| 5 | + { |
|
| 6 | + "parameters": { |
|
| 7 | + "options": {} |
|
| 8 | + }, |
|
| 9 | + "type": "@n8n/n8n-nodes-langchain.chatTrigger", |
|
| 10 | + "typeVersion": 1.3, |
|
| 11 | + "position": [ |
|
| 12 | + 0, |
|
| 13 | + 0 |
|
| 14 | + ], |
|
| 15 | + "id": "4557aaf5-8774-471f-a6c4-518af1041fa6", |
|
| 16 | + "name": "When chat message received", |
|
| 17 | + "webhookId": "f06b3f54-e625-4ab8-83ea-94caa009a6b9" |
|
| 18 | + }, |
|
| 19 | + { |
|
| 20 | + "parameters": { |
|
| 21 | + "options": {} |
|
| 22 | + }, |
|
| 23 | + "type": "@n8n/n8n-nodes-langchain.agent", |
|
| 24 | + "typeVersion": 2.2, |
|
| 25 | + "position": [ |
|
| 26 | + 208, |
|
| 27 | + 0 |
|
| 28 | + ], |
|
| 29 | + "id": "d9b75a73-b67b-44c1-84d2-97dcfb0fab1f", |
|
| 30 | + "name": "AI Agent" |
|
| 31 | + }, |
|
| 32 | + { |
|
| 33 | + "parameters": { |
|
| 34 | + "model": { |
|
| 35 | + "__rl": true, |
|
| 36 | + "value": "gpt-5-nano", |
|
| 37 | + "mode": "list", |
|
| 38 | + "cachedResultName": "gpt-5-nano" |
|
| 39 | + }, |
|
| 40 | + "options": {} |
|
| 41 | + }, |
|
| 42 | + "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi", |
|
| 43 | + "typeVersion": 1.2, |
|
| 44 | + "position": [ |
|
| 45 | + 80, |
|
| 46 | + 208 |
|
| 47 | + ], |
|
| 48 | + "id": "59bfb9de-80e0-4f29-9b28-3b1b88b62c19", |
|
| 49 | + "name": "OpenAI Chat Model", |
|
| 50 | + "credentials": { |
|
| 51 | + "openAiApi": { |
|
| 52 | + "id": "QIDUdl5nMKsoFRT8", |
|
| 53 | + "name": "OpenAi account" |
|
| 54 | + } |
|
| 55 | + } |
|
| 56 | + }, |
|
| 57 | + { |
|
| 58 | + "parameters": {}, |
|
| 59 | + "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow", |
|
| 60 | + "typeVersion": 1.3, |
|
| 61 | + "position": [ |
|
| 62 | + 224, |
|
| 63 | + 208 |
|
| 64 | + ], |
|
| 65 | + "id": "6932c46c-36e4-4fd6-99e0-3713b9763623", |
|
| 66 | + "name": "Simple Memory" |
|
| 67 | + } |
|
| 68 | + ], |
|
| 69 | + "pinData": {}, |
|
| 70 | + "connections": { |
|
| 71 | + "When chat message received": { |
|
| 72 | + "main": [ |
|
| 73 | + [ |
|
| 74 | + { |
|
| 75 | + "node": "AI Agent", |
|
| 76 | + "type": "main", |
|
| 77 | + "index": 0 |
|
| 78 | + } |
|
| 79 | + ] |
|
| 80 | + ] |
|
| 81 | + }, |
|
| 82 | + "OpenAI Chat Model": { |
|
| 83 | + "ai_languageModel": [ |
|
| 84 | + [ |
|
| 85 | + { |
|
| 86 | + "node": "AI Agent", |
|
| 87 | + "type": "ai_languageModel", |
|
| 88 | + "index": 0 |
|
| 89 | + } |
|
| 90 | + ] |
|
| 91 | + ] |
|
| 92 | + }, |
|
| 93 | + "Simple Memory": { |
|
| 94 | + "ai_memory": [ |
|
| 95 | + [ |
|
| 96 | + { |
|
| 97 | + "node": "AI Agent", |
|
| 98 | + "type": "ai_memory", |
|
| 99 | + "index": 0 |
|
| 100 | + } |
|
| 101 | + ] |
|
| 102 | + ] |
|
| 103 | + } |
|
| 104 | + }, |
|
| 105 | + "active": false, |
|
| 106 | + "settings": { |
|
| 107 | + "executionOrder": "v1" |
|
| 108 | + }, |
|
| 109 | + "versionId": "972bb4ea-658e-460c-9d12-f9bc073f92dd", |
|
| 110 | + "meta": { |
|
| 111 | + "templateCredsSetupCompleted": true, |
|
| 112 | + "instanceId": "45cdfe5d33c15ac09fe745eed18ba8431c804bbc71dfc7e4a62ca65ad47117cb" |
|
| 113 | + }, |
|
| 114 | + "id": "YKwykGTRq6qllKeG", |
|
| 115 | + "tags": [] |
|
| 116 | +} |
|
| 117 | +``` |
Modul 6 - Warsztaty praktyczne/10. Gmail.md
| ... | ... | @@ -0,0 +1,131 @@ |
| 1 | +```json |
|
| 2 | +{ |
|
| 3 | + "name": "10. Gmail", |
|
| 4 | + "nodes": [ |
|
| 5 | + { |
|
| 6 | + "parameters": { |
|
| 7 | + "options": {} |
|
| 8 | + }, |
|
| 9 | + "type": "@n8n/n8n-nodes-langchain.chatTrigger", |
|
| 10 | + "typeVersion": 1.4, |
|
| 11 | + "position": [ |
|
| 12 | + -400, |
|
| 13 | + 0 |
|
| 14 | + ], |
|
| 15 | + "id": "5f59b3ee-44f1-40a4-b069-7de11c7e9bc2", |
|
| 16 | + "name": "When chat message received", |
|
| 17 | + "webhookId": "0c075e0e-e818-43a3-9a12-2851b9645b28" |
|
| 18 | + }, |
|
| 19 | + { |
|
| 20 | + "parameters": { |
|
| 21 | + "promptType": "define", |
|
| 22 | + "text": "=Jesteś agentem n8n odpowiedzialnym za pobieranie wiadomości Gmail.\nDzisiejsza data to: {{ $json.currentDate }}.\nMasz jedno narzędzie: Get many messages in Gmail.\nTo narzędzie przyjmuje dokładnie jeden parametr: query (string).\nZawsze wykonujesz te kroki:\nOdczytaj polecenie użytkownika po polsku.\nUstal jeden konkretny dzień, którego dotyczy pytanie użytkownika:\n– jeśli użyje słowa „dzisiaj”, to użyj {{ $json.currentDate }}\n– „wczoraj” → data o 1 dzień wcześniejsza\n– „przedwczoraj” → data o 2 dni wcześniejsza\nJeśli poda datę ręcznie (np. „29 listopada 2025”, „27.11.2024”), zinterpretuj ją jako jeden dzień.\nZamień dzień na format YYYY/MM/DD i wylicz dzień następny.\nZbuduj zapytanie Gmail w formacie:\nafter:YYYY/MM/DD before:YYYY/MM/DD_NASTĘPNY_DZIEŃ\nZawsze (dokładnie raz) wywołaj narzędzie „Get many messages in Gmail” z parametrem:\nquery: \"after:... before:...\"\n– nigdy nie wywołuj tego narzędzia bez parametru query\nPo otrzymaniu wyników odpowiedz użytkownikowi na czacie:\n– podaj liczbę wiadomości\n– wypisz listę „Nadawca – temat”\nJeśli lista jest pusta, napisz:\n„Brak wiadomości z tego dnia.”", |
|
| 23 | + "options": {} |
|
| 24 | + }, |
|
| 25 | + "type": "@n8n/n8n-nodes-langchain.agent", |
|
| 26 | + "typeVersion": 3, |
|
| 27 | + "position": [ |
|
| 28 | + -64, |
|
| 29 | + 0 |
|
| 30 | + ], |
|
| 31 | + "id": "99558854-9515-4b05-8c49-ba19d5a50839", |
|
| 32 | + "name": "AI Agent" |
|
| 33 | + }, |
|
| 34 | + { |
|
| 35 | + "parameters": { |
|
| 36 | + "model": { |
|
| 37 | + "__rl": true, |
|
| 38 | + "value": "gpt-5-nano", |
|
| 39 | + "mode": "list", |
|
| 40 | + "cachedResultName": "gpt-5-nano" |
|
| 41 | + }, |
|
| 42 | + "builtInTools": {}, |
|
| 43 | + "options": {} |
|
| 44 | + }, |
|
| 45 | + "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi", |
|
| 46 | + "typeVersion": 1.3, |
|
| 47 | + "position": [ |
|
| 48 | + -208, |
|
| 49 | + 224 |
|
| 50 | + ], |
|
| 51 | + "id": "033c09d4-4962-4633-9e75-64165756133b", |
|
| 52 | + "name": "OpenAI Chat Model", |
|
| 53 | + "credentials": { |
|
| 54 | + "openAiApi": { |
|
| 55 | + "id": "n4IfKjRdUa9SjsVf", |
|
| 56 | + "name": "OpenAi account 2" |
|
| 57 | + } |
|
| 58 | + } |
|
| 59 | + }, |
|
| 60 | + { |
|
| 61 | + "parameters": { |
|
| 62 | + "operation": "getAll", |
|
| 63 | + "limit": 10, |
|
| 64 | + "filters": {} |
|
| 65 | + }, |
|
| 66 | + "type": "n8n-nodes-base.gmailTool", |
|
| 67 | + "typeVersion": 2.1, |
|
| 68 | + "position": [ |
|
| 69 | + 176, |
|
| 70 | + 208 |
|
| 71 | + ], |
|
| 72 | + "id": "a76d70e6-44b9-4a60-bece-488b35d6de20", |
|
| 73 | + "name": "Get many messages in Gmail", |
|
| 74 | + "webhookId": "45dcb7c3-de04-472a-acd5-245726246b3e", |
|
| 75 | + "credentials": { |
|
| 76 | + "gmailOAuth2": { |
|
| 77 | + "id": "bd6wbOdqWHgE01U1", |
|
| 78 | + "name": "Gmail account" |
|
| 79 | + } |
|
| 80 | + } |
|
| 81 | + } |
|
| 82 | + ], |
|
| 83 | + "pinData": {}, |
|
| 84 | + "connections": { |
|
| 85 | + "When chat message received": { |
|
| 86 | + "main": [ |
|
| 87 | + [ |
|
| 88 | + { |
|
| 89 | + "node": "AI Agent", |
|
| 90 | + "type": "main", |
|
| 91 | + "index": 0 |
|
| 92 | + } |
|
| 93 | + ] |
|
| 94 | + ] |
|
| 95 | + }, |
|
| 96 | + "OpenAI Chat Model": { |
|
| 97 | + "ai_languageModel": [ |
|
| 98 | + [ |
|
| 99 | + { |
|
| 100 | + "node": "AI Agent", |
|
| 101 | + "type": "ai_languageModel", |
|
| 102 | + "index": 0 |
|
| 103 | + } |
|
| 104 | + ] |
|
| 105 | + ] |
|
| 106 | + }, |
|
| 107 | + "Get many messages in Gmail": { |
|
| 108 | + "ai_tool": [ |
|
| 109 | + [ |
|
| 110 | + { |
|
| 111 | + "node": "AI Agent", |
|
| 112 | + "type": "ai_tool", |
|
| 113 | + "index": 0 |
|
| 114 | + } |
|
| 115 | + ] |
|
| 116 | + ] |
|
| 117 | + } |
|
| 118 | + }, |
|
| 119 | + "active": false, |
|
| 120 | + "settings": { |
|
| 121 | + "executionOrder": "v1" |
|
| 122 | + }, |
|
| 123 | + "versionId": "fda0fe6b-4518-434c-8f96-ceaa74a92f69", |
|
| 124 | + "meta": { |
|
| 125 | + "templateCredsSetupCompleted": true, |
|
| 126 | + "instanceId": "45cdfe5d33c15ac09fe745eed18ba8431c804bbc71dfc7e4a62ca65ad47117cb" |
|
| 127 | + }, |
|
| 128 | + "id": "QIkZDsDRRGk7xL9O", |
|
| 129 | + "tags": [] |
|
| 130 | +} |
|
| 131 | +``` |
|
| ... | ... | \ No newline at end of file |
Modul 6 - Warsztaty praktyczne/2. Pogoda.md
| ... | ... | @@ -0,0 +1,157 @@ |
| 1 | +```json |
|
| 2 | +{ |
|
| 3 | + "name": "2. Pogoda", |
|
| 4 | + "nodes": [ |
|
| 5 | + { |
|
| 6 | + "parameters": {}, |
|
| 7 | + "type": "n8n-nodes-base.manualTrigger", |
|
| 8 | + "typeVersion": 1, |
|
| 9 | + "position": [ |
|
| 10 | + 0, |
|
| 11 | + 0 |
|
| 12 | + ], |
|
| 13 | + "id": "0838547e-359d-48ad-8951-4507c026b63d", |
|
| 14 | + "name": "When clicking ‘Execute workflow’" |
|
| 15 | + }, |
|
| 16 | + { |
|
| 17 | + "parameters": { |
|
| 18 | + "url": "https://api.open-meteo.com/v1/forecast?latitude=50.0614&longitude=19.9366¤t_weather=true", |
|
| 19 | + "options": {} |
|
| 20 | + }, |
|
| 21 | + "type": "n8n-nodes-base.httpRequest", |
|
| 22 | + "typeVersion": 4.2, |
|
| 23 | + "position": [ |
|
| 24 | + 208, |
|
| 25 | + 0 |
|
| 26 | + ], |
|
| 27 | + "id": "a9e43bc1-0882-4a52-8c10-c30ac0e313a1", |
|
| 28 | + "name": "HTTP Request" |
|
| 29 | + }, |
|
| 30 | + { |
|
| 31 | + "parameters": { |
|
| 32 | + "promptType": "define", |
|
| 33 | + "text": "=Poniżej masz gotowy, poprawiony prompt, idealnie dostosowany do Open-Meteo i do danych, które pokazałeś.\nDziała 1:1 w n8n, nie odwołuje się do JSON, nie pyta o dane, nie wspomina o brakach – wszystko zgodnie z Twoimi zasadami.\nFormat raportu pozostaje taki sam, ale pola są mapowane na dane Open-Meteo (które mają inne nazwy niż wttr.in).\nPOPRAWIONY PROMPT (WKLEJ DO n8n “Message a model”)\nPrzygotuj krótki, czytelny raport pogodowy na podstawie dostarczonych danych.\nNigdy nie proś o dane i nie wspominaj o formatach, strukturach ani o brakach.\nJeśli jakieś pole jest niedostępne, wpisz \"brak danych\".\nZwróć odpowiedź dokładnie w poniższym formacie, wstawiając prawdziwe wartości zamiast nawiasów klamrowych:\nMiejscowość: {areaName}, {country}\nTemperatura: {temp_C}°C (odczuwalna: {FeelsLikeC}°C)\nPogoda: {weatherDesc}\nWilgotność: {humidity}%\nWiatr: {windspeedKmph} km/h\nCiśnienie: {pressure} hPa\nWidoczność: {visibility} km\nKomentarz: {krótkie jedno zdanie opisujące warunki}\nDane wejściowe:\n{{ JSON.stringify($json, null, 2) }}\nMapa danych:\nareaName → \"Kraków\"\ncountry → \"Polska\"\ntemp_C → $json.current_weather.temperature\nFeelsLikeC → brak danych\nweatherDesc → kod pogodowy z weathercode (użyj krótkiego opisu)\nhumidity → brak danych\nwindspeedKmph → $json.current_weather.windspeed\npressure → brak danych\nvisibility → brak danych", |
|
| 34 | + "options": {} |
|
| 35 | + }, |
|
| 36 | + "type": "@n8n/n8n-nodes-langchain.agent", |
|
| 37 | + "typeVersion": 2.2, |
|
| 38 | + "position": [ |
|
| 39 | + 384, |
|
| 40 | + 0 |
|
| 41 | + ], |
|
| 42 | + "id": "c81354b3-c47d-4229-98b9-8ac711498da5", |
|
| 43 | + "name": "AI Agent" |
|
| 44 | + }, |
|
| 45 | + { |
|
| 46 | + "parameters": { |
|
| 47 | + "model": { |
|
| 48 | + "__rl": true, |
|
| 49 | + "value": "gpt-5-nano", |
|
| 50 | + "mode": "list", |
|
| 51 | + "cachedResultName": "gpt-5-nano" |
|
| 52 | + }, |
|
| 53 | + "options": {} |
|
| 54 | + }, |
|
| 55 | + "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi", |
|
| 56 | + "typeVersion": 1.2, |
|
| 57 | + "position": [ |
|
| 58 | + 256, |
|
| 59 | + 208 |
|
| 60 | + ], |
|
| 61 | + "id": "9e23c4bb-516d-43d6-8784-2f19d417e052", |
|
| 62 | + "name": "OpenAI Chat Model", |
|
| 63 | + "credentials": { |
|
| 64 | + "openAiApi": { |
|
| 65 | + "id": "QIDUdl5nMKsoFRT8", |
|
| 66 | + "name": "OpenAi account" |
|
| 67 | + } |
|
| 68 | + } |
|
| 69 | + }, |
|
| 70 | + { |
|
| 71 | + "parameters": { |
|
| 72 | + "select": "channel", |
|
| 73 | + "channelId": { |
|
| 74 | + "__rl": true, |
|
| 75 | + "value": "#n8n-1", |
|
| 76 | + "mode": "name" |
|
| 77 | + }, |
|
| 78 | + "text": "={{ $json.output }}\n\nSebastian", |
|
| 79 | + "otherOptions": {} |
|
| 80 | + }, |
|
| 81 | + "type": "n8n-nodes-base.slack", |
|
| 82 | + "typeVersion": 2.3, |
|
| 83 | + "position": [ |
|
| 84 | + 736, |
|
| 85 | + 64 |
|
| 86 | + ], |
|
| 87 | + "id": "c070c7fb-3683-49f5-bd26-02ed0e38c961", |
|
| 88 | + "name": "Send a message", |
|
| 89 | + "webhookId": "1a6c89b0-22d9-49bb-9698-2c25f5d842c8", |
|
| 90 | + "credentials": { |
|
| 91 | + "slackApi": { |
|
| 92 | + "id": "tPqpFoNVEcDSYAwB", |
|
| 93 | + "name": "Slack account" |
|
| 94 | + } |
|
| 95 | + } |
|
| 96 | + } |
|
| 97 | + ], |
|
| 98 | + "pinData": {}, |
|
| 99 | + "connections": { |
|
| 100 | + "When clicking ‘Execute workflow’": { |
|
| 101 | + "main": [ |
|
| 102 | + [ |
|
| 103 | + { |
|
| 104 | + "node": "HTTP Request", |
|
| 105 | + "type": "main", |
|
| 106 | + "index": 0 |
|
| 107 | + } |
|
| 108 | + ] |
|
| 109 | + ] |
|
| 110 | + }, |
|
| 111 | + "HTTP Request": { |
|
| 112 | + "main": [ |
|
| 113 | + [ |
|
| 114 | + { |
|
| 115 | + "node": "AI Agent", |
|
| 116 | + "type": "main", |
|
| 117 | + "index": 0 |
|
| 118 | + } |
|
| 119 | + ] |
|
| 120 | + ] |
|
| 121 | + }, |
|
| 122 | + "AI Agent": { |
|
| 123 | + "main": [ |
|
| 124 | + [ |
|
| 125 | + { |
|
| 126 | + "node": "Send a message", |
|
| 127 | + "type": "main", |
|
| 128 | + "index": 0 |
|
| 129 | + } |
|
| 130 | + ] |
|
| 131 | + ] |
|
| 132 | + }, |
|
| 133 | + "OpenAI Chat Model": { |
|
| 134 | + "ai_languageModel": [ |
|
| 135 | + [ |
|
| 136 | + { |
|
| 137 | + "node": "AI Agent", |
|
| 138 | + "type": "ai_languageModel", |
|
| 139 | + "index": 0 |
|
| 140 | + } |
|
| 141 | + ] |
|
| 142 | + ] |
|
| 143 | + } |
|
| 144 | + }, |
|
| 145 | + "active": false, |
|
| 146 | + "settings": { |
|
| 147 | + "executionOrder": "v1" |
|
| 148 | + }, |
|
| 149 | + "versionId": "d0c19cf1-ee74-4a17-b5dc-ff7159980059", |
|
| 150 | + "meta": { |
|
| 151 | + "templateCredsSetupCompleted": true, |
|
| 152 | + "instanceId": "45cdfe5d33c15ac09fe745eed18ba8431c804bbc71dfc7e4a62ca65ad47117cb" |
|
| 153 | + }, |
|
| 154 | + "id": "vEbxDfUh2o3XM785", |
|
| 155 | + "tags": [] |
|
| 156 | +} |
|
| 157 | +``` |
|
| ... | ... | \ No newline at end of file |
Modul 6 - Warsztaty praktyczne/3. Google Sheet.md
| ... | ... | @@ -0,0 +1,197 @@ |
| 1 | +```json |
|
| 2 | +{ |
|
| 3 | + "name": "3. Sheet", |
|
| 4 | + "nodes": [ |
|
| 5 | + { |
|
| 6 | + "parameters": {}, |
|
| 7 | + "type": "n8n-nodes-base.manualTrigger", |
|
| 8 | + "typeVersion": 1, |
|
| 9 | + "position": [ |
|
| 10 | + 0, |
|
| 11 | + 0 |
|
| 12 | + ], |
|
| 13 | + "id": "42ccdd01-a071-4b77-93dc-b849f4d43a33", |
|
| 14 | + "name": "When clicking ‘Execute workflow’" |
|
| 15 | + }, |
|
| 16 | + { |
|
| 17 | + "parameters": { |
|
| 18 | + "documentId": { |
|
| 19 | + "__rl": true, |
|
| 20 | + "value": "1D7vzFzdgzuc_VPTu_Lzlaf19-b2P8bQvUimN9xcAnmo", |
|
| 21 | + "mode": "list", |
|
| 22 | + "cachedResultName": "n8n-szkolenie", |
|
| 23 | + "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1D7vzFzdgzuc_VPTu_Lzlaf19-b2P8bQvUimN9xcAnmo/edit?usp=drivesdk" |
|
| 24 | + }, |
|
| 25 | + "sheetName": { |
|
| 26 | + "__rl": true, |
|
| 27 | + "value": 2032561876, |
|
| 28 | + "mode": "list", |
|
| 29 | + "cachedResultName": "Klienci", |
|
| 30 | + "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1D7vzFzdgzuc_VPTu_Lzlaf19-b2P8bQvUimN9xcAnmo/edit#gid=2032561876" |
|
| 31 | + }, |
|
| 32 | + "options": {} |
|
| 33 | + }, |
|
| 34 | + "type": "n8n-nodes-base.googleSheets", |
|
| 35 | + "typeVersion": 4.7, |
|
| 36 | + "position": [ |
|
| 37 | + 208, |
|
| 38 | + 0 |
|
| 39 | + ], |
|
| 40 | + "id": "9edecfb4-cf22-4d93-bd65-02ca65a59dc8", |
|
| 41 | + "name": "Get row(s) in sheet", |
|
| 42 | + "credentials": { |
|
| 43 | + "googleSheetsOAuth2Api": { |
|
| 44 | + "id": "Penjuu1nZdxL99hn", |
|
| 45 | + "name": "Google Sheets account" |
|
| 46 | + } |
|
| 47 | + } |
|
| 48 | + }, |
|
| 49 | + { |
|
| 50 | + "parameters": { |
|
| 51 | + "promptType": "define", |
|
| 52 | + "text": "=Dane wejściowe znajdują się w polu \"data\". Jest to lista obiektów JSON.\n\nPrzeanalizuj je i zwróć wynik WYŁĄCZNIE jako poprawny JSON w dokładnie takim formacie:\n\n{\n\"liczba_klientow\": liczba,\n\"laczny_mrr\": liczba,\n\"sredni_mrr\": liczba,\n\"sredni_nps\": liczba,\n\"top5\": [\"tekst\", \"tekst\", \"tekst\", \"tekst\", \"tekst\"],\n\"wysokie_ryzyko\": [\"tekst\", \"tekst\"],\n\"rekomendacje\": \"tekst\"\n}\n\nZasady:\n\n* Zawsze zwracaj tylko JSON, bez żadnych wstępów, komentarzy ani opisu.\n* top5 to lista 5 pozycji uporządkowanych malejąco po MRR.\n* wysokie_ryzyko: tylko elementy, które faktycznie spełniają warunki ryzyka.\n* rekomendacje: krótki opis 2-4 zdań.\n\nDane:\n{{ JSON.stringify($json.data, null, 2) }}\n", |
|
| 53 | + "options": {} |
|
| 54 | + }, |
|
| 55 | + "type": "@n8n/n8n-nodes-langchain.agent", |
|
| 56 | + "typeVersion": 2.2, |
|
| 57 | + "position": [ |
|
| 58 | + 688, |
|
| 59 | + 0 |
|
| 60 | + ], |
|
| 61 | + "id": "a82bf4de-88e6-481b-a4f1-12c0e72a619e", |
|
| 62 | + "name": "AI Agent" |
|
| 63 | + }, |
|
| 64 | + { |
|
| 65 | + "parameters": { |
|
| 66 | + "model": { |
|
| 67 | + "__rl": true, |
|
| 68 | + "value": "gpt-4.1-nano", |
|
| 69 | + "mode": "list", |
|
| 70 | + "cachedResultName": "gpt-4.1-nano" |
|
| 71 | + }, |
|
| 72 | + "options": {} |
|
| 73 | + }, |
|
| 74 | + "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi", |
|
| 75 | + "typeVersion": 1.2, |
|
| 76 | + "position": [ |
|
| 77 | + 528, |
|
| 78 | + 224 |
|
| 79 | + ], |
|
| 80 | + "id": "f358af4a-df19-4765-a7b0-13773ea02673", |
|
| 81 | + "name": "OpenAI Chat Model", |
|
| 82 | + "credentials": { |
|
| 83 | + "openAiApi": { |
|
| 84 | + "id": "QIDUdl5nMKsoFRT8", |
|
| 85 | + "name": "OpenAi account" |
|
| 86 | + } |
|
| 87 | + } |
|
| 88 | + }, |
|
| 89 | + { |
|
| 90 | + "parameters": { |
|
| 91 | + "aggregate": "aggregateAllItemData", |
|
| 92 | + "options": {} |
|
| 93 | + }, |
|
| 94 | + "type": "n8n-nodes-base.aggregate", |
|
| 95 | + "typeVersion": 1, |
|
| 96 | + "position": [ |
|
| 97 | + 416, |
|
| 98 | + 0 |
|
| 99 | + ], |
|
| 100 | + "id": "18aa3516-8029-4692-9088-f31efdb56c6e", |
|
| 101 | + "name": "Aggregate" |
|
| 102 | + }, |
|
| 103 | + { |
|
| 104 | + "parameters": { |
|
| 105 | + "sendTo": "sebastian.koziatek@sadmin.pl", |
|
| 106 | + "subject": "Raport google sheet", |
|
| 107 | + "message": "=<div style=\"font-family: Arial, sans-serif; font-size: 14px; line-height: 1.6; color: #333;\">\n \n <h2 style=\"color:#2a4b8d;\">Raport z Google Sheets – Klienci</h2>\n\n <h3>1. Podsumowanie ogólne</h3>\n <p>\n <strong>Liczba klientów:</strong>\n {{ JSON.parse($json.output.replace('json\\n', '')).liczba_klientow }}<br>\n <strong>Łączny MRR:</strong>\n {{ JSON.parse($json.output.replace('json\\n', '')).laczny_mrr }} EUR<br>\n <strong>Średni MRR:</strong>\n {{ JSON.parse($json.output.replace('json\\n', '')).sredni_mrr }} EUR<br>\n <strong>Średni NPS:</strong>\n {{ JSON.parse($json.output.replace('json\\n', '')).sredni_nps }}\n </p>\n\n <h3>2. TOP 5 klientów (MRR)</h3>\n <ul>\n {{ JSON.parse($json.output.replace('json\\n', '')).top5\n .map(e => \"<li>\" + e + \"</li>\")\n .join(\"\") }}\n </ul>\n\n <h3>3. Klienci wysokiego ryzyka</h3>\n <div style=\"background:#fff7f7; padding:10px; border-left:4px solid #d9534f;\">\n {{\n (d => d.wysokie_ryzyko.length > 0\n ? d.wysokie_ryzyko.join(\"<br>\")\n : \"Brak klientów wysokiego ryzyka\"\n )(JSON.parse($json.output.replace('json\\n', '')))\n }}\n </div>\n\n <h3>4. Rekomendacje ogólne</h3>\n <div style=\"background:#f4f7ff; padding:10px; border-left:4px solid #337ab7;\">\n {{ JSON.parse($json.output.replace('json\\n', '')).rekomendacje }}\n </div>\n\n <br>\n <p style=\"font-size:12px; color:#777;\">Automatyczny raport wygenerowany przez n8n + OpenAI.</p>\n\n</div>\n", |
|
| 108 | + "options": {} |
|
| 109 | + }, |
|
| 110 | + "type": "n8n-nodes-base.gmail", |
|
| 111 | + "typeVersion": 2.1, |
|
| 112 | + "position": [ |
|
| 113 | + 1040, |
|
| 114 | + 0 |
|
| 115 | + ], |
|
| 116 | + "id": "44e83466-d2f6-47f1-8a94-a803dbd1f74e", |
|
| 117 | + "name": "Send a message", |
|
| 118 | + "webhookId": "686afb0b-b975-4629-abdb-0482155aa710", |
|
| 119 | + "credentials": { |
|
| 120 | + "gmailOAuth2": { |
|
| 121 | + "id": "bd6wbOdqWHgE01U1", |
|
| 122 | + "name": "Gmail account" |
|
| 123 | + } |
|
| 124 | + } |
|
| 125 | + } |
|
| 126 | + ], |
|
| 127 | + "pinData": {}, |
|
| 128 | + "connections": { |
|
| 129 | + "When clicking ‘Execute workflow’": { |
|
| 130 | + "main": [ |
|
| 131 | + [ |
|
| 132 | + { |
|
| 133 | + "node": "Get row(s) in sheet", |
|
| 134 | + "type": "main", |
|
| 135 | + "index": 0 |
|
| 136 | + } |
|
| 137 | + ] |
|
| 138 | + ] |
|
| 139 | + }, |
|
| 140 | + "Get row(s) in sheet": { |
|
| 141 | + "main": [ |
|
| 142 | + [ |
|
| 143 | + { |
|
| 144 | + "node": "Aggregate", |
|
| 145 | + "type": "main", |
|
| 146 | + "index": 0 |
|
| 147 | + } |
|
| 148 | + ] |
|
| 149 | + ] |
|
| 150 | + }, |
|
| 151 | + "OpenAI Chat Model": { |
|
| 152 | + "ai_languageModel": [ |
|
| 153 | + [ |
|
| 154 | + { |
|
| 155 | + "node": "AI Agent", |
|
| 156 | + "type": "ai_languageModel", |
|
| 157 | + "index": 0 |
|
| 158 | + } |
|
| 159 | + ] |
|
| 160 | + ] |
|
| 161 | + }, |
|
| 162 | + "AI Agent": { |
|
| 163 | + "main": [ |
|
| 164 | + [ |
|
| 165 | + { |
|
| 166 | + "node": "Send a message", |
|
| 167 | + "type": "main", |
|
| 168 | + "index": 0 |
|
| 169 | + } |
|
| 170 | + ] |
|
| 171 | + ] |
|
| 172 | + }, |
|
| 173 | + "Aggregate": { |
|
| 174 | + "main": [ |
|
| 175 | + [ |
|
| 176 | + { |
|
| 177 | + "node": "AI Agent", |
|
| 178 | + "type": "main", |
|
| 179 | + "index": 0 |
|
| 180 | + } |
|
| 181 | + ] |
|
| 182 | + ] |
|
| 183 | + } |
|
| 184 | + }, |
|
| 185 | + "active": false, |
|
| 186 | + "settings": { |
|
| 187 | + "executionOrder": "v1" |
|
| 188 | + }, |
|
| 189 | + "versionId": "3a1a1be3-c6ec-4987-8ce6-51d3c14aaef2", |
|
| 190 | + "meta": { |
|
| 191 | + "templateCredsSetupCompleted": true, |
|
| 192 | + "instanceId": "45cdfe5d33c15ac09fe745eed18ba8431c804bbc71dfc7e4a62ca65ad47117cb" |
|
| 193 | + }, |
|
| 194 | + "id": "66Q1IWuhIAO53gIk", |
|
| 195 | + "tags": [] |
|
| 196 | +} |
|
| 197 | +``` |
|
| ... | ... | \ No newline at end of file |
Modul 6 - Warsztaty praktyczne/4. Telegram.md
| ... | ... | @@ -0,0 +1,176 @@ |
| 1 | +```json |
|
| 2 | +{ |
|
| 3 | + "name": "4. Telegram", |
|
| 4 | + "nodes": [ |
|
| 5 | + { |
|
| 6 | + "parameters": { |
|
| 7 | + "updates": [ |
|
| 8 | + "message" |
|
| 9 | + ], |
|
| 10 | + "additionalFields": {} |
|
| 11 | + }, |
|
| 12 | + "type": "n8n-nodes-base.telegramTrigger", |
|
| 13 | + "typeVersion": 1.2, |
|
| 14 | + "position": [ |
|
| 15 | + 0, |
|
| 16 | + 0 |
|
| 17 | + ], |
|
| 18 | + "id": "dc2588c2-6f4e-46de-8532-9c55ccb2c96b", |
|
| 19 | + "name": "Telegram Trigger", |
|
| 20 | + "webhookId": "5721f9e2-06c1-465c-b5e1-efc628aad1f1", |
|
| 21 | + "credentials": { |
|
| 22 | + "telegramApi": { |
|
| 23 | + "id": "GGNMzpacCZnzAuab", |
|
| 24 | + "name": "Telegram account" |
|
| 25 | + } |
|
| 26 | + } |
|
| 27 | + }, |
|
| 28 | + { |
|
| 29 | + "parameters": { |
|
| 30 | + "promptType": "define", |
|
| 31 | + "text": "=Jesteś agentem AI pracującym w n8n. Masz pełny dostęp do podłączonych narzędzi w tym workflow, w tym narzędzia Google Calendar „Create Event”. Nigdy nie twierdzisz, że nie masz dostępu do kalendarza, API czy Google — bo to narzędzie wykonuje wszystko za Ciebie.\n\nTreść wiadomości użytkownika z Telegrama otrzymujesz jako: {{ $json.message.text }}.\n\nTwoje zasady działania:\n\n1) Dodawanie wydarzeń:\n- Jeśli użytkownik napisze cokolwiek sugerującego dodanie, zapisanie, ustawienie lub umówienie wydarzenia, np.:\n „dodaj do kalendarza”, „zapisz spotkanie jutro o 14”, „umów wizytę na poniedziałek 9:00”, „zrób wpis: test szkolenie 20 listopada”\n → UŻYWASZ narzędzia Google Calendar Create Event.\n- Wyciągnij z wiadomości:\n • tytuł (summary),\n • datę,\n • godzinę startu,\n • godzinę końca lub czas trwania (jeśli nie ma – przyjmij 1 godzinę),\n • opcjonalnie opis i lokalizację.\n- Daty względne (dziś, jutro, w środę, za tydzień) zamieniasz na konkretne daty.\n- Jeśli absolutnie brakuje kluczowej informacji (np. brak jakiejkolwiek daty), zapytaj jednym krótkim pytaniem.\n\n2) Odpowiadanie:\n- Po utworzeniu wydarzenia wysyłasz krótkie potwierdzenie, np.:\n „Dodałem wydarzenie 'Spotkanie' jutro o 14:00.”\n- Nigdy nie piszesz o ICS, importach, API, instrukcjach ręcznych, braku dostępu, ani o tym, czego nie możesz zrobić.\n\n3) Inne wiadomości:\n- Jeśli wiadomość nie dotyczy kalendarza, odpowiadasz normalnie na jej treść.\n- Nie dodajesz dopisków typu: „This message was sent automatically with n8n”.\n\nTwoim zadaniem jest wykonywanie poleceń użytkownika poprzez narzędzia n8n.\n", |
|
| 32 | + "options": {} |
|
| 33 | + }, |
|
| 34 | + "type": "@n8n/n8n-nodes-langchain.agent", |
|
| 35 | + "typeVersion": 2.2, |
|
| 36 | + "position": [ |
|
| 37 | + 208, |
|
| 38 | + 0 |
|
| 39 | + ], |
|
| 40 | + "id": "58e8823d-8b49-4ea0-a8c6-18718847d0f5", |
|
| 41 | + "name": "AI Agent" |
|
| 42 | + }, |
|
| 43 | + { |
|
| 44 | + "parameters": { |
|
| 45 | + "model": { |
|
| 46 | + "__rl": true, |
|
| 47 | + "value": "gpt-5-nano", |
|
| 48 | + "mode": "list", |
|
| 49 | + "cachedResultName": "gpt-5-nano" |
|
| 50 | + }, |
|
| 51 | + "options": {} |
|
| 52 | + }, |
|
| 53 | + "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi", |
|
| 54 | + "typeVersion": 1.2, |
|
| 55 | + "position": [ |
|
| 56 | + 80, |
|
| 57 | + 208 |
|
| 58 | + ], |
|
| 59 | + "id": "a51b1c2c-61c5-411d-bfd8-c4deb3db1f38", |
|
| 60 | + "name": "OpenAI Chat Model", |
|
| 61 | + "credentials": { |
|
| 62 | + "openAiApi": { |
|
| 63 | + "id": "QIDUdl5nMKsoFRT8", |
|
| 64 | + "name": "OpenAi account" |
|
| 65 | + } |
|
| 66 | + } |
|
| 67 | + }, |
|
| 68 | + { |
|
| 69 | + "parameters": { |
|
| 70 | + "operation": "getAll", |
|
| 71 | + "calendar": { |
|
| 72 | + "__rl": true, |
|
| 73 | + "value": "c_052ff8ec6c89fe77d412ab1186a2c569020c927826e4cca76a8c4b0e696e82cc@group.calendar.google.com", |
|
| 74 | + "mode": "list", |
|
| 75 | + "cachedResultName": "Seba Koziatek " |
|
| 76 | + }, |
|
| 77 | + "options": {} |
|
| 78 | + }, |
|
| 79 | + "type": "n8n-nodes-base.googleCalendarTool", |
|
| 80 | + "typeVersion": 1.3, |
|
| 81 | + "position": [ |
|
| 82 | + 464, |
|
| 83 | + 224 |
|
| 84 | + ], |
|
| 85 | + "id": "812a2d4c-0069-441b-ab2c-c4a1fe3d9e34", |
|
| 86 | + "name": "Get many events in Google Calendar", |
|
| 87 | + "credentials": { |
|
| 88 | + "googleCalendarOAuth2Api": { |
|
| 89 | + "id": "o8kYeKNsvdk1QzTt", |
|
| 90 | + "name": "Google Calendar account" |
|
| 91 | + } |
|
| 92 | + } |
|
| 93 | + }, |
|
| 94 | + { |
|
| 95 | + "parameters": { |
|
| 96 | + "chatId": "={{ $node[\"Telegram Trigger\"].json[\"message\"][\"chat\"][\"id\"] }}", |
|
| 97 | + "text": "={{ $json.output }}", |
|
| 98 | + "additionalFields": {} |
|
| 99 | + }, |
|
| 100 | + "type": "n8n-nodes-base.telegram", |
|
| 101 | + "typeVersion": 1.2, |
|
| 102 | + "position": [ |
|
| 103 | + 560, |
|
| 104 | + 0 |
|
| 105 | + ], |
|
| 106 | + "id": "d238a0d7-6f2e-40c4-82be-e310e4c26723", |
|
| 107 | + "name": "Send a text message", |
|
| 108 | + "webhookId": "b2fffcef-b5a7-493d-98b7-a788f5f54ef2", |
|
| 109 | + "credentials": { |
|
| 110 | + "telegramApi": { |
|
| 111 | + "id": "GGNMzpacCZnzAuab", |
|
| 112 | + "name": "Telegram account" |
|
| 113 | + } |
|
| 114 | + } |
|
| 115 | + } |
|
| 116 | + ], |
|
| 117 | + "pinData": {}, |
|
| 118 | + "connections": { |
|
| 119 | + "Telegram Trigger": { |
|
| 120 | + "main": [ |
|
| 121 | + [ |
|
| 122 | + { |
|
| 123 | + "node": "AI Agent", |
|
| 124 | + "type": "main", |
|
| 125 | + "index": 0 |
|
| 126 | + } |
|
| 127 | + ] |
|
| 128 | + ] |
|
| 129 | + }, |
|
| 130 | + "OpenAI Chat Model": { |
|
| 131 | + "ai_languageModel": [ |
|
| 132 | + [ |
|
| 133 | + { |
|
| 134 | + "node": "AI Agent", |
|
| 135 | + "type": "ai_languageModel", |
|
| 136 | + "index": 0 |
|
| 137 | + } |
|
| 138 | + ] |
|
| 139 | + ] |
|
| 140 | + }, |
|
| 141 | + "Get many events in Google Calendar": { |
|
| 142 | + "ai_tool": [ |
|
| 143 | + [ |
|
| 144 | + { |
|
| 145 | + "node": "AI Agent", |
|
| 146 | + "type": "ai_tool", |
|
| 147 | + "index": 0 |
|
| 148 | + } |
|
| 149 | + ] |
|
| 150 | + ] |
|
| 151 | + }, |
|
| 152 | + "AI Agent": { |
|
| 153 | + "main": [ |
|
| 154 | + [ |
|
| 155 | + { |
|
| 156 | + "node": "Send a text message", |
|
| 157 | + "type": "main", |
|
| 158 | + "index": 0 |
|
| 159 | + } |
|
| 160 | + ] |
|
| 161 | + ] |
|
| 162 | + } |
|
| 163 | + }, |
|
| 164 | + "active": false, |
|
| 165 | + "settings": { |
|
| 166 | + "executionOrder": "v1" |
|
| 167 | + }, |
|
| 168 | + "versionId": "4459ddc7-98ae-4901-bfe9-e943845ed77a", |
|
| 169 | + "meta": { |
|
| 170 | + "templateCredsSetupCompleted": true, |
|
| 171 | + "instanceId": "45cdfe5d33c15ac09fe745eed18ba8431c804bbc71dfc7e4a62ca65ad47117cb" |
|
| 172 | + }, |
|
| 173 | + "id": "MEFtrU8dHIMfekRH", |
|
| 174 | + "tags": [] |
|
| 175 | +} |
|
| 176 | +``` |
|
| ... | ... | \ No newline at end of file |
Modul 6 - Warsztaty praktyczne/5. Gemini.md
| ... | ... | @@ -0,0 +1,89 @@ |
| 1 | +```json |
|
| 2 | +{ |
|
| 3 | + "name": "5. Gemini", |
|
| 4 | + "nodes": [ |
|
| 5 | + { |
|
| 6 | + "parameters": { |
|
| 7 | + "options": {} |
|
| 8 | + }, |
|
| 9 | + "type": "@n8n/n8n-nodes-langchain.chatTrigger", |
|
| 10 | + "typeVersion": 1.3, |
|
| 11 | + "position": [ |
|
| 12 | + 0, |
|
| 13 | + 0 |
|
| 14 | + ], |
|
| 15 | + "id": "3429ee19-9455-488f-bf31-717822ca2470", |
|
| 16 | + "name": "When chat message received", |
|
| 17 | + "webhookId": "ed5c46d6-080f-427c-9e83-04ffc209c626" |
|
| 18 | + }, |
|
| 19 | + { |
|
| 20 | + "parameters": { |
|
| 21 | + "options": {} |
|
| 22 | + }, |
|
| 23 | + "type": "@n8n/n8n-nodes-langchain.agent", |
|
| 24 | + "typeVersion": 2.2, |
|
| 25 | + "position": [ |
|
| 26 | + 208, |
|
| 27 | + 0 |
|
| 28 | + ], |
|
| 29 | + "id": "16a00015-52aa-44a5-a0dd-a5d867959e60", |
|
| 30 | + "name": "AI Agent" |
|
| 31 | + }, |
|
| 32 | + { |
|
| 33 | + "parameters": { |
|
| 34 | + "options": {} |
|
| 35 | + }, |
|
| 36 | + "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini", |
|
| 37 | + "typeVersion": 1, |
|
| 38 | + "position": [ |
|
| 39 | + 80, |
|
| 40 | + 208 |
|
| 41 | + ], |
|
| 42 | + "id": "83641c5e-45a5-49b6-99dd-c00047a6b161", |
|
| 43 | + "name": "Google Gemini Chat Model", |
|
| 44 | + "credentials": { |
|
| 45 | + "googlePalmApi": { |
|
| 46 | + "id": "l2Zzh79TXBJdGwI7", |
|
| 47 | + "name": "Google Gemini(PaLM) Api account" |
|
| 48 | + } |
|
| 49 | + } |
|
| 50 | + } |
|
| 51 | + ], |
|
| 52 | + "pinData": {}, |
|
| 53 | + "connections": { |
|
| 54 | + "When chat message received": { |
|
| 55 | + "main": [ |
|
| 56 | + [ |
|
| 57 | + { |
|
| 58 | + "node": "AI Agent", |
|
| 59 | + "type": "main", |
|
| 60 | + "index": 0 |
|
| 61 | + } |
|
| 62 | + ] |
|
| 63 | + ] |
|
| 64 | + }, |
|
| 65 | + "Google Gemini Chat Model": { |
|
| 66 | + "ai_languageModel": [ |
|
| 67 | + [ |
|
| 68 | + { |
|
| 69 | + "node": "AI Agent", |
|
| 70 | + "type": "ai_languageModel", |
|
| 71 | + "index": 0 |
|
| 72 | + } |
|
| 73 | + ] |
|
| 74 | + ] |
|
| 75 | + } |
|
| 76 | + }, |
|
| 77 | + "active": false, |
|
| 78 | + "settings": { |
|
| 79 | + "executionOrder": "v1" |
|
| 80 | + }, |
|
| 81 | + "versionId": "f282b6d2-8237-4f75-8c45-e89b94a4af6e", |
|
| 82 | + "meta": { |
|
| 83 | + "templateCredsSetupCompleted": true, |
|
| 84 | + "instanceId": "45cdfe5d33c15ac09fe745eed18ba8431c804bbc71dfc7e4a62ca65ad47117cb" |
|
| 85 | + }, |
|
| 86 | + "id": "q43v1Y7D4zIETBTW", |
|
| 87 | + "tags": [] |
|
| 88 | +} |
|
| 89 | +``` |
Modul 6 - Warsztaty praktyczne/6. SSH.md
| ... | ... | @@ -0,0 +1,222 @@ |
| 1 | +```json |
|
| 2 | +{ |
|
| 3 | + "name": "6. SSH", |
|
| 4 | + "nodes": [ |
|
| 5 | + { |
|
| 6 | + "parameters": { |
|
| 7 | + "rule": { |
|
| 8 | + "interval": [ |
|
| 9 | + {} |
|
| 10 | + ] |
|
| 11 | + } |
|
| 12 | + }, |
|
| 13 | + "type": "n8n-nodes-base.scheduleTrigger", |
|
| 14 | + "typeVersion": 1.2, |
|
| 15 | + "position": [ |
|
| 16 | + 0, |
|
| 17 | + 0 |
|
| 18 | + ], |
|
| 19 | + "id": "5d35eb0f-9932-4d01-90d4-bdf50cb03ed6", |
|
| 20 | + "name": "Schedule Trigger" |
|
| 21 | + }, |
|
| 22 | + { |
|
| 23 | + "parameters": { |
|
| 24 | + "command": "systemctl is-active --quiet nginx && echo 1 || echo 0", |
|
| 25 | + "cwd": "/home/szkolenie" |
|
| 26 | + }, |
|
| 27 | + "type": "n8n-nodes-base.ssh", |
|
| 28 | + "typeVersion": 1, |
|
| 29 | + "position": [ |
|
| 30 | + 208, |
|
| 31 | + 0 |
|
| 32 | + ], |
|
| 33 | + "id": "d9a433b4-7e65-4d58-b8cc-ceaa0056f70b", |
|
| 34 | + "name": "Execute a command", |
|
| 35 | + "credentials": { |
|
| 36 | + "sshPassword": { |
|
| 37 | + "id": "CBIfFSSTTSSBHlm6", |
|
| 38 | + "name": "SSH Password account" |
|
| 39 | + } |
|
| 40 | + } |
|
| 41 | + }, |
|
| 42 | + { |
|
| 43 | + "parameters": { |
|
| 44 | + "conditions": { |
|
| 45 | + "options": { |
|
| 46 | + "caseSensitive": true, |
|
| 47 | + "leftValue": "", |
|
| 48 | + "typeValidation": "strict", |
|
| 49 | + "version": 2 |
|
| 50 | + }, |
|
| 51 | + "conditions": [ |
|
| 52 | + { |
|
| 53 | + "id": "3ef0a8c3-5fa4-4065-8599-6b7e41a3f649", |
|
| 54 | + "leftValue": "={{ $json.stdout }}", |
|
| 55 | + "rightValue": "1", |
|
| 56 | + "operator": { |
|
| 57 | + "type": "string", |
|
| 58 | + "operation": "equals", |
|
| 59 | + "name": "filter.operator.equals" |
|
| 60 | + } |
|
| 61 | + } |
|
| 62 | + ], |
|
| 63 | + "combinator": "and" |
|
| 64 | + }, |
|
| 65 | + "options": {} |
|
| 66 | + }, |
|
| 67 | + "type": "n8n-nodes-base.if", |
|
| 68 | + "typeVersion": 2.2, |
|
| 69 | + "position": [ |
|
| 70 | + 416, |
|
| 71 | + 0 |
|
| 72 | + ], |
|
| 73 | + "id": "85a086e8-55fd-405a-9c7d-eae8bf0d8534", |
|
| 74 | + "name": "If" |
|
| 75 | + }, |
|
| 76 | + { |
|
| 77 | + "parameters": { |
|
| 78 | + "promptType": "define", |
|
| 79 | + "text": "=Serwis nginx nie działa na serwerze Alma linux. \n\nNapisz instrukcje jak go wystartować, na co zwrócić uwagę itd. ", |
|
| 80 | + "options": {} |
|
| 81 | + }, |
|
| 82 | + "type": "@n8n/n8n-nodes-langchain.agent", |
|
| 83 | + "typeVersion": 2.2, |
|
| 84 | + "position": [ |
|
| 85 | + 624, |
|
| 86 | + 96 |
|
| 87 | + ], |
|
| 88 | + "id": "66b4168e-bbf5-4486-9302-b472b21279a5", |
|
| 89 | + "name": "AI Agent" |
|
| 90 | + }, |
|
| 91 | + { |
|
| 92 | + "parameters": { |
|
| 93 | + "sendTo": "sebastian.koziatek@sadmin.pl", |
|
| 94 | + "subject": "Awaria nginx", |
|
| 95 | + "message": "={{ $json.output }}", |
|
| 96 | + "options": {} |
|
| 97 | + }, |
|
| 98 | + "type": "n8n-nodes-base.gmail", |
|
| 99 | + "typeVersion": 2.1, |
|
| 100 | + "position": [ |
|
| 101 | + 976, |
|
| 102 | + 96 |
|
| 103 | + ], |
|
| 104 | + "id": "229390fc-d863-42b2-b282-24a0afa5407b", |
|
| 105 | + "name": "Send a message", |
|
| 106 | + "webhookId": "7da45599-578e-438e-84cf-22e36540877f", |
|
| 107 | + "credentials": { |
|
| 108 | + "gmailOAuth2": { |
|
| 109 | + "id": "bd6wbOdqWHgE01U1", |
|
| 110 | + "name": "Gmail account" |
|
| 111 | + } |
|
| 112 | + } |
|
| 113 | + }, |
|
| 114 | + { |
|
| 115 | + "parameters": {}, |
|
| 116 | + "type": "n8n-nodes-base.noOp", |
|
| 117 | + "typeVersion": 1, |
|
| 118 | + "position": [ |
|
| 119 | + 688, |
|
| 120 | + -96 |
|
| 121 | + ], |
|
| 122 | + "id": "c1889d4b-8f06-4d8c-8787-80dae5431cc1", |
|
| 123 | + "name": "No Operation, do nothing" |
|
| 124 | + }, |
|
| 125 | + { |
|
| 126 | + "parameters": { |
|
| 127 | + "options": {} |
|
| 128 | + }, |
|
| 129 | + "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini", |
|
| 130 | + "typeVersion": 1, |
|
| 131 | + "position": [ |
|
| 132 | + 496, |
|
| 133 | + 304 |
|
| 134 | + ], |
|
| 135 | + "id": "aa1a787e-04ca-4200-8b37-82909d00b426", |
|
| 136 | + "name": "Google Gemini Chat Model", |
|
| 137 | + "credentials": { |
|
| 138 | + "googlePalmApi": { |
|
| 139 | + "id": "l2Zzh79TXBJdGwI7", |
|
| 140 | + "name": "Google Gemini(PaLM) Api account" |
|
| 141 | + } |
|
| 142 | + } |
|
| 143 | + } |
|
| 144 | + ], |
|
| 145 | + "pinData": {}, |
|
| 146 | + "connections": { |
|
| 147 | + "Schedule Trigger": { |
|
| 148 | + "main": [ |
|
| 149 | + [ |
|
| 150 | + { |
|
| 151 | + "node": "Execute a command", |
|
| 152 | + "type": "main", |
|
| 153 | + "index": 0 |
|
| 154 | + } |
|
| 155 | + ] |
|
| 156 | + ] |
|
| 157 | + }, |
|
| 158 | + "Execute a command": { |
|
| 159 | + "main": [ |
|
| 160 | + [ |
|
| 161 | + { |
|
| 162 | + "node": "If", |
|
| 163 | + "type": "main", |
|
| 164 | + "index": 0 |
|
| 165 | + } |
|
| 166 | + ] |
|
| 167 | + ] |
|
| 168 | + }, |
|
| 169 | + "If": { |
|
| 170 | + "main": [ |
|
| 171 | + [ |
|
| 172 | + { |
|
| 173 | + "node": "No Operation, do nothing", |
|
| 174 | + "type": "main", |
|
| 175 | + "index": 0 |
|
| 176 | + } |
|
| 177 | + ], |
|
| 178 | + [ |
|
| 179 | + { |
|
| 180 | + "node": "AI Agent", |
|
| 181 | + "type": "main", |
|
| 182 | + "index": 0 |
|
| 183 | + } |
|
| 184 | + ] |
|
| 185 | + ] |
|
| 186 | + }, |
|
| 187 | + "AI Agent": { |
|
| 188 | + "main": [ |
|
| 189 | + [ |
|
| 190 | + { |
|
| 191 | + "node": "Send a message", |
|
| 192 | + "type": "main", |
|
| 193 | + "index": 0 |
|
| 194 | + } |
|
| 195 | + ] |
|
| 196 | + ] |
|
| 197 | + }, |
|
| 198 | + "Google Gemini Chat Model": { |
|
| 199 | + "ai_languageModel": [ |
|
| 200 | + [ |
|
| 201 | + { |
|
| 202 | + "node": "AI Agent", |
|
| 203 | + "type": "ai_languageModel", |
|
| 204 | + "index": 0 |
|
| 205 | + } |
|
| 206 | + ] |
|
| 207 | + ] |
|
| 208 | + } |
|
| 209 | + }, |
|
| 210 | + "active": false, |
|
| 211 | + "settings": { |
|
| 212 | + "executionOrder": "v1" |
|
| 213 | + }, |
|
| 214 | + "versionId": "6f39aa06-3828-4fc1-ac93-07d3a36cbafc", |
|
| 215 | + "meta": { |
|
| 216 | + "templateCredsSetupCompleted": true, |
|
| 217 | + "instanceId": "45cdfe5d33c15ac09fe745eed18ba8431c804bbc71dfc7e4a62ca65ad47117cb" |
|
| 218 | + }, |
|
| 219 | + "id": "4PeK16BjIqgWu38C", |
|
| 220 | + "tags": [] |
|
| 221 | +} |
|
| 222 | +``` |
|
| ... | ... | \ No newline at end of file |
Modul 6 - Warsztaty praktyczne/7. Analiza obrazu.md
| ... | ... | @@ -0,0 +1,161 @@ |
| 1 | +```json |
|
| 2 | +{ |
|
| 3 | + "name": "7. Analiza obrazu", |
|
| 4 | + "nodes": [ |
|
| 5 | + { |
|
| 6 | + "parameters": {}, |
|
| 7 | + "type": "n8n-nodes-base.manualTrigger", |
|
| 8 | + "typeVersion": 1, |
|
| 9 | + "position": [ |
|
| 10 | + 0, |
|
| 11 | + 0 |
|
| 12 | + ], |
|
| 13 | + "id": "14e07030-be68-49ba-bf09-e6494a9f68ee", |
|
| 14 | + "name": "When clicking ‘Execute workflow’" |
|
| 15 | + }, |
|
| 16 | + { |
|
| 17 | + "parameters": { |
|
| 18 | + "resource": "image", |
|
| 19 | + "operation": "analyze", |
|
| 20 | + "modelId": { |
|
| 21 | + "__rl": true, |
|
| 22 | + "value": "models/gemini-2.5-flash", |
|
| 23 | + "mode": "list", |
|
| 24 | + "cachedResultName": "models/gemini-2.5-flash" |
|
| 25 | + }, |
|
| 26 | + "imageUrls": "https://i.ibb.co/KcRj5h8f/image.png", |
|
| 27 | + "options": {} |
|
| 28 | + }, |
|
| 29 | + "type": "@n8n/n8n-nodes-langchain.googleGemini", |
|
| 30 | + "typeVersion": 1, |
|
| 31 | + "position": [ |
|
| 32 | + 208, |
|
| 33 | + 0 |
|
| 34 | + ], |
|
| 35 | + "id": "0fdd5cb3-c594-4a75-a62e-741ba7fc5be6", |
|
| 36 | + "name": "Analyze image", |
|
| 37 | + "credentials": { |
|
| 38 | + "googlePalmApi": { |
|
| 39 | + "id": "l2Zzh79TXBJdGwI7", |
|
| 40 | + "name": "Google Gemini(PaLM) Api account" |
|
| 41 | + } |
|
| 42 | + } |
|
| 43 | + }, |
|
| 44 | + { |
|
| 45 | + "parameters": { |
|
| 46 | + "promptType": "define", |
|
| 47 | + "text": "=Na podstawie opisu spróbuj wywnioskować co się mogło stać. \n\n{{ $json.content.parts[0].text }}", |
|
| 48 | + "options": {} |
|
| 49 | + }, |
|
| 50 | + "type": "@n8n/n8n-nodes-langchain.agent", |
|
| 51 | + "typeVersion": 2.2, |
|
| 52 | + "position": [ |
|
| 53 | + 416, |
|
| 54 | + 0 |
|
| 55 | + ], |
|
| 56 | + "id": "ea1d0ca8-1008-48e5-8da5-7d83ad4b5fab", |
|
| 57 | + "name": "AI Agent" |
|
| 58 | + }, |
|
| 59 | + { |
|
| 60 | + "parameters": { |
|
| 61 | + "options": {} |
|
| 62 | + }, |
|
| 63 | + "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini", |
|
| 64 | + "typeVersion": 1, |
|
| 65 | + "position": [ |
|
| 66 | + 288, |
|
| 67 | + 208 |
|
| 68 | + ], |
|
| 69 | + "id": "e96622f5-87b5-4381-9c26-7e091e0fe1cf", |
|
| 70 | + "name": "Google Gemini Chat Model", |
|
| 71 | + "credentials": { |
|
| 72 | + "googlePalmApi": { |
|
| 73 | + "id": "l2Zzh79TXBJdGwI7", |
|
| 74 | + "name": "Google Gemini(PaLM) Api account" |
|
| 75 | + } |
|
| 76 | + } |
|
| 77 | + }, |
|
| 78 | + { |
|
| 79 | + "parameters": { |
|
| 80 | + "sendTo": "sebastian.koziatek@sadmin.pl", |
|
| 81 | + "subject": "Opis obrazu", |
|
| 82 | + "message": "={{$json[\"output\"].split('\\\\n').join('\\n')}}\n", |
|
| 83 | + "options": {} |
|
| 84 | + }, |
|
| 85 | + "type": "n8n-nodes-base.gmail", |
|
| 86 | + "typeVersion": 2.1, |
|
| 87 | + "position": [ |
|
| 88 | + 768, |
|
| 89 | + 0 |
|
| 90 | + ], |
|
| 91 | + "id": "e4ca9090-7652-40e1-ac1c-b9ed49bbbbb1", |
|
| 92 | + "name": "Send a message", |
|
| 93 | + "webhookId": "c3bc31f0-90dc-4bd2-a006-4f7af052d3d8", |
|
| 94 | + "credentials": { |
|
| 95 | + "gmailOAuth2": { |
|
| 96 | + "id": "bd6wbOdqWHgE01U1", |
|
| 97 | + "name": "Gmail account" |
|
| 98 | + } |
|
| 99 | + } |
|
| 100 | + } |
|
| 101 | + ], |
|
| 102 | + "pinData": {}, |
|
| 103 | + "connections": { |
|
| 104 | + "When clicking ‘Execute workflow’": { |
|
| 105 | + "main": [ |
|
| 106 | + [ |
|
| 107 | + { |
|
| 108 | + "node": "Analyze image", |
|
| 109 | + "type": "main", |
|
| 110 | + "index": 0 |
|
| 111 | + } |
|
| 112 | + ] |
|
| 113 | + ] |
|
| 114 | + }, |
|
| 115 | + "Analyze image": { |
|
| 116 | + "main": [ |
|
| 117 | + [ |
|
| 118 | + { |
|
| 119 | + "node": "AI Agent", |
|
| 120 | + "type": "main", |
|
| 121 | + "index": 0 |
|
| 122 | + } |
|
| 123 | + ] |
|
| 124 | + ] |
|
| 125 | + }, |
|
| 126 | + "Google Gemini Chat Model": { |
|
| 127 | + "ai_languageModel": [ |
|
| 128 | + [ |
|
| 129 | + { |
|
| 130 | + "node": "AI Agent", |
|
| 131 | + "type": "ai_languageModel", |
|
| 132 | + "index": 0 |
|
| 133 | + } |
|
| 134 | + ] |
|
| 135 | + ] |
|
| 136 | + }, |
|
| 137 | + "AI Agent": { |
|
| 138 | + "main": [ |
|
| 139 | + [ |
|
| 140 | + { |
|
| 141 | + "node": "Send a message", |
|
| 142 | + "type": "main", |
|
| 143 | + "index": 0 |
|
| 144 | + } |
|
| 145 | + ] |
|
| 146 | + ] |
|
| 147 | + } |
|
| 148 | + }, |
|
| 149 | + "active": false, |
|
| 150 | + "settings": { |
|
| 151 | + "executionOrder": "v1" |
|
| 152 | + }, |
|
| 153 | + "versionId": "696ec0e3-1fd5-4afc-af4e-1993626c1a67", |
|
| 154 | + "meta": { |
|
| 155 | + "templateCredsSetupCompleted": true, |
|
| 156 | + "instanceId": "45cdfe5d33c15ac09fe745eed18ba8431c804bbc71dfc7e4a62ca65ad47117cb" |
|
| 157 | + }, |
|
| 158 | + "id": "s517pz2HuHxwoM6Y", |
|
| 159 | + "tags": [] |
|
| 160 | +} |
|
| 161 | +``` |
Modul 6 - Warsztaty praktyczne/8. Manager kalendarza.md
| ... | ... | @@ -0,0 +1,239 @@ |
| 1 | +```json |
|
| 2 | +{ |
|
| 3 | + "name": "8. Manager kalendarza", |
|
| 4 | + "nodes": [ |
|
| 5 | + { |
|
| 6 | + "parameters": { |
|
| 7 | + "promptType": "define", |
|
| 8 | + "text": "=Jesteś asystentem AI w n8n z bezpośrednim dostępem do Google Calendar.\n\n### KONTEKST CZASOWY (BARDZO WAŻNE):\nDziś jest: {{ $now.format('EEEE, d MMMM yyyy, HH:mm', {timeZone: 'Europe/Warsaw', locale: 'pl'}) }}\nStrefa czasowa: Europe/Warsaw.\n\nWszystkie daty względne (np. \"jutro\", \"za tydzień\", \"w środę\", \"27 listopada\") musisz obliczać w odniesieniu do powyższej daty \"Dziś\".\nZAWSZE używaj roku wynikającego z obecnej daty ({{ $now.format('yyyy') }}), chyba że użytkownik wyraźnie poda inny rok (np. 2026).\n\n### INSTRUKCJE:\n\n1) DODAWANIE WYDARZEŃ:\n- Jeśli intencją użytkownika jest dodanie wpisu (np. \"dodaj\", \"zapisz\", \"umów\", \"siłownia jutro\"), BEZWZGLĘDNIE użyj narzędzia \"Create an event\".\n- Parametry do narzędzia:\n - Start/Koniec: Muszą być w formacie ISO lub zrozumiałym dla narzędzia. Jeśli nie podano czasu trwania, przyjmij 1 godzinę.\n - Tytuł: Wyciągnij z kontekstu.\n- Jeśli użytkownik poda datę bez godziny (np. \"zapisz dentystę na jutro\"), dopytaj krótko o godzinę, zamiast zgadywać.\n\n2) STYL ODPOWIEDZI:\n- Po pomyślnym użyciu narzędzia napisz tylko krótkie potwierdzenie, np.: \"Dodałem wpis '[Tytuł]' na [Data] o godzinie [Godzina].\"\n- Nie tłumacz się z technikalii (nie pisz \"użyłem narzędzia\", \"skorzystałem z API\").\n- Odpowiadaj naturalnym językiem polskim.\n\n3) INNE TEMATY:\n- Jeśli użytkownik nie mówi o kalendarzu, prowadź normalną rozmowę.\n\nWykonuj polecenie pdane tutaj:\n{{ $json.chatInput }}\n\n → UŻYWASZ narzędzia Google Calendar Create Event.", |
|
| 9 | + "options": {} |
|
| 10 | + }, |
|
| 11 | + "type": "@n8n/n8n-nodes-langchain.agent", |
|
| 12 | + "typeVersion": 2.2, |
|
| 13 | + "position": [ |
|
| 14 | + 208, |
|
| 15 | + 0 |
|
| 16 | + ], |
|
| 17 | + "id": "55cc9079-530d-43df-ba0d-219d81573e1d", |
|
| 18 | + "name": "AI Agent" |
|
| 19 | + }, |
|
| 20 | + { |
|
| 21 | + "parameters": { |
|
| 22 | + "model": { |
|
| 23 | + "__rl": true, |
|
| 24 | + "value": "gpt-5-nano", |
|
| 25 | + "mode": "list", |
|
| 26 | + "cachedResultName": "gpt-5-nano" |
|
| 27 | + }, |
|
| 28 | + "options": {} |
|
| 29 | + }, |
|
| 30 | + "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi", |
|
| 31 | + "typeVersion": 1.2, |
|
| 32 | + "position": [ |
|
| 33 | + -96, |
|
| 34 | + 224 |
|
| 35 | + ], |
|
| 36 | + "id": "967ec645-a8b3-4d98-a28b-64fd8c30aa85", |
|
| 37 | + "name": "OpenAI Chat Model", |
|
| 38 | + "credentials": { |
|
| 39 | + "openAiApi": { |
|
| 40 | + "id": "n4IfKjRdUa9SjsVf", |
|
| 41 | + "name": "OpenAi account 2" |
|
| 42 | + } |
|
| 43 | + } |
|
| 44 | + }, |
|
| 45 | + { |
|
| 46 | + "parameters": { |
|
| 47 | + "operation": "getAll", |
|
| 48 | + "calendar": { |
|
| 49 | + "__rl": true, |
|
| 50 | + "value": "83f79425be2ef2645de45538a11526ffe9665401c865ecacc014da7416dc7606@group.calendar.google.com", |
|
| 51 | + "mode": "list", |
|
| 52 | + "cachedResultName": "Szkolenie n8n" |
|
| 53 | + }, |
|
| 54 | + "options": {} |
|
| 55 | + }, |
|
| 56 | + "type": "n8n-nodes-base.googleCalendarTool", |
|
| 57 | + "typeVersion": 1.3, |
|
| 58 | + "position": [ |
|
| 59 | + 672, |
|
| 60 | + 208 |
|
| 61 | + ], |
|
| 62 | + "id": "56d2e3c7-d390-4f71-bcd5-c6f5233a9d18", |
|
| 63 | + "name": "Get many events in Google Calendar", |
|
| 64 | + "credentials": { |
|
| 65 | + "googleCalendarOAuth2Api": { |
|
| 66 | + "id": "o8kYeKNsvdk1QzTt", |
|
| 67 | + "name": "Google Calendar account" |
|
| 68 | + } |
|
| 69 | + } |
|
| 70 | + }, |
|
| 71 | + { |
|
| 72 | + "parameters": { |
|
| 73 | + "options": {} |
|
| 74 | + }, |
|
| 75 | + "type": "@n8n/n8n-nodes-langchain.chatTrigger", |
|
| 76 | + "typeVersion": 1.3, |
|
| 77 | + "position": [ |
|
| 78 | + 0, |
|
| 79 | + 0 |
|
| 80 | + ], |
|
| 81 | + "id": "6057d1db-8dce-4566-bdde-307afb3a014d", |
|
| 82 | + "name": "When chat message received", |
|
| 83 | + "webhookId": "57edfaa5-8701-4922-b8e1-f3ba9264ea64" |
|
| 84 | + }, |
|
| 85 | + { |
|
| 86 | + "parameters": {}, |
|
| 87 | + "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow", |
|
| 88 | + "typeVersion": 1.3, |
|
| 89 | + "position": [ |
|
| 90 | + 80, |
|
| 91 | + 224 |
|
| 92 | + ], |
|
| 93 | + "id": "ad3bdf22-a07c-4d50-a30e-7f88340750b4", |
|
| 94 | + "name": "Simple Memory" |
|
| 95 | + }, |
|
| 96 | + { |
|
| 97 | + "parameters": { |
|
| 98 | + "calendar": { |
|
| 99 | + "__rl": true, |
|
| 100 | + "value": "83f79425be2ef2645de45538a11526ffe9665401c865ecacc014da7416dc7606@group.calendar.google.com", |
|
| 101 | + "mode": "list", |
|
| 102 | + "cachedResultName": "Szkolenie n8n" |
|
| 103 | + }, |
|
| 104 | + "start": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Start', ``, 'string') }}", |
|
| 105 | + "end": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('End', ``, 'string') }}", |
|
| 106 | + "additionalFields": { |
|
| 107 | + "summary": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Summary', ``, 'string') }}" |
|
| 108 | + } |
|
| 109 | + }, |
|
| 110 | + "type": "n8n-nodes-base.googleCalendarTool", |
|
| 111 | + "typeVersion": 1.3, |
|
| 112 | + "position": [ |
|
| 113 | + 528, |
|
| 114 | + 208 |
|
| 115 | + ], |
|
| 116 | + "id": "4a63d112-2c5d-4306-a734-8218c064ebb4", |
|
| 117 | + "name": "Create an event in Google Calendar", |
|
| 118 | + "credentials": { |
|
| 119 | + "googleCalendarOAuth2Api": { |
|
| 120 | + "id": "o8kYeKNsvdk1QzTt", |
|
| 121 | + "name": "Google Calendar account" |
|
| 122 | + } |
|
| 123 | + } |
|
| 124 | + }, |
|
| 125 | + { |
|
| 126 | + "parameters": { |
|
| 127 | + "operation": "delete", |
|
| 128 | + "calendar": { |
|
| 129 | + "__rl": true, |
|
| 130 | + "value": "83f79425be2ef2645de45538a11526ffe9665401c865ecacc014da7416dc7606@group.calendar.google.com", |
|
| 131 | + "mode": "list", |
|
| 132 | + "cachedResultName": "Szkolenie n8n" |
|
| 133 | + }, |
|
| 134 | + "eventId": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Event_ID', ``, 'string') }}", |
|
| 135 | + "options": {} |
|
| 136 | + }, |
|
| 137 | + "type": "n8n-nodes-base.googleCalendarTool", |
|
| 138 | + "typeVersion": 1.3, |
|
| 139 | + "position": [ |
|
| 140 | + 368, |
|
| 141 | + 208 |
|
| 142 | + ], |
|
| 143 | + "id": "10df846e-1b3a-4d5a-bb9f-6696a87f7d57", |
|
| 144 | + "name": "Delete an event in Google Calendar", |
|
| 145 | + "credentials": { |
|
| 146 | + "googleCalendarOAuth2Api": { |
|
| 147 | + "id": "o8kYeKNsvdk1QzTt", |
|
| 148 | + "name": "Google Calendar account" |
|
| 149 | + } |
|
| 150 | + } |
|
| 151 | + } |
|
| 152 | + ], |
|
| 153 | + "pinData": {}, |
|
| 154 | + "connections": { |
|
| 155 | + "OpenAI Chat Model": { |
|
| 156 | + "ai_languageModel": [ |
|
| 157 | + [ |
|
| 158 | + { |
|
| 159 | + "node": "AI Agent", |
|
| 160 | + "type": "ai_languageModel", |
|
| 161 | + "index": 0 |
|
| 162 | + } |
|
| 163 | + ] |
|
| 164 | + ] |
|
| 165 | + }, |
|
| 166 | + "Get many events in Google Calendar": { |
|
| 167 | + "ai_tool": [ |
|
| 168 | + [ |
|
| 169 | + { |
|
| 170 | + "node": "AI Agent", |
|
| 171 | + "type": "ai_tool", |
|
| 172 | + "index": 0 |
|
| 173 | + } |
|
| 174 | + ] |
|
| 175 | + ] |
|
| 176 | + }, |
|
| 177 | + "AI Agent": { |
|
| 178 | + "main": [ |
|
| 179 | + [] |
|
| 180 | + ] |
|
| 181 | + }, |
|
| 182 | + "When chat message received": { |
|
| 183 | + "main": [ |
|
| 184 | + [ |
|
| 185 | + { |
|
| 186 | + "node": "AI Agent", |
|
| 187 | + "type": "main", |
|
| 188 | + "index": 0 |
|
| 189 | + } |
|
| 190 | + ] |
|
| 191 | + ] |
|
| 192 | + }, |
|
| 193 | + "Simple Memory": { |
|
| 194 | + "ai_memory": [ |
|
| 195 | + [ |
|
| 196 | + { |
|
| 197 | + "node": "AI Agent", |
|
| 198 | + "type": "ai_memory", |
|
| 199 | + "index": 0 |
|
| 200 | + } |
|
| 201 | + ] |
|
| 202 | + ] |
|
| 203 | + }, |
|
| 204 | + "Create an event in Google Calendar": { |
|
| 205 | + "ai_tool": [ |
|
| 206 | + [ |
|
| 207 | + { |
|
| 208 | + "node": "AI Agent", |
|
| 209 | + "type": "ai_tool", |
|
| 210 | + "index": 0 |
|
| 211 | + } |
|
| 212 | + ] |
|
| 213 | + ] |
|
| 214 | + }, |
|
| 215 | + "Delete an event in Google Calendar": { |
|
| 216 | + "ai_tool": [ |
|
| 217 | + [ |
|
| 218 | + { |
|
| 219 | + "node": "AI Agent", |
|
| 220 | + "type": "ai_tool", |
|
| 221 | + "index": 0 |
|
| 222 | + } |
|
| 223 | + ] |
|
| 224 | + ] |
|
| 225 | + } |
|
| 226 | + }, |
|
| 227 | + "active": false, |
|
| 228 | + "settings": { |
|
| 229 | + "executionOrder": "v1" |
|
| 230 | + }, |
|
| 231 | + "versionId": "33b13986-3e88-49bc-9cc4-f33cf4f9fb3b", |
|
| 232 | + "meta": { |
|
| 233 | + "templateCredsSetupCompleted": true, |
|
| 234 | + "instanceId": "45cdfe5d33c15ac09fe745eed18ba8431c804bbc71dfc7e4a62ca65ad47117cb" |
|
| 235 | + }, |
|
| 236 | + "id": "tXxD56bTsb9RrU93", |
|
| 237 | + "tags": [] |
|
| 238 | +} |
|
| 239 | +``` |
|
| ... | ... | \ No newline at end of file |
Modul 6 - Warsztaty praktyczne/9. PDF converter.md
| ... | ... | @@ -0,0 +1,152 @@ |
| 1 | +```json |
|
| 2 | +{ |
|
| 3 | + "name": "9. PDF converter", |
|
| 4 | + "nodes": [ |
|
| 5 | + { |
|
| 6 | + "parameters": {}, |
|
| 7 | + "type": "n8n-nodes-base.manualTrigger", |
|
| 8 | + "typeVersion": 1, |
|
| 9 | + "position": [ |
|
| 10 | + 0, |
|
| 11 | + 0 |
|
| 12 | + ], |
|
| 13 | + "id": "fc3ec84e-ec69-4f4c-9262-983f6c1052a4", |
|
| 14 | + "name": "When clicking ‘Execute workflow’" |
|
| 15 | + }, |
|
| 16 | + { |
|
| 17 | + "parameters": { |
|
| 18 | + "operation": "download", |
|
| 19 | + "fileId": { |
|
| 20 | + "__rl": true, |
|
| 21 | + "value": "1oN87c0AbjrzzaQPIQh4EUx4TJ1fuT_Mt", |
|
| 22 | + "mode": "list", |
|
| 23 | + "cachedResultName": "New Dokument tekstowy (4).txt", |
|
| 24 | + "cachedResultUrl": "https://drive.google.com/file/d/1oN87c0AbjrzzaQPIQh4EUx4TJ1fuT_Mt/view?usp=drivesdk" |
|
| 25 | + }, |
|
| 26 | + "options": {} |
|
| 27 | + }, |
|
| 28 | + "type": "n8n-nodes-base.googleDrive", |
|
| 29 | + "typeVersion": 3, |
|
| 30 | + "position": [ |
|
| 31 | + 208, |
|
| 32 | + 0 |
|
| 33 | + ], |
|
| 34 | + "id": "c7a06230-76bb-4912-bc46-a5f00c818c33", |
|
| 35 | + "name": "Download file", |
|
| 36 | + "credentials": { |
|
| 37 | + "googleDriveOAuth2Api": { |
|
| 38 | + "id": "LVVZPMTrms8ndXUS", |
|
| 39 | + "name": "Google Drive account" |
|
| 40 | + } |
|
| 41 | + } |
|
| 42 | + }, |
|
| 43 | + { |
|
| 44 | + "parameters": { |
|
| 45 | + "operation": "text", |
|
| 46 | + "options": {} |
|
| 47 | + }, |
|
| 48 | + "type": "n8n-nodes-base.extractFromFile", |
|
| 49 | + "typeVersion": 1, |
|
| 50 | + "position": [ |
|
| 51 | + 416, |
|
| 52 | + 0 |
|
| 53 | + ], |
|
| 54 | + "id": "d499b858-39d8-410e-98af-16626f589e19", |
|
| 55 | + "name": "Extract from File" |
|
| 56 | + }, |
|
| 57 | + { |
|
| 58 | + "parameters": { |
|
| 59 | + "options": {} |
|
| 60 | + }, |
|
| 61 | + "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini", |
|
| 62 | + "typeVersion": 1, |
|
| 63 | + "position": [ |
|
| 64 | + 528, |
|
| 65 | + 272 |
|
| 66 | + ], |
|
| 67 | + "id": "03cf1767-0861-4290-9da6-3ee8555d3cf0", |
|
| 68 | + "name": "Google Gemini Chat Model", |
|
| 69 | + "credentials": { |
|
| 70 | + "googlePalmApi": { |
|
| 71 | + "id": "8hPs0K48wbXONggV", |
|
| 72 | + "name": "Google Gemini(PaLM) Api account 2" |
|
| 73 | + } |
|
| 74 | + } |
|
| 75 | + }, |
|
| 76 | + { |
|
| 77 | + "parameters": { |
|
| 78 | + "promptType": "define", |
|
| 79 | + "text": "=Przenalizuj czym sa te dane i napisz podsumowanie \n\n{{ $json.data }}", |
|
| 80 | + "options": {} |
|
| 81 | + }, |
|
| 82 | + "type": "@n8n/n8n-nodes-langchain.agent", |
|
| 83 | + "typeVersion": 2.2, |
|
| 84 | + "position": [ |
|
| 85 | + 624, |
|
| 86 | + 0 |
|
| 87 | + ], |
|
| 88 | + "id": "38a23765-482c-45c4-8869-b4f6a63606ab", |
|
| 89 | + "name": "AI Agent" |
|
| 90 | + } |
|
| 91 | + ], |
|
| 92 | + "pinData": {}, |
|
| 93 | + "connections": { |
|
| 94 | + "When clicking ‘Execute workflow’": { |
|
| 95 | + "main": [ |
|
| 96 | + [ |
|
| 97 | + { |
|
| 98 | + "node": "Download file", |
|
| 99 | + "type": "main", |
|
| 100 | + "index": 0 |
|
| 101 | + } |
|
| 102 | + ] |
|
| 103 | + ] |
|
| 104 | + }, |
|
| 105 | + "Download file": { |
|
| 106 | + "main": [ |
|
| 107 | + [ |
|
| 108 | + { |
|
| 109 | + "node": "Extract from File", |
|
| 110 | + "type": "main", |
|
| 111 | + "index": 0 |
|
| 112 | + } |
|
| 113 | + ] |
|
| 114 | + ] |
|
| 115 | + }, |
|
| 116 | + "Extract from File": { |
|
| 117 | + "main": [ |
|
| 118 | + [ |
|
| 119 | + { |
|
| 120 | + "node": "AI Agent", |
|
| 121 | + "type": "main", |
|
| 122 | + "index": 0 |
|
| 123 | + } |
|
| 124 | + ] |
|
| 125 | + ] |
|
| 126 | + }, |
|
| 127 | + "Google Gemini Chat Model": { |
|
| 128 | + "ai_languageModel": [ |
|
| 129 | + [ |
|
| 130 | + { |
|
| 131 | + "node": "AI Agent", |
|
| 132 | + "type": "ai_languageModel", |
|
| 133 | + "index": 0 |
|
| 134 | + } |
|
| 135 | + ] |
|
| 136 | + ] |
|
| 137 | + } |
|
| 138 | + }, |
|
| 139 | + "active": false, |
|
| 140 | + "settings": { |
|
| 141 | + "executionOrder": "v1" |
|
| 142 | + }, |
|
| 143 | + "versionId": "8c14c4a9-8bfa-411a-a80f-0816ffbaa235", |
|
| 144 | + "meta": { |
|
| 145 | + "templateCredsSetupCompleted": true, |
|
| 146 | + "instanceId": "45cdfe5d33c15ac09fe745eed18ba8431c804bbc71dfc7e4a62ca65ad47117cb" |
|
| 147 | + }, |
|
| 148 | + "id": "nN6NIBAYkhzmHvqk", |
|
| 149 | + "tags": [] |
|
| 150 | +} |
|
| 151 | + |
|
| 152 | +``` |
|
| ... | ... | \ No newline at end of file |
grafiki/Gemini_Generated_Image_s1r8mus1r8mus1r8.png
| ... | ... | Binary files /dev/null and a/grafiki/Gemini_Generated_Image_s1r8mus1r8mus1r8.png differ |
grafiki/Gemini_Generated_Image_z5sp1ez5sp1ez5sp.png
| ... | ... | Binary files /dev/null and a/grafiki/Gemini_Generated_Image_z5sp1ez5sp1ez5sp.png differ |
grafiki/blok1-p2-ai-interpretuje-zapytania-title.png
| ... | ... | Binary files /dev/null and a/grafiki/blok1-p2-ai-interpretuje-zapytania-title.png differ |
grafiki/blok1-p2-attention-title.png
| ... | ... | Binary files /dev/null and a/grafiki/blok1-p2-attention-title.png differ |
grafiki/blok1-p2-efekt-djina.png
| ... | ... | Binary files /dev/null and a/grafiki/blok1-p2-efekt-djina.png differ |
grafiki/blok1-p2-temperature-title.png
| ... | ... | Binary files /dev/null and a/grafiki/blok1-p2-temperature-title.png differ |
grafiki/blok1-p4-halucynacje-title.png
| ... | ... | Binary files /dev/null and a/grafiki/blok1-p4-halucynacje-title.png differ |
grafiki/blok1-p4-ryba-po-wodze-halucynacja.png
| ... | ... | Binary files /dev/null and a/grafiki/blok1-p4-ryba-po-wodze-halucynacja.png differ |
grafiki/blok1-p4-skrzedelka-wieprzowe-title.png
| ... | ... | Binary files /dev/null and a/grafiki/blok1-p4-skrzedelka-wieprzowe-title.png differ |
grafiki/blok1-p6-api-vs-przegladarka-title.png
| ... | ... | Binary files /dev/null and a/grafiki/blok1-p6-api-vs-przegladarka-title.png differ |
grafiki/m1_p1_automatyzacja.png
| ... | ... | Binary files /dev/null and a/grafiki/m1_p1_automatyzacja.png differ |
grafiki/m1_p2_no-code-title.png
| ... | ... | Binary files /dev/null and a/grafiki/m1_p2_no-code-title.png differ |
grafiki/m1_p3-bez-programowania-title.png
| ... | ... | Binary files /dev/null and a/grafiki/m1_p3-bez-programowania-title.png differ |
grafiki/m1_p4-n8n-title.png
| ... | ... | Binary files /dev/null and a/grafiki/m1_p4-n8n-title.png differ |
grafiki/m2_p1-trigger-vs-akcja-title.png
| ... | ... | Binary files /dev/null and a/grafiki/m2_p1-trigger-vs-akcja-title.png differ |
grafiki/m2_p2-interfejs-title.png
| ... | ... | Binary files /dev/null and a/grafiki/m2_p2-interfejs-title.png differ |
grafiki/m2_p3-flow-title.png
| ... | ... | Binary files /dev/null and a/grafiki/m2_p3-flow-title.png differ |
grafiki/m2_p4-po-co-n8n-title.png
| ... | ... | Binary files /dev/null and a/grafiki/m2_p4-po-co-n8n-title.png differ |
grafiki/m2_p5-popularne-nody-title.png
| ... | ... | Binary files /dev/null and a/grafiki/m2_p5-popularne-nody-title.png differ |
grafiki/m3_p3-analiza-danych-title.png
| ... | ... | Binary files /dev/null and a/grafiki/m3_p3-analiza-danych-title.png differ |
grafiki/m3_p4-pobranie-danych-zewnetrznych.png
| ... | ... | Binary files /dev/null and a/grafiki/m3_p4-pobranie-danych-zewnetrznych.png differ |
grafiki/m3_p5-przeslanie-danych-komunikator.png
| ... | ... | Binary files /dev/null and a/grafiki/m3_p5-przeslanie-danych-komunikator.png differ |
grafiki/m3_p6-cron-harmonogram.png
| ... | ... | Binary files /dev/null and a/grafiki/m3_p6-cron-harmonogram.png differ |
grafiki/m4_p1-warsztat-gcp-title.png
| ... | ... | Binary files /dev/null and a/grafiki/m4_p1-warsztat-gcp-title.png differ |
grafiki/m4_p1-webhook-title.png
| ... | ... | Binary files /dev/null and a/grafiki/m4_p1-webhook-title.png differ |
grafiki/m4_p2-gcp-consent-screen.png
| ... | ... | Binary files /dev/null and a/grafiki/m4_p2-gcp-consent-screen.png differ |
grafiki/m4_p2-gcp-dane-kontaktowe.png
| ... | ... | Binary files /dev/null and a/grafiki/m4_p2-gcp-dane-kontaktowe.png differ |
grafiki/m4_p2-gcp-ekran-zgody.png
| ... | ... | Binary files /dev/null and a/grafiki/m4_p2-gcp-ekran-zgody.png differ |
grafiki/m4_p2-gcp-info-aplikacji.png
| ... | ... | Binary files /dev/null and a/grafiki/m4_p2-gcp-info-aplikacji.png differ |
grafiki/m4_p2-gcp-kolejny-krok.png
| ... | ... | Binary files /dev/null and a/grafiki/m4_p2-gcp-kolejny-krok.png differ |
grafiki/m4_p2-gcp-nowy-projekt.png
| ... | ... | Binary files /dev/null and a/grafiki/m4_p2-gcp-nowy-projekt.png differ |
grafiki/m4_p2-gcp-tworzenie-aplikacji.png
| ... | ... | Binary files /dev/null and a/grafiki/m4_p2-gcp-tworzenie-aplikacji.png differ |
grafiki/m4_p2-gcp-tworzenie-projektu-title.png
| ... | ... | Binary files /dev/null and a/grafiki/m4_p2-gcp-tworzenie-projektu-title.png differ |
grafiki/m4_p2-gcp-typ-odbiorcy.png
| ... | ... | Binary files /dev/null and a/grafiki/m4_p2-gcp-typ-odbiorcy.png differ |
grafiki/m4_p4-gcp-podsumowanie.png
| ... | ... | Binary files /dev/null and a/grafiki/m4_p4-gcp-podsumowanie.png differ |
grafiki/m4_p5-gcp-dane-logowania.png
| ... | ... | Binary files /dev/null and a/grafiki/m4_p5-gcp-dane-logowania.png differ |
grafiki/m4_p6-gcp-redirect-uri.png
| ... | ... | Binary files /dev/null and a/grafiki/m4_p6-gcp-redirect-uri.png differ |
grafiki/m4_p7-gcp-gmail-konfiguracja.png
| ... | ... | Binary files /dev/null and a/grafiki/m4_p7-gcp-gmail-konfiguracja.png differ |
grafiki/m4_p8-gcp-odbiorcy-oauth.png
| ... | ... | Binary files /dev/null and a/grafiki/m4_p8-gcp-odbiorcy-oauth.png differ |
grafiki/m4_p9-gcp-api-biblioteki.png
| ... | ... | Binary files /dev/null and a/grafiki/m4_p9-gcp-api-biblioteki.png differ |
grafiki/m5_p1-agent-ai-diagram.png
| ... | ... | Binary files /dev/null and a/grafiki/m5_p1-agent-ai-diagram.png differ |
grafiki/m5_p2-model-jezykowy.png
| ... | ... | Binary files /dev/null and a/grafiki/m5_p2-model-jezykowy.png differ |