דלגו לתוכן

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

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

סקילים — חיבור, ידע ומתודולוגיה

עודכן 10.10.2026

שלושה סקילים שאינם בונים ישות ולא מציבים אלמנט: אחד פותח את הדלת, אחד מחזיק את העובדות, ואחד מחליט מה בהיקף. בסוף העמוד — מתכון סקר שביעות הרצון, שעבר ב‑1.5.0 לתוך myb-p-public-forms.


מאפס עד חיבור מוכח: פתיחת חשבון ← התחברות ראשונה ← חיבור התוסף ← הוכחה ← המשימה הראשונה. שני קהלים קוראים אותו — אדם שעוקב אחרי התמונות, וסוכן שמבצע את הצעדים; קובצי הייחוס נושאים את צילומי המסך.

הצעדים המפורטים מכוסים בהתקנה בכל סוכן. מה שהסקיל מוסיף הוא המשמעת.

Application Id + API Key התחברות משתמש (OAuth 2.1)
הלקוח שולח X-Parse-Application-Id + X-Parse-API-Key Authorization: Bearer <token>
הזהות בשרת משתמש‑על בשם Master משתמש ה‑CRM שהתחבר
מודל הרשאות אין — עוקף כל הרשאת טבלה התפקיד שלו בתוספת הרשאות ה‑MCP האישיות
זמין ב כל לקוח דפדפן בלבד — לקוחות שולחן עבודה/CLI חסומים כרגע
ביטול Revoke לכל מפתח בנפרד ניקוי הרשאות ה‑MCP של המשתמש

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

initialize ורשימת הכלים מצליחות גם בלי אימות; רק קריאת כלי אמיתית מוכיחה.

# הקריאה תשובה תקינה מה זה מוכיח
1 Usage-Guide טקסט ההוראות של השרת התעבורה עובדת, ומול שרת MyBusiness
2 Get-Current-User המשתמש שהתחבר · או הזהות הסינתטית username: "Master" (מצב מפתח) האימות עובד — ובאיזה מצב
3 Get-Schema (בלי פרמטרים) אובייקט שמפתחותיו הם שמות הטבלאות הגעתם לבסיס נתונים אמיתי

ואז הקריאו למשתמש 3–4 שמות טבלה או שדה שהוא מזהה, ובקשו אישור שזה בסיס הנתונים הנכון, לפני שאתם כותבים.

מחובר לבסיס הנתונים <שם/סאב‑דומיין> בזהות <משתמש או Master>. יש בו <n> טבלאות, כולל <3–4 שמות מזוהים>. זו המערכת הנכונה?

המשימה הראשונה — טבלת הניתוב

Section titled “המשימה הראשונה — טבלת הניתוב”

אחרי ההוכחה, הסקיל אומר מה יש במערכת (ספירת מודולים וטבלאות מ‑Get-Schema/Count-Data) ומנתב:

המשתמש רוצה… הסקיל
“האם המערכת יודעת X?” / סקירת דרישות myb-p-kb ← myb-p-fit-gap
מודול או ישות חדשה מקצה לקצה myb-p-create-entity
דף כרטיס, רשימה, דשבורד, דוח סקילי הממשק · דוחות
אוטומציה, התראות, יעדי זמן סקילי האוטומציה
ייבוא נתונים או טופס באתר נתונים ואינטגרציות
משתמשים, תפקידים, הרשאות myb-p-users-roles-permissions
  1. API Key לעולם לא בקובץ משותף או מנוהל‑גיט — לא ב‑repository, לא ב‑.mcp.json של פרויקט, לא בצ’אט. קונפיגורציית התוסף שומרת אותו בכספת של מערכת ההפעלה.
  2. לעולם לא לבקש מהמשתמש את סיסמת החשבון שלו. מצב ההתחברות לוקח אותו לדף הרשמי; מצב המפתח לא צריך סיסמה.
  3. חיבור אחד = בסיס נתונים אחד. אין כלי חוצה‑מערכות; אחרי כל החלפת חיבור, Get-Current-User + Get-Schema.
  4. מוכיחים לפני שכותבים.
  • התחברות משתמש חסומה בלקוחות שולחן עבודה/CLI — ה‑callback המקומי נדחה לפני שהוא מגיע לשרת.
  • הרשאות MCP ניתנות לכל משתמש בנפרד, לא לתפקיד — עשרה משתמשים = עשר הענקות. ארבע תיבות בלשונית (Read / Create / Update / Edit pages and schema), זמינות רק במערכת עם חבילת מנוי.
  • הסקיל מקים ומוכיח את החיבור, לא מאבחן את ה‑CRM. Permission denied on get היא שאלת הרשאות.

