clickSomo

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.

Yksi työprosessin tikitysToteutus
  • 1Vuokrauswake_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_at kirjoitetaan. 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ämis­muuttujat jokaiselle yhteyshenkilölle, kuluttaa kiintiötäsi ja tallennetaan välimuistiin luovan sisällön ja yhteyshenkilön ominaisuus­tiivistelmä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.

Mihin moottoria testataanFalsifiointi
  • 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.