clickSomo

Huniler & tetikleyiciler

Bir huni bir grafiiktir. Bir çalışma bir satırdır. Bir bekleyiş bir süredir.

Modelin tamamı budur ve bu ürünün sahip olduğu her zor özellik bu üç cümleden çıkar. Canlı bir huniyi düzenlemenin güvenli olması onlar sayesindedir. Bir yeniden denemenin çift gönderim yapamaması onlar sayesindedir. Salı günü abonelikten çıkan birinin perşembe günü hiçbir şey duymaması onlar sayesindedir.

Çalıştığında gerçekte ne olur

Bir huni yayımlamak değiştirilemez bir sürüm yazar. Biri içeri girer ve bir satır belirir: bu kişi için tek bir çalıştırma, o sürüme sabitlenmiş, geçerli düğümü, bir uyanma zamanını ve kendi bağlamını tutan.

Bir işçi, uyanma zamanı geçmiş çalıştırmaları kiralayar; SKIP LOCKED ile sahiplenir, böylece iki işçi aynı çalıştırmayı alamaz. Bir bekleme ya da sonlandırıcıya ulaşana kadar düğümleri yürütür, sonra bir sonraki uyanma zamanını yazar ve bırakır.

Bir düğüm, çalıştırmanın, kişinin ve düğümün saf bir fonksiyonudur — ve etkileri, çalıştırmanın kendi ilerlemesiyle aynı işlemde kaydedilir. Tek başına bu özellik, yeniden denemeyi güvenli kılan şeydir. "Gönder" ile "ilerlet" arasındaki yarım saniyede öldürülen bir işçi ya ikisini de ya hiçbirini bırakır, asla yalnızca birini bırakmaz.

Ve zamanı veritabanı değil uygulama sağladığı için, şimdi yazılan bir satır şimdi vadesi gelen bir satırdır. Veritabanı saatine göre varsayılanlanan bir zamanlama sütunu, yazıldığı anda henüz vadesinde değildir ve onu yaratan tik'in tam kendisini kaçırır — bir mesaj bir saat gecikene kadar hiçbir şey olmayan bir hataya benzeyen.

İşçinin bir tik'iYürütme
  • 1Kiralawake_at <= now(), FOR UPDATE SKIP LOCKED. Kiralaması olmayan bir kuyruk varsayılan olarak çift gönderir.
  • 2YürütBir bekleme ya da sonlandırıcıya kadar düğümler sırayla. Her biri bir adım yazar: neye karar verdiğini, ne ürettiğini.
  • 3İşleyinEtkiler ve ilerletme, tek işlemde. Bütün hile budur.
  • 4UykuSonraki wake_at yazılır. Henüz hiçbir aşağı akış satırı yoktur ve hiçbirinin olması da gerekmez.

Kişi ve sürüm başına tek çalıştırma

On dört tetikleyici

Bir çalıştırmayı ne başlatabilir

Bunlardan bazıları sizin yaptığınız şeylerdir. Çoğu, müşterinizin yaptığı ya da yapmadığı şeylerdir — ve bir eylemin yokluğu, eylemin kendisi kadar iyi bir tetikleyicidir.

Geldiklerinde

form_submit, list_join, contact_created, tag_added ve segment_enter. Bir segment canlı bir önermedir, dolayısıyla "segmente girer" ifadesi ifade edebileceğiniz her "olmuş olmayı" kapsar — üç sipariş, doksan gün sessizlik, bir eşiğin üzerinde harcama.

Bir şey yaptıklarında

Site parçacığından page_visit, message_opened, link_clicked, booking_made ve payment_made. Bir mesajın açılması, kişinin üzerinde başlı başına bir olaydır; böylece tek bir huni, gönderdiği son şeye verilen bir tepkiyi bekleyebilir.

Zaman, ya da siz

Bir ofsetle date_field — bir doğum günü, bir yenileme, "bir yıl önce", yedi gün önce ya da üç gün sonra. Yinelenen olan için schedule. Karar verip gönderdiğiniz duyuru için manual.

Kendi uygulamanız

