clickSomo

Tregters & snellers

'n Tregter is 'n grafiek. 'n Lopie is 'n ry. 'n Wagtyd is 'n tyd.

Dis die hele model, en elke moeilike eienskap wat hierdie produk het, kom uit daardie drie sinne. Om 'n lewendige tregter te redigeer is veilig as gevolg daarvan. 'n Herprobeer kan nie dubbel stuur nie as gevolg daarvan. 'n Persoon wat Dinsdag uitklik, hoor Donderdag niks as gevolg daarvan nie.

Wat werklik gebeur wanneer dit loop

Die publisering van 'n funnel skryf 'n onveranderlike weergawe. Iemand kom binne, en 'n ry verskyn: een lopie, vir hierdie kontak, vasgepen aan daardie weergawe, met die huidige knoop, 'n wakkerwordtyd en sy eie konteks.

'n Werker huur die lopies wie se wakkerwordtyd verstryk het, en eis hulle op met SKIP LOCKED sodat twee werkers nie dieselfde een kan neem nie. Dit voer knope uit totdat dit by 'n wag of 'n terminale knoop kom, skryf dan die volgende wakkerwordtyd en laat los.

'n Knoop is 'n pure funksie van die lopie, die kontak en die knoop — en sy effekte word in dieselfde transaksie as die lopie se eie vordering deurgevoer. Daardie enkele eienskap is wat 'n herprobeer veilig maak. 'n Werker wat in die halwe sekonde tussen "stuur" en "vorder" doodgaan, laat óf albei óf niks oor, nooit net een nie.

En omdat die toepassing die tyd verskaf eerder as die databasis, is 'n ry wat nou geskryf word nou verskuldig. 'n Skeduleringskolom wat na die databasis se klok verstek, is op die oomblik van skryf nog nie verskuldig nie en mis presies die tik wat dit geskep het — 'n fout wat lyk soos niks totdat 'n boodskap 'n uur te laat is nie.

Een tik van die werkerUitvoering
  • 1Huurwake_at <= now(), FOR UPDATE SKIP LOCKED. 'n Waglys sonder huurkontrakte stuur by verstek dubbel.
  • 2Voer uitKnope in volgorde totdat 'n wag of 'n terminale knoop kom. Elkeen skryf 'n stap: wat dit besluit het, wat dit uitgestuur het.
  • 3DeurvoerEffekte en vordering, een transaksie. Dit is die hele kunsgreep.
  • 4SlaapVolgende wake_at geskryf. Daar bestaan nog geen afstammelike rye nie, en geen is nodig nie.

Een lopie per kontak per weergawe

Veertien snellers

Wat 'n lopie kan begin

Sommige hiervan is dinge wat jy doen. Die meeste is dinge wat jou kliënt doen, of nie doen nie — en die afwesigheid van 'n aksie is net so 'n goeie sneller as die aksie self.

Hulle kom aan

form_submit, list_join, contact_created, tag_added en segment_enter. 'n Segment is 'n lewende predikaat, dus dek "betree die segment" elke "het geword" wat jy kan uitdruk — drie bestellings, negentig dae stil, spandeer bo 'n drempel.

Hulle doen iets

page_visit vanaf die webwerf-snippet, message_opened, link_clicked, booking_made en payment_made. Dat 'n boodskap oopgemaak word, is self 'n gebeurtenis op die kontak, dus kan een funnel wag vir 'n reaksie op die laaste ding wat dit gestuur het.

Tyd, of jy

date_field met 'n verskuiwing — 'n verjaardag, 'n hernuwing, "'n jaar sedert", sewe dae voor of drie dae na. schedule vir die herhalende een. manual vir die aankondiging wat jy stuur omdat jy so besluit het.

Jou eie toepassing

api_event is 'n pasgemaakte gebeurtenis wat jy uit jou eie kode met jou eie token plaas. Enigiets wat jou produk weet, word 'n sneller: geaktiveer, 'n kollega genooi, die limiet getref, gekanselleer, uitgevoer. Dit is die een wat 'n posgereedskap in deel van jou produk omskep.

Herintrede, een keer besluit

'n Funnel is óf herintreebaar óf nie, en die databasis dwing dit af: een lopie per kontak per funnel tensy jy anders gesê het. Dieselfde sneller wat twee keer in dieselfde sekonde vuur, kan nie per ongeluk twee lopies lewer nie.

Intreevoorwaardes

'n Sneller vuur en die intreespesifikasie besluit of hierdie spesifieke kontak in aanmerking kom — 'n segmentpredikaat voor die deur. Goedkoper as 'n voorwaardeknoop op die eerste stap, en dit hou die grafiek oor wat gebeur eerder as oor wie toegelaat word.

Veertien dinge kan dit begin. Sestien dinge kan daarna gebeur.

Sestien aksies en sewe vloeiknope

Wat 'n funnel kan doen, en hoe dit besluit

Stuur iets

send_email, send_sms, send_push, send_letter — vier kanale, een grafiek — plus notify_team wanneer die persoon wat vertel moet word vir jou werk.

Verander die kontak

add_tag, remove_tag, add_to_list, remove_from_list, set_field. Om iemand onderweg te merk, is wat die volgende funnel se segment eenvoudig maak.

Reik buite uit

http_request na enigiets wat jy wil, create_payment teen jou eie gekoppelde rekening, en book_slot teen 'n bespreekingshulpbron. Die betaler bly joune; niemand word ons kliënt nie.

Beweeg tussen funnels

enter_funnel en exit_funnel. Bou een verwelkomingsreeks en roep dit van vier plekke af, eerder as om vier kopieë te onderhou wat teen Maart uitmekaar dryf.

Genereer by stuurtyd

