Funnel a triggery
Funnel je graf. Priebeh je riadok. Čakanie je čas.
To je celý model a každá náročná vlastnosť tohto produktu z týchto troch viet vyplýva. Vďaka nim je úprava bežiaceho funnelu bezpečná. Vďaka nim nemôže opakovaný pokus odoslať správu dvakrát. Vďaka nim človek, ktorý sa v utorok odhlásil, vo štvrtok nič nedostane.
Čo sa naozaj deje pri spustení
Publikovanie funnelu zapíše nemennú verziu. Niekto vstúpi a objaví sa riadok: jeden priebeh, pre tento kontakt, pripútaný k tej verzii, obsahujúci aktuálny uzol, čas prebudenia a vlastný kontext.
Worker si prenajíma priebehy, ktorých čas prebudenia už nastal, a rezervuje si ich pomocou SKIP LOCKED, takže dva workery si nemôžu vziať ten istý. Vykonáva uzly, kým nedosiahne čakanie alebo koncový uzol, potom zapíše ďalší čas prebudenia a pustí sa.
Uzol je čistá funkcia priebehu, kontaktu a uzla — a jeho efekty sa potvrdzujú v tej istej transakcii ako samotný posun priebehu. Táto jediná vlastnosť robí opakovaný pokus bezpečným. Worker zabitý v pol sekundy medzi „odoslať“ a „posunúť“ zanechá buď oboje, alebo nič, nikdy len jedno.
A keďže čas dodáva aplikácia, nie databáza, riadok zapísaný teraz je splatný teraz. Stĺpec plánovania s predvolenou hodnotou podľa hodín databázy nie je v okamihu zápisu ešte splatný a mešká práve to tiktanie, ktoré ho vytvorilo — chyba, ktorá nevyzerá ako nič, kým správa nemešká hodinu.
- 1Prenájom
wake_at <= now(),FOR UPDATE SKIP LOCKED. Front bez prenájmov odosiela dvakrát už v predvolenom nastavení. - 2VykonanieUzly v poradí, kým nenastane čakanie alebo koncový uzol. Každý zapíše krok: čo rozhodol, čo vyslal.
- 3PotvrdiťEfekty a posun v jednej transakcii. V tom je celý trik.
- 4PokojZapísané ďalšie
wake_at. Žiadne downstream riadky ešte neexistujú a ani nemusia.
Jeden priebeh na kontakt na verziu
Štrnásť triggerov
Čo môže spustiť priebeh
Niektoré z nich sú veci, ktoré urobíte vy. Väčšina sú veci, ktoré urobí — alebo neurobí — váš zákazník, a nekonanie je rovnako dobrý trigger ako samotné konanie.
Prichádzajú
form_submit, list_join, contact_created, tag_added a segment_enter. Segment je živý predikát, takže „vstúpi do segmentu“ pokrýva každé „sa stal“, ktoré viete vyjadriť — tri objednávky, deväťdesiat dní ticha, útrata nad prahom.
Niečo urobia
page_visit z web snippetu, message_opened, link_clicked, booking_made a payment_made. Otvorenie správy je samo o sebe udalosť na kontakte, takže jeden funnel môže čakať na reakciu na poslednú odoslanú vec.
Čas, alebo vy
date_field s posunom — narodeniny, obnova, „rok od“, sedem dní pred alebo tri dni po. schedule pre opakujúci sa. manual pre oznámenie, ktoré odošlete, lebo ste sa tak rozhodli.
Vaša vlastná aplikácia
api_event je vlastná udalosť, ktorú odošlete zo svojho kódu so svojím tokenom. Čokoľvek váš produkt vie sa stane triggerom: aktivácia, pozvanie kolegu, dosiahnutie limitu, zrušenie, export. Toto je ten, ktorý z nástroja na mailingu urobí súčasť vášho produktu.
Opätovný vstup, rozhodnuté raz
Funnel je buď opätovne vstupný, alebo nie je, a databáza to vynucuje: jeden priebeh na kontakt na funnel, pokiaľ ste nenariadili inak. Rovnaký trigger spustený dvakrát v tej istej sekunde nemôže omylom vytvoriť dva priebehy.
Podmienky vstupu
Trigger sa spustí a vstupná špecifikácia rozhodne, či je tento konkrétny kontakt oprávnený — predikát segmentu pred dverami. Lacnejšie než podmienkový uzol na prvom kroku a graf sa tak zaoberá tým, čo sa stane, nie tým, kto smie dnu.

