הפעלת קליטה מהאתר — דגלי Config
נקודות הקצה של הטפסים כבויות עד שמדליקים אותן. עד אז, כל בקשה — גם כזו שהקוד שלה מושלם — חוזרת עם
400 {"error":"<שם הדגל> is Disabled"}.
זו הסיבה מספר אחת לשגיאה בקריאה הראשונה אחרי עלייה לאוויר. לפני שאתם מחפשים באג בקוד, בדקו את הדגל.
שורות הדגל
Section titled “שורות הדגל”ההפעלה היא שורה בטבלת המערכת Config. ה‑Name הוא מפתח החיפוש, וה‑Value הוא אובייקט שחוזר על אותו שם כמפתח פנימי:
Name (String) |
Value (Object) |
מה זה מפעיל |
|---|---|---|
AcceptWebLeads |
{ "AcceptWebLeads": true } |
getlead — נוצר אוטומטית בתבנית vanilla ודלוק כברירת מחדל |
AcceptWebToTable |
{ "AcceptWebToTable": true } |
web2table — יצירת שורה בטבלת יעד. אינו נוצר בתבנית — צריך להקים אותו |
AcceptWebToCaseLeads |
{ "AcceptWebToCaseLeads": true } |
web2case — יצירת פנייה |
AcceptWebToSaleLeads |
{ "AcceptWebToSaleLeads": true } |
קליטת web→sale‑lead. הדגל נקרא, אך אין בבילד הנוכחי שום פונקציה שמגיבה לו — הוא קיים כנראה רק ב‑forks של לקוחות |
איך מדליקים
Section titled “איך מדליקים”המסלול הנתמך: כלי הנתונים של MCP (בחיבור Master Key) — Get-Data לאיתור השורה, Create-Data ליצירתה, Update-Data להיפוך הערך. הפתיחה של טבלת Config ל‑MCP היא מכוונת: Get-Schema מחזיר סכימה מלאה, Get-Data מחזיר את כל השורות, ו‑Update-Data על שורת AcceptWebToTable עובד.
אם אצל הלקוח שלכם כן קיים גריד Config (התקנות ותיקות או פורטלי ניהול מותאמים) — המסלול הוא:
- Tables ←
Config— גריד ההגדרות הגולמי, עם סרגל Refresh / Settings / + Add row / Delete rows. - אם כבר קיימת שורה עם ה‑
Nameהמתאים — לוחצים על ✎ בעמודת Action ומעדכנים אתValueל‑{ "<שם הדגל>": true }. - אם אין שורה כזו — לוחצים + Add row, ממלאים:
Name= שם הדגל המדויק, למשלAcceptWebToTableValue= האובייקט{ "AcceptWebToTable": true }— המפתח הפנימי חוזר על ה‑Nameמילה במילה
- שומרים, ומוודאים שנשארה שורה אחת בלבד לכל דגל.
שורה אחת בדיוק לכל דגל
Section titled “שורה אחת בדיוק לכל דגל”זו המלכודת שהכי קשה לאבחן, כי הכול “נראה נכון”.
הקוד מאתר את השורה עם query.first() — בלי מיון. ההתנהגות דטרמיניסטית: השורה שנוצרה ראשונה מנצחת תמיד.
| הסדר | התוצאה ב‑8 קריאות רצופות |
|---|---|
ישנה false, חדשה true |
8 מתוך 8 נחסמו |
ישנה true, חדשה false |
8 מתוך 8 עברו |
כלומר שורה ישנה עם false — למשל אחת מההקמה הראשונית — תמיד תשתק שורה חדשה עם true, ולא “לפעמים”. וכיבוי דגל בשורה חדשה פשוט לא ייכנס לתוקף.
מה עוד יושב בתוך Value
Section titled “מה עוד יושב בתוך Value”אותו אובייקט Value הוא גם מקום ההגדרות של נקודת הקצה — לא רק מתג הפעלה:
| המפתח | חל על | מה הוא עושה |
|---|---|---|
<שם הדגל> |
כולן | המתג עצמו — true / false |
ValidatePhoneOrEmail |
כולן | כשהוא דלוק, השרת מחזיר 400 {"error":"missing \"PhoneNumber\" or \"Email\""} אם גם הטלפון וגם האימייל אינם תקינים. טלפון: מסירים תווים שאינם ספרות ואז נדרשות 7–14 ספרות (050-123-4567 עובר). אימייל: 6–80 תווים, מכיל @ וגם .. תקין אחד מהשניים — הבקשה עוברת |
DefaultValues.Account |
web2table |
ערכי ברירת מחדל שהשרת ממלא ב‑Accounts שנוצרת כשהבקשה לא שלחה אותם |
DefaultValues.Table |
web2table |
אותו דבר עבור השורה שנוצרת בטבלת היעד. זו הדרך היחידה שעובדת לקביעת SaleStatusId |
הגבולות של ValidatePhoneOrEmail, אחד־אחד: 6 ספרות נדחות, 7 עוברות, 14 עוברות, 15 נדחות; a@b.c (5 תווים) נדחה, a@b.co (6) עובר, 80 תווים עוברים, 81 נדחים, aaaa@bbbb (בלי נקודה) נדחה. בלי הדגל, phone: "abc" עובר ב‑200 ויוצר איש קשר.
דוגמה לשורת Config מלאה של web2table:
{ "Name": "AcceptWebToTable", "Value": { "AcceptWebToTable": true, "ValidatePhoneOrEmail": true, "DefaultValues": { "Account": { "LeadSourceId": "yOTdl4L99Q" }, "Table": { "SaleStatusId": "zrP1MSVBoq", "IsWeb": "true" } } }}אימות דרך MCP
Section titled “אימות דרך MCP”בגרסאות שרת עדכניות טבלת Config נגישה מכלי ה‑MCP (בחיבור Master Key). הפתיחה מכוונת:
| הכלי | התשובה |
|---|---|
Get-Data על Config |
כל שורות הטבלה — כולל שורות הדגלים ושורת Payment (רגיש!) |
Create-Data / Create-Many על Config |
יוצרים שורה ומחזירים objectId |
Update-Data על שורת דגל |
עובד — זרימת “הדלקת הדגל” המלאה |
Get-Schema על Config |
סכימה מלאה |
כלומר סוכן AI או מיישם שעובד דרך MCP יכול עכשיו לאבחן דגל כבוי, ליצור את השורה ולהפוך את הערך — זכרו את כלל “שורה אחת בדיוק לכל דגל” למטה, ואת רגישות התוכן.
היסטוריה: בגרסאות שרת ישנות הטבלה הייתה חסומה לחלוטין (Get-Data → Error: Table is restricted, Create-Data/Create-Many → Error: Table Config is restricted, Get-Schema → {}), והמסלול היחיד היה REST עם Master Key — כלומר הסלמה לצוות MyBusiness.
בדיקה ב‑REST — Master Key בלבד
Section titled “בדיקה ב‑REST — Master Key בלבד”כשלמי שמטפל בזה יש Master Key (בדרך כלל צוות MyBusiness), אפשר לבדוק וליצור ישירות:
# בדיקה — כמה שורות יש, ומה הערך בכל אחתcurl -sS -G "https://api.mbapps.co.il/parse/classes/Config" \ -H "X-Parse-Application-Id: $APP_ID" \ -H "X-Parse-Master-Key: $MASTER_KEY" \ --data-urlencode 'where={"Name":"AcceptWebToTable"}'// בדיקה — כמה שורות יש, ומה הערך בכל אחתconst params = new URLSearchParams({ where: JSON.stringify({ Name: 'AcceptWebToTable' }) });const res = await fetch(`https://api.mbapps.co.il/parse/classes/Config?${params}`, { headers: { 'X-Parse-Application-Id': APP_ID, 'X-Parse-Master-Key': MASTER_KEY, },});# בדיקה — כמה שורות יש, ומה הערך בכל אחתimport jsonimport requests
res = requests.get( "https://api.mbapps.co.il/parse/classes/Config", headers={ "X-Parse-Application-Id": APP_ID, "X-Parse-Master-Key": MASTER_KEY, }, params={"where": json.dumps({"Name": "AcceptWebToTable"})},)<?php// בדיקה — כמה שורות יש, ומה הערך בכל אחת$query = http_build_query(["where" => json_encode(["Name" => "AcceptWebToTable"])]);$ch = curl_init();curl_setopt_array($ch, [ CURLOPT_URL => "https://api.mbapps.co.il/parse/classes/Config?{$query}", CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => [ "X-Parse-Application-Id: {$APP_ID}", "X-Parse-Master-Key: {$MASTER_KEY}", ],]);$response = curl_exec($ch);curl_close($ch);# יצירהcurl -sS -X POST "https://api.mbapps.co.il/parse/classes/Config" \ -H "X-Parse-Application-Id: $APP_ID" \ -H "X-Parse-Master-Key: $MASTER_KEY" \ -H "Content-Type: application/json" \ -d '{"Name":"AcceptWebToTable","Value":{"AcceptWebToTable":true}}'// יצירהconst res = await fetch("https://api.mbapps.co.il/parse/classes/Config", { method: 'POST', headers: { 'X-Parse-Application-Id': APP_ID, 'X-Parse-Master-Key': MASTER_KEY, 'Content-Type': 'application/json', }, body: JSON.stringify({ Name: 'AcceptWebToTable', Value: { AcceptWebToTable: true } }),});# יצירהimport requests
res = requests.post( "https://api.mbapps.co.il/parse/classes/Config", headers={ "X-Parse-Application-Id": APP_ID, "X-Parse-Master-Key": MASTER_KEY, "Content-Type": "application/json", }, json={"Name": "AcceptWebToTable", "Value": {"AcceptWebToTable": True}},)<?php// יצירה$ch = curl_init();curl_setopt_array($ch, [ CURLOPT_URL => "https://api.mbapps.co.il/parse/classes/Config", CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => [ "X-Parse-Application-Id: {$APP_ID}", "X-Parse-Master-Key: {$MASTER_KEY}", "Content-Type: application/json", ], CURLOPT_POSTFIELDS => json_encode(["Name" => "AcceptWebToTable", "Value" => ["AcceptWebToTable" => true]]),]);$response = curl_exec($ch);curl_close($ch);מה בדיוק מחזירה נקודת הקצה כשהדגל כבוי
Section titled “מה בדיוק מחזירה נקודת הקצה כשהדגל כבוי”| נקודת הקצה | הסטטוס | ההודעה |
|---|---|---|
web2table |
400 |
AcceptWebToTable is Disabled |
web2case |
400 |
AcceptWebToCaseLeads is Disabled |
getlead |
400 |
AcceptWebLeads is Disabled |
הבדיקה קורית לפני זיהוי הכפילויות, לפני ValidatePhoneOrEmail ולפני אימות השדות מול הסכימה — אבל לא לפני הכול. הסדר ב‑web2table, עם הדגל כבוי:
| הגוף שנשלח (דגל כבוי) | התשובה |
|---|---|
{} או ללא phone |
400 {"error":"missing \"phone\""} |
phone בלי table |
400 {"error":"missing \"table\" in request body"} |
table שאינו קיים + phone |
400 {"code":103,"message":"Class X does not exist."} |
table קיים + phone, וכל השאר פסול (Pointer שגוי, phone לא תקין) |
400 {"error":"AcceptWebToTable is Disabled"} |
table או phone שאינם מחרוזת |
400 {} — גוף ריק, בלי הודעה |
כלומר: קיום phone, קיום table וקיום המחלקה נבדקים לפני הדגל; כל השאר — אחריו. שגיאת “is Disabled” אומרת שהגוף עבר רק את שלוש הבדיקות הראשונות, לא שהוא תקין.
רשימת בדיקה
Section titled “רשימת בדיקה”- קיימת שורה ב‑
Configעם ה‑Nameהמדויק של הדגל הנכון לנקודת הקצה - ה‑
Valueהוא אובייקט, והמפתח הפנימי זהה ל‑Nameמילה במילה - המפתח הפנימי הוא
true/falseבוליאני — כל ערך truthy אחר ("true",1, ואפילו"false") נקרא כדלוק - קיימת שורה אחת בלבד עם ה‑
Nameהזה — ואם לא, השורה הישנה ביותר היא זו שנקראת - מי שמשתמש בכמה נקודות קצה — בדק את כל השורות
- הבדיקה נעשתה ב‑REST עם Master Key או בכלי הנתונים של MCP בחיבור Master Key (בשרת עדכני)
- הקוד בצד הלקוח מסתעף על גוף התשובה ולא על הסטטוס — הכול חוזר כ‑400
- אבחון תקלות בטפסים — כשהדגל דלוק ועדיין לא עובד
- getlead · web2table
- מודל האבטחה — למה לא לפתוח הרשאות טבלה כדי “לתקן” את השגיאה