Suppilot ja laukaisijat
Supilo on kaavio. Suoritus on rivi. Odotus on aika.
Se on koko malli, ja jokainen tämän tuotteen vaikea ominaisuus syntyy näistä kolmesta lauseesta. Niiden ansiosta elävän supilon muokkaaminen on turvallista. Niiden ansiosta uudelleenyritys ei voi lähettää kahta kertaa. Niiden ansiosta tiistaina listalta poistunut henkilö ei kuule mitään torstaina.
Mitä oikeasti tapahtuu, kun se suoritetaan
Supilon julkaiseminen kirjoittaa muuttumattoman version. Joku saapuu, ja rivi ilmestyy: yksi suoritus tälle kontaktille, kiinnitettynä kyseiseen versioon, sisältäen nykyisen solmun, herätysajan ja oman kontekstinsa.
Työprosessi vuokraa suoritukset, joiden herätysaika on kulunut, ja varaa ne SKIP LOCKED -mekanismilla, jotta kaksi työprosessia ei voi ottaa samaa. Se suorittaa solmuja, kunnes kohtaa odotuksen tai loppusolmun, kirjoittaa sitten seuraavan herätysajan ja luopuu suorituksesta.
Solmu on puhdas funktio suorituksesta, kontakista ja solmusta — ja sen vaikutukset vahvistetaan samassa transaktiossa kuin suorituksen etenemisen. Juuri tämä yksi ominaisuus tekee uudelleenyrityksestä turvallisen. Puolen sekunnin kohdalla "lähetä" ja "etene" tapetuksi työprosessi jättää jälkeensä joko molemmat tai kumpaakaan, ei koskaan vain toisen.
Ja koska sovellus toimittaa ajan tietokannan sijaan, nyt kirjoitettu rivi erääntyy nyt. Tietokannan kelloon oletuksena perustuva aikataulusarake ei ole vielä erääntynyt kirjoitushetkellään ja jää paitsi juuri siitä tikistä, joka loi sen — bugi, joka näyttää täysin viattomalta, kunnes viesti myöhästyy tunnilla.
- 1Vuokraus
wake_at <= now(),FOR UPDATE SKIP LOCKED. Jono ilman vuokrauksia lähettää kaksoisviestejä oletuksena. - 2SuoritusSolmut järjestyksessä, kunnes kohtaa odotuksen tai loppusolmun. Jokainen kirjoittaa askeleen: mitä päätti, mitä tuotti.
- 3VahvistaVaikutukset ja eteneminen yhdessä transaktiossa. Tämä on koko temppu.
- 4UniSeuraava
wake_atkirjoitetaan. Alavirtaan ei ole vielä rivejä, eikä niitä tarvita.
Yksi suoritus per kontakti per versio
Neljätoista laukaisijaa
Mikä voi käynnistää suorituksen
Osa näistä on asioita, jotka teet itse. Useimmat ovat asioita, joita asiakkaasi tekee tai jättää tekemättä — ja toiminnan puuttuminen on yhtä hyvä laukaisija kuin itse toiminto.
He saapuvat
form_submit, list_join, contact_created, tag_added ja segment_enter. Segmentti on elävä predikaatti, joten "siirtyy segmenttiin" kattaa jokaisen ilmaistavissa olevan "on muuttunut" — kolme tilausta, yhdeksänkymmentä päivää hiljaisuutta, kuluttaa yli kynnyksen.
He tekevät jotain
page_visit sivuston koodinpätkästä, message_opened, link_clicked, booking_made ja payment_made. Viestin avaaminen on itsessään tapahtuma kontaktille, joten yksi supilo voi odottaa reaktiota viimeisimpään lähettämäänsä asiaan.
Aika, tai sinä
date_field siirtymällä — syntymäpäivä, uusinta, "vuosi sitten", seitsemän päivää ennen tai kolme päivää jälkeen. schedule toistuvaan. manual ilmoitukseen, jonka lähetät, koska päätit niin.
Oma sovelluksesi
api_event on mukautettu tapahtuma, jonka lähetät omasta koodistasi omalla tunnisteellasi. Kaikki, mitä tuotteesi tietää, muuttuu laukaisijaksi: aktivoitui, kutsui kollegan, ylsi rajalle, perui, vietti ulos. Tämä on se, joka muuttaa sähköpostityökalun osaksi tuotettasi.
Uudelleenpääsy, päätetty kerran
Supilo joko sallii uudelleenpääsyn tai ei, ja tietokanta valvoo sitä: yksi suoritus per kontakti per supilo, ellei toisin sanottu. Sama laukaisija, joka laukeaa kahdesti samassa sekunnissa, ei voi vahingossa tuottaa kahta suoritusta.
Pääsyehdot
Laukaisija laukeaa, ja pääsymäärittely päättää, onko juuri tämä kontakti oikeutettu — segmenttipredikaatti oven edessä. Halvempi kuin ehtosolmu ensimmäisellä askeleella, ja pitää kaavion siitä, mitä tapahtuu, ei siitä, keneen päästetään sisään.

