clickSomo

Funnels i okidači

Funnel je graf. Izvođenje je redak. Čekanje je vrijeme.

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

Što se zapravo događa kada se pokrene

Objavljivanje funnela zapisuje nepromjenjivu verziju. Netko uđe i pojavljuje se red: jedan run, za ovaj kontakt, povezan s tom verzijom, koji drži trenutni čvor, vrijeme buđenja i vlastiti kontekst.

Radnik zakupljuje runove čije je vrijeme buđenja prošlo, preuzimajući ih s SKIP LOCKED tako da dva radnika ne mogu uzeti isti. Izvršava čvorove dok ne dođe do čekanja ili završnog čvora, zatim zapisuje sljedeće vrijeme buđenja i pušta ga.

Čvor je čista funkcija runa, kontakta i čvora — a njegovi se učinci potvrđuju u istoj transakciji kao i sam napredak runa. To jedno svojstvo je ono što čini ponovni pokušaj sigurnim. Radnik ubijen u pola sekunde između „pošalji" i „naprijed" ostavlja ili oba ili nijedno, nikad jedno.

A budući da aplikacija daje vrijeme umjesto baze podataka, red zapisan sada dospijeva sada. Stupac za raspored koji se po defaultu temelji na satu baze podataka još nije dospio u trenutku zapisivanja i propušta upravo onaj otkucaj koji ga je stvorio — greška koja ne izgleda kao ništa dok poruka ne kasni sat vremena.

Jedan otkucaj radnikaIzvedba
  • 1Zakupwake_at <= now(), FOR UPDATE SKIP LOCKED. Red bez zakupa po defaultu šalje dvaput.
  • 2IzvršavanjeČvorovi redom dok ne dođe do čekanja ili završnog čvora. Svaki zapisuje korak: što je odlučio, što je emitirao.
  • 3PredajaUčinci i napredak, jedna transakcija. To je cijeli trik.
  • 4SpavanjeZapisuje se sljedeći wake_at. Nema još downstream redova, i ne treba ih biti.

Jedan run po kontaktu po verziji

Četrnaest okidača

Što može pokrenuti run

Neki od njih su stvari koje Vi radite. Većina su stvari koje Vaš klijent radi, ili ne radi — i odsutnost radnje jednako je 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 „postao je" koje možete izraziti — tri narudžbe, devedeset dana tišine, potrošnja iznad praga.

Nešto poduzmu

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

Vrijeme, ili Vi

date_field s pomakom — 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 vlastita aplikacija

api_event je prilagođeni događaj koji objavljujete iz vlastitog koda s vlastitim tokenom. Sve što Vaš proizvod zna postaje okidač: aktiviran, pozvao kolegu, dosegnuo ograničenje, otkazao, izvezo. To je ono što alat za slanje pošte pretvara u dio Vašeg proizvoda.

Ponovni ulazak, odlučeno jednom

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

Uvjeti ulaska

Okidač se aktivira i specifikacija ulaska odlučuje je li ovaj konkretan kontakt podoban — segmentni predikat pred vratima. Jeftinije od čvora uvjeta na prvom koraku, i drži graf usmjeren na ono što se događa, a ne na to tko smije ući.

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

Šesnaest akcija i sedam čvorova toka

Što funnel može učiniti i kako odlučuje

Poslati 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.

Promijeniti kontakt

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

Dosegnuti vanjsko

http_request na što god želite, create_payment na Vaš vlastiti povezani račun, i book_slot na resurs za rezervacije. Platitelj ostaje Vaš; nitko ne postaje naš klijent.

Kretanje između funnela

enter_funnel i exit_funnel. Izgradite jednu dobrodošlicu i pozovite je s četiri mjesta, umjesto da održavate četiri kopije koje se do ožujka razilaze.

Generiraj u trenutku slanja

ai_generate popunjava varijable spajanja po kontaktu, naplaćuje se prema vašoj kvoti i predmemorira po hashu kreativnog sadržaja i atributa kontakta — inače biste plaćali po primatelju pri svakom pojedinačnom slanju.

Čekaj, granaj, podijeli, spoji

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

goal — onaj koji je važan

Cilj završava izvođenje za svakoga tko ga dostigne. Rezervirali su, kupili su, odgovorili su: ostatak niza otkazuje se upravo za njih. Nitko ne dobiva „nedostajete nam

