clickSomo

Funneli i okidači

Funnel je graf. Pokretanje je red. Čekanje je vrijeme.

To je cijeli model, i svako teško svojstvo ovog proizvoda proizlazi iz te tri rečenice. Uređivanje živog funnela je sigurno zbog njih. Ponovni pokušaj ne može dvostruko poslati zbog njih. Osoba koja se odjavila u utorak ne čuje ništa u četvrtak zbog njih.

Šta se zapravo dešava kada se pokrene

Objavljivanje funnela zapisuje nemjenjivu verziju. Neko uđe, i pojavi se red: jedan run, za ovaj kontakt, vezan za tu verziju, koji drži trenutni čvor, vrijeme buđenja i svoj sopstveni kontekst.

Worker iznajmljuje runove čije je vrijeme buđenja prošlo, preuzimajući ih sa SKIP LOCKED tako da dva workera ne mogu uzeti isti. Izvršava čvorove dok ne dođe do čekanja ili terminala, zatim zapisuje sljedeće vrijeme buđenja i otpušta ga.

Čvor je čista funkcija runa, kontakta i čvora — a njegovi efekti se potvrđuju u istoj transakciji kao i sam napredak runa. Upravo ta osobina čini ponovni pokušaj sigurnim. Worker ubijen u pola sekunde između „pošalji“ i „napreduj“ ostavlja ili oba ili ništa, nikada jedno.

A pošto aplikacija dostavlja vrijeme umjesto baze podataka, red zapisan sada dospijeva sada. Kolona za zakazivanje koja podrazumijevano koristi sat baze podataka u trenutku zapisivanja još nije dospjela i propušta upravo onaj tik koji ju je stvorio — greška koja ne liči ni na šta dok poruka ne zakasni sat vremena.

Jedan tik workeraIzvršenje
  • 1Zakupwake_at <= now(), FOR UPDATE SKIP LOCKED. Red bez zakupa duplo šalje po defaultu.
  • 2IzvršavanjeČvorovi redom dok ne dođe do čekanja ili terminala. Svaki zapisuje korak: šta je odlučio, šta je emitovao.
  • 3PotvrditeEfekti i napredak, jedna transakcija. U tome je cijeli trik.
  • 4SpavanjeZapisuje se sljedeći wake_at. Nema još downstream redova, i nijedan nije potreban.

Jedan run po kontaktu po verziji

Četrnaest okidača

Šta može pokrenuti run

Neki od njih su stvari koje vi uradite. Većina su stvari koje vaš kupac uradi, ili ne uradi — i odsustvo radnje je jednako dobar okidač kao i sama radnja.

Dolaze

form_submit, list_join, contact_created, tag_added i segment_enter. Segment je živi predikat, pa „ulazi u segment“ pokriva svako „je postao“ koje možete izraziti — tri narudžbe, devedeset dana tišine, potrošnja iznad praga.

Nešto urade

page_visit sa isječka sajta, message_opened, link_clicked, booking_made i payment_made. Otvaranje poruke je samo po sebi događaj na kontaktu, pa jedan funnel može čekati reakciju na posljednje što je poslao.

Vrijeme, ili vi

date_field sa pomjeranjem — rođendan, obnova, „godina od“, sedam dana prije ili tri dana poslije. schedule za ponavljajući. manual za najavu koju šaljete jer ste tako odlučili.

Vaša sopstvena aplikacija

api_event je prilagođeni događaj koji objavljujete iz svog koda sa svojim tokenom. Sve što vaš proizvod zna postaje okidač: aktiviran, pozvao kolegu, pogodio limit, otkazao, izvezao. To je ono što alat za slanje pošte pretvara u dio vašeg proizvoda.

Ponovni ulaz, odlučen jednom

Funnel je ili ponovo-ulazan ili nije, i baza podataka to nameće: jedan run po kontaktu po funnelu, osim ako ste rekli drugačije. Isti okidač koji se aktivira dva puta u istoj sekundi ne može slučajno proizvesti dva runa.

Uslovi ulaska

Okidač se aktivira i specifikacija ulaza odlučuje da li je ovaj konkretan kontakt podoban — predikat segmenta pred vratima. Jeftinije od čvora uslova na prvom koraku, i drži graf fokusiranim na to šta se dešava, a ne na to kome je dozvoljen ulaz.

Četrnaest stvari ga može pokrenuti. Šesnaest stvari se može desiti dalje.

Šesnaest akcija i sedam čvorova toka

Šta funnel može, i kako odlučuje

Pošaljite nešto

send_email, send_sms, send_push, send_letter — četiri kanala, jedan graf — plus notify_team kada osoba koju treba obavijestiti radi za vas.

Promijenite kontakt

add_tag, remove_tag, add_to_list, remove_from_list, set_field. Označavanje nekoga u toku je ono što čini segment sljedećeg funnela jednostavnim.

Dohvatite se van

http_request na bilo šta, create_payment na vaš povezani račun, i book_slot na resurs za rezervacije. Plaćač ostaje vaš; niko ne postaje naš kupac.

Kretanje između funnela

enter_funnel i exit_funnel. Napravite jednu dobrodošlicu i pozovite je iz četiri mjesta, umjesto da održavate četiri kopije koje se do marta razilaze.

