אנשי קשר והסכמה
רשימה שאתה יכול להגן עליה, לא סתם רשימה שיש לך
כל אחד יכול להחזיק עשרת אלפים כתובות אימייל. השאלה שחשובה באמת — זו שרגולטור, ספק והמצפון שלך שואלים כל אחד במילים מעט שונות — היא מאין כל אחת מהן הגיעה ועל איזה בסיס מותר לך לכתוב אליה. ClickSomo הופך את זה לעובדה שמורה במערכת, לא למשהו שתצטרך לשחזר.
הזהות היא כתובת האימייל
איש קשר אחד לכל כתובת בכל פרויקט, נאכף על ידי מסד הנתונים ולא על ידי תקווה. כתובות מנורמלות בזמן הכתיבה, לעולם לא בזמן הקריאה — נרמול בקריאה הופך את האילוץ לקישוט שמאפשר גם ל־Anna@ וגם ל־anna@ להיכנס.
מספרי טלפון נשמרים בפורמט E.164 כשהם קיימים, אבל מספר טלפון הוא תכונה, לא זהות. אין כאן גרף פתרון זהויות, אין פרוטוקול מיזוג ואין יומן ביקורת של מיזוגים, כי כל איש קשר מגיע דרך ערוץ שכבר יש בו כתובת: ייבוא, טופס, הרשמה, או הקוד שלך.
השם נשמר כמו שהוא
display_name נשמר בדיוק כפי שנמסר ולעולם לא מפוצל לחלקים. פיצול שמות הוא מפעל לייצור באגים — "van der Berg", "Kim Min-jun", שמות בודדים, תארים, וכל מוסכמת סדר שאינה אנגלית — ופיצול שגוי מופיע בתג מיזוג כ־"Dear van,", שזה גרוע מאשר אין התאמה אישית בכלל.
חלקים מובנים קיימים רק עבור מקורות שמספקים אותם כבר מופרדים. שום דבר לא גוזר אותם. ושם שמישהו הקליד בעצמו לעולם לא נדרס על ידי קובץ CSV מאוחר שבמקרה ראה משהו אחר, כי "הכתיבה האחרונה מנצחת" מאפשר לייבוא הכי מרושל לנצח.
- 1זהותאימייל, מנורמל. ייחודי בתוך הפרויקט.
- 2שםנשמר כמו שהוא.
first_nameנגזר בזמן הרינדור, לעולם לא נשמר. - 3תכונותכל מה שתרצה, כ־JSON. שלך, וניתן לשילוב כ־
attrs.*. - 4תגיות ורשימותתגיות הן ישות ראשונה במעלה וחיות במאגר אחד; רשימות הן חברות מפורשת.
- 5הסכמהשורה אחת לכל ערוץ, עם בסיס חוקי והראיות שלו.
- 6אירועיםיומן הוספה-בלבד של כל מה שהאדם הזה עשה. הטבלה שעליה המוצר נשען.
- ×לעולם לאאין סיסמה, אין האש, אין סשן, אין מפתח API. עמודה שמאמתת מישהו היא תקרית, לא פיצ'ר.
מוגבל גם לטננט וגם לפרויקט
פנקס ההסכמות
היעדר אינו היתר
שורה אחת לכל איש קשר לכל ערוץ — אימייל, SMS, מכתב, פוש — וכל שורה נושאת מצב, בסיס חוקי, מקור, ראיות, חותמות זמן ותחום שיפוט. איש קשר שאין לו שורת בסיס לערוץ מסוים לא יכול לקבל עליו דבר באותו ערוץ. לא "מסומן". פשוט לא יכול.
consent
מישהו ביקש באופן אקטיבי. שליחת טופס עם הראיות שמורות, אישור כפול, תיבת סימון שהוא סימן בעצמו. זה הבסיס החזק ביותר, והוא היחיד שטופס יכול לייצר.
legitimate_interest
הטוב ביותר שייבוא CSV יכול להגיע אליו. גיליון נתונים לא יכול לזכור שמישהו הסכים למשהו, ולכן הוא לעולם לא רשאי לטעון שהסכים — והעלאה חוזרת של אותו קובץ לא משדרגת את זה.
contract
אתה כותב אליו בגלל משהו ששניכם צדדים לו. תזכורת השירות, הודעת החידוש, הדבר שהוא היה נעלב שלא לקבל.
לפני שקמפיין נשלח, אתה רואה את הרכב הבסיסים של קהל היעד שלו: כמה מהאנשים האלה ביקשו, כמה אתה מגיע אליהם במסגרת אינטרס לגיטימי, וכמה נמצאים שם בגלל חוזה. זה מספר אחד שמנע יותר שליחות גרועות מכל באנר אזהרה שנכתב אי פעם.
למה זה מחמיר ממה שנדרש ממך: זה בעצם לא עליך. מוניטין שליחת ההמונים הוא משאב משותף, ורשימה אחת רשלנית מרעילה את הבאר לכל מי ששולח מאותה תשתית. שיעורי תלונות ודחיות (bounce) נצפים לכל טננט, וחשבון ששיעוריו חורגים מהסף מוגבל כאן — לפני שספק יעשה את זה לכולם בבת אחת.

