Funklë i wëzwalacze
Funkel je grafã. Rënk je rézą. Czekanié je czasã.
To je całi model, i kążdô cãżkô właściwòsc tegò produktu wëchôdô z tich trzéch zdanii. Edicjô żiwégò funkla je bezpiecznô dlô nich. Pòwtórnié nie mòże dwakroć wësłac dlô nich. Òsoba, chtërna sã wëpisôłô we wtórk, nie czuje nic w czwtórtk dlô nich.
Co naprawdã sã dzejé, jak to dzejô
Publikowanié funkla piszé niemienialną wersjã. Niechto wstąpi, i pòjawia sã réza: jeden rënk, dlô tegò kontaktu, przëpîté do ti wersji, trzimający aktualny wãzeł, czas zbudzeniô i swòj kòntekst.
Robòtnik wëjimô rënczi, chtërnëch czas zbudzeniô ju minął, zajimając je z SKIP LOCKED, tak że dwa robòtniczi nié mògą wziąc tegò samegò. Òn wëkònôwô wãzłë, pòkąd nie dôstré do czekaniô abò kùńca, pòtemù piszé nôslédny czas zbudzeniô i pùszczô.
Wãzeł je czëstą fùnkcją rënkù, kontaktu i wãzła — a jegò skùtczi sã zapisują w ti samej transakcëji co wlasny pòstãp rënkù. Ta jedna właściwòsc je tim, co robë pòwtórnié bezpiecznym. Robòtnik zabity w pòłowie sekundë miedzy "wësëli" a "pòsuń" pòzostôwiô abò òbama, abò niédnégò — nigdë jednégò.
A bò aplikacjô pòdôwô czas, a nie baza, réza napisónô terô je dłëżnô terô. Kolumna planowaniô z domyslnym zegarã bazy nie je jesz dłëżnô w chwilë zapisu i gùbi ten tik, chtëren ją stwòrzył — błąd, chtëren wëzdrzë jak nic, pòkąd wiadło nie je gòdzënã pòzno.
- 1Wëjim
wake_at <= now(),FOR UPDATE SKIP LOCKED. Kolejka bez wëjimów dwakroć wësëłô domyślnie. - 2WëkònaniéWãzłë pò kòleji, pòkąd czekanié abò kùńc. Kążdi piszé krok: co òn rozkazôł, co wësôł.
- 3ZatwierdzëSkùtczi i pòstãp, jedna transakcëjô. To je całi trik.
- 4SpanieNôslédné
wake_atzapisóné. Żédné dalszé rézi jesz nie istnieją, i żédnë nie mùszą.
Jeden rënk na kontakt na wersjã
Czôrtnôsce wëzwalaczów
Co może zacząć przebieg
Niektóre z nich to rzeczy, które robisz. Większość to rzeczy, które twój klient robi albo nie robi — a brak działania jest równie dobrym wyzwalaczem jak samo działanie.
Przychodzą
form_submit, list_join, contact_created, tag_added i segment_enter. Segment to żywy predykat, więc „wchodzi do segmentu” obejmuje każde „stało się”, które możesz wyrazić — trzy zamówienia, dziewięćdziesiąt dni ciszy, wydatki powyżej progu.
Coś robią
page_visit ze snippetu strony, message_opened, link_clicked, booking_made i payment_made. Otwarcie wiadomości samo w sobie jest zdarzeniem na kontakcie, więc jeden lejek może czekać na reakcję na ostatnią wysłaną rzecz.
Czas, albo ty
date_field z przesunięciem — urodziny, odnowienie, „rok od”, siedem dni przed albo trzy dni po. schedule dla cyklicznego. manual dla ogłoszenia, które wysyłasz, bo tak zdecydowałeś.
Twoja własna aplikacja
api_event to własne zdarzenie, które wysyłasz ze swojego kodu własnym tokenem. Wszystko, co zna twój produkt, staje się wyzwalaczem: aktywacja, zaproszenie kolegi, osiągnięcie limitu, anulowanie, eksport. To jest to, co zamienia narzędzie mailingowe w część twojego produktu.
Ponowne wejście, zdecydowane raz
Lejek jest albo ponownie wejściowy, albo nie, a baza danych tego pilnuje: jeden przebieg na kontakt na lejek, chyba że powiedziałeś inaczej. Ten sam wyzwalacz odpalony dwa razy w tej samej sekundzie nie może przypadkiem dać dwóch przebiegów.
Warunki wejścia
Wyzwalacz odpala, a specyfikacja wejścia decyduje, czy ten konkretny kontakt kwalifikuje się — predykat segmentu przed drzwiami. Tańsze niż węzeł warunku na pierwszym kroku, a graf zostaje o tym, co się dzieje, a nie o tym, kto może wejść.