Generišite u trenutku slanja

ai_generate popunjava varijable spajanja po kontaktu, mjeri se protiv vaše kvote i kešira po hešu kreativnog i atributa kontakta — inače biste plaćali po primaocu pri svakom slanju.

Čekanje, grananje, dijeljenje, spajanje

wait prima trajanje, datum i vrijeme, dan u sedmici i vrijeme, ili polje datuma s pomakom. condition je predikat segmenta s granama da i ne. split je A/B/n s težinama. join ponovo spaja grane.

goal — ono što je bitno

Cilj završava izvođenje za svakoga ko ga dostigne. Rezervisali su, kupili su, odgovorili su: ostatak sekvence se otkazuje upravo njima. Niko ne dobija "nedostajete nam" dan nakon što se vratio, i ovo je čvor koji to sprječava.

throttle i quiet_hours

Throttle reguliše talas da poštansko sanduče s niskim limitom brzine ne bude zasuto do suspenzije. Tihi sati zadržavaju poruku do pristojnog vremena — primjenjuje se na nivou poruke, ne kopira u svaku granu grafa.

Provjerava se prije pokretanja

Validator odbija iste stvari za vas i za AI

Graf se provjerava prije objavljivanja, i provjera nije savjetodavna. To je isti put koda bez obzira da li je lijevak nacrtao čovjek ili ga generisao model — i to je jedini razlog zašto su generisani levci uopšte pouzdani.

Tačno jedan ulaz

Dva ulazna čvora su dvosmislenost koju niko ne primijeti dok pogrešna polovina liste ne dobije pogrešnu sekvencu.

Svaki čvor je dostižan

Izolovana grana je ili greška ili poruka za koju mislite da ide, a ne ide. Oboje vrijedi da vam se saopšti.

Svaki ciklus mora sadržavati čekanje

Petlja bez čekanja je beskonačna petlja sa slanjem u sredini. Ovo pravilo je razlika između levka i incidenta.

Svako slanje ima svoj kreativ

Čvor send_email bez kreativnog i predmeta ne može se objaviti. Poruka s ispravnim predmetom i praznim tijelom je stvaran oblik kvara; ovdje se odbija.

Svaka varijabla je poznata

Varijable spajanja se validiraju pri objavi. {{frist_name}} je greška u kucanju koju vidite dok uređujete, a ne "Poštovani ," koji stiže u četrdeset hiljada sandučića.

Zatim je simulirajte

Pokrenite probni prolaz stvarnog kontakta kroz cijeli graf i pročitajte pređeni put i svaku poruku koja bi bila poslana, s njenim danom. Ništa ne izlazi iz sistema.

Neugodni slučajevi

Sedam stvari koje lome naivni motor

Svaka od njih je test s determinističkim satom u pozadini, jer svaka lomi implementaciju koja izgleda savršeno ispravno dok ne susretne stvarnost.

Na šta se motor testiraFalsifikacija
  • 1Levak koji se petlja u samog sebeLegitimno, uobičajeno i u redu — pod uslovom da ciklus sadrži čekanje, na čemu validator inzistira.
  • 2Neko se odjavi u toku izvođenjaIsključenje se provjerava pri slanju, ne pri stavljanju u red. Provjera pri stavljanju u red šalje poštu ljudima koji su otišli tokom čekanja.
  • 3Levak se uređuje dok je u njemu deset hiljada ljudiOni nastavljaju verzijom na koju su ušli, do kraja. Novi učesnici idu novom.
  • 4Isti okidač se aktivira dva puta u jednoj sekundiJedno izvođenje, jer je jedinstvenost indeks, a ne provjera pa umetanje.
  • 5Kontakt se obriše u toku izvođenjaIzvođenje se završava. Brisanje koje ostavlja sekvencu i dalje adresiranu na nekoga nije brisanje.
  • 6Čekanje prelazi preko promjene vremena"Tri dana u devet ujutro" znači devet ujutro s obje strane promjene sata.
  • 7Radnik bude ubijen između slanja i napredovanjaEfekat i avans su jedna transakcija. Ili su se oboje desili, ili nijedno.

Deterministički satSvaki test razbija vjerovatnu implementaciju

Kampanje su druga polovina

Lijevka reaguje. Kampanja je jednokratno emitovanje: publika, raspored, ograničenje i slanje. To je oblik stvari druge vrste i namjerno se drži odvojeno, umjesto da se pretvara da je lijevka s jednim čvorom.

Dva pravila to čine sigurnim. Publika se materijalizuje jednom i odbija da se pokrene dvaput — ponovno razrješavanje bi tiho dodalo sve koji su se pridružili od početka slanja, a indeks za deduplikaciju bi to sakrio sprečavajući duplikate koje je sam stvorio. A brojači se preračunavaju iz događaja isporuke, nikad ne povećavaju na mjestu, tako da ponovljeni webhook ne može napuhati izvještaj.

Koje koristiti: ako se dešava zbog nečega što je osoba učinila, to je lijevka. Ako se dešava zbog nečega što ste odlučili u utorak, to je kampanja. Zapanjujuća količina marketing automatizacije krene naopako prisiljavajući drugo u oblik prvog.