api_event, kendi kodunuzdan kendi belirtecinizle gönderdiğiniz özel bir olaydır. Ürününüzün bildiği her şey bir tetikleyici olur: etkinleştirildi, bir iş arkadaşı davet etti, limite ulaştı, iptal etti, dışa aktardı. Bir e-posta aracını ürününüzün bir parçasına dönüştüren budur.

Yeniden giriş, bir kez kararlaştırılır

Bir huni ya yeniden girişe açıktır ya da değildir ve bunu veritabanı dayatır: aksi söylemedikçe kişi ve huni başına tek çalıştırma. Aynı tetikleyicinin aynı saniyede iki kez ateşlenmesi, kazara iki çalıştırma üretemez.

Giriş koşulları

Bir tetikleyici ateşlenir ve giriş tanımı, bu belirli kişinin uygun olup olmadığına karar verir — kapının önünde bir segment önermesi. İlk adıma bir koşul düğümü koymaktan daha ucuzdur ve grafiği, kimin içeri girmesine izin verildiğinden çok ne olduğuna odakta tutar.

On dört şey başlatabilir. On altı şey sonra olabilir.

On altı eylem ve yedi akış düğümü

Bir huni ne yapabilir ve nasıl karar verir

Bir şey gönder

send_email, send_sms, send_push, send_letter — dört kanal, tek graf — ayrıca haber verilecek kişi sizin için çalışıyorsa notify_team.

Kişiyi değiştir

add_tag, remove_tag, add_to_list, remove_from_list, set_field. Yol boyunca birini işaretlemek, bir sonraki huninin segmentini basit kılan şeydir.

Dışarıya ulaş

İstediğiniz her şeye http_request, kendi bağlı hesabınıza karşı create_payment ve bir rezervasyon kaynağına karşı book_slot. Ödeyen sizin kalır; kimse bizim müşterimiz olmaz.

Huniler arasında geçiş

enter_funnel ve exit_funnel. Mart ayına kadar birbirinden kopan dört kopyayı sürdürmek yerine, tek bir karşılama dizisi kurun ve dört yerden çağırın.

Gönderim anında oluştur

ai_generate, birleştirme değişkenlerini kişi başına doldurur, kotanıza karşı ölçülür ve yaratıcı ile kişi özniteliği karmasına göre önbelleğe alınır — aksi halde her tek gönderimde alıcı başına ödeme yapardınız.

Bekle, dallan, böl, birleştir

wait bir süre, bir tarih-saat, bir haftanın günü ve saat ya da fark içeren bir tarih alanı alır. condition evet ve hayır içeren bir segment koşuludur. split ağırlıklı A/B/n'dir. join dalları yeniden bir araya getirir.

goal — asıl önemli olan

Bir hedef, ona ulaşan herkes için akışı sonlandırır. Rezervasyon yaptılar, satın aldılar, yanıt verdiler: dizinin geri kalanı yalnızca onlar için iptal edilir. Geri döndükleri gün kimse "sizi özledik" mesajı almaz ve bunu engelleyen düğüm budur.

throttle ve quiet_hours

Throttle, düşük hız sınırı olan bir posta kutusunun askıya alınacak şekilde bombardımana tutulmaması için bir patlamayı tempolandırır. Quiet hours, bir mesajı medeni bir saate kadar bekletir — grafın her dalına kopyalanmak yerine mesaj katmanında uygulanır.

Çalıştırılmadan önce denetlenir

Doğrulayıcı, sizin için de yapay zekâ için de aynı şeyleri reddeder

Bir graf, yayınlanmadan önce denetlenir ve bu denetim tavsiye niteliğinde değildir. Huniyi bir insanın çizmesiyle bir modelin üretmesi aynı kod yolunu izler; üretilen hunilerin güvenilir olmasının tek nedeni budur.

Tam olarak bir giriş

İki giriş düğümü, bir listenin yanlış yarısına yanlış dizi ulaşana kadar kimsenin fark etmediği bir belirsizliktir.

Her düğüm ulaşılabilir

