Automat, który prowadzi mojego Facebooka: post i zdjęcie, siedem dni w tygodniu
Od końca sierpnia mój profil firmowy na Facebooku prowadzi się sam: model językowy pisze post, dobiera do niego słowa kluczowe, baza zdjęć na wolnej licencji oddaje kadr, a całość ląduje na stronie o ósmej rano. Opisuję to razem z błędem, który zatrzymał pierwsze dwa uruchomienia, i z listą rzeczy, których ten automat celowo nie robi.
Na profilu AtomFlow na Facebooku pojawia się jeden post dziennie, o ósmej rano. Cztery dni w tygodniu razem ze zdjęciem, trzy dni sam tekst. Nie piszę ich, nie planuję z tygodniowym wyprzedzeniem i nie mam kalendarza treści w arkuszu. Ten wpis jest o tym, jak to jest zrobione — bo to najświeższa automatyzacja, jaką u siebie postawiłem, i akurat ta ma tę zaletę, że jej efekt każdy może sobie obejrzeć bez mojego słowa honoru.
Uprzedzam od razu: to nie jest tekst o tym, że sztuczna inteligencja zastąpi prowadzenie mediów społecznościowych. Zastępuje w tym dokładnie jedną rzecz i zaraz napiszę którą, a przy okazji pokażę, na czym się to wywróciło, zanim zaczęło działać.
Sześć kroków, z których składa się jeden post
Cały przepływ da się opisać jednym zdaniem: obudź się o ósmej, napisz post, znajdź do niego zdjęcie, opublikuj. W praktyce to sześć kroków, z których każdy robi jedną prostą rzecz:
- harmonogram uruchamia przepływ o ósmej rano, w wybrane dni tygodnia,
- model językowy dostaje instrukcję redakcyjną i zwraca dwie rzeczy naraz: gotowy tekst posta oraz kilka angielskich słów kluczowych opisujących zdjęcie, które do tego tekstu pasuje,
- krótki fragment kodu sprawdza, czy odpowiedź jest poprawnym JSON-em, i sprząta ją, gdy model opakuje ją w markdown — bo modele lubią to robić mimo wyraźnego zakazu w instrukcji,
- biblioteka zdjęć na wolnej licencji dostaje te słowa kluczowe i oddaje dziesięć kadrów w orientacji poziomej,
- losowanie wybiera jeden z dziesięciu, żeby profil nie wyglądał co tydzień tak samo przy podobnym temacie,
- publikacja idzie prosto do API Facebooka: zdjęcie i podpis w jednym żądaniu, bez zewnętrznego planera i bez pośredniej usługi, której musiałbym powierzać dostęp do strony.
Najciekawszy jest krok drugi, bo tam siedzi cała sztuczka. Model nie pisze osobno tekstu i osobno opisu zdjęcia w dwóch zapytaniach. Pisze jedno i drugie w tej samej odpowiedzi, więc kadr pasuje do treści, a nie do tematu przewodniego strony. To jedno zapytanie mniej, jedno miejsce awarii mniej i o połowę mniejszy rachunek.
Dlaczego to nie jest jeden automat, tylko dwa
Posty ze zdjęciem i posty tekstowe robią u mnie dwa osobne przepływy, ustawione na rozłączne dni tygodnia. Wygląda to na niepotrzebne dublowanie, dopóki coś nie padnie. Jeżeli przestanie odpowiadać biblioteka zdjęć, milknie cztery dni w tygodniu, a nie siedem. Rozdzielenie kosztowało mnie kwadrans, a kupiło pewność, że jedna awaria nie zatrzyma całego kanału.
To jest ta sama zasada, którą stosuję u klientów: jeżeli dwie rzeczy mogą działać niezależnie, niech działają niezależnie. Jeden wielki przepływ, który robi wszystko, wygląda elegancko na schemacie i jest koszmarem w utrzymaniu.
Błąd, przez który przez dwa dni nie wyszło nic
Pierwsze dwa uruchomienia skończyły się identycznie: model napisał tekst, zdjęcie się znalazło, podpis się złożył — i Facebook odrzucił publikację z błędem 403, powołując się na uprawnienie, którego nie ma w tym API od lat. Komunikat sugerował, że mam prosić o wycofaną zgodę. To był fałszywy trop.
Prawdziwa przyczyna leżała gdzie indziej: żądanie szło z tokenem konta użytkownika zamiast z tokenem strony, z uprawnieniem do zarządzania jej treścią. Logika przepływu była poprawna od pierwszej minuty. Nie działała autoryzacja, o której na schemacie nie widać nic, bo to jedno pole w ustawieniach dostępu.
Komunikat błędu z cudzego API opisuje to, czego zabrakło systemowi, a nie to, co zrobiłeś źle. Przy integracjach z dużymi platformami połowa pracy to uprawnienia i tokeny, nie strzałki między krokami — i to jest ta połowa, której nie widać w wycenie, jeżeli ktoś jej tam uczciwie nie wpisał.
Czego ten automat ma zakazane
Instrukcja dla modelu jest krótsza niż lista zakazów. Zakazy są ważniejsze, bo to one decydują o tym, czy taki automat da się zostawić bez nadzoru:
- nie wymyśla statystyk ani historii klientów — model wymyśla liczby bez ostrzeżenia i brzmią wtedy zupełnie wiarygodnie, a firma odpowiada za to, co ma na profilu,
- nie sięga po zdjęcia spoza bazy na wolnej licencji — kadr z wyszukiwarki grafik to najprostsza droga do wezwania do zapłaty od fotografa, więc źródło zdjęcia jest w automacie ustawione na sztywno i widnieje pod postem,
- nie zaczyna od „Czy wiesz, że" i „W dzisiejszych czasach", nie sypie emoji — bo tekst, który wygląda na wygenerowany, jest gorszy niż brak tekstu,
- nie odpowiada na komentarze i nie obsługuje wiadomości — rozmowa z człowiekiem to jedyna część, której nie oddaję maszynie.
Ile to kosztuje i co naprawdę oszczędza
Rachunek jest nudny. Jeden post to kilkaset znaków od najtańszego dostępnego modelu, więc miesięczny koszt liczę w groszach. Biblioteka zdjęć w tym zastosowaniu jest bezpłatna. Przepływ stoi na moim serwerze, który i tak pracuje, więc nie płacę za każde uruchomienie osobnej subskrypcji. Realny koszt to kilka godzin złożenia całości i te dwa dni szukania przyczyny błędu 403.
Ale oszczędność czasu nie jest tu głównym zyskiem, bo napisanie krótkiego posta to dziesięć minut. Automat zdejmuje z głowy coś droższego: codzienną decyzję „o czym dzisiaj". To ona sprawia, że firmowe profile milkną na trzy tygodnie, a potem wracają zrywem czterech postów w jeden dzień. Regularność jest tu wartością samą w sobie i to ją kupiłem.
Kiedy bym tego nie zrobił
Ten automat pasuje do profilu, który jest wizytówką — ma pokazywać, że firma żyje i czym się zajmuje. Gdyby na Facebooku stał mój lejek sprzedażowy, kampanie i obsługa klienta, publikowanie treści bez czytania jej przez człowieka byłoby złym pomysłem. Najlepsze posty to konkretne historie z wdrożeń, a tych model nie zna i nie wolno mu ich zmyślać.
Drugie ograniczenie jest jeszcze prostsze: model nie wie, co się dzieje w firmie. Nie napisze o nowej usłudze, o zmianie cennika ani o tym, że w zeszłym tygodniu skończyłem ciekawe wdrożenie. Dlatego raz na jakiś czas i tak wchodzę i piszę post ręcznie, a automat jest podłogą, nie sufitem.
Jeżeli marka żyje z treści, ten sam szkielet warto ustawić inaczej: zamiast publikować od razu, niech przygotuje wersję roboczą i wyśle ją na telefon do akceptacji. Praca człowieka schodzi wtedy z pisania do zatwierdzania, a to zwykle różnica między postem raz na trzy tygodnie a postem codziennie.
Ten sam szkielet w innej firmie
Schemat „obudź się, złóż treść z tego, co już masz, opublikuj tam, gdzie patrzą klienci" obsługuje rzeczy dużo bardziej przyziemne niż posty o automatyzacji:
- cykliczny post z ofertą tygodnia, składany z cennika albo stanu magazynu, a nie pisany od zera,
- zajawka nowego wpisu z bloga albo nowej realizacji, wypuszczana na profil w dniu publikacji,
- przypomnienie o wydarzeniu, terminie zapisów albo końcu promocji, ustawione raz i odliczane samo,
- wersje robocze do akceptacji zamiast publikacji od razu — ten sam przepływ, tylko na jego końcu zamiast API portalu jest wiadomość do Ciebie.
Każdy z tych wariantów to kilka godzin roboty i ten sam zestaw pytań na starcie: skąd biorą się dane, kto odpowiada za treść i co ma się stać, gdy portal odpowie błędem. Jeżeli chcesz to sobie przeliczyć na własnym przypadku, pierwsza analiza procesów jest bezpłatna i nie potrzebujesz do niej specyfikacji — wystarczy, że opiszesz w ludzkim języku, co chciałbyś przestać robić ręcznie.