מגרסה 5.0.152 כל כתובת של שירות Wizzo שהליבה פונה אליה, בצד השרת ובדפדפן, נקראת מטבלה אחת: collections/WIZZO_ENDPOINTS.php. לכל שירות יש ברירת מחדל, אתר יכול להפנות אותו לשרת אחר או לכבות אותו לגמרי ב-config.php שלו, ואתר שלא שינה כלום מתנהג בדיוק כמו קודם.
לפני כן הכתובות היו כתובות ישירות בקבצי PHP, בתבניות וב-JS, ולכן לא היה אפשר להפנות שירות לשרת אחר או לכבות אותו.
הטבלה#
| שירות | ברירת מחדל | כתובות נוספות | מה זה | מוצר במרקט |
|---|---|---|---|---|
master | https://wizzocms40.wizzo.co.il | שרת הליבה: עדכוני הליבה | ||
market | https://market.wizzo.media | ה-API של Wizzo Market והחבילות שלו | כל המוצרים | |
auth | https://auth.wizzo.co.il | WIZZO ID: קוד חד-פעמי וטוקנים למפתחים | ||
ai | https://stream.ai.wizzo.media | legacy: https://api.ai.wizzo.media | WizzoAI | wizzoai |
mcp | https://mcp.wizzo.market | שער ה-MCP | mcp | |
oleg | https://oleg.wizzo.market | אולג AI, המנוע המאוחסן | oleg | |
seok | https://seok.wizzo.market | SEOk, מנוע ה-SEO המאוחסן | seoadvisor | |
spamguard | https://spamdetector.wizzo.media | SPAM Guard | spamguard | |
pilot | https://pilot.wizzo.media | Wizzo Pilot, ווידג'ט הצ'אט | pilot | |
newpage | https://newpage.wizzo.media | דף חדש, דפי הנחיתה הציבוריים | newpage | |
now | https://now.wizzo.media | Wizzo Now: נוכחות וצ'אט מנהלים | wizzonow | |
kama | https://radar.wizzo.media | KAMA, אנליטיקס (המארח שמר על השם הישן) | kama, wizzoradar | |
poosh | https://poosh.wizzo.media | POOSH, התראות | poosh, wizzopoosh | |
whatsapp | https://whatsapp-web.wizzo.media | WhatsAPI | whatsapp | |
stream | https://api.wizzo.stream | player: https://matkon.wizzo.stream, cdn: https://wizzo.cdn.wizzo.stream | WizzoStream | wizzostream |
news | https://www.wizzo.co.il | "הודעות Wizzo" בדף הבית של הפאנל | ||
todo | https://api.todo.work | app: https://wizzo.todo.work | TODO, לוח המשימות (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 קודם להם.
מה קורה כששירות כבוי#
שירות כבוי לא שובר אף מסך. אף קריאה לא יוצאת אליו, ומה שתלוי בו נעלם:
| שירות כבוי | מה רואים |
|---|---|
market | Wizzo 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_master | config.php | האם האתר הזה הוא שרת הליבה | false | רק WIZZO_ENDPOINTS::is_master(). כל מקום אחר שואל את הפונקציה |
is_wizzo | השורה של האתר במרקט, מגיע לאתר ב-market_settings.json | האם זה אתר של Wizzo, או אתר הפצה שמקבל ליבה בלי כלים שהם של Wizzo בלבד | אתר של Wizzo, כל עוד המרקט לא אמר אחרת | market_service::is_wizzo(), וההחלטה ב-AdminModule::is_wizzo_site() |
$wizzo_endpoints | config.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 |
| הערות והודעות שגיאה בקוד שמזכירות מארח | טקסט בלבד |
בגרסה 5.0.156, כש-pilot או newpage כבויים, הבקשות ל-pjs.js, pg.js ו-pg.css מגיעות לקוד שקורא ל-cURL בלי חיבור, והן נכשלות בשגיאת PHP במקום להחזיר תגובה ריקה. כדי לכבות אותם, הסירו גם את התגים שטוענים את הקבצים האלה מהתבנית.