המטרה
קמפיינים מספקים לידים דרך Gmail ומוכשרים ב-Worldfilia. בלי אוטומציה, invalid-rate לפי UTM לא היה גלוי, כפילויות עובדו פעמיים, והחלטות תקציב התבססו על ניחוש. המטרה: Job שממזג לידים של Gmail עם CRM ומפרסם דו"ח per-campaign.
הפתרון
CLI ב-Python עם 5 מצבי הפעלה (INIT, date-range, --watch N, --dry-run, --from-cache). כל ריצה מושכת אימיילי לידים חדשים מ-Gmail API, משיגה טרנזקציות Worldfilia, מריצה matcher רב-שכבתי (exact/phone/email/fuzzy), מקבצת לפי utm_campaign, כותבת summary + raw leads ל-Sheets, ומסמנת אימיילים כקרואים רק אחרי כתיבה מוצלחת.
עיקרי הדברים
- סימון כקרוא רק אחרי כתיבה מוצלחת ל-Sheets — pipeline re-runnable לחלוטין
- Matcher ב-4 שכבות עם match_tier גלוי מאפשר ללקוח לבדוק ביטחון
- 5 מצבי הפעלה מ-CLI אחד (INIT, date-range, watch, dry-run, from-cache)
האתגר
אותו מספר טלפון הופיע בכמה קמפיינים באותו יום, מנפח נתונים ומטשטש invalid-rate.
Matcher עם ארבע שכבות עם תג match_tier גלוי בכל שורה, כדי שהלקוח יוכל לבדוק ביטחון; לידים ללא התאמה מוצגים בנפרד.
ה-session tokens של Worldfilia פגים בלי התראה והריצה המתוזמנת נכשלה בשקט.
שגיאה ממוזזת WorldfiliaAuthExpiredError עם הודעה ישירה למפעיל ויציאה עם קוד שגיאה כדי שהסקדולר ידווח.
סדר סמן-כקרוא-ואז-כתוב נאיבי מאבד לידים אם הכתיבה נכשלת אחרי הסימון.
סדר commit קפדני — משיכה, התאמה, אגרגציה, כתיבה ל-Sheets, ואז סימון. יחד עם cache JSON מקומי, ה-pipeline re-runnable לחלוטין.
Bootstrap בהעלייה: אלפי אימיילים היסטוריים לא-קרואים — חייבים לעבד פעם אחת בלי לעבד פעמיים את העתידיים.
מצב --init מרחיב את החלון ל-~2 שנים, מעבד הכל פעם אחת, מסמן כקרוא, ומדפיס הודעת מעבר ל-`--unread-only / --watch N`.
מה נמסר
- CLI main.py עם 5 מצבי הפעלה
- gmail_client.py, worldfilia_client.py, sheets_writer.py, auth_google.py, lead_matcher.py
- WorldfiliaAuthExpiredError עם הודעה אקטיבית
- Cache JSON פר טווח תאריכים
- Google OAuth token קבוע
- requirements.txt עם גרסאות נעולות
תוצאות
Gmail + Worldfilia
מקורות דאטה
4
שכבות match
5
מצבי הפעלה
Zero
איבוד דאטה בכישלון
מה זה לימד אותי
- סדר commit (כתוב-קודם-אז-סמן) הופך סנכרון שביר ל-re-runnable
- Match רב-שכבתי עם match_tier גלוי בונה אמון — auditability מנצח black-box
- שגיאות ממוזזות עם הנחיות פעולה חוסכות תמיכה כש-APIs פגים
