clickSomo

Lijevki in sprožilci

Lijevk je graf. Zagon je vrstica. Čakanje je čas.

To je celoten model, in vsaka težka lastnost tega izdelka izhaja iz teh treh stavkov. Urejanje živega lijka je varno zaradi njih. Ponovni poskus ne more dvakrat poslati zaradi njih. Oseba, ki se odjavi v torek, v četrtek ne sliši ničesar zaradi njih.

Kaj se dejansko zgodi, ko se zažene

Objava lijaka zapiše nespremenljivo različico. Nekdo vstopi in pojavi se vrstica: en zagon, za ta kontakt, pripet na to različico, ki hrani trenutno vozlišče, čas prebujenja in svoj lasten kontekst.

Delavec si izposodi zagonе, katerih čas prebujenja je že potekel, in jih prevzame s SKIP LOCKED, tako da dva delavca ne moreta prevzeti istega. Izvaja vozlišča, dokler ne pride do čakanja ali končnega vozlišča, nato zapiše naslednji čas prebujenja in spusti.

Vozlišče je čista funkcija zagona, kontakta in vozlišča — in njegovi učinki se potrdijo v isti transakciji kot napredovanje zagona samega. Ta ena lastnost je tista, ki naredi ponovni poskus varen. Delavec, ubit v pol sekundi med »pošlji« in »napreduj«, pusti ali oboje ali nič, nikoli eno.

In ker aplikacija podaja čas namesto baze, je vrstica, zapisana zdaj, zapadla zdaj. Stolpec za razporejanje s privzeto vrednostjo iz ure baze v trenutku zapisa še ni zapadel in zamudi prav tikt, ki ga je ustvaril — napaka, ki ne izgleda kot nič, dokler sporočilo ne pride eno uro pozno.

En tikt delavcaIzvedba
  • 1Izposojawake_at <= now(), FOR UPDATE SKIP LOCKED. Vrsta brez izposoj dvakrat pošilja privzeto.
  • 2IzvedbaVozlišča po vrsti, dokler ne pride do čakanja ali končnega vozlišča. Vsako zapiše korak: kaj se je odločilo, kaj je oddalo.
  • 3UveljaviteUčinki in napredovanje, ena transakcija. To je celoten trik.
  • 4SpeZapisan naslednji wake_at. Nadaljnjih vrstic še ni, in nobena ni potrebna.

En zagon na kontakt na različico

Štirinajst sprožilcev

Kaj lahko zažene zagon

Nekatere od teh stvari storite vi. Večina jih stori vaša stranka, ali pa jih ne stori — in odsotnost dejanja je enako dober sprožilec kot dejanje samo.

Prihajajo

form_submit, list_join, contact_created, tag_added in segment_enter. Segment je živ predikat, zato »vstopi v segment« pokrije vsak »je postal«, ki ga lahko izrazite — tri naročila, devetdeset dni tišine, poraba nad pragom.

Naredijo nekaj

page_visit s strani spletnega odsevka, message_opened, link_clicked, booking_made in payment_made. Odprto sporočilo je samo po sebi dogodek na kontaktu, zato lahko en lijak čaka na odziv na zadnje, kar je poslal.

Čas, ali vi

date_field z odmikom — rojstni dan, obnova, »leto od takrat«, sedem dni pred ali tri dni po. schedule za ponavljajoče se. manual za napoved, ki jo pošljete, ker ste se tako odločili.

Vaša lastna aplikacija

api_event je dogodek po meri, ki ga objavite iz lastne kode s svojim žetonom. Vse, kar vaš izdelek ve, postane sprožilec: aktiviran, povabil sodelavca, dosegel omejitev, preklical, izvozil. To je tisti, ki iz orodja za pošiljanje sporočil naredi del vašega izdelka.

Ponovni vstop, odločen enkrat

Lijak je bodisi ponovno vstopen bodisi ni, in baza to zagotavlja: en zagon na kontakt na lijak, razen če ste rekli drugače. Isti sprožilec, ki se sproži dvakrat v isti sekundi, ne more po nesreči ustvariti dveh zagonov.

Pogoji vstopa

Sprožilec se zažene in specifikacija vstopa odloči, ali je ta konkretni kontakt upravičen — predikat segmenta pred vrati. Ceneje kot vozlišče pogoja na prvem koraku, in graf ostane o tem, kaj se zgodi, ne o tem, kdo sme noter.

Štirinajst stvari ga lahko zažene. Šestnajst stvari se lahko zgodi naprej.

Šestnajst dejanj in sedem vozlišč poteka

Kaj lahko lijak naredi in kako se odloča

Pošlji nekaj

send_email, send_sms, send_push, send_letter — štirje kanali, en graf — plus notify_team, ko oseba, ki jo je treba obvestiti, dela za vas.

Spremeni kontakt

add_tag, remove_tag, add_to_list, remove_from_list, set_field. Označevanje med potjo je tisto, kar naredi segment naslednjega lijaka preprost.

Dosezite navzven

http_request na karkoli želite, create_payment na vaš lasten povezani račun in book_slot na vir za rezervacije. Plačnik ostane vaš; nihče ne postane naša stranka.

Premikanje med lijaki

enter_funnel in exit_funnel. Zgradite eno dobrodošlico in jo pokličite s štirih mest, namesto da vzdržujete štiri kopije, ki do marca zdrsnejo narazen.

Ustvari ob času pošiljanja

