שלוש שאלות שקובעות את הדפוס - לא הכלי

הטעות הנפוצה בבחירת אינטגרציה ל-Salesforce היא להתחיל מהכלי: MuleSoft, Platform Events, Bulk API או Webhook פשוט. הכלי הוא תוצאה, לא נקודת מוצא. שלוש שאלות קובעות את הדפוס הנכון:

  1. כמה מהר הצד השני חייב לדעת? שנייה, דקה, שעה או יום - ההבדל בין Real-Time ל-Batch.
  2. מי הבעלים של הנתון בכל רגע נתון? אם התשובה אינה חד-משמעית, שום דפוס טכני לא יפתור את הבעיה.
  3. מה קורה כשהצד השני לא זמין? תשובה ל"נחכה שוב" היא לא תשובה - צריך התנהגות מוגדרת: Retry, תור, או כישלון גלוי.

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

מפת הדפוסים: מתי כל אחד מתאים

דפוסזמן תגובה טיפוסידוגמת שימוש טיפוסיתעלות תחזוקההסיכון המרכזי
Request-Reply סינכרונימילישניות עד שניותבדיקת אשראי לפני אישור עסקה במסךבינוניתTimeout תוקע את המשתמש
Fire-and-Forgetמיידי בשליחה, ללא המתנה לתוצאהשליחת אירוע ליצירת Task במערכת אחרתנמוכה-בינוניתכשל שקט ללא ניטור
Batch תקופתישעות עד יממהסנכרון קטלוג מוצרים פעם ביום מ-ERPנמוכהפערי זמן בין המערכות
CDC (Change Data Capture)שניות עד דקותעדכון סטטוס הזמנה שמשפיע על תמיכהבינונית-גבוההעומס על ה-Event Bus בשינויים מרובים
Event-Driven (Platform Events / Pub-Sub)שניותהודעה על אירוע עסקי לכמה צרכנים במקבילגבוהה בהקמה, נמוכה בתחזוקהדורש משמעת Schema ו-Versioning

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

למה Latency לא מספיק כדי להחליט

הטעות השנייה הנפוצה: להחליט לפי Latency בלבד ולהתעלם מעקביות (Consistency). דפוס מהיר שמעדכן רק צד אחד ומשאיר את הצד השני "כמעט מסונכרן" יוצר בעיה חמורה יותר מדפוס איטי אבל עקבי - כי המשתמשים לומדים לא לסמוך על הנתון, ואז עוקפים את המערכת.

השאלה הנכונה היא זוגית: כמה מהר נדרשת התגובה, וכמה חמור מצב שבו שני הצדדים לא מסונכרנים לרגע. תהליך תמחור שמוצג ללקוח דורש גם מהירות וגם עקביות מלאה - שם נדרש Request-Reply סינכרוני עם Timeout מוגדר וטיפול מפורש בכישלון. עדכון "מספר צפיות במאמר" יכול לחיות בשקט עם איחור של דקות - שם Fire-and-Forget או CDC מספיקים.

בעלות על נתונים: החלטה שקודמת לכל דפוס

לפני שבוחרים איך הנתון עובר בין המערכות, צריך להכריע איפה הוא "אמיתי". שדה שמתעדכן בשתי מערכות בלי בעלים מוגדר יוצר לולאת סנכרון: A שולח ל-B, B מעדכן ומשדר בחזרה ל-A, A שולח שוב. זה לא תרחיש קיצון - זה התוצאה הצפויה של סנכרון דו-כיווני ללא כלל הכרעה.

כלל עבודה מעשי: לכל שדה משותף קובעים Owner יחיד. אם יש צורך עסקי אמיתי בעריכה משני הצדדים (למשל שירות לקוחות מעדכן כתובת גם ב-Salesforce וגם ב-ERP), מוסיפים כלל Conflict Resolution מפורש - Timestamp אחרון מנצח, או שדה אחד קובע והשני להצגה בלבד. ניהול הרשאות סביב אותם שדות רגישים נדון במדריך מודל ההרשאות ב-Salesforce.

טיפול בכשל: הבדיקה שרוב הפרויקטים מדלגים עליה

כמעט כל אינטגרציה עוברת בדיקת Happy Path. מעטות עוברות בדיקה שיטתית של שלושת תרחישי הכשל האלה:

  • המערכת השנייה לא זמינה בזמן השליחה - האם ההודעה נשמרת בתור ונשלחת שוב, או אובדת?
  • ההודעה מגיעה פעמיים (בעיה נפוצה ב-Retry אוטומטי וב-Event Bus) - האם הצד המקבל יוצר רשומה כפולה?
  • ההודעה מגיעה בסדר שגוי - האם עדכון סטטוס "בוטל" שמגיע לפני "אושר" גורם לתוצאה שגויה?

מערכת שלא בנויה כ-Idempotent (מזהה ייחודי לכל הודעה + בדיקה אם כבר טופלה) תיכשל בדיוק בשני התרחישים הראשונים, ולרוב תחת עומס - כלומר בדיוק כשהעסק הכי תלוי בה. מגבלות ה-API וההתמודדות עם Throttling בהקשר הזה מפורטות במדריך Salesforce API Limits.

מסגרת החלטה: מהשאלה העסקית לדפוס