בסיס הידע של המוצר. הסקיל הוא ספרן: מנתב לקובץ הייחוס הנכון מתוך יותר מ‑40 מסמכי מוצר, ואומר לסוכן לקרוא רק את מה שצריך.

myb-p-kb/references/
├── 00-overview/ סקירת מוצר · ארכיטקטורה · מילון מונחים · סביבות וגישה
├── 10-modules/ CRM Core · MyBooks · MyCampaigns · MyChat · MyCollege · TimeSheet · MyInbox
├── 20-data-model/ סקירה · טבלאות ליבה · טבלאות מודולים · טבלאות מערכת ולוגים · טיפוסים ומוסכמות
├── 30-customization/ דפים · טבלאות תצוגה · דשבורדים ודוחות · טריגרים · חוקי טופס ·
│ הרשאות · מינוח · מסמכים · דפוסי שדות · Blueprints · פורטלים
├── 40-integrations-api/ Parse REST · קטלוג כלי MCP · getlead/web2table · פונקציות ענן ·
│ ערוצי הודעות · קבצים ואחסון
├── 50-ui-walkthrough/ סיור בממשק הריצה ובממשק הבנייה — עם צילומי מסך
├── 60-implementation-methodology/ מחזור יישום · אפיון · fit-gap · אפיון טכני · תוכנית · אומדנים
├── 80-capability-matrix/ מטריצת יכולות + מגבלות ידועות
└── 90-appendices/ קטלוג מדריכי התמיכה · שאלות נפוצות

כל קובץ נפתח בשורת Purpose ומסתיים ב‑Limitations & gotchas.

  1. מערכת חיה גוברת על מסמכים. לפני שמבטיחים התנהגות על מערכת ספציפית, אמתו בקריאות MCP לקריאה בלבד (Get-Schema, Get-Triggers, Get-Site-Pages). סכימות מתפצלות בין לקוחות.
  2. כל דבר שמסומן ⚠️ UNVERIFIED חייב אימות.
  3. תשובות יכולת משתמשות בסולם: Native / Config / Custom-JS / Custom-Server / External / Gap.
  4. טענות שמצטטות מספרי קריאות שירות או “ב‑QA” פגות תוקף. אמתו מחדש בזמן השימוש.
  5. תיעוד שגוי — אומרים במפורש בתשובה ומסמנים למתחזקים. לא עוקפים בשקט.

מה הסקיל מוסיף לתשובת יכולת

Section titled “מה הסקיל מוסיף לתשובת יכולת”
  • מטריצת יכולות שכל שורה בה מצביעה למנגנון ספציפי.
  • חובה לבדוק את 02-known-limitations.md לפני “כן”.
  • שורה חסרה מפעילה סדר חיפוש: Blueprints של פתרונות ← מסמך התחום ← אימות חי בסביבת ניסיון.
  • סיווג לסולם, כלומר גם מי משלם: Native בחינם, Custom-Server כרטיס פיתוח.
  • מקור לכל טענה: שורה במטריצה, blueprint, או אימות חי.

מסווג כל דרישה לשלב הזול ביותר בסולם שבאמת עובד, עם ראיות, ומייצר החלטת היקף שהלקוח יכול לחתום עליה. השיטה: סולם היכולות + fit-to-standard first (adopt > adapt > build), עם הכרעות מנוסחות לפערים ו‑workbook שמסמך האפיון הטכני צורך.