Neljätoista asiaa voi käynnistää sen. Kuusitoista asiaa voi tapahtua seuraavaksi.
Kuusitoista toimintoa ja seitsemän virtaussolmua
Mitä supilo voi tehdä, ja miten se päättää
Lähetä jotain
send_email, send_sms, send_push, send_letter — neljä kanavaa, yksi kaavio — sekä notify_team, kun ilmoitettava henkilö työskentelee sinulle.
Muuta kontaktia
add_tag, remove_tag, add_to_list, remove_from_list, set_field. Merkitseminen matkan varrella tekee seuraavan supilon segmentistä yksinkertaisen.
Ulottu ulos
http_request mihin tahansa haluat, create_payment omaan yhdistettyyn tiliisi, ja book_slot varausresurssiin. Maksaja pysyy sinun; kukaan ei tule asiakaksemme.
Siirry supilojen välillä
enter_funnel ja exit_funnel. Rakenna yksi tervetulosarja ja kutsu sitä neljästä paikasta sen sijaan, että ylläpitäisit neljää kappaletta, jotka ovat erkaantuneet toisistaan maaliskuuhun mennessä.
Luodaan lähetysajankohtana
ai_generate täyttää yhdistämismuuttujat jokaiselle yhteyshenkilölle, kuluttaa kiintiötäsi ja tallennetaan välimuistiin luovan sisällön ja yhteyshenkilön ominaisuustiivistelmän mukaan — muuten maksaisit jokaisesta vastaanottajasta joka kerta.
Odotus, haara, jako, yhdistys
wait ottaa keston, päivämäärän ja ajan, viikonpäivän ja kellonajan tai päivämääräkentän siirtymällä. condition on segmenttiehto, jolla on kyllä- ja ei-haara. split on A/B/n painoilla. join kokoaa haarat takaisin yhteen.
goal — se oikea ja tärkeä
Tavoite päättää sarjan jokaiselle, joka siihen saavuttaa. Hän varasi, osti, vastasi: loput sarjasta perutaan nimenomaan häneltä. Kukaan ei saa “kaipaamme sinua” -viestiä päivää sen jälkeen, kun palasi — ja juuri tämä solmu estää sen.
throttle ja quiet_hours
Throttle tasaa ryöpyn, jotta postilaatikko, jolla on matala lähetysraja, ei tulvita estolle asti. Hiljaiset tunnit pitävät viestin odottamassa sivistyneeseen kellonaikaan — sovellettuna viestitasolla, ei kopioituna jokaiseen haarakaavion haaraan.
Tarkistetaan ennen kuin se voi ajaa
Validoija kieltää samat asiat sinulta ja tekoälyltä
Kaavio tarkistetaan ennen julkaisua, eikä tarkistus ole pelkkä suositus. Koodipolku on sama, olipa suppilon piirtänyt ihminen tai luonut malli — ja se on ainoa syy, miksi luotuihin suppiloihin voi ylipäätään luottaa.
Täsmälleen yksi sisääntulo
Kaksi sisääntulosolmua on moniselitys, jota kukaan ei huomaa, ennen kuin väärä puolet listasta saa väärän sarjan.
Jokainen solmu on tavoitettavissa
Orpo haara on joko virhe tai viesti, jonka luulet lähtevän mutta joka ei lähde. Kummastakin kannattaa saada tietää.
Jokaisen syklin on sisällettävä odotus
Silmukka ilman odotusta on päättymätön silmukka, jonka keskellä lähetetään viesti. Tämä sääntö erottaa suppilon ja hälytystilanteen.
Jokaisella lähetyksellä on sisältönsä
send_email-solmua, jolla ei ole sisältöä ja aihetta, ei voi julkaista. Viesti, jolla on oikea aihe mutta tyhjä runko, on todellinen virhetilanne; se torjutaan tässä.
Jokainen muuttuja on tunnettu
Yhdistämismuuttujat validoidaan julkaisun yhteydessä. {{frist_name}} on kirjoitusvirhe, jonka näet muokatessa — et “Hei ,”, joka saapuu neljäänkymmentätuhatee postilaatikkoon.
Simuloi sitten
Aja oikea yhteyshenkilö kuivana ajona koko kaavion läpi ja lue takaisin kuljettu polku ja jokainen viesti, joka lähetettäisiin, päivämäärineen. Mikään ei lähde talosta ulos.
Hankalat tapaukset
Seitsemän asiaa, jotka rikkovat naiivin moottorin
Jokainen näistä on testi, jonka takana on deterministinen kello, koska jokainen niistä rikkoo toteutuksen, joka näyttää täysin oikealta, kunnes se kohtaa todellisuuden.
- 1Suppilo, joka silmukkaa itseensäLaillista, yleistä ja ihan ok — kunhan sykli sisältää odotuksen, mistä validoija pitää huolen.
- 2Joku peruuttaa tilauksensa kesken matkanEstot tarkistetaan lähetyksessä, ei jonoon lisäämisessä. Jonossa tarkistaminen postittaa nekin, jotka lähtivät odotuksen aikana.
- 3Suppiloa muokataan, kun sisällä on kymmenentuhatta ihmistäHe kulkevat loppuun asti sitä versiota, johon he tulivat. Uudet tulevat kulkevat uutta.
- 4Sama triggeri laukeaa kahdesti yhden sekunnin sisälläYksi ajo, koska yksilöllisyys on indeksi, ei tarkistus jota seuraa lisäys.
- 5Yhteyshenkilö poistetaan ajon aikanaAjo päättyy. Poisto, jonka jälkeen sarja on yhä osoitettu jollekulle, ei ole poisto.
- 6Odotus ulottuu kesäajan yli"Kolme päivää kello yhdeksän aamulla" tarkoittaa kello yhdeksää aamulla kummallakin puolella kellonaikojen vaihtoa.
- 7Työntekijä kuolee lähetyksen ja etenemisen välissäVaikutukset ja eteneminen ovat yksi transaktio. Joko molemmat tapahtuivat tai kumpikaan ei.
Deterministinen kelloJokainen testi rikkoo uskottavan toteutuksen
Kampanjat ovat toinen puoli
Suppilo reagoi. Kampanja on kertaluontoinen lähetys: yleisö, aikataulu, rajoitin ja lähetys. Se on eri muotoinen asia, ja se pidetään tarkoituksella erillään sen sijaan, että esitettäisiin suppilona, jossa on yksi solmu.
Kaksi sääntöä tekevät siitä turvallisen. Yleisö materialisoidaan kerran eikä se suostu ajamaan kahdesti — uudelleenratkaisu lisäisi huomaamatta kaikki, jotka olivat liittyneet lähetyksen aloittamisen jälkeen, ja deduplikointi-indeksi piilottaisi sen estämällä itse luomansa duplikaatit. Ja laskurit lasketaan uudelleen toimitustapahtumista, ei koskaan kasvateta paikallaan, joten uudelleenyritty webhook ei voi paisuttaa raporttia.
Kumpaa käyttää: jos se tapahtuu henkilön tekemän asian takia, se on suppilo. Jos se tapahtuu sinun tiistaina tekemäsi päätöksen takia, se on kampanja. Yllättävän paljon markkinoinnin automaatiota menee pieleen pakottamalla jälkimmäisen ensimmäisen muotoon.