דלגו לתוכן

או התחילו מנקודה בטוחה: אינדקס הכלים המלא · מפת הטבלאות המרכזיות

מערכת חדשה — 14 יום חינם

הפעלת קליטה מהאתר — דגלי Config

עודכן 29.08.2026

נקודות הקצה של הטפסים כבויות עד שמדליקים אותן. עד אז, כל בקשה — גם כזו שהקוד שלה מושלם — חוזרת עם 400 {"error":"<שם הדגל> is Disabled"}.

זו הסיבה מספר אחת לשגיאה בקריאה הראשונה אחרי עלייה לאוויר. לפני שאתם מחפשים באג בקוד, בדקו את הדגל.

ההפעלה היא שורה בטבלת המערכת 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. הדגל נקרא, אך לא נמצאה שום פונקציה שמגיבה לו בבילד שנבדק (12 וריאציות שם) — קיים כנראה רק ב‑forks של לקוחות

המסלול הנתמך: כלי הנתונים של MCP (בחיבור Master Key) — Get-Data לאיתור השורה, Create-Data ליצירתה, Update-Data להיפוך הערך. הפתיחה של טבלת Config ל‑MCP היא מכוונת — אושרה על ידי צוות הפיתוח (26.08.2026) — והזרימה המלאה אומתה שוב 2026-08-26 11:22: ‏Get-Schema מחזיר סכימה מלאה, Get-Data מחזיר את כל השורות, ו‑Update-Data על שורת AcceptWebToTable עובד.

אם אצל הלקוח שלכם כן קיים גריד Config (התקנות ותיקות או פורטלי ניהול מותאמים) — המסלול הוא:

  1. Tables ← Config — גריד ההגדרות הגולמי, עם סרגל Refresh / Settings / + Add row / Delete rows.
  2. אם כבר קיימת שורה עם ה‑Name המתאים — לוחצים על בעמודת Action ומעדכנים את Value ל‑{ "<שם הדגל>": true }.
  3. אם אין שורה כזו — לוחצים + Add row, ממלאים:
    • Name = שם הדגל המדויק, למשל AcceptWebToTable
    • Value = האובייקט { "AcceptWebToTable": true } — המפתח הפנימי חוזר על ה‑Name מילה במילה
  4. שומרים, ומוודאים שנשארה שורה אחת בלבד לכל דגל.

זו המלכודת שהכי קשה לאבחן, כי הכול “נראה נכון”.

הקוד מאתר את השורה עם query.first() — בלי מיון. באימות (16 קריאות, שני סדרי יצירה) התברר שההתנהגות דטרמיניסטית: השורה שנוצרה ראשונה מנצחת תמיד.

הסדר התוצאה ב‑8 קריאות רצופות
ישנה false, חדשה true 8 מתוך 8 נחסמו
ישנה true, חדשה false 8 מתוך 8 עברו

כלומר שורה ישנה עם false — למשל אחת מההקמה הראשונית — תמיד תשתק שורה חדשה עם true, ולא “לפעמים”. וכיבוי דגל בשורה חדשה פשוט לא ייכנס לתוקף.

אותו אובייקט 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 — ראו באג web-forms-02

כל הגבולות של ValidatePhoneOrEmail נמדדו אחד־אחד (ואומתו שוב ב‑08.2026): 6 ספרות נדחות, 7 עוברות, 14 עוברות, 15 נדחות; a@b.c (5 תווים) נדחה, a@b.co (6) עובר, 80 תווים עוברים, 81 נדחים, aaaa@bbbb (בלי נקודה) נדחה. בלי הדגל, phone: "abc" עובר ב‑200 ויוצר איש קשר.

דוגמה לשורת Config מלאה של web2table:

JSON
{
"Name": "AcceptWebToTable",
"Value": {
"AcceptWebToTable": true,
"ValidatePhoneOrEmail": true,
"DefaultValues": {
"Account": { "LeadSourceId": "yOTdl4L99Q" },
"Table": { "SaleStatusId": "zrP1MSVBoq", "IsWeb": "true" }
}
}
}

מאז גרסת השרת של 25.08.2026 טבלת Config נגישה מכלי ה‑MCP (בחיבור Master Key). הפתיחה מכוונת — אושרה על ידי צוות הפיתוח (26.08.2026). אומת 2026-08-25 17:58–18:00 ושוב 2026-08-26 11:22:

הכלי התשובה
Get-Data על Config כל שורות הטבלה — כולל שורות הדגלים ושורת Payment (רגיש!)
Create-Data / Create-Many על Config יוצרים שורה ומחזירים objectId
Update-Data על שורת דגל עובד — זרימת “הדלקת הדגל” המלאה אומתה
Get-Schema על Config סכימה מלאה

כלומר סוכן AI או מיישם שעובד דרך MCP יכול עכשיו לאבחן דגל כבוי, ליצור את השורה ולהפוך את הערך — זכרו את כלל “שורה אחת בדיוק לכל דגל” למטה, ואת רגישות התוכן.

היסטוריה: עד 25.08.2026 הטבלה הייתה חסומה לחלוטין (Get-DataError: Table is restricted, Create-Data/Create-ManyError: Table Config is restricted, Get-Schema{}), והמסלול היחיד היה REST עם Master Key — כלומר הסלמה לצוות MyBusiness (web-forms-07).

בדיקה ב‑REST — Master Key בלבד

Section titled “בדיקה ב‑REST — Master Key בלבד”

כשלמי שמטפל בזה יש Master Key (בדרך כלל צוות MyBusiness), אפשר לבדוק וליצור ישירות:

Bash
# בדיקה — כמה שורות יש, ומה הערך בכל אחת
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"}'
JavaScript
// בדיקה — כמה שורות יש, ומה הערך בכל אחת
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,
},
});
Python
# בדיקה — כמה שורות יש, ומה הערך בכל אחת
import json
import 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
<?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);
Bash
# יצירה
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}}'
JavaScript
// יצירה
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 } }),
});
Python
# יצירה
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
<?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 (אומת 24.08.2026)

הבדיקה קורית לפני זיהוי הכפילויות, לפני ValidatePhoneOrEmail ולפני אימות השדות מול הסכימה — אבל לא לפני הכול. הסדר שנמדד ב‑web2table (08.2026), עם הדגל כבוי:

הגוף שנשלח (דגל כבוי) התשובה
{} או ללא 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” אומרת שהגוף עבר רק את שלוש הבדיקות הראשונות, לא שהוא תקין.

  • קיימת שורה ב‑Config עם ה‑Name המדויק של הדגל הנכון לנקודת הקצה
  • ה‑Value הוא אובייקט, והמפתח הפנימי זהה ל‑Name מילה במילה
  • המפתח הפנימי הוא true / false בוליאני — כל ערך truthy אחר ("true", 1, ואפילו "false") נקרא כדלוק (מגבלה forms-a-01)
  • קיימת שורה אחת בלבד עם ה‑Name הזה — ואם לא, השורה הישנה ביותר היא זו שנקראת
  • מי שמשתמש בכמה נקודות קצה — בדק את כל השורות
  • הבדיקה נעשתה ב‑REST עם Master Key או (מאז 25.08.2026) בכלי הנתונים של MCP בחיבור Master Key
  • הקוד בצד הלקוח מסתעף על גוף התשובה ולא על הסטטוס — הכול חוזר כ‑400

שתי דוגמאות ה‑curl שלמעלה הורצו כלשונן מול טננט בדיקה — שתיהן הצליחו.