איך מעדכנים לקוחות ב-WhatsApp כשמשהו קורה בפריוריטי - הטריגר ב-BPM, התור שביניהם, למה אי אפשר לקרוא ל-Meta ישירות מה-ERP, וכללי התבניות שקובעים מה מותר לך לשלוח בכלל.
עיקרי הדברים
- אין להפנות את ה-webhook של פריוריטי ישירות ל-Meta. צריך שירות ביניים שיחזיק את מיפוי התבניות, ינרמל מספרי טלפון, ינסה שוב ויתעד כשלים - לפריוריטי אין retry מתועד ו-Meta תדחה את רוב המטענים הגולמיים.
- כל הודעה שאתה יוזם חייבת להיות תבנית מאושרת. הלקוח לא כתב לך, ולכן חלון 24 השעות סגור בהגדרה וטקסט חופשי נדחה עם שגיאה 131047.
- יש לשמור על ההתראה כ-UTILITY. עדכון תפעולי עם כפתור URL מסווג מחדש כשיווקי ומתומחר בהתאם - עדיף להכניס את הקישור כטקסט רגיל בגוף ההודעה.
- מספרי טלפון ב-ERP אינם בפורמט E.164. נרמול של 05X, 9725X ווריאציות מעוצבות אל +9725X הוא תנאי מקדים, לא פרט - מספר לא מנורמל נכשל עם 131009 או פשוט לא מגיע.
הבקשה נשמעת פשוטה: כשתעודת משלוח נוצרת בפריוריטי, הלקוח יקבל הודעת WhatsApp. שני הצדדים חושפים API, אז לכאורה זה חיבור ישיר. בפועל, חיבור ישיר לא יעבוד - ולא בגלל מגבלה טכנית אלא בגלל שלוש דרישות שאף אחד מהצדדים לא מספק.
המדריך מניח היכרות עם Webhooks בפריוריטי ועם הקמת WhatsApp Cloud API.
למה לא לחבר ישירות
אפשר להגדיר ב-פריוריטי webhook שמצביע על כתובת כלשהי. מפתה להצביע ישירות על Graph API של Meta. זה לא יעבוד, מארבע סיבות:
- מבנה המטען. פריוריטי שולחת JSON בפורמט שלה, מאורגן לפי טופס. Meta דורשת מבנה ספציפי לחלוטין עם
messaging_product,to,typeומערךcomponents. אין דרך לגשר בין השניים בהגדרה. - אימות. Meta דורשת טוקן System User בכותרת
Authorization. פריוריטי שולחת את הטוקן שלה בכותרתpriority-bpm-token. אלה מנגנונים שונים. - נרמול מספרים. המספר בכרטיס הלקוח כמעט אף פעם אינו בפורמט E.164.
- אין retry. לפריוריטי אין מדיניות ניסיון חוזר מתועדת. אם Meta מחזירה שגיאה חולפת, ההודעה פשוט אבדה ואף אחד לא יידע.
לכן הארכיטקטורה היא תמיד שלושה חלקים, לא שניים.
הארכיטקטורה
פריוריטי (כלל BPM)
→ webhook →
שירות ביניים (תור + מיפוי + לוג)
→ Graph API →
WhatsApp Cloud API1. הצד של פריוריטי
מגדירים נקודת קצה בטופס Webhook Definitions תחת תחזוקת BPM, ואז כלל BPM בתרשים הזרימה של המסמך הרלוונטי, עם סוג פעולה Webhook.
בגוף ההודעה כדאי לשלוח מעט: מספר המסמך, מספר הלקוח וסוג האירוע. לא את כל השדות. הסיבה - כל שדה נוסף שתצטרך מאוחר יותר ידרוש עריכת הכלל בתוך פריוריטי, וזו לרוב פעולה שדורשת גישה שאין לך. את השאר מושכים דרך ה-REST API.
אם יש תנאי עסקי - למשל רק לקוחות שנתנו הסכמה - עדיף לשים אותו בתנאי הכלל בפריוריטי ולא בקוד שלך. פחות תעבורה ופחות מקומות לבדוק.
2. שירות הביניים
זה הרכיב שעושה את העבודה האמיתית:
- מאמת את
priority-bpm-tokenודוחה כל בקשה בלעדיו. זו ההגנה היחידה - בלעדיה כל מי שמגלה את הכתובת יכול לגרום לך לשלוח הודעות. - כותב לתור ומחזיר תשובה מיד. אין לקרוא ל-Meta בתוך ה-webhook.
- מעשיר - מושך מפריוריטי את מה שחסר: שם הלקוח, טלפון, פרטי המסמך.
- מנרמל את הטלפון ל-E.164.
- ממפה את סוג האירוע לשם תבנית ולערכי המשתנים.
- שולח, מתעד ומנסה שוב לפי קוד השגיאה.
3. נרמול מספרי טלפון - לא פרט טכני
שדה הטלפון בכרטיס לקוח ב-ERP מכיל בפועל כל דבר: 052-1234567, 0521234567, 972521234567, +972-52-123-4567, לפעמים שני מספרים באותו שדה. Meta מקבלת רק E.164.
הכללים המעשיים לישראל: מספר שמתחיל ב-0 - להחליף ב-+972; מספר שמתחיל ב-972 - להוסיף +; להסיר רווחים, מקפים וסוגריים. מספר שלא נפתר - לא לשלוח ולסמן לטיפול, לא לנחש.
מה מותר לשלוח: תבניות בלבד
זו הנקודה שמפילה תכנון. אתה יוזם את ההודעה - הלקוח לא כתב לך - ולכן חלון 24 השעות סגור בהגדרה. טקסט חופשי יידחה עם שגיאה 131047. כל התראה כזו חייבת להיות תבנית מאושרת.
המשמעות התכנונית: כל סוג אירוע דורש תבנית משלו, מאושרת מראש, בכל שפה. אי אפשר לכתוב טקסט דינמי - רק להציב ערכים במשתנים מיקומיים {{1}}, {{2}}.
ולכן צריך לתכנן את סט התבניות לפני שכותבים קוד. למשל:
| אירוע בפריוריטי | מבנה התבנית |
|---|---|
| הזמנה אושרה | {{1}} שם לקוח, {{2}} מספר הזמנה |
| תעודת משלוח נוצרה | {{1}} שם, {{2}} מספר הזמנה, {{3}} מספר מעקב |
| חשבונית הופקה | {{1}} שם, {{2}} מספר חשבונית, {{3}} סכום |
שמור על UTILITY. אלה עדכונים תפעוליים ולכן הם זולים יותר ועוברים אישור מהר יותר. הדרך הקלה לאבד את זה היא להוסיף כפתור URL לאתר - Meta תסווג מחדש כ-MARKETING. אם צריך קישור למעקב משלוח, לשים אותו כטקסט רגיל בגוף.
טיפול בכשלים
לא כל שגיאה מטופלת אותו דבר. חלוקה מעשית לפי קודי השגיאה של Meta:
| סוג | קודים | מה עושים |
|---|---|---|
| חולף | 131000, 131016 | ניסיון חוזר עם השהיה מתגברת |
| קבוע לנמען | 131026, 131050 | לא לנסות שוב. לסמן בכרטיס הלקוח |
| תצורה | 190, 131005, 132001 | להתריע למפעיל - אף הודעה לא תעבור עד לתיקון |
| קצב | 131048, 131056, 80007 | להאט. אין לנסות שוב בלולאה |
שגיאת 131026 - "אין WhatsApp" - היא מידע עסקי שימושי. שווה לכתוב אותה חזרה לכרטיס הלקוח כדי שהמערכת תדע בפעם הבאה שהערוץ הזה לא זמין ותיפול חזרה למייל או SMS.
מה לא לעשות
- לא לשלוח בלי הסכמה. עדכון תפעולי על הזמנה שהלקוח ביצע הוא מקובל; שימוש באותו צינור לתוכן שיווקי הוא דבר אחר לגמרי, גם משפטית וגם מבחינת דירוג האיכות של Meta - שממנו נגזרת השהיית תבניות.
- לא לשים את הטוקן של Meta בפריוריטי. הוא שייך לשירות הביניים בלבד.
- לא להסתמך רק על ה-webhook. אין retry מתועד בפריוריטי. תהליך יומי שסורק מסמכים מהיממה האחרונה ומוודא שנשלחה עליהם הודעה הוא מה שהופך את זה לאמין.
שאלות נפוצות
האם פריוריטי יכולה לשלוח הודעות WhatsApp ישירות?
לא באופן שימושי. webhook של פריוריטי יכול לקרוא לכל כתובת, אבל ה-Graph API של Meta דורש מבנה מטען ספציפי, טוקן System User בכותרת Authorization, מספרי טלפון בפורמט E.164, וטיפול בניסיונות חוזרים שפריוריטי לא מספקת. שירות ביניים בין השניים הוא הכרח, לא אופציה.
למה אי אפשר לשלוח התראות WhatsApp בטקסט חופשי מה-ERP?
כי אתה יוזם את השיחה. WhatsApp מאפשרת טקסט חופשי רק בתוך חלון של 24 שעות שנפתח כשהלקוח כותב לך ראשון. מכיוון שהתראה מ-ERP אינה מבוקשת, החלון סגור בהגדרה וטקסט חופשי נדחה עם שגיאה 131047 - רק תבנית הודעה מאושרת תימסר.
כמה תבניות WhatsApp צריך להתראות מ-ERP?
אחת לכל סוג אירוע, לכל שפה. תבניות לא יכולות להרכיב טקסט דינמי - הן רק מציבות ערכים במשתנים מיקומיים - ולכן אישור הזמנה, התראת משלוח והתראת חשבונית הן שלוש תבניות נפרדות, שכל אחת דורשת אישור נפרד בעברית ובאנגלית אם אתה משרת את שתיהן.
איך צריך להכין מספרי טלפון מה-ERP לשליחה ב-WhatsApp?
לנרמל ל-E.164 לפני השליחה. עבור ישראל זה אומר להחליף 0 מוביל ב-+972, להוסיף פלוס למספרים שמתחילים ב-972, ולהסיר רווחים, מקפים וסוגריים. כל מספר שלא נפתר בוודאות צריך להידלג ולהיות מסומן לטיפול ולא לנחש אותו - מספר לא מנורמל נכשל עם 131009 או פשוט לא מגיע.
האם התראות הזמנה ב-WhatsApp מחויבות כשיווק?
הן אמורות להיחשב UTILITY, שמתומחר נמוך יותר, כי אלה עדכונים תפעוליים שקשורים למשהו שהלקוח עשה. הדרך הנפוצה לאבד את הסיווג הזה היא הוספת כפתור URL שמפנה לאתר, ש-Meta קוראת כקידום. הכנסת קישור המעקב כטקסט רגיל בגוף ההודעה בדרך כלל משאירה את התבנית UTILITY.
להמשך קריאה
שירות רלוונטי
WhatsApp Cloud API
תבניות, אינבוקס דו-כיווני ותזכורות על ה-API הרשמי של Meta.
על הכותב
יהונתן סעדיה
מהנדס פרילנסר לאוטומציה, אתרים ו-MVP
אני יהונתן סעדיה, מהנדס בכיר שבונה אוטומציה עסקית, אתרים מותאמים ומוצרי MVP לעסקים קטנים ובינוניים בארה"ב, אירופה וישראל. המדריכים האלה נכתבים מתוך עבודה אמיתית עם לקוחות, לא מתיאוריה.
בוא נעבוד יחדיש לך פרויקט דומה?
ספר לי מה אתה מנסה להפוך לאוטומטי או לבנות, ואומר לך מהי הדרך המהירה והאמינה ביותר ליישם את זה.
