Левци и окидачи
Левак је граф. Покретање је ред. Чекање је време.
То је цео модел, и свака тешка особина овог производа произилази из тих три реченице. Захваљујући њима је уређивање живог фунела безбедно. Захваљујући њима покушај поново не може двапут да пошаље. Захваљујући њима особа која се одјави у уторак не чује ништа у четвртак.
Шта се стварно дешава када се покрене
Објављивање фунела уписује непроменљиву верзију. Неко уђе и појави се ред: један ток, за овај контакт, везан за ту верзију, који садржи тренутни чвор, време буђења и свој контекст.
Радник изнајмљује токове чије је време буђења прошло, и преузима их са SKIP LOCKED тако да два радника не могу узети исти. Извршава чворове све до чекања или завршног чвора, затим уписује следеће време буђења и отпушта.
Чвор је чиста функција тока, контакта и чвора — а његови ефекти се предају у истој трансакцији као и сам напредак тока. Управо та једна особина чини поновни покушај безбедним. Радник убијен у пола секунде између „пошаљи“ и „напред“ оставља или оба или ништа, никада само једно.
И пошто апликација доставља време уместо базе, ред уписан сада је доспео сада. Колона за заказивање која подразумева сат базе није доспела у тренутку уписа и промашује управо онај отку који ју је створио — грешка која не личи ни на шта све док порука не закасни сат времена.
- 1Изнајмљивање
wake_at <= now(),FOR UPDATE SKIP LOCKED. Ред без изнајмљивања подразумевано шаље двапут. - 2ИзвршавањеЧворови редом све до чекања или завршног чвора. Сваки уписује корак: шта је одлучио, шта је емитовао.
- 3УврститеЕфекти и напредак, једна трансакција. У томе је цели трик.
- 4СпавањеУписано следеће
wake_at. Нису постојали низводни редови, ни један им није потребан.
Један ток по контакту по верзији
Четрнаест окидача
Шта може покренути ток
Неке од њих сте радње које Ви чините. Већина су радње које Ваш купац чини, или не чини — и одсуство радње је једнако добар окидач као и сама радња.
Долазе
form_submit, list_join, contact_created, tag_added и segment_enter. Сегмент је жив предикат, па „улази у сегмент“ покрива свако „постао је“ које можете изразити — три поруџбине, деведесет дана тишине, потрошња преко прага.
Нешто учине
page_visit из исечка сајта, message_opened, link_clicked, booking_made и payment_made. Отварање поруке је само по себи догађај на контакту, па један фунел може чекати реакцију на последње што је послао.
Време, или Ви
date_field са померајем — рођендан, обнова, „година од“, седам дана пре или три дана после. schedule за понављајући. manual за најаву коју шаљете јер сте тако одлучили.
Ваша сопствена апликација
api_event је прилагођени догађај који објавите из свог кода са својим токеном. Било шта што Ваш производ зна постаје окидач: активиран, позвао колегу, достигао лимит, отказао, извезао. Ово је оно што алат за слање поште претвара у део Вашег производа.
Повратни улаз, одлучен једном
Фунел је или поново улазив или није, и база то спроводи: један ток по контакту по фунелу осим ако сте рекли другачије. Исти окидач који се активира двапут у истој секунди не може случајно произвести два тока.
Услови улаза
Окидач се активира и спецификација улаза одлучује да ли је овај конкретни контакт подобан — предикат сегмента пред вратима. Јефтиније од чвора услова на првом кораку, и граф остаје о томе шта се дешава, а не о томе коме је дозвољен улаз.