Czternaście rzeczy może to zacząć. Szesnaście rzeczy może się wydarzyć dalej.
Szesnaście akcji i siedem węzłów przepływu
Co lejek może zrobić i jak decyduje
Wyślij coś
send_email, send_sms, send_push, send_letter — cztery kanały, jeden graf — plus notify_team, gdy osoba, którą trzeba powiadomić, pracuje dla ciebie.
Zmień kontakt
add_tag, remove_tag, add_to_list, remove_from_list, set_field. Oznaczanie kogoś po drodze to to, co czyni segment następnego lejka prostym.
Sięgnij na zewnątrz
http_request do czego chcesz, create_payment na własne połączone konto i book_slot na zasób rezerwacji. Płacący zostaje twój; nikt nie staje się naszym klientem.
Przechodź między lejkami
enter_funnel i exit_funnel. Zbuduj jedną sekwencję powitalną i wołaj ją z czterech miejsc, zamiast utrzymywać cztery kopie, które do marca się rozjadą.
Generuj w momencie wysyłki
ai_generate wypełnia zmienne scalania per kontakt, liczone przeciw twojemu limitowi i cache'owane po hashu kreacji i atrybutów kontaktu — inaczej płaciłbyś za każdego odbiorcę przy każdej wysyłce.
Czekaj, rozgałęziaj, dziel, łącz
wait przyjmuje czas trwania, datę z godziną, dzień tygodnia z godziną albo pole daty z przesunięciem. condition to predykat segmentu z tak i nie. split to A/B/n z wagami. join sprowadza gałęzie z powrotem razem.
goal — ten, który się liczy
Cel kończy przebieg dla każdego, kto go osiągnie. Zarezerwowali, kupili, odpowiedzieli: reszta sekwencji jest anulowana konkretnie dla nich. Nikt nie dostaje „tęsknimy za tobą” dzień po tym, jak wrócił — i to jest węzeł, który temu zapobiega.
throttle i quiet_hours
Throttle dławi skok, żeby skrzynka z niskim limitem tempa nie została zbita w zawieszenie. Ciche godziny wstrzymują wiadomość do cywilizowanej pory — stosowane na warstwie wiadomości, a nie kopiowane do każdej gałęzi grafu.
Sprawdzane, zanim może działać
Walidator odmawia tych samych rzeczy tobie i AI
Graf jest sprawdzany, zanim można go opublikować, a sprawdzenie nie jest doradcze. To ta sama ścieżka kodu, czy człowiek narysował lejek, czy model go wygenerował — i to jest jedyny powód, dla którego wygenerowane lejki w ogóle można ufać.
Dokładnie jedno wejście
Dwa węzły wejścia to niejednoznaczność, której nikt nie zauważa, aż zła połowa listy dostanie złą sekwencję.
Każdy węzeł osiągalny
Osierocona gałąź to albo błąd, albo wiadomość, którą myślisz, że wychodzi, a nie wychodzi. Oba warte poinformowania.
Cykl muszô miec czekanié
Pętla bez czekaniô w netce je nieskończoną pętlą z wysyłką w pôłowie. To rega robi różnicã miedzy lejkiem a incydentã.
Każda wysyłka mò swój kreatiwny materiał
Wzél send_email bez kreatiwù i tematu nie mòże bëc òpublikowóny. Wiadło z dobrim tematem i pustim cãłem je prawim félã; tuwò je òdrzucóny.
Każda zmiennô je znónô
Zmienne scalowanié sã sprawdzóné przë publikowanim. {{frist_name}} je literówkã, chternã widzisz przë redagowanim, a nie „Czëszc ,” w czterdziestë tësącach skrzinków.
Pòtemù symùlëjë to
Zrëbë próbny przëbég prawégò kontaktu przez całi graf i przëczëtaj drôgã, jaka bëła wëbrónô, i kążde wiadło, chtërné bë bëło wësłóné, z dniem. Nic nie wëchôdza na zewnątrz.
Trudné przëpôdczi
Sém rëzów, chtërné łomają naiwny silnik
Każdi z nich je testem z deterministycznym zegarã w spòdkù, bo kążdi łomaji implementacjã, chtërna wëzdrzë doskonale dobri, aż spotka sã z rzeczywistotą.
- 1Lejek, chtërny pętli sã w se samLegalny, pòspólny i w pôrządku — pòdôwô, że cykl zamëkô czekanié, na chtërny walidator inszistuje.
- 2Nôcës sã wëpisënk w pôłowie drôdżiWëłączanié je sprawdzóné przë wysyłce, a nie przë wstawianim do kolejki. Sprawdzenié przë wstawianim pòsëlë pòchtã tim, chtërni òdeszli w czasu czekaniô.
- 3Lejek je redagowóny z dzesącë tësącama lëdzë w netceOni chòdzą dali pò wersji, na chtërną weszli, do kùńca. Nowi wchodzący chòdzą pò nowi.
- 4Ten sam trigger wëstrzelô dwa razy w jedny sekùndzeJeden przëbég, bo unikalnosc je indeksã, a nie sprôwdzeniã pò nim wstawienié.
- 5Kontakt je wëmazóny w pôłowie przëbégùPrzëbég sã kùńczi. Wymazanié, chtërno òstôwiô sekwencjã wcygną adresowóną do kòs, nie je wymazanim.
- 6Czekanié przëkriwô zmianã czasu letnégò/zimnégò„Trzë dni ò dzewiątny z rana” znaczô dzewiątną z rana z òbù stronów zmiany zegarô.
- 7Worker je zabitë miedzy wysyłką a pòprzédnim krokãEfektë i pòstãp są jedną transakcjã. Abò òbò sã stôłë, abò nic.
Deterministyczny zegarKażdi test łomô wiarygodną implementacjã
Kampanie są drëgą pôłową
Lejek reaguje. Kampania je jednorazowim nadanim: publicznota, plan, throttle i wysyłka. To je jinô fòrma rzeczi i je celno trzimóna òsobno, a nie udawóny, że je lejkiem z jednym wzlã.
Dwa regaczi robią to bezpiecznym. Publicznota je zmaterializowónô jeden raz i òdmôwia pòwtórnégò biegù — pòwtórny rozpòznôwanié cëchò dodôłobë wszëtczich, chtërni przëszli òd zôczątkù wysyłczi, a indeks deduplikacjë bë to zatacëł, zablokując duplikatë, chtërné sam zrobëł. A liczniki są przeliczóné z zdarzéniów dostarczeniô, nigdë nie zwiekszóné na môlu, tak że pòwtórny webhook nie mòże wëdmuchac rapòrtu.
Kòrë czë co: jeżlë to stôwô sã przez cos, co człowiek zrobëł, to je lejek. Jeżlë to stôwô sã przez cos, co ùrządzëłës we wtórk, to je kampania. Zaskôkująco wiele marketingowégò automatowaniô pòzé, forsując drëgą fòrmã w pierszą.