Twórz Własne Automatyzacje
3 godz. 14 min · Make · Biznes i Automatyzacje
Adam GospodarczykKorzystając z różnych narzędzi, na przykład do obsługi mailingu, masz do dyspozycji na ogół kilka wbudowanych integracji - przykładowo połączenie z kalendarzem czy bramką płatności. Wyobraź sobie, że takie narzędzie możesz połączyć praktycznie z dowolnym innym, nawet jeśli nie ma go na liście. To właśnie potencjał Make, które umożliwi takie automatyzacje.
Jeśli znasz Zapier, Make to podobna koncepcja, ale daje dużo bardziej zaawansowane możliwości, jest dużo tańsza (lub darmowa) a dodatkowo, ma naszym zdaniem bardziej przyjazny i czytelny interfejs zwłaszcza przy tworzeniu rozgałęzionych scenariuszy. Tworzenie automatyzacji z Make to czysta przyjemność i zdrowa porcja dopaminy!
Co najważniejsze, Make umożliwia tworzenie automatyzacji bez użycia ani jednej linii kodu! To jak programowanie 2.0, gdzie rezultaty widzisz i testujesz w prostym, wizualnym edytorze. To najłatwiejszy sposób aby zacząć przygodę z programowaniem i nowoczesnym podejściem do technologii no-code i low-code.
Mimo, że Make jest natywnym środowiskiem no-code, osoby, które nieco lepiej rozumieją zasady działania protokołu HTTP i API i mają podstawy programowania w JS, otrzymują zupełnie nowe możliwości tworzenia oprogramowania, w sposób wizualny i prostszy niż kiedykolwiek. Jeśli osoby początkujące z Make stają się programistami, programiści stają się superbohaterami!
Wyjątkowe w Make jest podejście do tworzenia automatyzacji wizualnie, gdzie bardzo czytelne jest całe flow scenariusza i to, jak przepływają w nim dane. Zaawansowane możliwości jak stosowanie filtrów czy funkcji sprawia, że w tak prostym interfejsie w zasadzie nie ma zadań niemożliwych!
Z dowolnego narzędzia możesz wysłać dane w postaci Webhooka do Make, które zostaną natychmiastowo odebrane. Następnie możesz łatwo przekazać je w dowolne miejsce i do dowolnego narzędzia - na przykład Airtable, z którego często korzystamy aby gromadzić dane, HubSpot'a, Asany czy wysłać powiadomienie SMS, e-mail, Slack. Całość zajmie Ci kilka minut.
Ten kurs jest przeznaczony dla każdej osoby, która chce pracować wydajniej i zatrudnić roboty (automatyzacje), które wykonają za nią powtarzalne zadania. Dzięki temu, zwiększysz efektywność swojej pracy oraz zostaniesz bohaterem automatyzacji w swojej firmie. Osoby, które przerobiły kurs HTTP i API, a także programiści, mogą wycisnąć z tego kursu jeszcze więcej, na dobre zmieniając swoje podejście do automatyzacji. Polecamy wcześniejsze przerobienie przynajmniej kursu HTTP i API, aby lepiej zrozumieć omawiane zagadnienia.
Cześć! W tej lekcji powiem Ci wszystko, co musisz
wiedzieć na temat modułów typu Flow control.
Są to moduły wbudowane w Integromat
umożliwiające nam kontrolę nad przebiegiem naszego scenariusza.
Zanim zaczniemy dodam tylko, że mamy tutaj również akcje typu Directives, natomiast
tych akurat nie będziemy sobie teraz omawiać ze względu na to, że dotyczą
tematu obsługi błędów, do którego będziemy mieli okazję jeszcze wrócić.
Zatem proponuję, abyśmy zaczęli tutaj od
Repeater'a, czyli modułu, który umożliwia powtarzanie dalszej części scenariusza.
Takie powtarzanie opiera się tutaj o licznik, którego wartość początkową możemy
ustawić w pierwszym polu, a wartość końcową w drugim.
Dodatkowo mamy tutaj opcję zaawansowane w
postaci określenia wartości co ile kroków ma być powtarzany dany licznik.
Oznacza to, że jeżeli ustawimy tutaj dwójkę, no to w kolejnym kroku nasza wartość
początkowa z jedynki zmieni się na trójkę i z resztą możemy to sobie udowodnić.
Jak widzisz w tej sekcji output, czyli wyniku naszego modułu, rzeczywiście
wykonały się tutaj 3 powtórzenia, a nasz licznik zwiększa swoją wartość o 2.
Oczywiście najważniejszą informacją w kontekście Repeater'a,
którą musisz wiedzieć jest fakt, że wartości, które mamy tutaj nie
muszą być ustawiane ręcznie, tylko możemy ustawiać je dynamicznie.
Zatem taki Repeater może zostać wykorzystany do chociażby
tego, aby iterować, czyli przechodzić przez kolejne elementy np.
wpisów w Airtable bądź np.
załączników maili.
Aczkolwiek w tym przypadku bardzo możliwe,
że przyda Ci się moduł, o którym powiemy sobie za chwilę.
Dodatkowo bardzo istotne jest to, aby było dla Ciebie jasne, że jeżeli dodamy tutaj
dowolne inne akcje i tutaj niezależnie od tego jakie akcje zostaną tutaj podjęte, no
to nasz Repeater uwzględni wszystkie moduły znajdujące się za nim.
Oczywiście, jeżeli chcielibyśmy doprowadzić do sytuacji, że tylko część
naszego scenariusza zostanie powtórzona, moglibyśmy wykorzystać router, o którym
właśnie wypadałoby powiedzieć nieco więcej.
Jeżeli chodzi o router, to już mieliśmy okazję z niego korzystać.
Natomiast o nim również musisz wiedzieć przynajmniej kilka rzeczy.
Przede wszystkim wiemy, że router służy nam do rozszczepiania scenariuszy.
Możemy tutaj dołączać kolejne
rozgałęzienia, które będą wykonywać się niezależnie.
Bardzo istotne jest to, że jeżeli tutaj przypiszemy sobie jakieś akcje, a zaraz
później podłączyć go ponownie, to zwróć uwagę, że jeżeli teraz wcisnę ikonkę
różdżki, no to ten moduł przeskoczy nam na koniec.
Wynika to z faktu, że o kolejności
wykonywanych rozgałęzień decyduje kolejność ich dołączania.
Oznacza to, że jeżeli chcielibyśmy
przywrócić początkową kolejność, musielibyśmy odpiąć wszystkie pozostałe
moduły, a następnie podpięcie w takiej kolejności, na której nam zależy.
Dzięki temu Integromat uporządkuje te moduły, biorąc
pod uwagę właśnie kolejność ich dołączania.
Jak widzisz, w tym momencie ten ostatni moduł przeskoczył na pierwsze miejsce.
Poza tym, jeżeli chcesz się upewnić w jaki
sposób wykona się Twój scenariusz, polecam Ci wykorzystanie ikonki samolotu, który
graficznie wyjaśni Ci jak wykona się Twój scenariusz.
Idąc dalej jeżeli chodzi o sam router,
bardzo możliwe, że będzie interesowało Cię również to, aby wykonywać dane ścieżki w
zależności od konkretnej sytuacji, która może mieć miejsce.
Przykładowo jak wiesz klikając włączenia mogę tutaj zdefiniować filtry, które
zweryfikują czy dany warunek jest poprawny czy też nie i w zależności od tego
wykonają lub nie wykonają dalszej części scenariusza.
No i ostatnią rzeczą, którą musisz
wiedzieć w temacie routerów jest możliwość oznaczenia filtra jako tzw.
fallback route, czyli ścieżka, która wykona
się tylko wtedy, jeżeli wszystkie pozostałe zawiodą.
Inaczej mówiąc, jeżeli filtry pozostałych nie zostaną zrealizowane.
Przykładowo zdefiniujemy sobie tutaj filtry, które z pewnością nie zostaną
spełnione, a następnie wykonamy sobie nasz scenariusz.
Efekt będzie tutaj taki, że w momencie uruchomienia naszej automatyzacji dwie
pierwsze ścieżki nie wykonają się, ale wykona się ta ostatnia.
Natomiast w sytuacji, gdyby któryś z tych warunków został spełniony,
to wypełniając definicję fallback route została wykonana akcja wyszukująca rekord,
ale akcja na samym dole pozostała nienaruszona.
Ostatnią rzeczą, która może zainteresować Cię w temacie routera jest fakt, że
właśnie ten fallback route oznaczony jest strzałką bez ogonka.
Dzięki temu jesteśmy w stanie łatwo go
rozpoznać bez konieczności wchodzenia w filtr.
Zatem w temacie routera to byłoby już na tyle i możemy przejść dalej.
Idąc teraz dalej musimy zmodyfikować nieco z naszego obiektu JSON.
Mianowicie dodamy do niego kolejną
właściwość, która tym razem będzie tablicą.
Także jak widzisz mamy tutaj tablicę obiektów zawierających właściwość URL.
Inaczej mówiąc mamy tutaj tablicę linków.
Informacje na temat takiej tablicy zapiszemy sobie w arkuszu Airtable.
Przygotowałem tutaj taką prostą tabelę, która będzie zawierała imię użytkownika,
jego nazwę oraz adresy URL, które zostały do niego przypisane.
Jeżeli teraz wykonamy naszą automatyzację, a w zasadzie przygotujemy ją w taki
sposób, aby zapisać rekord zawierający dane z webhook'a, no to jak łatwo się
domyślić, w sytuacji, jeżeli przekażemy tutaj tablicę adresów URL, powinny nam się
dopisać wszystkie linki przypisane do tego użytkownika.
Tak, tylko tutaj odwrotnie najpierw email, potem imię.
I swoją drogą jest to dość istotne, mianowicie jak widzisz umieściłem tutaj w
pierwszej kolejności email użytkownika, a dopiero w drugiej imię.
Wynika to z faktu, że email będzie
unikatowy, a imię nie do końca i z tego powodu w tej głównej kolumnie raczej warto
przechowywać wartości unikatowe, aczkolwiek nie jest to twarda reguła,
tylko bardziej dobra praktyka, której staram się trzymać.
Wracając jednak do naszej automatyzacji
mamy tutaj brakujące pole zawierające artykuły.
I teraz teoretycznie mógłbym ponownie wykonać sobie ten webhook, bądź ponownie
zdefiniować strukturę danych, które tutaj przychodzą.
Natomiast wykorzystam tutaj inną regułę.
Mianowicie jeżeli wejdę do pola name, a następnie skopiuje sobie samą wartość, a
następnie przejdę do dowolnego edytora tekstowego.
To zobaczymy, że możemy tą wartość zapisać w nieco inny sposób.
Konkretnie, jak już pokazywałem w jednej z
lekcji podstawowych na temat Integromatu zmienne w Integromacie można zapisywać wykorzystując
podwójne nawiasy klamrowe, a następnie odwołując się do numeru modułu oraz nazwy
właściwości, która jest w nim przechowywana.
Jeżeli chodzi o numery modułu, są one umieszczone tutaj bezpośrednio obok nazwy.
W przypadku webhook'a jest to moduł numer 7 i zresztą mamy tutaj tego potwierdzenie.
Natomiast mniej będzie interesowała
właściwość Articles pochodząca właśnie z tego webhook'a.
W związku z tym zmodyfikuję teraz moją
zmienną, a następnie skopiuje jej wartość i wkleję z powrotem do modułu Airtable.
Jak widzisz wartość została poprawnie wklejona, natomiast Integromat informuje mnie
o tym, że ta wartość nie do końca została znaleziona w naszym scenariuszu.
Jednocześnie też nie zwraca tutaj żadnego
błędu, ponieważ taka informacja może się pojawić.
I tak zresztą się stanie w momencie, gdy
wykonamy nasz webhook ponownie, przy czym teraz będziemy mieć błąd.
Wynika to z faktu, że zadziałał tutaj
filtr, który zdefiniowaliśmy przy definiowaniu webhook'a.
Mianowicie przyjmowana struktura danych uwzględnia tutaj wyłącznie dane, które
zawierają dwie właściwości, czyli name oraz email.
Jeżeli jednak ponownie skorzystamy z
generatora, to możemy wkleić do niego nasz obiekt JSON i w ten sposób utworzyć nową
strukturę danych, która tym razem będzie zawierała informacje o artykułach.
Zapisuję tutaj te wszystkie zmiany, a następnie zapisuję sam scenariusz i
uruchamiam go ponownie oraz oczywiście wykonuję zapytanie.
W tej sytuacji dane zostały zapisane w Airtable. I jeżeli
sobie przejdziemy do tabeli to zobaczymy, że nie do końca o to nam chodziło.
Rzeczywiście otrzymaliśmy tutaj tablicę
obiektów, natomiast nie mamy tutaj wartości, które nas interesują.
Wynika to z faktu, że rzeczywiście mamy tutaj do czynienia z kolekcjami czy też
obiektami, przy czym przy przekazywaniu danych nie zostały one zinterpretowane
jako ciągi znaków, tylko oznaczone jako po prostu kolekcja.
Aby umieścić tutaj wartości znajdujące się
po przecinku, musimy w pierwszej kolejności wykorzystać tzw. iterator.
Iterator jest to
akcja modułu Flow control, która umożliwia nam przekazanie do niej tablicy.
W naszym przypadku będą to artykuły, a następnie powtórzenie wszystkich
następujących modułów tyle razy ile jest elementów w tablicy.
Zatem działa to podobnie jak repeater,
przy czym tutaj liczba powtórzeń nie będzie zależała od licznika, tylko od
długości tablicy czy też ilości elementów, które będą się w niej znajdować.
Oznacza to mniej więcej tyle, że jeżeli teraz wykonamy sobie ten scenariusz, to w naszym
Airtable pojawią się tutaj dokładnie 3 kolejne rekordy.
No i rzeczywiście mamy tutaj tego potwierdzenie.
Nie zmienia to jednak faktu, że dane,
które tutaj zostały przekazane nie do końca nas satysfakcjonują.
Jeżeli jednak zamienimy tutaj wartości,
które przekazujemy do adresu URL na wartość wygenerowaną przez iterator, to
może okazać się, że wynik będzie nas tutaj satysfakcjonował.
Chodzi o to, że jak widzisz mamy tutaj podgląd mówiący nam o tym, że pod
wartością URL znajduje się tutaj adres do naszego artykułu.
Więc jeżeli teraz ponownie wykonam sobie
ten scenariusz, no to w naszym Airtable pojawią się 3 wpisy na temat jednego
użytkownika, natomiast już linki zostały odpowiednio podzielone.
Coś takiego teoretycznie może nas
satysfakcjonować, natomiast może okazać się, że zamiast umieszczać poszczególne
informacje w oddzielnych rekordach, będziemy chcieli umieścić je np.
po przecinku.
Przykładowo coś takiego może mieć miejsce w sytuacji, gdyby zamiast artykułu
znajdowały się tutaj informacje na temat roli tego użytkownika.
Czyli może być np.
administratorem i dodatkowo mieć uprawnienia Supermena.
Efekt jest teraz tutaj taki, że jeżeli zmodyfikujemy nasz scenariusz w taki
sposób, aby przede wszystkim przyjmował dane o określonej strukturze.
A następnie upewnimy się, że struktura
danych, które mamy w webhook'u jest poprawna, no to możemy zmodyfikować sobie
nasz iterator w taki sposób, aby przyjmował tutaj informacje na temat ról tego
użytkownika, a następnie chcielibyśmy umieścić je tutaj po przecinku.
Problem jednak tutaj polega na tym, że jeżeli umieścimy sobie tutaj te wartości,
to ponownie uzyskamy dokładnie taki sam efekt jak uzyskaliśmy wcześniej.
Oznacza to, że poszczególne role
użytkownika zostały zapisane w oddzielnych rekordach.
Coś takiego nas oczywiście nie interesuje
i z tego powodu musimy wykorzystać tak zwany aggregator.
Aggregator jest odwrotnością iterator,
ponieważ iterator przyjmuje tablice i zamienia je na pakiety danych.
Natomiast aggregator robi coś dokładnie odwrotnego, czyli konkretnie przyjmuje
pakiety danych, zamieniając je na pojedynczą tablicę.
W naszym jednak przypadku nie będzie nam
zależało na tym, aby zamienić te informacje na tablicę,
tylko na to, aby wyciągnąć pojedyncze wartości i zapisać je po przecinku.
Zanim jednak do tego przejdziemy, chciałbym pokazać Ci jedną ważną rzecz.
Mianowicie w przypadku aggregatora możemy
wybrać właściwości, które ma zawierać tablica wynikowa.
Czyli konkretnie,
jeżeli odłączymy sobie na razie ten ostatni moduł,
a następnie wykonamy naszą automatyzację, no to zobaczymy, że otrzymamy tutaj w wyniku
tablice zawierające kolekcje przechowującą informacje na temat naszych ról.
Jednocześnie też nic nie stoi na
przeszkodzie, aby wybrać kolejne pole i np.
zaznaczyć email i ponownie wykonać naszą automatyzację, bo w efekcie otrzymamy
tablicę zawierającą informacje na temat adresu email oraz pojedynczej wartości.
Dodatkowo możemy też zaznaczyć opcję zaawansowaną, która pozwoli nam zgrupować
dane względem określonej wartości, czyli np.
adresu email.
Jeżeli ponownie wykonamy sobie ten scenariusz, to zobaczymy, że otrzymamy
tutaj obiekt zawierający klucz główny w postaci adresu email, a następnie dość
specyficzną tablicę zawierającą zarówno adres email, jaki poszczególne role.
Oczywiście ta transformacja danych nie ma tutaj najmniejszego sensu, natomiast
zależy mi na tym, aby pokazać Ci jak działa aggregator.
Dodatkowo w przypadku aggregator możemy
pomiędzy iteratorem a aggregatorem umieszczać dowolne inne moduły, które będą
wykonywać się tyle razy, ile zostało określone w iteratorze.
Jednocześnie zwrócone przez nich wartości możemy wykorzystywać z poziomu aggregatora.
To, co musisz tutaj zapamiętać, to fakt,
że aggregator może posłużyć do transformacji serii danych na pojedynczą
tablicę i dzięki temu oszczędzisz liczbę operacji, które dostępne są w Integromacie.
No bo przykładowo, jeżeli chciałbym wykonać operacje na każdym z tych
pakietów, to za każdym razem zostałaby zużywana jedna akcja.
Jeżeli jednak z pomocą aggregator zamienię je na pojedynczą tablicę, a
następnie na tej tablicy wykonam operację, no to zostanie zużyta tylko jedna.
W każdym razie to, co będzie nas
interesowało na tym etapie, to wykorzystanie takiego specjalnego rodzaju
aggregatora, który nosi nazwę text aggregator.
Czyli zależy nam tutaj na tym, aby zgromadzić wartości tekstowe pochodzące z
modułu iterator i konkretnie wartości, która znajduje się w naszej tablicy.
Oznacza to mniej więcej tyle, że jeżeli
teraz podłączymy ten ostatni moduł i wykonamy naszą automatyzację, no to
rzeczywiście otrzymaliśmy ciąg znaków zawierający sklejone ze sobą właściwości.
Takie właściwości możemy oddzielić definiując tzw.
separator.
Separatorem może być nowy wiersz, tabulator, bądź dowolny inny ciąg znaków, np.
przecinek i spacja.
Alternatywnie też możemy grupować dane względem określonej kolumny.
Natomiast na ten moment nie będzie nas to interesowało.
Podpinam więc teraz Airtable i w ramach adresu URL czy już w tym przypadku ról
użytkownika przypinam wartość wygenerowaną przez text aggregator.
Efekt końcowy jest taki, że jeżeli ostatni
raz wykonamy naszą automatyzację, no to w naszym Airtable pojawi się tutaj wpis
zawierający adres użytkownika i jego imię oraz role zapisane po przecinku.
Domyślam się, że to co właśnie Ci pokazałem nadal może wydawać się dość skomplikowane,
Natomiast musisz na temat iteratorów oraz aggregatorów zapamiętać jedno.
Mianowicie do Iterator przekazujesz tablice i zamieniasz je na pakiety danych,
dzięki czemu jesteś w stanie wykonać serię operacji na tych pojedynczych pakietach, a
następnie z pomocą text aggregatora lub zwykłego aggregatora znajdującego się w
Flow control, możesz ponownie zamienić te pakiety danych na tablicę.
Inaczej mówiąc, mamy tutaj tablicę
wejściową i otrzymujemy tablicę wyjściową, a w przypadku oczywiście text aggregatora.
Efektem końcowym nie jest nowa tablica, tylko nowy ciąg znaków.
Poza tym bardzo istotne jest to, aby wybierać odpowiednio moduł źródłowy.
Taki moduł pozwoli Ci zdefiniować, które
moduły mają zostać powtarzane w ramach Iterator.
Oznacza to, że jeżeli tutaj znalazłyby się dodatkowe moduły, to tak jak powiedziałem,
one będą wykonywane dla każdego powtórzenia. Czyli
przykładowo, jeżeli mamy w tej chwili dwie role, to wszystkie moduły, które znajdują
się pomiędzy iteratorem a aggregatorem wykonają się tyle razy, ile mamy elementów
tablicy i w tym przypadku będzie to dwa razy.
Mam nadzieję, że teraz stało się to trochę bardziej jasne, ponieważ z iteratorów oraz
aggregatorów będziemy jeszcze niejednokrotnie korzystać i myślę, że wtedy na takich
praktycznych przykładach stanie się to dla Ciebie zdecydowanie bardziej jasne.
Tymczasem teorię mamy już za sobą i tym samym omówiliśmy też wszystkie
najważniejsze moduły umożliwiające nam kontrolę naszego scenariusza.
W tym momencie nie pozostaje nic innego,
jak usunąć te wszystkie moduły i przygotować scenariusz do kolejnej lekcji.