clickSomo
פתח את ClickSomo

משפכים וטריגרים

משפך הוא גרף. הרצה היא שורה. המתנה היא זמן.

זהו המודל כולו, וכל תכונה מורכבת שיש למוצר הזה נובעת משלוש המשפטים האלה. בזכותם עריכת משפך פעיל היא בטוחה. בזכותם ניסיון חוזר לא יכול לשלוח פעמיים. בזכותם מי שמבטל הרשמה ביום שלישי לא שומע דבר ביום חמישי.

מה קורה בפועל כשזה רץ

פרסום משפך כותב גרסה בלתי ניתנת לשינוי. מישהו נכנס, ומופיעה שורה: הרצה אחת, עבור איש הקשר הזה, מקובעת לאותה גרסה, המחזיקה את הצומת הנוכחי, מועד התעוררות והקשר משלה.

וורקר חוכר את ההרצות שמועד ההתעוררות שלהן עבר, ותובע אותן עם 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 מווסת הצפה כדי שתיבת דואר עם מגבלת קצב נמוכה לא תוצף עד חסימה. שעות שקט מחזיקות הודעה עד שעה מכובדת — מיושמות ברמת ההודעה, ולא מועתקות לכל ענף של הגרף.

נבדק לפני שהוא יכול לרוץ

המאמת מסרב לאותם דברים בשבילך ובשביל ה-AI

גרף נבדק לפני שניתן לפרסם אותו, והבדיקה אינה מייעצת בלבד. זהו אותו נתיב קוד בין אם אדם שרטט את המשפך ובין אם מודל יצר אותו, וזו הסיבה היחידה שמשפכים שנוצרו אוטומטית הם אמינים כלל.

בדיוק כניסה אחת

שני צמתי כניסה הם דו-משמעות שאף אחד לא שם לב אליה עד שחצי שגוי של רשימה מקבל את הרצף השגוי.

כל צומת נגיש

ענף יתום הוא או טעות או הודעה שאתה חושב שיוצאת ואינה יוצאת. שניהם שווים לדעת עליהם.

מחזור חייב להכיל המתנה

לולאה בלי המתנה בתוכה היא לולאה אינסופית עם שליחה באמצע. הכלל הזה הוא ההבדל בין משפך לבין תקרית.

לכל שליחה יש תוכן

צומת send_email בלי תוכן ובלי נושא לא ניתן לפרסום. הודעה עם הנושא הנכון וגוף ריק היא כשל אמיתי; היא נדחית כאן.

כל משתנה מוכר

משתני מיזוג מאומתים בזמן הפרסום. {{frist_name}} הוא שגיאת כתיב שאתה רואה בזמן העריכה, ולא "שלום ," שמגיע לארבעים אלף תיבות דואר.

ואז לדמות את זה

הרץ איש קשר אמיתי דרך כל הגרף בהרצה יבשה וקרא את הנתיב שנבחר וכל הודעה שהייתה נשלחת, עם היום שלה. שום דבר לא יוצא החוצה.

המקרים המסובכים

שבעה דברים ששוברים מנוע נאיבי

כל אחד מאלה הוא בדיקה עם שעון דטרמיניסטי מאחוריה, כי כל אחד מהם שובר מימוש שנראה מושלם עד שהוא פוגש את המציאות.

נגד מה המנוע נבדקהפרכה
  • 1משפך שחוזר לעצמולגיטימי, נפוץ ותקין — בתנאי שהמחזור מכיל המתנה, וזה מה שהמאמת מחייב.
  • 2מישהו מבטל מינוי באמצע הדרךהדיכוי נבדק בזמן השליחה, לא בזמן התור. בדיקה בזמן התור שולחת מייל לאנשים שעזבו במהלך ההמתנה.
  • 3המשפך נערך כשעשרת אלפים אנשים בתוכוהם ממשיכים ללכת בגרסה שנכנסו אליה, עד הסוף. נכנסים חדשים הולכים בגרסה החדשה.
  • 4אותו טריגר מופעל פעמיים בשנייה אחתריצה אחת, כי הייחודיות היא אינדקס ולא בדיקה ואחריה הוספה.
  • 5איש קשר נמחק באמצע ריצההריצה מסתיימת. מחיקה שמשאירה רצף שעדיין ממוען למישהו אינה מחיקה.
  • 6המתנה חוצה שינוי שעון קיץ"שלושה ימים בתשע בבוקר" פירושו תשע בבוקר משני צידי שינוי השעון.
  • 7עובד (worker) נהרג בין שליחה להתקדמותהאפקטים וההתקדמות הם טרנזקציה אחת. או ששניהם קרו, או שאף אחד מהם לא.

שעון דטרמיניסטיכל בדיקה שוברת מימוש סביר

קמפיינים הם החצי השני

משפך מגיב. קמפיין הוא שידור חד-פעמי: קהל, לוח זמנים, הגבלת קצב ושליחה. זהו דבר בצורה אחרת, והוא נשמר בכוונה נפרד ולא מעמיד פנים שהוא משפך עם צומת אחד.

שני כללים הופכים את זה לבטוח. הקהל ממומש פעם אחת ומסרב לרוץ פעמיים — פתרון מחדש היה מוסיף בשקט את כל מי שהצטרף מאז תחילת השליחה, ואינדקס הדה-דופליקציה היה מסתיר זאת על ידי מניעת הכפילויות שהוא עצמו יצר. והמונים מחושבים מחדש מאירועי מסירה, ולעולם לא מתעדכנים בתוספת במקום, כך ש-webhook שנשלח שוב לא יכול לנפח דוח.

מתי מה: אם זה קורה בגלל משהו שהאדם עשה — זה משפך. אם זה קורה בגלל משהו שהחלטת עליו ביום שלישי — זה קמפיין. כמות מפתיעה של אוטומציה שיווקית משתבשת בגלל כפיית השני לצורה של הראשון.