הדף הזה הוא מפת הדרכים בין שירותי Wizzo Market לבין הקוד של הליבה שמשתמש בהם. לכל שירות מופיע השם שלו ב-market_service, הנקודה בליבה שקוראת אותו, ומה קורה כשהוא לא פעיל. בהמשך מתועדים שני ה-API שמפתח אתר מפעיל בעצמו: poolse_client (דיוור) ו-spam_filter (סינון ספאם בטפסים).
הכלל המשותף: כל שירות נבדק עם market_service::is_active("<service>"), והמפתח נלקח מ-market_service::api_key("<service>"). על המנגנון עצמו ראו סקירת Wizzo Market.
השירותים ונקודות המגע בליבה#
| שם בקובץ | מוצר | נקודות מגע בליבה |
|---|---|---|
wizzoai | WizzoAI, מודלי שפה ומנוע הסוכנים | wizzo_ai, ai_agents_lib, controllers/wizzoai_api.php, שדות ai() בטפסים, panel_table (הוספה בעזרת AI), העלאת תמונות מ-admin/storage. ראו AI בטפסים ו-סוכני AI |
mcp | שער ה-MCP של האתר | controllers/mcp.php מחזיר 403 כשהשירות לא פעיל. ראו MCP, סקירה |
seoadvisor | SEOK, יועץ ה-SEO המאוחסן | SeoHosted, controllers/connector.php, controllers/seo_runner.php. ראו SEO suite |
oleg | אולג, שומר הבריאות והביצועים | OlegHosted, controllers/perf_runner.php, פעולת oleg_ready ב-connector. ראו בריאות וביצועים |
wizzopoolse | POOLSE, דיוור ואוטומציות | libraries/poolse_client.php, libraries/mail_tpl.php (שליחה טרנזקציונית), וידג'ט בדף הבית של הפאנל, admin/poolse_media.php |
poosh | POOSH, הודעות Push | וידג'ט בדף הבית של הפאנל, ה-service worker /poosh-sw.js (ב-ROUTER). בטבלת הכלים: services_poosh_stats |
kama | KAMA (ברשימות ישנות: wizzoradar), מעקב תקשורת וטלמטריית גלישה | panel_table (radar_tracking, radar_api_key), וידג'ט בדף הבית של הפאנל |
wizzonow | WizzoNow, צ'אט ונוכחות מנהלים בזמן אמת | admin/admin_chat.php (פרסום אירועים), Form, panel_table (מעקב בזמן אמת), ערכת הנושא של הפאנל |
wizzostream | WizzoStream, אירוח וידאו | השדה FormInput_WizzoStream (מפתח ברירת מחדל מהמרקט) |
newpage | NEWPAGE, דפי נחיתה מאוחסנים | controllers/newpage_public.php (הכתובת /p/{slug}), admin/newpage_media.php, ו-ROUTER עבור pg.js/pg.css |
pilot | Pilot, ווידג'ט צ'אט | ROUTER מגיש את /pjs.js כפרוקסי עם מטמון |
target | TARGET | admin/target_media.php (העלאת קבצים ל-storage/target) |
whatsapp | וידג'ט בדף הבית של הפאנל | |
enable | ENABLE, ווידג'ט נגישות | market_service::enable_config ו-system/accessibility_config.json |
spamguard | SpamGuard, סינון ספאם גלובלי | libraries/spam_filter.php |
שירות אחד יכול להופיע בקובץ בשם ישן. market_service::ALIASES מתרגם בשני הכיוונים בין poosh ל-wizzopoosh, ובין kama ל-wizzoradar, והמרקט שולח את השם החדש רק לליבה 5.0.111 ומעלה (KAMA) או 5.0.53 ומעלה (POOSH). קוד שלכם צריך לקרוא דרך market_service ולא להשוות שמות בעצמו.
נקודות קצה ציבוריות ושירותים#
| נקודת קצה | קובץ | מה היא עושה |
|---|---|---|
/p/{slug} | controllers/newpage_public.php | מושכת את הדף מ-NEWPAGE לפי המפתח הציבורי של האתר, עם מטמון של דקה. ?_npprv=<token> היא תצוגה מקדימה שלא נשמרת במטמון |
/pg.js, /pg.css | collections/ROUTER.php | פרוקסי עם מטמון לנכסי NEWPAGE |
/pjs.js | collections/ROUTER.php | פרוקסי עם מטמון לווידג'ט של Pilot. כישלון בשליפה לא נשמר כגוף ריק |
/poosh-sw.js | collections/ROUTER.php | ה-service worker של POOSH מ-assets/wizzo_poosh/ |
שתי הכתובות NEWPAGE_BASE ו-PILOT_BASE אפשר להגדיר כקבועים (define) לפני טעינת הליבה, למשל ב-CONFIG_USER, כדי להפנות סביבת בדיקה לשרת אחר. בלי הגדרה, ברירות המחדל הן https://newpage.wizzo.media ו-https://pilot.wizzo.media.
וידג'טים בדף הבית של הפאנל (KAMA, POOLSE, POOSH, WhatsApp) מדפיסים את המפתח של השירות לתוך JavaScript בצד הלקוח, כך שכל מנהל עם הרשאת צפייה בווידג'ט רואה אותו. ב-POOLSE זה מפתח שמאפשר פעולות בשם האתר. אל תתנו הרשאת ווידג'טים למי שלא אמור להחזיק את המפתח (SVC-09).
poolse_client: דיוור מהקוד#
הקובץ: libraries/poolse_client.php. כל הקריאות הן best-effort: תקלה ב-POOLSE לא שוברת את תהליך האתר. התוצאות הן false (השירות לא נגיש או שגיאת שרת) או ["error" => ..., "http" => ...] (סירוב של השרת, קוד 4xx), ולא חריגה.
מפתח ו-URL נקבעים כך: הפרמטרים poolse_api_key ו-poolse_api_url ב-CRM_params גוברים על ההפעלה במרקט (כך אתר יכול להצביע על tenant משלו). בלי פרמטר, המפתח מגיע מהשירות wizzopoolse.
| מתודה | חתימה | הערות |
|---|---|---|
active | poolse_client::active() | true אם יש פרמטר poolse_api_key או שהשירות wizzopoolse פעיל |
api_key | poolse_client::api_key() | מחרוזת ריקה כשאין מפתח |
base_url | poolse_client::base_url() | כתובת ה-API כולל סיומת /api/ |
subscribe | poolse_client::subscribe($data) | $data["email"] חובה, אחרת false. שדות: first_name, last_name, phone, attributes, list_ids, tag_ids, consent, evidence. מוסיפה אוטומטית source, ip, user_agent ו-evidence.page |
event | poolse_client::event($email, $event_name, $data = []) | מפעיל אוטומציה מסוג api_event |
contact | poolse_client::contact($email) | מערך איש הקשר או false |
unsubscribe | poolse_client::unsubscribe($email, $source = "site") | מסיר מכל השיווק. true אם כבר היה מוסר |
list_id | poolse_client::list_id($name) | מזהה הרשימה לפי שם, ונוצרת אם אין. 0 כשהשירות לא נגיש. המטמון הוא לבקשה אחת בלבד |
transactional | poolse_client::transactional($to, $subject, $html, $opts = []) | הודעה אחת לכתובת אחת, מיד. מחזירה ["status"=>"sent","message_id"=>...] או ["error"=>...] |
campaign | poolse_client::campaign($subject, $html, $list_ids, $opts = []) | יוצרת קמפיין ושולחת לרשימות. מחזירה ["campaign_id","recipients"] או ["error"] |
post | poolse_client::post($path, $body) | קיצור ל-req("POST", ...) |
req | poolse_client::req($method, $path, $body = null, $timeout = 6) | הקריאה הגולמית. false כשאין מפתח, כשאין חיבור או בקוד 5xx |
אפשרויות ל-transactional ($opts): reply_to, first_name, last_name, external_id, sender_id, vars, attachments (רשימה של filename ו-content ב-base64) ו-calendar (content ו-filename של קובץ .ics). אפשרויות ל-campaign: name, is_advertisement (ברירת מחדל true), sender_id, reply_to, preheader, created_by.
$this->load->library("poolse_client");
if (poolse_client::active())
{
$list = poolse_client::list_id("newsletter");
poolse_client::subscribe([
"email" => $email,
"first_name" => $name,
"list_ids" => [$list],
]);
$r = poolse_client::transactional($email, "Your code", "<p>Code: 123456</p>");
if (isset($r["error"])) error_log("poolse refused: " . $r["error"]);
}
transactional מיועדת להודעות שהמשתמש ביקש (קוד כניסה, אישור הזמנה). היא מגיעה גם למי שלא אישר דיוור שיווקי, ולכן אסור להשתמש בה לתוכן פרסומי. תוכן כזה עובר ב-campaign, ורק אל רשימות של מי שנתן הסכמה.campaign יוצרת ושולחת בפועל, באותה קריאה, לכל הנמענים ברשימות. אל תריצו אותה בבדיקות על רשימה אמיתית. גוף ה-HTML חייב להכיל {{unsubscribe_url}} או {{footer_html}}, אחרת POOLSE מסרבת. כששליחה נכשלת הקמפיין נשאר טיוטה ב-POOLSE ומזהה הקמפיין חוזר ב-campaign_id של התשובה. ב-subscribe העבירו consent => null כשאתם מסנכרנים קהל קיים, כדי לא להחזיר לרשימה מי שביטל הרשמה.spam_filter: סינון ספאם בטפסים#
הקובץ: libraries/spam_filter.php. הלקוח של SpamGuard, שירות גלובלי עם מאגר מוניטין משותף (https://spamdetector.wizzo.media). המפתח נלקח מהשירות spamguard, או מ-spam_filter::$api_key אם הגדרתם אותו ידנית. הספרייה פותחת כברירת מחדל: בכל תקלת רשת, חריגת זמן (1500ms), או היעדר מפתח, התוצאה היא verdict => "allow" עם ok => false, כך שליד אמיתי לא הולך לאיבוד כשהשירות למטה.
| מתודה | חתימה | הערות |
|---|---|---|
is_active | spam_filter::is_active() | true אם יש מפתח |
check | spam_filter::check($fields, $m_settings = []) | מחזירה ["ok","verdict","score","check_id","reasons"]. הגדרות: js (האם הטופס כולל spamguard.js) ו-lang |
feedback | spam_filter::feedback($check_id, $is_spam) | משוב "זה ספאם / לא ספאם" לשירות. bool |
get_checks | spam_filter::get_checks($verdict = null, $limit = 50, $after = 0) | הבדיקות של האתר לתיקיית הספאם ב-CRM. $verdict: quarantine, spam או null לכולן |
get_api_key | spam_filter::get_api_key() | המפתח הפעיל |
site_slug | spam_filter::site_slug() | הדומיין בלי www., מזהה את האתר בשירות |
$this->load->library("spam_filter");
$res = spam_filter::check([
"name" => $_POST["name"],
"email" => $_POST["email"],
"phone" => $_POST["phone"],
"message" => $_POST["message"],
], ["js" => true]);
if ($res["verdict"] != "allow")
{
// save the lead with an is_spam flag and skip the notification mail
}
תוכן הטופס (שם, אימייל, טלפון, הודעה) ופרטי הבקשה (כתובת IP, User-Agent, Referer) נשלחים לשירות הסינון. אם הפרטיות אצלכם מחייבת הצהרה על כך, ראו מארחים חיצוניים.
ראו גם#
- Wizzo Market, סקירה
- מארחים חיצוניים
- מייל, שליחה דרך
mail_tpl - AI בטפסים
- בריאות וביצועים