כל מה שצריך כדי שדף נחיתה ישלח לידים נכון אל מערכת הפרסום של Hebrew Calendar — מבנה הבקשה, השדות, ולמה כל ליד נחשב תקין.
דף הנחיתה שלכם שולח בקשת POST אחת עם פרטי הליד. המערכת מאמתת אותה, שומרת אותה במסד הנתונים, מצרפת אותה לקמפיין (לפי campaign_id), ושולחת התראת טלגרם מיידית על כל ליד תקין.
Landing page → POST /v1/lead → validate → store → Telegram alert + dashboard
גוף הבקשה הוא JSON עם הכותרת Content-Type: application/json. אין צורך במפתח API — הדף הציבורי שולח ישירות.
| שדה | חובה? | תיאור |
|---|---|---|
name | חובה | שם מלא של המתעניין. |
email | חובה* | אימייל תקין. *ראו סעיף 4 — דפי נחיתה ללא שדה אימייל חייבים placeholder. |
phone | רשות | טלפון. מומלץ מאוד — משמש לזיהוי כפילויות וליצירת קשר. |
message | רשות | פרטי ההצעה / טקסט חופשי (למשל דגם רכב, מחיר, consent). |
company | רשות | שם החברה, אם רלוונטי. |
campaign_id | רשות | מזהה הקמפיין (מספר). אם לא קיים — הליד נשמר ללא שיוך, אך עדיין תקין. |
source | רשות | מקור הליד. עבור דף נחיתה תמיד "form". ראו סעיף 5. |
landing_page | רשות | כתובת הדף ששלח את הליד. שלחו window.location.href. |
country | רשות | קוד מדינה, אם ידוע. אחרת מזוהה אוטומטית לפי IP. |
המערכת דורשת כרגע אימייל תקין בכל ליד. בקשה ללא אימייל (או עם אימייל ריק) נדחית עם שגיאת 400 — והליד אובד.
לשלוח { "name": "...", "phone": "..." } בלי שדה email → הליד נדחה ולא נשמר.
צרו אימייל placeholder בצד הלקוח לפני השליחה, נגזר מהטלפון, כך שהליד נשמר תקין ועדיין מזוהה ככזה ללא אימייל אמיתי:
// אם המשתמש לא מילא אימייל — צרו placeholder תקין if (!payload.email) { const digits = (payload.phone || '').replace(/\D/g, ''); payload.email = digits ? `${digits}@no-email.hebcal.co.il` // דדופ לפי אדם : `lead-${Date.now()}@no-email.hebcal.co.il`; // גיבוי }
ה-placeholder עובר את בדיקת תקינות האימייל, נשמר תקין (is_valid=1), וההתראה נשלחת. הסיומת @no-email.hebcal.co.il מאפשרת לסנן את הלידים האלו בדוחות.
אימייל ה-placeholder יופיע בדשבורד, בייצוא ה-CSV ובהתראת הטלגרם, וקישורי ה-mailto: אליו לא יעבדו. זהו פתרון ביניים — בעתיד המערכת תתמוך באימייל ריק באופן מובנה.
source מותריםהשדה מקבל רק ערכים מתוך רשימה לבנה. כל ערך אחר מתאפס אוטומטית ל-"form":
form whatsapp phone email
עבור דף נחיתה רגיל השתמשו תמיד ב-"form".
קוד מוכן להעתקה. הטופס קולט שם, טלפון ואימייל (רשות), קורא את campaign_id מכתובת ה-URL, ומפעיל את ה-placeholder אם האימייל ריק.
<form id="lead-form"> <input name="name" placeholder="שם מלא" required /> <input name="phone" placeholder="טלפון" type="tel" required /> <input name="email" placeholder="אימייל (רשות)" type="email" /> <button type="submit">שליחה</button> </form>
const ENDPOINT = 'https://ads.hebcal.co.il/v1/lead'; const form = document.getElementById('lead-form'); form.addEventListener('submit', async (e) => { e.preventDefault(); const payload = { name: form.name.value.trim(), phone: form.phone.value.trim(), email: form.email.value.trim(), source: 'form', campaign_id: new URLSearchParams(location.search).get('campaign_id'), landing_page: location.href, }; // Workaround: synthesize a placeholder email when blank if (!payload.email) { const digits = payload.phone.replace(/\D/g, ''); payload.email = digits ? `${digits}@no-email.hebcal.co.il` : `lead-${Date.now()}@no-email.hebcal.co.il`; } try { const res = await fetch(ENDPOINT, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(payload), }); const data = await res.json(); if (data.success) { // הציגו הודעת תודה } else { // data.error מכיל את הסיבה } } catch (err) { // שגיאת רשת — בקשו מהמשתמש לנסות שוב } });
גם לידים "לא תקינים" נשמרים (לצורך תיעוד) אך אינם מפעילים התראה ואינם מופיעים בתצוגות ברירת המחדל. ליד יסומן is_valid=1 כאשר:
| סיבת פסילה | מתי |
|---|---|
bad_email | אימייל לא תקין או ארוך מ-200 תווים. |
duplicate | אותו אימייל + קמפיין נשלח כבר ב-30 הימים האחרונים. |
rate_limit | יותר מדי בקשות מאותו IP בזמן קצר. |
200 OK { "success": true }
400 { "error": "Missing name or email" } // שדה חובה חסר 500 { "error": "..." } // תקלת שרת
ליד שנשמר אך נפסל כספאם (כפילות / rate limit) עדיין מחזיר 200 עם success: true — הוא פשוט לא מפעיל התראה. אל תתבססו על קוד התשובה כדי לדעת אם ליד "אמיתי" נקלט.
POST עם Content-Type: application/json.source: "form".campaign_id נכון (בד"כ מה-URL) לשיוך מדויק.landing_page: location.href.