clickSomo
Òtemkni ClickSomo

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.

Jeden tik robòtnikaWëkònanié
  • 1Wëjimwake_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_at zapisó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ą.

Na co je silnik testowónyZaprzeczanié
  • 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ą.