מאחורי כל שורה ברשימה, מישהו אמר כן.
ארבע דרכי כניסה
כל דרך אל הרשימה שלך היא אתה, פועל על הנתונים שלך
אין כאן ערוץ קליטה עם טוקן שירות ואין מוצר אח כותב בשקט לאנשי הקשר שלך. אם אתה רוצה מישהו ברשימה, אחת מארבע הדרכים האלה היא שהכניסה אותו.
ייבוא CSV
ממופה עמודה אחר עמודה, מנורמל בכתיבה, נבדק מול MX כך שדומיינים מתים ושגויים נתפסים לפני שהם נדחים סופית, ונקלט עם בסיס שאתה קובע במפורש. לייבוא יש מזהה, וכל איש קשר שהוא יצר מצביע חזרה אליו.
טופס ClickSomo
ממוסר מאותו מסמך כמו כל השאר, עם ולידציה, honeypot והגבלת קצב. שליחה היא הדרך היחידה שיכולה לייצר באופן לגיטימי consent, כי היא היחידה שבה האדם נוכח בפועל.
עמוד שבנית ב-dash-b
מעצב הדשבורד מפרסם עמודים; טופס באחד מהם שולח לכאן עם הפרטים שלך. אותה ולידציה, אותו טיפול בהסכמה, בלי אינטגרציה שנייה לתחזוקה.
ה-API הציבורי
POST /v1/contacts עם הטוקן שלך, סמנטיקת upsert, ומפתח idempotency שנשמר. האפליקציה שלך כבר יודעת מי נרשם; זו הדרך הקצרה מהעובד הזה אל משפך.
סגמנטים הם פרדיקט, מהודר
סגמנט הוא עץ פרדיקט שמור על שדות איש קשר, מאפיינים, תגיות, חברות ברשימה והתנהגות, שמהודר ל-SQL ונשמר במטמון עם ספירה. האופרטורים הם הרגילים — שווה, לא שווה, בתוך, לא בתוך, מתחיל ב-, מסתיים ב-, מכיל, מוגדר, לא מוגדר — המשולבים עם וגם, או ולא לכל עומק שתצטרך.
תצוגה מקדימה לפני שימוש. ה-endpoint מחזיר אנשי קשר אמיתיים, כך שהשאלה "מי באמת נמצא כאן" נענית בהסתכלות ולא בשליחה וגילוי.
סגמנטים משרתים אז תפקיד כפול: כקהל לקמפיין, כתנאי על ענף במשפך, וכטריגר בפני עצמו — segment_enter מתחיל ריצה ברגע שמישהו הופך זכאי.
- 1תגית
tags contains "regular" - 2מאפיין
attrs.total_orders >= 3— השדה שלך, בשם שנתת לו. - 3התנהגותאין אירוע
order.paidב-90 הימים האחרונים. - 4הסכמהבסיס דוא"ל שמאפשר שליחה. אנשי קשר בלי כזה לא נספרים, כי בכל מקרה לא היו ניתנים לשליחה.
- iתצוגה מקדימה412 אנשי קשר, מפורטים. נספרים שוב בעת השליחה, כי סגמנט הוא שאלה ולא תמונת מצב.
מהודר ל-SQLספירה במטמון, תשובה חיה
דיכוי שליחה, ומתי הוא נבדק
דיכויים הם ברמת הפרויקט וגם גלובליים: קפיצות קשות, תלונות, ביטולי מינוי, רשומות ידניות וכתובות תפקיד. הם נבדקים בזמן השליחה, ואז שוב בתוך שירות השליחה עצמו.
המילה השנייה היא זו שעושה את העבודה. משפך עם המתנה של שלושה ימים בתוכו משאיר חלון של שלושה ימים שבו מישהו יכול לבטל מינוי, ומערכת שבדקה דיכוי כשההודעה נכנסה לתור תשלח לו בכל זאת. הבדיקה בזמן השליחה היא ההבדל בין לכבד ביטול מינוי לבין לרשום אותו.
מחיקה עובדת באותו אופן: בקשת מחיקה מסירה את איש הקשר ואת היסטוריית ההודעות שלו מכאן, ומגיעה לכל שירות אח שמחזיק עותק דרך אותו נתיב פנימי שבו משתמשת כל המשפחה. יש מקום אחד לבקש ודבר אחד שקורה.