Hunilər və tetikləyicilər
Huni qrafdir. İcra sətirdir. Gözləmə vaxtdır.
Bütün model budur və bu məhsulun bütün çətin xüsusiyyətləri bu üç cümlədən çıxır. Canlı hunini redaktə etmək onlara görə təhlükəsizdir. Təkrar cəhd ikiqat göndərmə onlara görə edə bilməz. Çərşənbə günü abunədən çıxan adam cümə günü heç nə eşitməməsi onlara görədir.
İcra zamanı əslində nə baş verir
Funnelyi dərc etmək dəyişməz bir versiya yaradır. Kimsə daxil olur və bir sətir peyda olur: bu kontakt üçün bir icra, həmin versiyaya bağlı, cari düyünü, oyanma vaxtını və öz kontekstini saxlayır.
İşçi oyanma vaxtı keçmiş icraları icarəyə götürür, onları SKIP LOCKED ilə tutur ki, iki işçi eyni icranı götürə bilməsin. Gözləməyə və ya sonlu düyünə çatana qədər düyünləri icra edir, sonra növbəti oyanma vaxtını yazır və buraxır.
Düyün icranın, kontaktın və düyünün saf funksiyasıdır — və onun təsirləri icranın öz irəliləyişi ilə eyni tranzaksiyada təsdiqlənir. Məhz bu tək xüsusiyyət təkrar cəhdini təhlükəsiz edir. "Göndər" ilə "irəlilət" arasındakı yarım saniyədə öldürülən işçi ya hər ikisini, ya da heç birini buraxır, heç vaxt yalnız birini.
Vaxtı verilənlər bazası deyil, tətbiq təqdim etdiyi üçün indi yazılan sətir indi vaxtı çatmış olur. Verilənlər bazası saatına görə standartlaşan planlaşdırma sütunu yazıldığı anda hələ vaxtı çatmamış olur və onu yaradan dəqiqəni əldən verir — heç bir şeyə bənzəməyən, amma bir mesaj bir saat gecikənə qədər görünməyən bir xəta.
- 1İcarə
wake_at <= now(),FOR UPDATE SKIP LOCKED. İcarəsiz növbə standart olaraq iki dəfə göndərir. - 2İcra etGözləməyə və ya sonlu düyünə çatana qədər düyünləri ardıcılla icra edir. Hər biri addım yazır: nə qərar verdi, nə emissiya etdi.
- 3Kommit edinTəsirlər və irəliləyiş, bir tranzaksiya. Bütün hiylə budur.
- 4YuxuNövbəti
wake_atyazılır. Aşağı axın sətirləri hələ yoxdur və heç birinə ehtiyac da yoxdur.
Kontakt başına versiya başına bir icra
On dörd tetikleyici
İcranı nə başlada bilər
Bunlardan bəziləri sizin etdiyiniz işlərdir. Əksəriyyəti müştərinizin etdiyi və ya etmədiyi işlərdir — və hərəkətin olmaması hərəkətin özü qədər yaxşı tetikleyicidir.
Onlar gəlir
form_submit, list_join, contact_created, tag_added və segment_enter. Seqment canlı predikattır, ona görə də "seqmentə daxil olur" ifadə etdiyiniz hər bir "olmuşdur" halını əhatə edir — üç sifariş, doxsan gün sükut, həddindən artıq xərcləmə.
Onlar bir şey edir
Sayt snippetindən page_visit, message_opened, link_clicked, booking_made və payment_made. Mesajın açılması özü kontakt üzərində hadisədir, ona görə də bir funnels son göndərdiyinə reaksiyanı gözləyə bilər.
Vaxt, ya da siz
Ofset ilə date_field — ad günü, yeniləmə, "bir il keçdi", yeddi gün əvvəl və ya üç gün sonra. Təkrarlanan üçün schedule. Qərar verib göndərdiyiniz elan üçün manual.
Öz tətbiqiniz
api_event öz kodunuzdan, öz tokeninizlə göndərdiyiniz xüsusi hadisədir. Məhsulunuzun bildiyi hər şey tetikleyiciyə çevrilir: aktivləşdi, həmkarını dəvət etdi, həddə çatdı, ləğv etdi, ixrac etdi. Bu, poçt alətini məhsulunuzun bir hissəsinə çevirən şeydir.
Yenidən daxil olma, bir dəfə qərar verilir
Funnels ya yenidən daxil olunabiləndir, ya deyil, və bunu verilənlər bazası təmin edir: əksini demədiyiniz müddətcə kontakt başına funnels başına bir icra. Eyni tetikleyicinin eyni saniyədə iki dəfə işləməsi təsadüfən iki icra yarada bilməz.
Giriş şərtləri
Tetikleyici işləyir və giriş spesifikasiyası bu konkret kontaktın uyğun olub-olmadığına qərar verir — qapının qarşısında seqment predikatı. İlk addımda şərt düyünündən daha ucuzdur və qrafikin kimə icazə verildiyindən yox, nə baş verdiyindən bəhs etməsini təmin edir.

