Патеки и активирачи
Патеката е граф. Извршувањето е ред. Чекањето е време.
Тоа е целиот модел, и секоја тешка особина што овој производ ја има произлегува од тие три реченици. Затоа уредувањето на жива патека е безбедно. Затоа повторниот обид не може да испрати двапати. Затоа човек што се отпишал во вторник не слуша ништо во четврток.
Што всушност се случува кога се извршува
Објавувањето на фунија запишува непроменлива верзија. Некој влегува, и се појавува ред: едно извршување, за овој контакт, врзано за таа верзија, што го содржи тековниот јазол, време за будење и свој контекст.
Работник изнајмува извршувања чијашто време за будење е поминато, преземајќи ги со 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 ја регулира брзината на испорака за поштенско сандаче со низок лимит да не биде преплавено до суспензија. Тивките часови задржуваат порака до пристоен час — се применуваат на ниво на порака, а не се копираат во секоја гранка од графот.
Проверено пред да може да се изврши
Валидаторот ви го одбива истото и вам и на вештачката интелигенција
Графот се проверува пред да може да се објави, и проверката не е само совет. Тоа е истиот коден пат без разлика дали човек го нацртал левакот или модел го генерирал, што е единствениот reason зошто генерираните леваци воопшто се доверливи.
Точно еден влез
Два влезни јазли е двосмисленост што никој не ја забележува додека погрешната половина од листата не ја добие погрешната секвенца.
Секој јазол е достапен
Осамената гранка е или грешка или порака за која мислите дека се испраќа, а не се. И двете вредат да ви бидат соопштени.
Секој циклус мора да содржи чекање
Јамка без чекање е бесконечна јамка со испорака во средината. Ова правило е разликата меѓу левак и инцидент.
Секоја испорака има свој креатив
Јазол send_email без креатив и наслов не може да се објави. Пораката со точен наслов и празно тело е реален начин на неуспех; туку се одбива.
Секоја променлива е позната
Променливите за спојување се валидираат при објавување. {{frist_name}} е печатна грешка што ја гледате додека уредувате, а не „Здравесто ,“ што пристигнува во четириесет илјади сандања.
Потоа симулирајте го
Извршете пробен тек на реален контакт низ целиот граф и прочитајте го поминатиот пат и секоја порака што би се испратила, со нејзиниот ден. Ништо не го напушта системот.
Незгодните случаи
Седум работи што кршат наивен мотор
Секоја од нив е тест со детерминистички часовник зад него, бидејќи секоја крши имплементација што изгледа сосема точна сè додека не се сретне со реалноста.
- 1Левак што се врти во себеЛегитимно, вообичаено и сосема во ред — под услов циклусот да содржи чекање, на што валидаторот инсистира.
- 2Некој се одјавува во текот на текотОдземањето се проверува при испорака, не при ставање во редица. Проверката при ставање во редица им испраќа пошта на луѓето што заминале за време на чекањето.
- 3Левакот се уредува со десет илјади луѓе внатреТие продолжуваат да ја поминуваат верзијата на која влегле, до крај. Новите влезови ја поминуваат новата.
- 4Истиот предизвик се активира двапати во една секундаЕден тек, бидејќи уникатноста е индекс, а не проверка по која следува вметнување.
- 5Контакт се брише во текот на текотТекот завршува. Бришење што остава секвенца сè уште упатена кон некого не е бришење.
- 6Чекање се протега преку промена на летното време„Три дена во девет наутро“ значи девет наутро и пред и по промената на часовникот.
- 7Работник е убиен меѓу испорака и напредувањеЕфектите и напредувањето се една трансакција. Или се случиле двете, или ниедно.
Детерминистички часовникСекој тест разбира веродостојна имплементација
Кампањите се другата половина
Инката реагира. Кампањата е еднократно емитување: публика, распоред, ограничување и испорака. Тоа е нешто со сосема друг облик и намерно се држи одделно, наместо да се претставува како инка со еден јазол.
Два правила го прават безбедно. Публиката се материјализира еднаш и одбива да се изврши двапати — повторното разрешување тивко би додало сите што се приклучиле од почетокот на испораката, а индексот за дедупликација би го сокрил тоа со тоа што ги спречува дупликатите што самиот ги создал. И бројачите се пресметуваат повторно од настани за доставување, никогаш не се зголемуваат на место, така што повторен webhook не може да надуе извештај.
Кое да го користите: ако се случува поради нешто што го направил лицето, тоа е инка. Ако се случува поради нешто што сте го одлучиле во вторник, тоа е кампања. Изненадувачки голем дел од маркетинг автоматизацијата тргнува наопаку со тоа што го присилува второто во обликот на првото.