ai_generate vul samesmeltingsveranderlikes per kontak, word teen jou kwota gemeet en gekas volgens kreatief- en kontakkenmerk-hash — anders sou jy per ontvanger betaal by elke enkele uitstuur.

Wag, tak, splits, saamvoeg

wait neem 'n duur, 'n datumtyd, 'n weeksdag en tyd, of 'n datumveld met 'n verskuiwing. condition is 'n segmentpredikaat met 'n ja en 'n nee. split is A/B/n met gewigte. join bring takke weer saam.

goal — die een wat saak maak

'n Doel beëindig die lopie vir enigiemand wat dit bereik. Hulle het bespreek, gekoop, geantwoord: die res van die reeks word spesifiek vir hulle gekanselleer. Niemand kry "ons mis jou" die dag nadat hulle teruggekom het nie, en dit is die knoop wat dit voorkom.

throttle en quiet_hours

Throttle temporeer 'n uitbarsting sodat 'n posbus met 'n lae tempo-limiet nie tot skorsing gepors word nie. Quiet hours hou 'n boodskap vas tot 'n beskaafde tyd — toegepas op die boodskaplaag, nie in elke tak van die grafiek gekopieer nie.

Gekontroleer voordat dit kan loop

Die valideerder weier dieselfde dinge vir jou en vir die KI

'n Grafiek word gekontroleer voordat dit gepubliseer kan word, en die kontrole is nie raadgewend nie. Dit is dieselfde kodepad of 'n persoon die tregter geteken het of 'n model dit gegenereer het, en dit is die enigste rede hoekom gegenereerde tregters enigsens betroubaar is.

Presies een ingang

Twee ingangsknope is 'n dubbelsinnigheid wat niemand opmerk tot die verkeerde helfte van 'n lys die verkeerde reeks kry nie.

Elke knoop bereikbaar

'n Verweesde tak is óf 'n fout óf 'n boodskap wat jy dink uitgaan en nie uitgaan nie. Albei is die moeite werd om van te hoor.

'n Siklus moet 'n wag bevat

'n Lus sonder 'n wag daarin is 'n oneindige lus met 'n uitstuur in die middel. Hierdie reël is die verskil tussen 'n tregter en 'n voorval.

Elke uitstuur het sy kreatief

'n send_email-knoop sonder 'n kreatief en 'n onderwerp kan nie gepubliseer word nie. Die boodskap met die regte onderwerp en 'n leë liggaam is 'n werklike faalmodus; dit word hier geweier.

Elke veranderlike is bekend

Samesmeltingsveranderlikes word by publikasie gevalideer. {{frist_name}} is 'n tikfout wat jy sien terwyl jy redigeer, nie "Hallo ," wat in veertigduisend posbusse aankom nie.

Simuleer dit dan

Doen 'n toetsloop van 'n werklike kontak deur die hele grafiek en lees die gevolgde pad terug en elke boodskap wat gestuur sou word, met sy dag. Niks verlaat die gebou nie.

Die ongemaklike gevalle

Sewe dinge wat 'n naïewe enjin breek

Elkeen hiervan is 'n toets met 'n deterministiese horlosie daaragter, want elkeen breek 'n implementering wat perfek korrek lyk totdat dit werklikheid ontmoet.

Waarteen die enjin getoets wordWeerlegging
  • 1'n Tregter wat in homself loopWettig, algemeen en heeltemal reg — mits die siklus 'n wag bevat, waarop die valideerder aandring.
  • 2Iemand teken uit middel-in-die-lug uitOnderdrukking word by uitstuur gekontroleer, nie by inkolwing nie. Kontrole by inkolwing pos die mense wat tydens die wag uitgeteken het.
  • 3Die tregter word geredigeer met tienduisend mense daarinHulle loop voort op die weergawe waarop hulle ingestap het, tot die einde. Nuwe intreders loop die nuwe een.
  • 4Dieselfde sneller vuur twee keer in een sekondeEen lopie, want uniekheid is 'n indeks eerder as 'n kontrole gevolg deur 'n invoeging.
  • 5'n Kontak word middel-in-die-lopie uitgeveeDie lopie eindig. 'n Uitwissing wat 'n reeks laat wat nog aan iemand geadresseer is, is nie 'n uitwissing nie.
  • 6'n Wag strek oor 'n dagligtyd-verandering"Drie dae om nege uur die oggend" beteken nege uur die oggend aan albei kante van die horlosieverandering.
  • 7'n Werker word gedood tussen uitstuur en vorderingEffekte en voorskuiwing is een transaksie. Of albei het gebeur, of geen van albei.

Deterministiese horlosieElke toets breek 'n aanneemlike implementering

Veldtogte is die ander helfte

'n Trechter reageer. 'n Veldtog is die eenmalige uitsending: 'n gehoor, 'n skedule, 'n versneller en 'n sending. Dit is 'n ander vorm van ding en word doelbewus apart gehou, in plaas daarvan om voor te gee dat dit 'n trechter met een knoop is.

Twee reëls maak dit veilig. 'n Gehoor word een keer gerealiseer en weier om twee keer te loop — heroplossing sou stilweg almal byvoeg wat aangesluit het sedert die sending begin het, en die ontdubbelingsindeks sou dit wegsteek deur die duplikate wat dit geskep het te verhoed. En tellers word herbereken uit afleweringgebeurtenisse, nooit in plek verhoog nie, sodat 'n herhaalde webhook nie 'n verslag kan opblaas nie.

Watter een om te gebruik: as dit gebeur as gevolg van iets wat die persoon gedoen het, is dit 'n trechter. As dit gebeur as gevolg van iets wat jy op 'n Dinsdag besluit het, is dit 'n veldtog. 'n Verrassende hoeveelheid bemarkingsoutomasie gaan verkeerd deur die tweede in die vorm van die eerste te dwing.