לעולם לא מסווגים מהזיכרון.

  1. מטריצת היכולות ← ואז תמיד מגבלות ידועות, לפני כל “כן”. שורה חסרה? ← Blueprints של פתרונות ← מסמך התחום ← אימות חי בסביבת ניסיון.
  2. עוגני אומדן ממדריך ההערכות.
  3. מסמך השיטה + ה‑playbook של הסיווג בסקיל.
המחלקה המשמעות הבעלים
Native עובד מהקופסה, או הגדרה —
Config ללא קוד: שדות, דפים, תצוגות, דשבורדים, דוחות, טריגרים, חוקי טופס, תפקידים, מינוח, תבניות מיישם / AI
Custom-JS JS/CSS ברמת הדף מיישם + סקירת מפתח
Custom-Server פונקציית שרת (כרטיס פיתוח) מפתח
External Make/Zapier/שירות חיצוני מחזיק את זה מפתח/מיישם + השירות
Gap לא פתיר באופן מקובל היום —

ולצדן שתי הכרעות שיכולות לפתור שורה במקום מחלקה:

  • Process-change — השינוי בתהליך, לא במערכת. דורש הסכמה מתועדת של הלקוח.
  • Defer — חדר המתנה, עם תאריך חזרה.

כל צעד למטה בסולם דורש שורת נימוק כתובה.

מה חייב להופיע בכל שורה

Section titled “מה חייב להופיע בכל שורה”
הפריט מה זה
סקיצת פתרון המנגנון בשמו: “טריגר מתוזמן על Cases.NextStepDate +6 שעות ← מייל ל‑OwnerId”. אי אפשר לכתוב את השורה? לא סיווגתם.
בדיקת מגבלה מול המגבלות הידועות: שרשרות טריגרים ≤3, כותבים שדורסים, קיבוץ מצטבר על String, אין דה‑דופליקציה ילידית
מאמץ S/M/L/XL לפי העוגנים
בעלים מי מבצע
דגל ייעוץ מפתח לכל שורת Custom-Server / External — ייעוץ של חמש דקות מונע שבוע שנמכר בטעות
עדיפות × מאמץ ברירת המחדל
חובה + S/M בהיקף
חובה + L/XL לאתגר את הדרישה קודם — האם blueprint או וריאנט רזה עונים על הצורך?
רצוי/אפשרי + L/XL שלב 2, עם תאריך חזרה

לכל Gap אחת משלוש הכרעות כתובות: עוקף (כולל עלות החיכוך) / דחייה / הסרה מההיקף (עם יידוע הלקוח). מהשורות נגזרת רמת המורכבות (Low/Medium/High/Enterprise = השלב העמוק ביותר שנעשה בו שימוש), שמכתיבה את שאר ההתקשרות.

עבודת פיתוח בתשלום דורשת אישור מפורש של הגורם המאשר אצל הלקוח, פריט‑פריט.

דוח HTML ממותג בעברית + fit-gap.csv, ההעברה המכונתית לסקיל האפיון הטכני.

  1. מחפשים, לא מנחשים. כל סיווג מצטט שורת מטריצה, blueprint, או אימות חי. תשובה “מהניסיון” היא באג.
  2. טענות שמצטטות כרטיסים פתוחים או “ב‑QA” פגות; לאמת מחדש.
  3. יכולת או מגבלה שהמטריצה לא מכירה — לציין בדוח וגם לסמן למתחזקים.
  4. “Config בתיאוריה, Custom בפועל”: 14 טריגרים שלובים גרועים מפונקציית שרת אחת. שופטים לפי תחזוקתיות.
  5. הדוח בעברית; סקיצות הפתרון יכולות לשאת שמות מנגנון באנגלית.

סקר שביעות רצון — myb-p-public-forms → csat/

Section titled “סקר שביעות רצון”

עד 1.5.0 סקיל נפרד, myb-p-csat-survey; מאז התיקייה csat/ בתוך myb-p-public-forms. המתכון זהה, ונוסף לו וריאנט נייטיבי שהקישור שלו לא נושא נתון אישי.

הלולאה: פנייה נסגרת ← הלקוח מקבל מייל עם קישור לכל דירוג ← לחיצה אחת רושמת את התשובה על הפנייה עצמה ← דירוג שלילי הופך לעבודה ← הציון מגיע לדוח.

עובד על כל אובייקט עסקי עם אירוע סגירה ואיש קשר נגיש: Cases הוא הנפוץ, ו‑Sales, Tasks או ישות מותאמת עובדים זהה.

שני הכללים שקובעים אם זה ישרוד

Section titled “שני הכללים שקובעים אם זה ישרוד”

למה הארכיטקטורה נראית כך

Section titled “למה הארכיטקטורה נראית כך”

המשיב אנונימי, ואנונימי אף פעם לא כותב לפנייה עצמה — רק לשורת קליטה. לכן לשני הווריאנטים אותן ארבע שכבות:

הודעה · קישור לכל דירוג → מזהה הפנייה + הדירוג
דף ציבורי → רושם את הדירוג בטעינה → שורה בטבלת הקליטה
טריגר היטל → מעתיק דירוג / הערה / תאריך אל הפנייה
טריגר תגובה → דירוג שלילי → משימה או התראה לאחראי
וריאנט נייטיבי (ברירת המחדל לבנייה חדשה)וריאנט web2table
הקישור…/<page>?<RatingField>=<n>&c={{{objectId}}}…/<page>?c={{{objectId}}}&p={{{PhoneNumber}}}&r=<n>
נתון אישי בקישוראיןהטלפון של הלקוח
איך שורת הקליטה נכתבתDatabase form נייטיבי עם reCAPTCHA בלתי נראה, שהסקריפט שולח פעם אחת בטעינה ומסרב לשלוח שוב בטעינה חוזרתקריאת web2table בטעינה
CLP של טבלת הקליטהcreate לתפקידי הצוות ול‑"*", ושום דבר ציבורי מעבר לזהנשאר סגור
דגל ב‑ConfigאיןAcceptWebToTable
תופעות לוואי בסכימהאין7 עמודות שמוזרקות לטבלת הקליטה
סיכוןגולש שגוגל מסמן רואה אתגר CAPTCHA לפני שהתשובה נשמרתאין בצד הגולש

בחרו בנייטיבי, אלא אם הלקוח כבר מריץ את גרסת web2table — שומרים אותה, לא בונים מחדש סקר שעובד — או חייב אפס תלות בצד הגולש. בשני הווריאנטים ההערה נרשמת כשורת קליטה שנייה, כי הקליטה נשארת create-only.

דירוג שיושב על האובייקט העסקי נוסע יחד עם השדות שהדוחות מקבצים לפיהם, ולכן כל דוח קיים עובד מיד (לפי נציג, לפי מוצר, לפי תקופה). טבלת הקליטה נשארת היומן הגולמי.

ההחלטות שסוגרים לפני שבונים

Section titled “ההחלטות שסוגרים לפני שבונים”
ההחלטה למה זה משנה
אילו סטטוסי סגירה מצדיקים סקר? המלכודת. “נסגר — אין מענה” ו“הועבר למחלקה אחרת” הם סטטוסי סגירה שאסור שישלחו. בקשו את הרשימה; אל תניחו “כל הסגורים”
כמה רמות? 3 (טוב/סביר/רע) נותן התפלגות שימושית; 2 חד יותר להחלטה. יותר משאלה אחת מוריד את שיעור המענה
הניסוח המדויק עברית מול לקוח, מהבעלים של התהליך, בכתב
תזמון מיד בסגירה (ברירת מחדל) או בהשהיה דרך טריגר מתוזמן
תקרה ללקוח? בלי תקרה, לקוח כבד נסקר על כל פנייה
מה קורה בדירוג שלילי משימה נכנסת לתור עבודה; התראה לא. בוחרים במכוון
הווריאנט — נייטיבי או web2table הטבלה למעלה. ב‑web2table הטלפון בקישור הוא החלטת פרטיות ששייכת ללקוח, לא לכם
הערוץ — מייל, SMS, WhatsAppאותו קישור עובד בכולם; הקישור הנייטיבי לא נושא נתון אישי, ולכן קל יותר לאשר אותו ב‑SMS

