I oto nastał ten czas… Właśnie dzwon wybił po raz trzydziesty. Nieduże stado kruków, z nieznośnym skrzekiem wzbiło się w powietrze, kierując się w stronę ledwo już widocznego zza horyzontu słońca. Okoliczni mieszkańcy pospiesznie chowają się do swoich domostw, skrupulatnie ryglując drzwi i okna. W powietrzu czuć nieprzyjemny zapach potu…
Stało się – nadszedł koniec miesiąca.
Pora przywdziać ciężką, antracytową togę, zarzucić ogromny kaptur, zapalić dwie ceremonialne świecie i rozpocząć przerażający rytuał buchalterii.
Ach biurokracja, ach faktury! Ulubiony temat każdego freelancera, od którego na samą myśl usta i ręce same składają się do ekstatycznego WOOHOO! 🎉
Tak naprawdę, to nie. Koniec miesiąca ssie.
Spis treści
Otwórz spis treści
Problem
Być może tak jak i ja, miesiąc w miesiąc wystawiasz ręcznie takie same lub bardzo podobne faktury. Powiedzmy, że dla klientów, z którymi wiąże Cię dłuższa współpraca. I być może, podobnie jak ja, myślisz sobie “Na bank jest jakiś lepszy, sprytniejszy sposób, żeby to ogarnąć”. I mimo tego, że ta myśl jest całkiem realna, to momentalnie dominowana jest przez drugą myśl typu: “No dobra, przecież to tylko chwila, wymyślenie rozwiązania zajmie mi 5 razy tyle”.
I tak co miesiąc, w koło Macieju.
No more! Bo, cały na biało (a raczej fioletowo), pojawia się Make.
Rozwiązanie
Make to cudowny wynalazek. Wciąż odkrywam pełne możliwości tego narzędzia, natomiast już teraz z sukcesem wykorzystuję tę platformę do kilku regularnych czynności, które zaliczam do kategorii nie chcem, ale muszem. Jedną z takich czynności jest niewątpliwie wystawianie i wysyłanie faktur, i to właśnie tego byka spróbuję złapać za rogi.
W przykładzie korzystam z Notion, jako dostawcy danych oraz z Infaktu, który odpowiedzialny jest za obsługę faktur, ale skupiać będę się głównie na dopięciu całości w Make (a nie na opisie działania wspomnianych platform). W artykule są/będą podlinkowane odpowiednie miejsca, więc jak chcesz, to możesz sprawdzić szczegóły na dany temat.
Tworzenie scenariusza
Mięsem Make są Scenarios, czyli sekwencje następujący po sobie (a czasem i równolegle) zdarzeń. Czym są scenariusze i jak działają przeczytasz nieco szerzej tutaj.
Zatem do dzieła! 🙌
1. Moduł Notion i Search Objects
Triggerem, czyli zdarzeniem wywołującym całą sekwencję będzie czynność wykonana w Notion. Konkretnie mówiąc, będzie to po prostu kliknięcie checkboxa (a raczej dwóch).
Lecimy:
- Przechodzę do Make i wybieram z lewego sidebara Scenarios i + Create a new scenario
- Klikam w pustą jeszcze planszę prawym przyciskiem myszy, wybieram Add module i odnajduję Notion (pomaga mi w tym charakterystyczny logotyp).
- Następnie, już w obrębie modułu Notion, odnajduję Search Objects. Wewnątrz tego modułu wskazuję, który element ma zostać odnaleziony.
Źródło danych
To jak finalnie będzie wyglądąć widok w Notion, zależy od Ciebie. Ważne, żeby znalazły się tam pola (wraz z danymi), które chcesz przekazać do Make. U mnie wygląda to tak:
Mam konkretne zadanie, a w nim informacje które przekazuję do zewnętrznych platform. Task, Price (taki format wymagany jest przez Infakt) i Related Company (zerknij na uwagę poniżej) potrzebne mi będą do obsługi faktur w Infakcie, z kolei Make pobiera informacje z pól Run scripts oraz Autogenerated invoice via Make (nazwy mogą być dowolne).
Ważne!
Related Company to pole typu Relation i potrzebne jest do poprawnego wystawienia faktury. Niespodzianką było dla mnie, że przygotowując scenariusz, pole to udostępnia Make tylko ID firmy. Potrzebna jest natomiast pełna nazwa i w obecnym momencie nie wiem, w jaki sposób mogę ją wyciągnąć w Make po ID.
Workaround jaki zastosowałem, to dodanie dodatkowego pola Rollup (w Notion jest ukryte, żeby nie powtarzać 2 razy tego samego), które po połączeniu go z Related Company udostępnia potrzebne informacje.
Jeśli wiesz jak to zrobić lepiej, to daj znać 🤓
Przekazanie danych z Notion do Make
Wracam do modułu Search Objects i uzupełniam kolejno:
- Connection - jeśli jeszcze nie połączyłeś Make z Notion, to należy to teraz wykonać. Jak nie chcesz bawić się w udostępnianie tylko konkretnych miejsc w Notion, wybierz Notion Public. Ja wybieram właśnie ten rodzaj.
- Search Objects - podaję Database Items
- Database ID - ID strony Notion, na której znajdują się dane. Pobieram je bezpośrednio z adresu URL: notion.so/id
Uwaga!
Każda nowa baza/strona w Notion dodana po autoryzacji z Make musi być osobno, ręcznie połączona. Robię to z poziomu danej strony w Notion, klikając 3 kropeczki w prawym górnym rogu i wybierając znajdującą się na samym dole opcję Add Connections.
-
Filter - miejsce, które zarządza całym scenariuszem. Tutaj w ruch idą wspomniane wyżej checkboxy. W momencie kiedy zadanie jest zrealizowane, zaznaczam Run scripts co jest sygnałem dla Make, że podczas wywołania scenariusza, do tego zadania może zostać wystawiona faktura.
Drugim, równie istotnym checkbox’em jest Autogenerated invoice via Make, który z kolei zapobiega dublom. Podczas startu scenariusza jest on pusty, a dopiero w momencie zakończenia sekwencji, automatycznie zostaje odfajkowany. Ponieważ chcę, żeby Make brał pod uwagę zadania z aktywnym Run scripts i z nieaktywnym Autogenerated invoice via Make. Zatem mój warunek wygląda tak:
⌘+S (Ctrl+S) i zapisuję zmiany.
2. Moduł HTTP i wykorzystanie API Infaktu
Nawet jeśli aplikacja/platforma nie ma bezpośredniej integracji z Make (tak jest np. w przypadku Notion), to jeśli tylko miejsce, z którym chcę się połączyć udostępnia interfejs API, cały cyfrowy świat stoi przede mną otworem.
Na szczęście Infakt to porządna firma i takimże API dysponuje.
Do komputra!
Wystawienie faktury
Prawy klik i odszukuję moduł HTTP.
Na tym etapie musisz mieć wygenerowany klucz API Infaktu. Jeśli jeszcze tego nie zrobiłeś, tutaj sprawdzisz jak to zrobisz w parę chwil.
Jeszcze jedno: jeśli również tworzysz integrację z Infakt (no bo wykorzystany przykład pewnie zagra też z innymi platformami), warto mieć otwartą dokumentację API. Nie będę skupiał się na samych requestach jakoś specjalnie. Przykłady z dokumentacji powinny w zupełności wystarczyć.
Po kolei:
- Credentials - podaję wygenerowany klucz API wraz z konkretną nazwą (na dzień pisania posta jest to X-API-Key)
- URL - wybrany endpoint. W przypadku wystawienia faktury jest to https://api.infakt.pl/v3/invoices.json
- Method - rodzaj zapytania, w tym scenariuszu to POST
- Headers - nie ruszam
- Query String - nie ruszam
- Body Type - zostawiam domyślne Raw
- Content Type - wybieram JSON
- Request Content - kopiuję z dokumentacji Infaktu body zapytania. Interesujące mnie dane podmieniam na informacje otrzymane z Notion (po kliknięciu w miejsce gdzie wklejasz kod pojawi się okienko ze wszystkimi dostępnymi danymi). W moim przypadku interesuje mnie client_company_name gdzie dostarczam nazwę klienta z pola Rollup (opisuję to szczegółowo kawałek wyżej) oraz name, net_price i unit_net_price z tablicy services
- Parse response - WAŻE! Zaznaczamy Yes, bo dzięki temu mogę ominąć dodanie w Make dodatkowego modułu JSON. W kolejnym module od razu mam dostęp do potrzebnych danych.
Wysłanie faktury
Wysyłka faktury realizowana jest bardzo podobnie, tak że kolejny moduł to również HTTP. Zmieniam jedynie endpoint (sprawdź dokumentację) oraz body, które w tym konkretnym przypadku zostawiam puste. Spowoduje to pobranie domyślnego adresu klienta ustawionego bezpośrednio w Infakcie.
Jak widzisz w dokumentacji, endpoint wymaga dynamicznego przekazania ID wystawionej przed momentem faktury. Dzięki zaznaczonemu w ustawieniach poprzedniego modułu Parse response mam teraz bezpośredni dostęp do wszystkich informacji udostępnianych podczas tworzenia dokumentu. Wystarczy wklikać się w odpowiednie miejsce i wybrać z dostępnej listy danych ID.
Bajka! ✨
Koniec sekwencji i moduł Notion: Update a Database Item
Po wystawieniu i wysłaniu faktury, wracam do modułu związanego z Notion i przekazuję informację o zmianie statusu checkboxa Autogenerated invoice via Make z false na true przez co zadanie zostaje w całości zamknięte i nie jest uwzględniane podczas kolejnego wywołania sekwencji.
Nie korzystam tutaj z Search Object jak to było za pierwszym razem, a z Update a Database Item. Sam moduł wygląda podobnie, choć naturalnie są różnice. Sprawdź poniżej:
Podczas kolejnego wywołania sekwencji zakończone zadanie z zaznaczonym checkboxem Autogenerated invoice via Make nie zostanie uwzględnione.
Poniżej cały scenariusz: