כתובות השירותים (WIZZO_ENDPOINTS)

טבלה אחת של כל כתובות Wizzo שהליבה פונה אליהן, עם ברירת מחדל, החלפה לכל אתר ומתג כיבוי לכל שירות, וזיהוי שרת הליבה לפי דגל

⏱ 7 דק' קריאה 1343 מילים

מגרסה 5.0.152 כל כתובת של שירות Wizzo שהליבה פונה אליה, בצד השרת ובדפדפן, נקראת מטבלה אחת: collections/WIZZO_ENDPOINTS.php. לכל שירות יש ברירת מחדל, אתר יכול להפנות אותו לשרת אחר או לכבות אותו לגמרי ב-config.php שלו, ואתר שלא שינה כלום מתנהג בדיוק כמו קודם.

לפני כן הכתובות היו כתובות ישירות בקבצי PHP, בתבניות וב-JS, ולכן לא היה אפשר להפנות שירות לשרת אחר או לכבות אותו.

הטבלה#

שירותברירת מחדלכתובות נוספותמה זהמוצר במרקט
masterhttps://wizzocms40.wizzo.co.ilשרת הליבה: עדכוני הליבה
markethttps://market.wizzo.mediaה-API של Wizzo Market והחבילות שלוכל המוצרים
authhttps://auth.wizzo.co.ilWIZZO ID: קוד חד-פעמי וטוקנים למפתחים
aihttps://stream.ai.wizzo.medialegacy: https://api.ai.wizzo.mediaWizzoAIwizzoai
mcphttps://mcp.wizzo.marketשער ה-MCPmcp
oleghttps://oleg.wizzo.marketאולג AI, המנוע המאוחסןoleg
seokhttps://seok.wizzo.marketSEOk, מנוע ה-SEO המאוחסןseoadvisor
spamguardhttps://spamdetector.wizzo.mediaSPAM Guardspamguard
pilothttps://pilot.wizzo.mediaWizzo Pilot, ווידג'ט הצ'אטpilot
newpagehttps://newpage.wizzo.mediaדף חדש, דפי הנחיתה הציבורייםnewpage
nowhttps://now.wizzo.mediaWizzo Now: נוכחות וצ'אט מנהליםwizzonow
kamahttps://radar.wizzo.mediaKAMA, אנליטיקס (המארח שמר על השם הישן)kama, wizzoradar
pooshhttps://poosh.wizzo.mediaPOOSH, התראותpoosh, wizzopoosh
whatsapphttps://whatsapp-web.wizzo.mediaWhatsAPIwhatsapp
streamhttps://api.wizzo.streamplayer: https://matkon.wizzo.stream, cdn: https://wizzo.cdn.wizzo.streamWizzoStreamwizzostream
newshttps://www.wizzo.co.il"הודעות Wizzo" בדף הבית של הפאנל
todohttps://api.todo.workapp: https://wizzo.todo.workTODO, לוח המשימות (todo.work) שאליו מחוברים דוחות SEO ואולג. הספרייה שפונה אליו לא קיימת באתר הפצה

איך משנים: $wizzo_endpoints ב-config.php#

ההגדרה יושבת ב-system/config.php של האתר, בתוך class CONFIG_USER. אפשר להשמיט אותה: בלעדיה כל השירותים פעילים עם ברירות המחדל.

class CONFIG_USER
{
    // ...
    static $wizzo_endpoints = [
        "news"   => false,                             // שירות כבוי
        "kama"   => "https://kama.example.com",        // אותו שירות בשרת אחר
        "stream" => ["player" => "https://player.example.com"], // רק אחת מהכתובות של השירות
    ];
}
ערךמשמעות
false, null או ""השירות כבוי באתר
מחרוזתכתובת הבסיס של השירות (בלי / בסוף, הליבה מורידה אותו בכל מקרה)
מערךהחלפה של חלק מהכתובות לפי שם (url, player, cdn, app, legacy). "enabled" => false במערך מכבה
trueפעיל עם ברירת המחדל, שימושי אחרי "*" => false

כדי לכבות הכל ולהשאיר רק מה שבשימוש:

static $wizzo_endpoints = [
    "*"      => false,  // כל השירותים כבויים
    "master" => true,   // חוץ מעדכוני הליבה
    "auth"   => true,   // ו-WIZZO ID
];
הערה

הקבועים הישנים NEWPAGE_BASE ו-PILOT_BASE עדיין נקראים: אתר שמגדיר אותם ולא כתב את השירות ב-$wizzo_endpoints מקבל את הכתובת שלהם, כמו קודם. ערך ב-$wizzo_endpoints קודם להם.

מה קורה כששירות כבוי#

שירות כבוי לא שובר אף מסך. אף קריאה לא יוצאת אליו, ומה שתלוי בו נעלם:

שירות כבוימה רואים
marketWizzo Market נעלם מהתפריט ומדף הבית, כל המוצרים שלו לא פעילים, ומסך המרקט מציג הודעה שהוא כבוי באתר. ה-proxy (wizzo_market_api) עונה JSON עם status:false
שירות של מוצרהמוצר לא פעיל באתר: הפריט שלו בתפריט, הכרטיס בדף הבית, הסקריפטים שהוא מזריק והמפתח שלו נעלמים יחד (market_service::without_disabled)
masterבפאנל העדכונים מופיעה תיבה "עדכוני הליבה כבויים באתר הזה", ובדיקת הגרסה, עדכון הסכמה, הפאנלים, ה-JS וה-cron לא פונים לשום מקום
authההתחברות עם WIZZO ID לא נשלחת, והכניסה חוזרת לקוד ב-SMS
spamguardהמסנן לא פעיל ומאשר כל טופס (fail open), כמו כשאין לו מפתח
pilot, newpageדף חדש ציבורי (/p/<slug>) מציג עמוד שגיאה, ואין פנייה לשרת של הווידג'ט ושל הדפים
newsתיבת "הודעות Wizzo" לא מוצגת בדף הבית של הפאנל
stream (player או cdn)הנגן בחדשות מוסתר, ובמקום התמונה הממוזערת של הסרטון מוצגת תמונת הכתבה
todoפתיחת טיקט מחזירה הודעה שהשירות כבוי, בלי קריאה החוצה
mcpחיבור ה-gateway מחזיר שגיאה ברורה, ואין טוקן

בקוד PHP#

WIZZO_ENDPOINTS::url("kama");                     // "https://radar.wizzo.media"
WIZZO_ENDPOINTS::url("kama", "/api/stats");       // "https://radar.wizzo.media/api/stats"
WIZZO_ENDPOINTS::url("stream", "", "player");     // "https://matkon.wizzo.stream"
WIZZO_ENDPOINTS::enabled("kama");                 // false כשהאתר כיבה
WIZZO_ENDPOINTS::product_enabled("wizzoradar");   // המרקט והשירות של המוצר פעילים
WIZZO_ENDPOINTS::overridden("oleg");              // האתר הפנה את השירות לכתובת משלו

שירות כבוי מחזיר "" מ-url(). הכלל: בודקים enabled() לפני הקריאה ולא קוראים בכלל, במקום לשלוח בקשה לכתובת ריקה.

אצל אולג ו-SEOk הכתובת שהאתר כתב ב-config.php קודמת לכתובת שהמרקט שלח (dashboard_url), והיא קודמת לברירת המחדל. בשער ה-MCP הסדר זהה: האתר, אחר כך mcp_url מהמרקט, אחר כך url("mcp", "/mcp").

בדפדפן: window.WIZZO_ENDPOINTS#

פאנל הניהול מזריק את הטבלה לראש העמוד, לפני כל סקריפט (themes/admin_panel/index.php, WIZZO_ENDPOINTS::js_snippet()). זה אובייקט שטוח: שם השירות לכתובת הבסיס, שירות_כתובת לכתובות הנוספות (stream_player, stream_cdn, ai_legacy, todo_app), ו-null לשירות כבוי. todo עצמו לא נשלח לדפדפן.

var kama = (window.WIZZO_ENDPOINTS ? window.WIZZO_ENDPOINTS.kama : 'https://radar.wizzo.media');
if (!kama) return;                                  // השירות כבוי באתר
var ws = new WebSocket(kama.replace(/^http/, 'ws') + '/?apiKey=' + apiKey);

כל סקריפט קורא את הטבלה עם ברירת מחדל, כי חלק מהם נטענים גם במקומות שהטבלה לא הוזרקה בהם. אל תצהירו על const ברמה העליונה של סקריפט כזה: סקריפט שנטען שוב ב-AJAX זורק שגיאה על הצהרה כפולה.

שרת הליבה: דגל, לא כתובת IP#

השרת שממנו האתרים מושכים את הליבה מזוהה בדגל ב-config.php שלו, ולא לפי כתובת IP:

static $wizzo_master = true;

WIZZO_ENDPOINTS::is_master() קורא את הדגל. על השרת הזה פאנל העדכונים מציג "זהו שרת הליבה" ואף פעם לא מושך ZIP של ליבה על עצמו. אתר רגיל לא מגדיר את הדגל.

אתרים שחולקים את תיקיית הליבה של השרת הזה צריכים לדעת שאסור להם לעדכן אותה. לכן השרת משאיר בתיקיית הליבה קובץ סימון, .wizzo_master_core (ensure_master_marker()), ו-core_is_master() מחזיר true כשיש דגל או קובץ סימון. הקובץ לא נכלל ב-ZIP של הליבה, ולכן אתר עם ליבה משלו אף פעם לא מקבל אותו.

שני הדגלים והסימון במרקט: $wizzo_master, $wizzo_endpoints ו-is_wizzo#

שני דגלים ב-config.php וסימון אחד במרקט, ולכל אחד שאלה אחרת. אין ביניהם מנגנון כפול:

מהאיפההשאלהברירת מחדלמי קורא אותו
$wizzo_masterconfig.phpהאם האתר הזה הוא שרת הליבהfalseרק WIZZO_ENDPOINTS::is_master(). כל מקום אחר שואל את הפונקציה
is_wizzoהשורה של האתר במרקט, מגיע לאתר ב-market_settings.jsonהאם זה אתר של Wizzo, או אתר הפצה שמקבל ליבה בלי כלים שהם של Wizzo בלבדאתר של Wizzo, כל עוד המרקט לא אמר אחרתmarket_service::is_wizzo(), וההחלטה ב-AdminModule::is_wizzo_site()
$wizzo_endpointsconfig.phpלאיזה שרת כל שירות פונה, ואילו שירותים כבוייםהכל פעיל, בכתובות ברירת המחדלWIZZO_ENDPOINTS::all()

הקשר ביניהם:

  • המאסטר תמיד אתר של Wizzo. is_wizzo_site() מחזיר true כש-is_master() מחזיר true, מה שלא יהיה כתוב עליו במרקט.
  • הסימון במרקט, לא בקבצים. המרקט שולח את הסימון עם ההגדרות (api/get_settings), והאתר שומר אותו ב-market_settings.json כ-"site": {"is_wizzo": true|false}. שינוי הסימון במרקט מבקש מהאתר למשוך הגדרות מיד.
  • רק false מפורש הופך אתר לאתר הפצה. אתר שלא מחובר למרקט, או שמשך הגדרות לפני שהמרקט שלח את הסימון, נשאר של Wizzo.
  • אתר הפצה מוריד את ה-ZIP של ההפצה (edition=dist) מהכתובת master שבטבלה. אם הוא כיבה את master, הוא לא מבקש עדכונים בכלל. פרטים ב-מהדורת הפצה.
  • is_wizzo קובע מה יש בליבה, $wizzo_endpoints קובע לאן היא פונה. באתר הפצה אין Todo.php, ולכן השירות todo לא משנה בו כלום. כל שאר השירותים (המרקט, WizzoAI, KAMA ועוד) נשארים באתר הפצה ופעילים כרגיל, וכדי לכבות אותם כותבים אותם ב-$wizzo_endpoints.
  • אף אחד מהם לא תלוי בכתובת IP.

מה נשאר מחוץ לטבלה#

מהלמה
הלוגו במסך הכניסה (themes/admin_login/index.tpl)עדיין נטען מהשרת הראשי, ולכן לא מושפע מ-master כבוי
assets/services_wizzoradar/wizzoRadar.jsהעתק מדויק של לקוח KAMA. משנים אותו רק בריפו של KAMA
ה-User-Agent של SeoGeo ושולח המייל בהתחברותאלה שמות, לא כתובות שהליבה פונה אליהן
POOLSEהכתובת ברירת מחדל בספרייה poolse_client, ואפשר להחליף אותה בפרמטר poolse_api_url (והמפתח ב-poolse_api_key) ב-CRM_params
הערות והודעות שגיאה בקוד שמזכירות מארחטקסט בלבד
pilot ו-newpage כבויים

בגרסה 5.0.156, כש-pilot או newpage כבויים, הבקשות ל-pjs.js, pg.js ו-pg.css מגיעות לקוד שקורא ל-cURL בלי חיבור, והן נכשלות בשגיאת PHP במקום להחזיר תגובה ריקה. כדי לכבות אותם, הסירו גם את התגים שטוענים את הקבצים האלה מהתבנית.

ראו גם#

התיעוד נכתב מתוך הקוד של ליבה 5.0.186.