Sahipsiz bir dal ya bir hatadır ya da çıkacağını sandığınız ama çıkmayan bir mesajdır. İkisi de haber verilmesi gereken şeylerdir.

Her döngü bir bekleme içermelidir

İçinde bekleme olmayan bir döngü, ortasında bir gönderim bulunan sonsuz döngüdür. Bu kural, huni ile olay arasındaki farktır.

Her gönderimin yaratıcısı vardır

Yaratıcısı ve konusu olmayan bir send_email düğümü yayınlanamaz. Doğru konuyla ama boş gövdeyle gelen mesaj gerçek bir başarısızlık biçimidir; burada reddedilir.

Her değişken bilinir

Birleştirme değişkenleri yayınlama sırasında doğrulanır. {{frist_name}}, kırk bin gelen kutusuna ulaşan "Merhaba ," değil, düzenleme yaparken gördüğünüz bir yazım hatasıdır.

Sonra simüle edin

Gerçek bir kişiyi tüm graf boyunca deneme çalıştırın ve izlenen yolu, gönderilecek her mesajı ve gününü geri okuyun. Bina dışına hiçbir şey çıkmaz.

Zor durumlar

Naif bir motoru bozan yedi şey

Bunların her biri arkasında deterministik bir saat bulunan bir testtir, çünkü her biri gerçekle karşılaşana kadar kusursuz doğru görünen bir uygulamayı bozar.

Motorun test edildiği durumlarYalanlama
  • 1Kendine dönen bir huniMeşru, yaygın ve sorun değil — döngü bir bekleme içerdiği sürece, ki doğrulayıcı bunu zorunlu kılar.
  • 2Birisi yol ortasında abonelikten çıkarBaskılama, kuyruğa alma sırasında değil gönderim sırasında denetlenir. Kuyruğa alma sırasında denetlemek, bekleme sırasında ayrılanlara e-posta gönderir.
  • 3Huni, içinde on bin kişi varken düzenlenirOnlar girdikleri sürümde yürümeye, sonuna kadar devam eder. Yeni girenler yenisini yürür.
  • 4Aynı tetikleyici bir saniye içinde iki kez tetiklenirTek çalıştırma, çünkü benzersizlik bir denetim ve ardından ekleme değil, bir indekstir.
  • 5Bir kişi çalıştırma ortasında silinirÇalıştırma sona erer. Hâlâ birine adreslenmiş bir dizi bırakan bir silme, silme değildir.
  • 6Bir bekleme yaz saati uygulaması değişimine denk gelir"Sabah dokuzda üç gün" ifadesi, saat değişikliğinin her iki tarafında da sabah dokuz anlamına gelir.
  • 7Bir işçi, gönderme ile ilerletme arasında öldürülürEtkiler ve ilerletme tek bir işlemdir. Ya ikisi de gerçekleşmiştir ya da hiçbiri.

Deterministik saatHer test, makul görünen bir uygulamayı boşa çıkarır

Kampanyalar diğer yarıdır

Bir huni tepki verir. Bir kampanya tek seferlik yayındır: bir hedef kitle, bir zamanlama, bir hız sınırı ve bir gönderi. Farklı biçimde bir şeydir ve tek düğümlü bir huniymiş gibi davranmak yerine bilinçli olarak ayrı tutulur.

İki kural bunu güvenli kılar. Bir hedef kitle tek kez maddileştirilir ve iki kez çalışmayı reddeder — yeniden çözümleme, gönderi başladıktan sonra katılan herkesi sessizce eklerdi ve tekilleştirme indeksi, yarattığı kopyaları engelleyerek bunu gizlerdi. Ayrıca sayaçlar teslim olaylarından yeniden hesaplanır, yerinde artırılmaz; böylece yeniden denenen bir webhook bir raporu şişiremez.

Hangisini kullanmalı: kişinin yaptığı bir şey yüzünden gerçekleşiyorsa, hunidir. Bir salı günü sizin karar verdiğiniz bir şey yüzünden gerçekleşiyorsa, kampanyadır. Şaşırtıcı miktarda pazarlama otomasyonu, ikincisini birincinin biçimine zorlayarak yanlış gider.