ai_generate izpolni spremenljivke za spajanje za vsak kontakt, se šteje v vašo kvoto in se predpomni po zgoščenem vrednosti ustvarjalnega vsebine in atributov kontakta — sicer bi plačevali za vsakega prejemnika pri vsakem pošiljanju.

Čakanje, vejanje, razdelitev, združitev

wait sprejme trajanje, točen datum in čas, dan v tednu s časom ali polje datuma z odmikom. condition je predikat segmenta z veji da in ne. split je A/B/n z utežmi. join spet združi veje.

goal — tisti, ki šteje

Cilj konča potek za vsakogar, ki ga doseže. Rezervirali so, kupili, odgovorili: preostanek zaporedja se za njih prekliče. Nikomur ne pride »pogrešamo vas« dan po tem, ko se je vrnil — in to je vozlišče, ki to prepreči.

throttle in quiet_hours

Omejevalnik tempira izbruh, da nabiralnik z nizko omejitvijo hitrosti ne bo zasut v suspenz. Tihe ure zadržijo sporočilo do primerne ure — veljajo na ravni sporočila, ne da bi jih bilo treba kopirati v vsako vejo grafa.

Preverjeno, preden lahko teče

Preverjevalnik vam in UI istim stvarem ugovarja

Graf se preveri, preden ga je mogoče objaviti, in preverjanje ni le nasvet. Poteka po isti kodi, ne glede na to, ali je lijak narisal človek ali ga ustvaril model — in samo zato so ustvarjeni lijaki sploh zaupanja vredni.

Natanko en vstop

Dva vstopna vozlišča sta dvoumnost, ki je nihče ne opazi, dokler napačna polovica seznama ne dobi napačnega zaporedja.

Vsako vozlišče dosegljivo

Osirojena veja je bodisi napaka bodisi sporočilo, za katerega mislite, da gre ven, a ne gre. Oboje je vredno, da vam je povedano.

Cikel mora vsebovati čakanje

Zanka brez čakanja je neskončna zanka s pošiljanjem v sredini. To pravilo je razlika med lijakom in incidentom.

Vsako pošiljanje ima svojo vsebino

Vozlišča send_email brez vsebine in zadeve ni mogoče objaviti. Sporočilo s pravo zadevo in praznim telesom je resničen način odpovedi; tu se zavrne.

Vsaka spremenljivka je znana

Spremenljivke za spajanje se preverijo ob objavi. {{frist_name}} je tipkarska napaka, ki jo vidite med urejanjem, ne »Pozdravljeni ,«, ki prispe v štirideset tisoč nabiralnikov.

Nato jo simulirajte

Izvedite poskusni tek pravega kontakta skozi celoten graf in preberite pot ter vsako sporočilo, ki bi bilo poslano, z njegovim dnem. Nič ne zapusti stavbe.

Neprijetni primeri

Sedem stvari, ki pokvarijo naivni pogon

Vsaka od teh je test z določeno uro v ozadju, ker vsaka pokvari izvedbo, ki je videti popolnoma pravilna, dokler ne sreča resničnosti.

Pred čim je pogon testiranOvržba
  • 1Lijak, ki se zapelje vaseZakonito, pogosto in v redu — pod pogojem, da cikel vsebuje čakanje, kar preverjevalnik zahteva.
  • 2Nekdo se odjavi med potekomIzključitev se preveri ob pošiljanju, ne ob vstavljanju v vrsto. Preverjanje ob vstavljanju pošlje pošto tistim, ki so odšli med čakanjem.
  • 3Lijak se uredi, ko je znotraj deset tisoč ljudiTi nadaljujejo po različici, v katero so vstopili, do konca. Novi vstopajoči hodijo po novi.
  • 4Isti sprožilec se sproži dvakrat v eni sekundiEn potek, ker je edinstvenost indeks in ne preverjanje, ki mu sledi vstavljanje.
  • 5Kontakt se izbriše med potekomPotek se konča. Izbris, po katerem zaporedje še vedno naslavlja nekoga, ni izbris.
  • 6Čakanje prečka spremembo časa»Trije dnevi ob devih zjutraj« pomeni devih zjutraj na obeh straneh spremembe ure.
  • 7Delavec umre med pošiljanjem in napredovanjemUčinki in napredovanje so ena transakcija. Zgodila sta se bodisi oba bodisi noben.

Deterministična uraVsak test pokvari verjetno implementacijo

Kampanje so druga polovica

Lijak reagira. Kampanja je enkratna oddaja: občinstvo, urnik, omejitev hitrosti in pošiljanje. To je drugačna oblika stvari in je namenoma ločena, namesto da bi se pretvarjala, da je lijak z enim vozliščem.

Varnost zagotavljata dve pravili. Občinstvo se materializira enkrat in zavrni ponovni zagon — ponovna razrešitev bi tiho dodala vse, ki so se pridružili od začetka pošiljanja, a bi to skril indeks za odstranjevanje podvojenih, ker bi preprečil podvojitve, ki jih je sam ustvaril. Števci pa se preračunajo iz dogodkov dostave, nikoli ne se povečajo na mestu, tako da ponovljen webhook ne more napihniti poročila.

Kdaj uporabiti kaj: če se zgodi zaradi nečesa, kar je oseba storila, je to lijak. Če se zgodi zaradi odločitve, ki ste jo sprejeli v torek, je to kampanja. Presenetljivo veliko tržne avtomatizacije gre narobe, ker drugo prisili v obliko prvega.