On dörd şey onu başlada bilər. On altı şey bundan sonra baş verə bilər.
On altı hərəkət və yeddi axın düyünü
Funnels nə edə bilər və necə qərar verir
Bir şey göndər
send_email, send_sms, send_push, send_letter — dörd kanal, bir qrafik — üstəlik, xəbər verilməli olan şəxs sizin üçün işləyirsə notify_team.
Kontaktu dəyiş
add_tag, remove_tag, add_to_list, remove_from_list, set_field. Yol boyu kiməsə işarə qoymaq növbəti funnelin seqmentini sadə edən şeydir.
Kənara çat
İstədiyiniz hər şeyə http_request, öz bağlı hesabınıza qarşı create_payment və rezervasiya resursuna qarşı book_slot. Ödəyici sizin qalır; heç kim bizim müştərimiz olmur.
Funnellər arasında keçid
enter_funnel və exit_funnel. Bir salamlaşma ardıcıllığı qurun və dörd yerdən çağırın, mart ayına qədər bir-birindən uzaqlaşan dörd nüsxə saxlamaq əvəzinə.
Göndərilmə zamanı yarat
ai_generate merge dəyişənlərini kontakt başına doldurur, kvotanıza görə ölçülür və yaradıcılıq və kontakt-atribut haşına görə keşlənir — əks halda hər bir göndərişdə hər alıcı üçün ödəyərdiniz.
Gözləmə, budaq, bölünmə, birləşmə
wait müddət, tarix-vaxt, həftənin günü və saat və ya ofsetli tarix sahəsi qəbul edir. condition hə və yox cavablı seqment predikatıdır. split çəkilərlə A/B/n-dir. join budaqları yenidən birləşdirir.
goal — vacib olan məhz budur
Məqsəd ona çatan hər kəs üçün axını bitirir. Onlar rezervasiya etdi, satın aldı, cavab verdi: ardıcıllığın qalan hissəsi məhz onlar üçün ləğv edilir. Geri qayıtdıqları gün ertəsi "sizi darıxmışdıq" mesajı almırlar və bunun qarşısını alan məhz bu düyündür.
throttle və quiet_hours
Throttle partlayışı tempələyir ki, aşağı limitli poçt qutusu dayandırılma həddinə çatdırılmasın. Quiet hours mesajı mədəni bir vaxta qədər saxlayır — mesaj qatında tətbiq olunur, qrafikin hər budağına kopyalanmır.
İşə düşməzdən əvvəl yoxlanılır
Validator sizə qarşı da, AI-a qarşı da eyni şeyləri rədd edir
Qrafik dərc olunmazdan əvvəl yoxlanılır və bu yoxlama məsləhət xarakteri daşımır. Hunini insan çəkib və ya model yaratdıysa, eyni kod yolu işə düşür — məhz bu səbəbdən yaradılmış hunilərə ümumiyyətlə etibar etmək olar.
Dəqiq bir giriş
İki giriş düyünü heç kimin diqqətini çəkməyən qeyri-müəyyənlikdir — siyahının səhv yarısı səhv ardıcıllığı alana qədər.
Hər düyünə çatmaq mümkündür
Yetim qalmış budaq ya səhvdir, ya da gedəcəyini düşündüyünüz, amma getməyən mesajdır. Hər ikisi haqqında xəbər veriləsi şeydir.
Dövrdə mütləq gözləmə olmalıdır
İçində gözləmə olmayan dövr, ortasında göndəriş olan sonsuz dövrədir. Bu qayda huni ilə insident arasındakı fərqdir.
Hər göndərişin kreativ var
Kreativ və mövzusu olmayan send_email düyünü dərc edilə bilməz. Doğru mövzulu, amma boş məzmunlu mesaj real uğursuzluq ssenarisidir; burada rədd edilir.
Hər dəyişən məlumdur
Birləşdirmə dəyişənləri dərcdə yoxlanılır. {{frist_name}} düzəliş edərkən gördüyünüz səhvdir, qırx min gələnlər qutusuna çatan "Salam ," deyil.
Sonra simulyasiya edin
Real kontaktı bütün qrafikdən keçirin və keçilən yolu, göndəriləcək hər mesajı günü ilə birlikdə oxuyun. Heç nə kənara çıxmır.
Çətin hallar
Naiv mühərriki sındıran yeddi şey
Bunların hər biri arxasında deterministik saat olan testdir, çünki hər biri reallıqla qarşılaşmayana qədər mükəmməl düzgün görünən implementasiyanı sındırır.
- 1Özünə dövrə edən huniLeqitim, adi və problem deyil — təkcə dövrün gözləmə ehtiva etməsi şərtilə, validator buna israr edir.
- 2Bəkəs yolda abunəlikdən çıxırSusdurma göndəriş anında yoxlanılır, növbəyə qoyulanda yox. Növbə anında yoxlama gözləmə ərzində ayrılanlara da məktub göndərir.
- 3Huni on min insan içində olarkən redaktə olunurOnlar girdikləri versiyada sona qədər gedirlər. Yeni gələnlər yeni versiyada gedirlər.
- 4Eyni tetikləyici bir saniyədə iki dəfə işə düşürBir axın, çünki unikallıq yoxlamadan sonra əlavə deyil, indeksdir.
- 5Kontakt axın ortasında silinirAxın bitir. Hələ də birinə ünvanlanmış ardıcıllıq qoyan silinmə, silinmə deyil.
- 6Gözləmə vaxt dəyişikliyindən keçir"Səhər saat doqquzda üç gün" demək, saat dəyişikliyinin hər iki tərəfində də səhər saat doqquz deməkdir.
- 7İşçi göndərişlə irəliləyiş arasında öldürülürEffektlər və irəliləyiş bir tranzaksiyadır. Ya hər ikisi baş verdi, ya da heç biri.
Deterministik saatHər test inandırıcı bir implementasiyanı sındırır
Kampaniyalar digər yarısıdır
Hunqar reaksiya verir. Kampaniya isə bir dəfəlik yayımdır: auditoriya, cədvəl, sürət məhdudiyyəti və göndəriş. Bu, fərqli formalı bir şeydir və bir düyünlü hunqar kimi göstərmək əvəzinə qəsdən ayrı saxlanılır.
İki qayda onu təhlükəsiz edir. Auditoriya bir dəfə materializasiya olunur və ikinci dəfə işləməkdən imtina edir — yenidən həll edilmək göndəriş başladıqdan sonra qoşulan hər kəsi səssizcə əlavə edərdi və dublikatların qarşısını alaraq bunu gizlədərdi. Və sayğclar yerində artırılmır, çatdırılma hadisələrindən yenidən hesablanır, beləliklə təkrarlanan webhook hesabatı şişirdə bilməz.
Hansını istifadə etmək: əgər şəxsin etdiyi bir şeyə görə baş verirsə, bu hunqardır. Əgər çərşənbə axşamı qərar verdiyiniz bir şeyə görə baş verirsə, bu kampaniyadır. Çoxlu sayda marketinq avtomatlaşdırması ikincini birincinin formasına məcbur etməklə səhvərə gedir.