throttle i quiet_hours

Throttle usporava nalet kako poštanski sandučić s niskim ograničenjem brzine ne bi bio zasipan pa obustavljen. Quiet hours zadržavaju poruku do pristojnog vremena — primjenjuje se na razini poruke, a ne kopira u svaku granu grafa.

Provjereno prije nego što može raditi

Validator odbija iste stvari za vas i za AI

Graf se provjerava prije nego što se može objaviti, i provjera nije samo savjet. To je isti put koda bez obzira je li lijevak nacrtao čovjek ili ga generirao model, i upravo je to jedini razlog zašto generiranim lijevcima uopće možemo vjerovati.

Točno jedan ulaz

Dva ulazna čvora dvosmislenost su koje nitko ne primijeti dok pogrešna polovica liste ne dobije pogrešan slijed.

Svaki čvor dostižan

Izolirana grana je ili pogreška ili poruka za koju mislite da ide, a ne ide. Oboje vrijedi saznati.

Ciklus mora sadržavati čekanje

Petlja bez čekanja unutra jest beskonačna petlja sa slanjem usred nje. To je pravilo koje razlikuje lijevak od incidenta.

Svako slanje ima svoj kreativni sadržaj

send_email čvor bez kreativnog sadržaja i predmeta ne može se objaviti. Poruka s ispravnim predmetom i praznim tijelom stvarni je oblik pogreške; ovdje se odbija.

Svaka varijabla poznata

Varijable za spajanje provjeravaju se pri objavi. {{frist_name}} pogreška u kucanju koju vidite dok uređujete, a ne „Poštovani ," što stiže u četrdeset tisuća sandučića.

Zatim je simulirajte

Pokrenite suho stvarni kontakt kroz cijeli graf i pročitajte zauzeti put i svaku poruku koja bi bila poslana, s njezinim danom. Ništa ne izlazi iz sustava.

Nezgodni slučajevi

Sedam stvari koje rušeiv naivni motor

Svaka od njih je test s determinističkim satom iza sebe, jer svaka ruši implementaciju koja izgleda posve ispravno dok ne susretne stvarnost.

Na što je motor testiranFalsifikacija
  • 1Lijevak koji se petlja u samoga sebeLegitimno, uobičajeno i u redu — pod uvjetom da ciklus sadrži čekanje, na čemu validator inzistira.
  • 2Netko se odjavi usred tijekaZabrana se provjerava pri slanju, a ne pri stavljanju u red. Provjera pri stavljanju u red pošalje poštu ljudima koji su otišli tijekom čekanja.
  • 3Lijevak se uređuje dok je unutra deset tisuća ljudiNastavljaju hodati verzijom koju su unijeli, do kraja. Novi korisnici hodaju novom.
  • 4Isti okidač se aktivira dva puta u jednoj sekundiJedno pokretanje, jer je jedinstvenost indeks, a ne provjera kojoj slijedi umetanje.
  • 5Kontakt se izbriše usred pokretanjaPokretanje završava. Brisanje koje ostavlja niz koji je i dalje upućen nekome nije brisanje.
  • 6Čekanje obuhvaća promjenu prelaska na ljetno/zimsko vrijeme"Tri dana u devet ujutro" znači devet ujutro na obje strane promjene vremena.
  • 7Radnik umire između slanja i napredovanjaUčinci i napredovanje jedna su transakcija. Ili su se oboje dogodili ili nijedno.

Deterministički satSvaki test razbija vjerodostojnu implementaciju

Kampanje su druga polovica

Lijevka reagira. Kampanja je jednokratno emitiranje: 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 materializira jednom i odbija raditi dvaput — ponovno razrješivanje bi tiho dodalo sve koji su se pridružili od početka slanja, a indeks za uklanjanje duplikata bi to sakrio sprječavajući duplikate koje je sam stvorio. A brojači se preračunavaju iz događaja dostave, nikad ne povećavaju na mjestu, pa ponovljeni webhook ne može napuhati izvještaj.

Koje koristiti: ako se događa zbog nečega što je osoba učinila, to je lijevka. Ako se događa zbog nečega što ste odlučili u utorak, to je kampanja. Zapanjujuća količina marketinške automatizacije krene krivo prisiljavanjem drugoga u oblik prvoga.