Четрнаест ствари га може покренути. Шеснаест ствари може следити.
Шеснаест радњи и седам чворова тока
Шта фунел може, и како одлучује
Пошаљите нешто
send_email, send_sms, send_push, send_letter — четири канала, један граф — уз notify_team када особа коју треба обавестити ради за Вас.
Измените контакт
add_tag, remove_tag, add_to_list, remove_from_list, set_field. Означавање некога у току рада је оно што сегмент следећег фунела чини једноставним.
Досегните споља
http_request ка било чему, create_payment према Вашем повезаном налогу, и book_slot према ресурсу за резервације. Платилац остаје Ваш; нико не постаје наш купац.
Кретање између фунела
enter_funnel и exit_funnel. Направите једну добродошлицу и позовите је са четири места, уместо да одржавате четири копије које се до марта разиђу.
Генериши у тренутку слања
ai_generate попуњава променљиве спајања по контакту, рачуна се према вашој квоти и кешира се по хешу креативног материјала и атрибута контакта — иначе бисте плаћали по примаоцу при сваком појединачном слању.
Чекај, гранај, раздвој, споји
wait прихвата трајање, датум и време, дан у недељи са временом, или поље датума са померајем. condition је предикат сегмента са граном да и граном не. split је A/B/n са тежинама. join поново спаја гране.
goal — онај који је важан
Циљ завршава ток за свакога ко га достигне. Резервисали су, купили су, одговорили су: остатак секвенце се поништава управо за њих. Нико не добија „недостајете нам“ дан пошто се вратио — а ово је чвор који то спречава.
throttle и quiet_hours
Throttle регулише темпо налета како поштанско сандуче са ниским ограничењем не би било преплављено до суспензије. Quiet hours задржавају поруку до пристојног доба — примењује се на нивоу поруке, а не копира у сваку грану графа.
Проверено пре него што може да се покрене
Валидатор одбија исте ствари и за вас и за вештачку интелигенцију
Граф се проверава пре објављивања, и та провера није саветодавна. То је исти кодни пут без обзира да ли је левак нацртао човек или га генерисао модел — и то је једини разлог зашто генерисани левкови уопште заслужују поверење.
Тачно један улаз
Два улазна чвора су двосмисленост коју нико не примећује све док погрешна половина листе не добије погрешну секвенцу.
Сваки чвор је достижив
Изолована грана је или грешка или порука за коју мислите да одлази, а не одлази. Оба случаја вреди да сазнате.
Циклус мора да садржи чекање
Петља без чекања је бесконачна петља са слањем у средини. Ово правило је разлика између левка и инцидента.
Свако слање има свој креатив
send_email чвор без креатива и предмета не може да се објави. Порука са правим предметом и празним телом је стварни начин отказа; она се овде одбија.
Свака променљива је позната
Променљиве спајања се проверавају при објављивању. {{frist_name}} је грешка у куцању коју видите док уређујете, а не „Здраво ,“ која стиже у четрдесет хиљада сандучета.
Затим га симулишите
Покрените пробни ток стварног контакта кроз цео граф и прочитајте пређени пут и сваку поруку која би била послата, са даном слања. Ништа не напушта систем.
Незгодни случајеви
Седам ствари које ломе наивни механизам
Свака од ових ствари је тест са детерминистичким сатом иза себе, јер свака ломи имплементацију која делује савршено исправно све док не сретне стварност.
- 1Левак који се сам у себе вртиЛегитимно, уобичајено и у реду — под условом да циклус садржи чекање, на чему валидатор инсистира.
- 2Неко се одјави усред токаСупресија се проверава при слању, а не при стављању у ред. Провера при стављању у ред шаље пошту људима који су отишли током чекања.
- 3Левак се уређује док је десет хиљада људи унутраОни настављају да пролазе кроз верзију у коју су ушли, до краја. Нови учесници пролазе кроз нову.
- 4Исти окидач се активира два пута у једној секундиЈедан ток, јер је јединственост индекс, а не провера праћена уметањем.
- 5Контакт се обрише усред токаТок се завршава. Брисање које оставља секвенцу и даље упућену некоме није брисање.
- 6Чекање обухвата промену летњег времена„Три дана у девет ујутру“ значи девет ујутру са обе стране промене сата.
- 7Radnik biva ubijen između slanja i napredovanjaEfekti i napredovanje su jedna transakcija. Ili se obe stvari desile, ili nijedna.
Deterministički satSvaki test razbija uverljivu implementaciju
Kampanje su druga polovina
Levak reaguje. Kampanja je jednokratno emitovanje: publika, raspored, ograničenje i slanje. To je oblik stvari drugačije vrste i namerno se drži odvojeno, umesto da se pretvara da je levak sa jednim čvorom.
Dva pravila to čine bezbednim. Publika se materializuje jednom i odbija da se pokrene dvaput — ponovno razrešavanje bi tiho dodalo sve koji su se pridružili od početka slanja, a indeks za deduplikaciju bi to sakrio sprečavajući duplikate koje je sam stvorio. A brojači se preračunavaju iz događaja isporuke, nikada ne povećavaju na mestu, tako da ponovljeni veb-kuk ne može da uveća izveštaj.
Koju koristiti: ako se dešava zbog nečega što je osoba učinila, to je levak. Ako se dešava zbog nečega što ste odlučili u utorak, to je kampanja. Zapanjujuća količina marketing automatizacije krene naopako tako što se drugo prisiljava u oblik prvog.