שאלת הטלפון (וריאנט web2table בלבד): web2table דורש phone, ולכן הקישור נושא את מספר הטלפון של הלקוח לתיבת הדואר של אותו לקוח. הוא גם נוחת בלוגי שרת, ומי שמחזיק בקישור יכול להגיש דירוג. החשיפה קטנה (אין קריאה, אין עדכון, רק הוספת דירוג) אבל אמיתית; הציגו אותה. הלקוח מסרב? הווריאנט הנייטיבי — הקישור נושא רק את מזהה הפנייה ואת הדירוג.

קוראים את המערכת לפני שכותבים

Section titled “קוראים את המערכת לפני שכותבים”
Get-Schema(<הטבלה העסקית>) ← Pointer לאיש הקשר, שדה האחראי, שדה הסטטוס
Get-Data(<טבלת הסטטוסים>) ← סטטוסי הסגירה וה-objectIds, לשאול בשמות אמיתיים
Get-Schema("SatisfactionSurveys") ← ייתכן שכבר קיימת במערכת ותיקה (במערכת חדשה אינה קיימת)
Get-Triggers(<הטבלה העסקית>) ← לרוב כבר יש טריגר מייל סגירה: כבוי, או על הסטטוסים הלא נכונים
Get-Site-Pages ← דף ציבורי קיים מוכיח שהמסלול עובד כאן — וזה הדבר הכי טוב לשכפל

דווחו מה כבר קיים לפני שאתם מציעים לבנות.

השתמשו ב‑SatisfactionSurveys אם קיימת; אחרת בנו במינימום:

השדה הטיפוס למה
CaseId Pointer ← הטבלה העסקית הרשומה המדורגת; גם מפתח הדה‑דופליקציה
AccountId Pointer ← Accounts פילוח לפי לקוח
OverallRating Number לא String — אי אפשר לחשב ממוצע של טקסט
AdditionalComments String המילה החופשית, כשנכתבת
OwnerId Pointer ← _User מועתק מהרשומה — זה מה שמאפשר CSAT לכל נציג
RespondedAt Date חשבון שיעור המענה

הרשאות. בנייטיבי: create לתפקידי הצוות ול‑"*"; find/get/update לצוות; delete ל‑Admin; addField: {} — ושום דבר ציבורי מעבר ל‑create. ב‑web2table: השאירו את ה‑CLP סגור — טבלה שנוצרת ב‑Create-Table נולדת עם find/get ל‑requiresAuthentication ו‑create/update/delete ל‑role:Admin בלבד, ו‑web2table כותב בכל מקרה. בשני המקרים קראו חזרה ב‑Get-Table-Permissions ובדקו שלא פתחתם משהו בטעות בזמן דיבוג.

השדות על האובייקט העסקי

Section titled “השדות על האובייקט העסקי”

CsatRating (Number) · CsatComment (String) · CsatAt (Date) — מה שטריגר ההיטל כותב וכל דוח קורא. בנוסף, סקשן לקריאה בלבד על הכרטיס.

Set-Trigger על הטבלה העסקית: events: ["update"], onSetFields: ["<שדה הסטטוס>"], קריטריונים רק לסטטוסים שסוכמו, oneachupdate: false, ופעולת email שמפנה לתבנית.

oneachupdate: false פירושו גם שפנייה שנפתחה מחדש ונסגרה שוב לא מייצרת סקר שני.

על טבלת הקליטה, events: ["create"], פעולת update-object:

JSON
{ "targetClass": "Cases",
"connection": "source.CaseId",
"fieldsValue": [
{ "field": "CsatRating", "type": "dynamic", "value": "OverallRating" },
{ "field": "CsatComment", "type": "dynamic", "value": "AdditionalComments" },
{ "field": "CsatAt", "type": "dynamic", "value": "updatedAt" }
]}