שאלה שנשאלת ראשונהאם התשובה "כן"אם התשובה "לא"
האם משתמש ממתין למסך לתוצאת האינטגרציה?Request-Reply סינכרוני עם Timeout מוגדרממשיכים לשאלה הבאה
האם נדרש עדכון תוך דקות בודדות של שינוי בודד?CDC או Platform Eventממשיכים לשאלה הבאה
האם כמה צרכנים שונים צריכים לדעת על אותו אירוע?Event-Driven עם Pub-Subממשיכים לשאלה הבאה
האם נוח לעבד נפח גדול בחלון זמן קבוע?Batch תקופתילבחון Fire-and-Forget עם תור

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

תרחיש להמחשה: רשת מרפאות פרטיות עם עשרים סניפים

נניח רשת מרפאות המפעילה Salesforce לניהול פניות מטופלים ומערכת חיוב נפרדת (Billing) שאינה יכולה להיות מוחלפת בשלב זה. הדרישה: כשמטופל משלים תור, יש לעדכן את מערכת החיוב מיידית, וכשחיוב מתעדכן (למשל תשלום התקבל), Salesforce צריך לשקף זאת כדי שנציג השירות לא יבקש תשלום כפול.

הבחירה הראשונית של הצוות הייתה Batch לילי דו-כיווני - פשוט להקמה, אך יצר פער של עד 24 שעות שבו נציגים ראו מידע לא מעודכן וגרם לתלונות. הפתרון שנבחר בפועל: כיוון אחד (השלמת תור מ-Salesforce לחיוב) עבר ל-Fire-and-Forget עם תור הודעות ו-Retry אוטומטי, כי אין צורך שהמשתמש ימתין. הכיוון השני (אישור תשלום מהחיוב ל-Salesforce) עבר ל-CDC, כי מדובר בשינוי נקודתי שצריך להגיע תוך דקות. Batch לילי נשאר רק כמנגנון Reconciliation - השוואה יומית שמאתרת פערים ומתריעה, לא כערוץ העדכון העיקרי.

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

סיכונים ופעולות מניעה ספציפיות לאינטגרציה

סיכוןאיך הוא נראה בפועלפעולת מניעה
חוסר Idempotencyרשומות כפולות אחרי Retry או תקלת רשתמזהה ייחודי להודעה + בדיקת קיום לפני יצירה
מקור אמת לא מוגדרלולאת סנכרון או עדכון "מנצח" אקראיOwner מוגדר לכל שדה + כלל Conflict Resolution
Point-to-Point ללא שכבת אינטגרציהכל שינוי סכימה במערכת אחת שובר חיבור אחרשכבת Middleware/API עם חוזה גרסאות מפורש
ניטור טכני בלבדהאינטגרציה "ירוקה" אך הזמנות חסרות בפועלמדד Reconciliation עסקי, לא רק Uptime טכני
התעלמות מ-Governor Limitsהאינטגרציה קורסת דווקא בעומס שיאתכנון Bulkification ו-Backoff מראש, לא כתגובה

Checklist לבחירת דפוס אינטגרציה

  • ☐ הוגדר זמן תגובה נדרש במספרים, לא במילה "מהר"
  • ☐ הוגדר Owner יחיד לכל שדה משותף בין המערכות
  • ☐ נבדק מה קורה כשהצד השני לא זמין - ותועד
  • ☐ נבדק מה קורה כשהודעה מגיעה פעמיים
  • ☐ נבדק מה קורה כשהודעות מגיעות שלא בסדר
  • ☐ קיים מנגנון Reconciliation גם כשהדפוס העיקרי אסינכרוני
  • ☐ מגבלות API ו-Governor Limits נבדקו מול נפח צפוי בעומס שיא
  • ☐ הוגדרו מדדי הצלחה עסקיים ולא רק טכניים

מדדים לבדיקה שוטפת של האינטגרציה

לאחר ההשקה כדאי לעקוב אחרי שלושה עד ארבעה מדדים בלבד: שיעור הודעות שהצליחו בניסיון ראשון, זמן קצה-לקצה בפועל מול ה-SLA שהוגדר, פערי Reconciliation יומיים בין המערכות, וקרבה למגבלות API. עלייה עקבית באחד מהם - ולא רק חריגה חד-פעמית - היא האיתות לבחון מעבר לדפוס אחר, לפני שהמערכת נכשלת בייצור. שיקולי זהות והרשאות גישה בין מערכות מפורטים במדריך SSO וזהות ב-Salesforce.

סיכום

בחירת דפוס אינטגרציה נכונה לא מתחילה בשאלה "איזה כלי", אלא בשלוש שאלות: כמה מהר צריך תגובה, מי הבעלים של הנתון, ומה קורה כשמשהו נכשל. Real-Time מתאים כשמשתמש ממתין לתוצאה; CDC ו-Event-Driven מתאימים לעדכון מהיר של שינוי בודד או להפצה למספר צרכנים; Batch מתאים לנפח גדול בחלון זמן קבוע. בכל דפוס, Idempotency, בעלות מוגדרת על נתונים ומנגנון Reconciliation הם לא "נחמד שיהיה" - הם התנאי לכך שהאינטגרציה תעמוד בעומס אמיתי ולא רק בדמו.

מקורות מקצועיים