טפסים מהאתר — מאיזו נקודת קצה מתחילים
שתי נקודות קצה לטפסים מדף חיצוני. רצות בצד השרת, בלי Master Key ובלי SDK, מהדפדפן של גולש אנונימי.
טבלת ההחלטה
Section titled “טבלת ההחלטה”getlead |
web2table |
|
|---|---|---|
| מה נוצר | שורה אחת ב‑Accounts עם IsAccount: false — כלומר ליד |
שורה בטבלת היעד (Sales, Cases, Orders, טבלה מותאמת) וגם איש קשר ב‑Accounts, אם הוא עוד לא קיים |
| מתי | הטופס לוכד איש קשר בלבד — שם, טלפון, אימייל, מקור | הטופס צריך ליצור גם רשומה עסקית מקושרת: מכירה, פנייה, הרשמה לקורס, הזמנה |
| שדה חובה | לפחות אחד מ‑PhoneNumber / Email |
table וגם phone |
| שמות שדות | שטוחים, בדיוק כמו בסכימת Accounts |
שלוש קבוצות עם קידומות: ללא קידומת / account_ / table_ |
| דגל ההפעלה | AcceptWebLeads |
AcceptWebToTable |
| איש קשר קיים | לא ממוזג — נוצרת שורת ליד חדשה שמסומנת ככפולה | נמצא ומקושר, ולא מתעדכן |
| התיעוד | getlead | web2table |
צריך שתיפתח רשומה אחרי השליחה, ולא רק כרטיס איש קשר: web2table.
חוזה הכותרות — משותף לשתיהן
Section titled “חוזה הכותרות — משותף לשתיהן”POST https://api.mbapps.co.il/functions/{appId}/getlead
POST https://api.mbapps.co.il/functions/{appId}/web2table
POST https://api.mbapps.co.il/functions/{appId}/web2table
curl -X POST "https://api.mbapps.co.il/functions/{appId}/getlead" \ -H "Content-Type: application/json" \ -H "X-Parse-Application-Id: {appId}" \ -d '{ "Name": "ישראל ישראלי", "PhoneNumber": "0501234567" }'const res = await fetch(`https://api.mbapps.co.il/functions/${appId}/getlead`, { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-Parse-Application-Id': appId, }, body: JSON.stringify({ Name: 'ישראל ישראלי', PhoneNumber: '0501234567', }),});import requests
res = requests.post( f"https://api.mbapps.co.il/functions/{appId}/getlead", headers={ "Content-Type": "application/json", "X-Parse-Application-Id": appId, }, json={ "Name": "ישראל ישראלי", "PhoneNumber": "0501234567", },)<?php$ch = curl_init();curl_setopt_array($ch, [ CURLOPT_URL => "https://api.mbapps.co.il/functions/{$appId}/getlead", CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => [ "Content-Type: application/json", "X-Parse-Application-Id: {$appId}", ], CURLOPT_POSTFIELDS => json_encode([ "Name" => "ישראל ישראלי", "PhoneNumber" => "0501234567", ], JSON_UNESCAPED_UNICODE),]);$response = curl_exec($ch);curl_close($ch);| מה | הערך |
|---|---|
| שיטה | POST. בבילד הנוכחי גם GET עם query string יוצר רשומה, ראו האזהרה למטה |
| כתובת בסיס | https://api.mbapps.co.il/functions/{appId}/ — לא מתחת ל‑/parse |
Content-Type |
application/json. application/x-www-form-urlencoded מתקבל גם הוא |
X-Parse-Application-Id |
ה‑Application Id של המערכת. שלחו תמיד, אך היא אינה נאכפת: המזהה שקובע הוא זה שבנתיב |
| גוף | JSON שטוח. אין multipart |
| קבצים | ב‑getlead אין שדות קובץ. ב‑web2table: מעלים קודם את הקובץ — POST /parse/files/<name> (כותרת App ID בלבד, הגוף הוא הקובץ) — ושולחים את אובייקט ה‑File שחזר: {"__type":"File","name":…,"url":…} → 200 ושורה אחת עם הקובץ (נבדק 10.2026). אובייקט File של קובץ שלא הועלה מחזיר 400 {"code":1} אחרי כ‑5 שניות ומשאיר בצד השרת איש קשר ו‑5 שורות יעד כפולות; מחרוזת URL מחזירה 400 (code 111), אבל איש הקשר כבר נוצר. |
ה‑Application Id הוא מזהה ציבורי
Section titled “ה‑Application Id הוא מזהה ציבורי”שימו אותו בקוד הדפדפן. אינו Master Key, אינו API Key, ואינו מאפשר לקרוא, לעדכן או למחוק נתונים. מי שמחזיק אותו יכול רק לקרוא לנקודות הקצה הפומביות, כמו כל מי שממלא את הטופס באתר.
שלושת השערים, כולם בצד השרת:
- דגל ה‑Config שמפעיל את נקודת הקצה: דגלי Config.
- ולידציה של השדות מול הסכימה, ו‑
ValidatePhoneOrEmailאם הלקוח הדליק אותו. - שער ה‑CAPTCHA של Parse שחוסם כל יצירה אנונימית אחרת שאינה נושאת טוקן reCAPTCHA של הפלטפורמה: מודל האבטחה.
שני דיאלקטים
Section titled “שני דיאלקטים”אותו נתון נשלח בשני שמות שונים. לכן שני עמודים נפרדים, ולא עמוד אחד עם שדה table אופציונלי.
// getlead — שטוח, בשמות הסכימה{ "Name": "ישראל ישראלי", "PhoneNumber": "0501234567", "City": "תל אביב" }
// web2table — אותו איש קשר, שמות אחרים לגמרי{ "table": "Sales", "phone": "0501234567", "account_Name": "ישראל ישראלי", "account_City": "תל אביב" }getlead |
web2table |
|
|---|---|---|
| טלפון | PhoneNumber |
phone (בלי קידומת) |
| אימייל | Email |
email (בלי קידומת) |
| ח.פ. / ת.ז. | CompanyId |
idnum (בלי קידומת) |
| שם | Name |
account_Name |
| עיר | City |
account_City |
סדר העבודה
Section titled “סדר העבודה”- הדליקו את הדגל. נקודת הקצה חסומה עד להפעלה בטבלת
Config, ו‑400 {"error":"… is Disabled"}בקריאה הראשונה זה כמעט תמיד זה. - שלפו את הסכימה של
Accounts, ושל טבלת היעד ב‑web2table, ובנו מפת שדות. - כתבו את הטופס לפי הדיאלקט: getlead או web2table.
- בררו מה יקרה לכפילויות.
- הטמיעו, ואז מודל האבטחה לפני שמישהו “מתקן” הרשאות.
דילוג על צעד 1 או 2 הוא הסיבה לרוב התקלות.
כל עמודי הפרק
Section titled “כל עמודי הפרק”| העמוד | מה תמצאו בו |
|---|---|
| getlead | נקודת הקצה, שדות מוגנים, טיפוסים, קוד מלא לטופס נחיתה, צ’קליסט |
| web2table | שלוש קבוצות השמות, שדות אוטומטיים, IsFirst, שני מקרי שימוש |
| דגלי Config | שלוש שורות הדגל, המסלול בממשק, ולמה שורה כפולה שוברת הכול |
| מיפוי שדות | שליפת סכימה, מפות Pointer, טבלת הטיפוסים של שכבת הטפסים |
| זיהוי כפילויות | מה רץ בשרת, נרמול טלפון, סטטוסים, IsFirst |
| מודל האבטחה | למה CLP פתוח לא עוזר, create‑only, תבנית טבלת קליטה |
| אבחון תקלות | תסמין ← סיבה ← בדיקה, בסדר הנכון |
| הטמעה בפועל | WordPress, Wix, HTML, שרת ביניים, ומה קורה אחרי ההצלחה |
- מודל הנתונים ומוסכמות — למה
Accountsמחזיקה גם לידים וגם לקוחות - דוגמאות קוד — PHP · Python · Node.js · C# · JavaScript
- שגיאות ופתרון תקלות — קודי השגיאה של כל השכבות