source.<Pointer> = “הרשומה שהשורה הזו מצביעה אליה”. הדקדוק המלא: אוטומציה.

טריגר התגובה — ומלכודת הסדר

Section titled “טריגר התגובה — ומלכודת הסדר”

על טבלת הקליטה, קריטריון OverallRating <= <סף שלילי> ← create-object (משימה לבעלים של התהליך, מקושרת לפנייה וללקוח) או notification.

שישה מפרטים מוכנים בסקיל: פירוט · ממוצע לנציג · מגמה חודשית × נציג · התפלגות דירוגים · תור העבודה של הדירוגים השליליים · שיעור מענה. בנו את שניים הראשונים, הראו לבעלים של התהליך, ותנו לתגובה שלו לעצב את השאר.

קבלה — והשליליים הם העיקר

Section titled “קבלה — והשליליים הם העיקר”

11 בדיקות, חמש מהן שליליות:

  • דירוג חיובי חייב לא לפתוח משימה.
  • סטטוס סגירה שאינו מזכה חייב לשלוח כלום.
  • קריאה אנונימית של טבלת הקליטה — נדחית.
  • עדכון אנונימי של שורת קליטה — נדחה.
  • כתיבה אנונימית לאובייקט העסקי — נדחית.

דווחו את הספירה בכנות (n/11), כולל אילו בדיקות לא הצלחתם להריץ.

  • שתי שורות לכל מענה זה נכון, לא באג — האובייקט העסקי מחזיק את התשובה, טבלת הקליטה היא היומן. כתבו את זה, אחרת מישהו “יתקן”.
  • אי אפשר לשנות סוג של פעולה במקום. Set-Trigger-Action מדווח הצלחה ומשאיר את הישנה; deleteAction אינו אמין דרך הפרוקסי. להחלפת משימה בהתראה: טריגר חדש נקי, והישן כבוי.
  • דירוג שנשמר כ‑String הורג את חישוב הממוצע, ואף אחד לא מבחין עד שהדוח נדרש.
  • קריטריון Number בטריגר צריך T: "Number"; ערך כמחרוזת לעולם לא יתאים.
  • שמירת ה‑JS של הדף מחזירה 403? ה‑WAF של הפלטפורמה דחה את התוכן, לא את הקוד שלכם: חלק מדפוסי ה‑URL וה‑regex ב‑JS של דף חסומים (גופי data‑URI עוברים בנקודת ה‑MCP ונחסמים ב‑REST). העלו את הסקריפט ב‑Upload-Public-File וטענו אותו מ‑loader בן שתי שורות. אל תנסו לנצח את המסנן בשכתוב הקוד.
  • וריאנט נייטיבי: שליחה לפני שה‑reCAPTCHA נטען יוצאת בלי טוקן, והשמירה נדחית. הסקריפט המצורף לסקיל מחכה; קוד שנכתב ידנית חייב לחכות גם.
  • וריאנט נייטיבי: סולם רדיו בדף. הקישור ממלא שדה מוסתר — אין מה ללחוץ ואין מה שחוק טופס יקרא. השאירו אותו מוסתר.
  • שאלה אחת בהודעה. שאלות נוספות שייכות לדף, אחרי הלחיצה — טופס ההערה יכול לגדול לטופס נייטיבי מלא — אף פעם לא לפניה.
  • שיעור מענה הוא opt-in ולא ניתן להשלמה לאחור.
  • אין דה‑דופליקציה בין מכשירים. בנייטיבי הדף מסרב לשלוח שוב בטעינה חוזרת באותה לשונית; נמען שלוחץ משני מכשירים יוצר שתי שורות, וההיטל המאוחר מנצח. מקובל ל‑CSAT; לא מקובל אם לציון יש השלכה מסחרית.
  • וריאנט נייטיבי: גולש מסומן מקבל אתגר. גולש שגוגל מסמן רואה אתגר CAPTCHA לפני שהתשובה נשמרת. נדיר; התשובה נרשמת אחרי הפתרון.