Štrnásť vecí ho môže spustiť. Šestnásť vecí môže nastať potom.
Šestnásť akcií a sedem uzlov toku
Čo funnel dokáže a ako sa rozhoduje
Odoslať niečo
send_email, send_sms, send_push, send_letter — štyri kanály, jeden graf — plus notify_team, keď osoba, ktorú treba informovať, pracuje pre vás.
Zmeniť kontakt
add_tag, remove_tag, add_to_list, remove_from_list, set_field. Označovanie ľudí po ceste je to, čo robí segment ďalšieho funnelu jednoduchým.
Dosah mimo systému
http_request na čokoľvek chcete, create_payment proti vlastnému prepojenému účtu a book_slot proti rezervačnému zdroju. Platiteľ zostáva váš; nikto sa nestane našim zákazníkom.
Presun medzi funnelmi
enter_funnel a exit_funnel. Postavte jednu uvítaciu sekvenciu a volajte ju zo štyroch miest, namiesto udržiavania štyroch kópií, ktoré sa do marca rozídu.
Generovanie v čase odoslania
ai_generate vyplní merge premenné pre každý kontakt, merané voči vašej kvóte a cacheované podľa hashu kreatívy a atribútov kontaktu — inak by ste platili za každého príjemcu pri každom jednom odoslaní.
Čakanie, vetvenie, rozdelenie, spojenie
wait prijme trvanie, dátum a čas, deň v týždni s časom, alebo dátumové pole s posunom. condition je predikát segmentu s áno a nie. split je A/B/n s váhami. join opäť spojí vetvy dokopy.
goal — ten, na ktorom záleží
Cieľ ukončí beh pre každého, kto ho dosiahne. Rezervovali si, nakúpili, odpovedali: zvyšok sekvencie sa pre nich konkrétne zruší. Nikto nedostane „chýbate nám“ deň po tom, čo sa vrátil — a práve tento uzol tomu bráni.
throttle a quiet_hours
Throttle spomaľuje náraz, aby schránka s nízkym limitom rýchlosti nebola zavalená až do suspendovania. Quiet hours pozdržia správu do primeraného času — uplatňuje sa na úrovni správy, nie skopírované do každej vetvy grafu.
Skontrolované, kým sa môže spustiť
Validátor odmieta to isté pre vás aj pre AI
Graf sa skontroluje skôr, než ho možno publikovať, a kontrola nie je len odporúčanie. Je to tá istá cesta kódu, či funnel nakresnil človek, alebo ho vygeneroval model — a to je jediný dôvod, prečo sa generovaným funnelom dá veriť.
Práve jeden vstup
Dva vstupné uzly sú nejednoznačnosť, ktorú si nikto nevšimne, kým nesprávna polovica zoznamu nedostane nesprávnu sekvenciu.
Každý uzol dosiahnuteľný
Osirotelá vetva je buď chyba, alebo správa, o ktorej si myslíte, že odchádza, a neodchádza. Oboje stojí za to, aby ste sa to dozvedeli.
Cyklus musí obsahovať wait
Slučka bez waitu je nekonečná slučka s odoslaním uprostred. Toto pravidlo je rozdiel medzi funnelom a incidentom.
Každé odoslanie má svoju kreatívu
Uzol send_email bez kreatívy a predmetu nemožno publikovať. Správa so správnym predmetom a prázdnym telom je reálny spôsob zlyhania; tu je odmietnutá.
Každá premenná je známa
Merge premenné sa validujú pri publikovaní. {{frist_name}} je preklep, ktorý vidíte pri úprave, nie „Dobrý deň ,“ prichádzajúci do štyridsiatich tisíc schránok.
Potom si to nasimulujte
Preveďte skúšobný beh reálneho kontaktu celým grafom a prečítajte si prejdenú cestu a každú správu, ktorá by bola odoslaná, vrátane jej dňa. Nič neopustí budovu.
Nepohodlné prípady
Sedem vecí, ktoré rozbijú naivný engine
Každá z nich je test s deterministickými hodinami v pozadí, pretože každá rozbije implementáciu, ktorá vyzerá úplne správne, kým nestretne realitu.
- 1Funnel, ktorý sa loopuje sám do sebaLegitímne, bežné a v poriadku — pokiaľ cyklus obsahuje wait, na ktorom validátor trvá.
- 2Niekto sa odhlási počas behuSupresia sa kontroluje pri odoslaní, nie pri zaradení do fronty. Kontrola pri zaradení odošle poštu tým, ktorí odišli počas čakania.
- 3Funnel sa upraví, keď je vo vnútri desaťtisíc ľudíOni pokračujú vo verzii, do ktorej vstúpili, až do konca. Noví vstupujúci idú tou novou.
- 4Ten istý trigger sa spustí dvakrát za jednu sekunduJeden beh, pretože unikátnosť je index, nie kontrola nasledovaná insertom.
- 5Kontakt sa zmaže počas behuBeh končí. Vymazanie, po ktorom zostáva sekvencia adresovaná niekomu, nie je vymazanie.
- 6Čakanie prekračuje zmenu času„Tri dni o deviatej ráno“ znamená deviatu ráno na oboch stranách zmeny času.
- 7Worker je zabitý medzi odoslaním a posunomEfekty a posun sú jedna transakcia. Buď sa stali oba, alebo ani jeden.
Deterministické hodinyKaždý test rozbije presvedčivú implementáciu
Kampane sú tá druhá polovica
Lievik reaguje. Kampaň je jednorazové vysielanie: publikum, plán, obmedzenie rýchlosti a odoslanie. Je to vec iného tvaru a zámerne sa udržiava oddelená, namiesto toho, aby sa vydávala za lievik s jedným uzlom.
Bezpečnosť zaisťujú dve pravidlá. Publikum sa materializuje raz a odmieta bežať dvakrát — opätovné vyriešenie by potichu pridalo všetkých, kto sa pridal od začiatku odosielania, a index deduplikácie by to skryl tým, že zabráni duplicitám, ktoré sám vytvoril. A počítadlá sa prepočítavajú z udalostí doručenia, nikdy sa nezvyšujú na mieste, takže opakovaný webhook nemôže nafúkať report.
Čo použiť: ak sa to stane kvôli tomu, čo urobil človek, je to lievik. Ak sa to stane kvôli tomu, čo ste si v utorok rozhodli, je to kampaň. Prekvapivo veľa marketingovej automatizácie sa pokazí tým, že druhé sa núti do tvaru prvého.