איך מעדכנים לקוחות ב-WhatsApp כשמשהו קורה בפריוריטי - הטריגר ב-BPM, התור שביניהם, למה אי אפשר לקרוא ל-Meta ישירות מה-ERP, וכללי התבניות שקובעים מה מותר לך לשלוח בכלל.
עיקרי הדברים
- אין להפנות את ה-webhook של פריוריטי ישירות ל-Meta. צריך שירות ביניים שיחזיק את מיפוי התבניות, ינרמל מספרי טלפון, ינסה שוב ויתעד כשלים - לפריוריטי אין retry מתועד ו-Meta תדחה את רוב המטענים הגולמיים.
- כל הודעה שאתה יוזם חייבת להיות תבנית מאושרת. הלקוח לא כתב לך, ולכן חלון 24 השעות סגור בהגדרה וטקסט חופשי נדחה עם שגיאה 131047.
- יש לשמור על ההתראה כ-UTILITY. עדכון תפעולי עם כפתור URL מסווג מחדש כשיווקי ומתומחר בהתאם - עדיף להכניס את הקישור כטקסט רגיל בגוף ההודעה.
- מספרי טלפון ב-ERP אינם בפורמט E.164. נרמול של 05X, 9725X ווריאציות מעוצבות אל +9725X הוא תנאי מקדים, לא פרט - מספר לא מנורמל נכשל עם 131009 או פשוט לא מגיע.
איך מחברים את פריוריטי לוואטסאפ? חיבור וואטסאפ לפריוריטי, כלומר עדכוני הזמנה, משלוח וחשבונית שיוצאים ללקוחות מתוך פריוריטי, נבנה בחמישה שלבים, ואף אחד מהם אינו חיבור ישיר בין שתי המערכות:
- מקימים WhatsApp Cloud API אצל Meta: חשבון WhatsApp Business, מספר שולח רשום וטוקן System User קבוע.
- מגישים תבנית UTILITY אחת לכל אירוע (הזמנה אושרה, משלוח יצא, חשבונית הופקה) ומחכים לאישור של Meta.
- בפריוריטי מגדירים נקודת קצה בטופס Webhook Definitions תחת BPM Maintenance, ומוסיפים כלל BPM עם פעולת Webhook על הסטטוס של המסמך. לשם כך צריך את מודול ה-Webhooks.
- מריצים שירות ביניים קטן שבודק את הכותרת
priority-bpm-token, מכניס את האירוע לתור, מושך דרך ה-REST API את הפרטים החסרים ומנרמל את הטלפון ל-E.164. - שולחים את התבנית ב-
POST /{phone-number-id}/messages, שומרים את סטטוס המסירה ש-Meta מחזירה ב-webhook, וכותבים כישלונות קבועים לכרטיס הלקוח.
הבקשה נשמעת פשוטה: כשתעודת משלוח נוצרת בפריוריטי, הלקוח יקבל הודעת 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.
אין מודול Webhooks? תשאול עם $since
Webhooks בפריוריטי דורשים את מודול ה-Webhooks, ולהרבה התקנות אין אותו. החלופה היא תהליך מתוזמן: כל כמה דקות שירות הביניים מבקש מה-REST API את תעודות המשלוח (או ההזמנות) שהשתנו מאז הריצה הקודמת, עם אפשרות השאילתה $since, ומתייחס לכל סטטוס חדש כאירוע. המחיר הוא עיכוב של כמה דקות וקריאה אחת בכל ריצה, הרבה מתחת למכסה של 100 קריאות בדקה בפריוריטי בענן.
בגרסה 26.0 נוסף עוד כלי ששווה להכיר: פריוריטי שומרת משלוחי webhook שנכשלו ב-Webhook - Error Log תחת BPM Maintenance למשך 7 ימים. הוא מראה שקריאה נכשלה, אבל לא שולח אותה שוב. את הפער עדיין סוגר תהליך הבדיקה היומי.
מה קורה כשהלקוח עונה?
לקוח שעונה בוואטסאפ לעדכון מפריוריטי פותח חלון שירות של 24 שעות. ההודעה שלו לא מגיעה לפריוריטי; היא מגיעה לכתובת ה-webhook שמוגדרת באפליקציה שלך ב-Meta, כלומר לשירות הביניים. בתוך החלון מותר לענות בטקסט חופשי, ולכן צריך להחליט לפני העלייה לאוויר מי מטפל בתשובות:
- להעביר אותן לאדם, למשל לתיבה משותפת או לאיש המכירות שרשום בכרטיס הלקוח.
- או למסור אותן לבוט שעונה על השאלות הנפוצות (סטטוס הזמנה, מועד אספקה) מתוך נתוני פריוריטי. הדפוס מפורט בצ'אטבוט AI לוואטסאפ.
- לזהות בקשות הסרה ("הסר", "stop") ולהפסיק לשלוח למספר הזה בכל הערוצים.
עדכונים שאין לאן לענות עליהם גרועים מכלום: הלקוח כותב, אף אחד לא עונה, והתבנית הבאה כבר נראית כמו ספאם.
כמה עולה חיבור וואטסאפ לפריוריטי?
סוג אירוע אחד, למשל הודעות משלוח, עם שירות הביניים, התבניות ולוגיקת הניסיון החוזר, נכנס במחירון שלי בשורת "אוטומציה עסקית - תהליך אחד": כ-900 - 5,400 ₪. כמה סוגי אירועים, עם תשובות שמנותבות לבוט, הם מערכת רב-שלבית: כ-5,400 - 24,000 ₪. בנוסף Meta גובה על הודעות תבנית לפי הודעה שנמסרה, לפי הקטגוריה והמדינה; הפירוט בתמחור WhatsApp Business API.
מה לא לעשות
- לא לשלוח בלי הסכמה. עדכון תפעולי על הזמנה שהלקוח ביצע הוא מקובל; שימוש באותו צינור לתוכן שיווקי הוא דבר אחר לגמרי, גם משפטית וגם מבחינת דירוג האיכות של 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 עם טוקן קבוע, מאשרים תבנית UTILITY אחת לכל אירוע, מוסיפים בפריוריטי כלל BPM שמפעיל webhook על הסטטוס של המסמך, מריצים שירות ביניים שמכניס את האירוע לתור ומנרמל את הטלפון ל-E.164, ואז שולחים את התבנית ושומרים את סטטוס המסירה של Meta. חיבור ישיר בין השתיים לא קיים.
צריך את מודול ה-Webhooks של פריוריטי כדי לשלוח עדכוני וואטסאפ?
לא. מודול ה-Webhooks הופך את התהליך למבוסס אירועים, אבל גם בלעדיו תהליך מתוזמן יכול לבקש מה-REST API כל כמה דקות את המסמכים שהשתנו מאז הריצה הקודמת, עם אפשרות השאילתה $since. העיכוב הוא כמה דקות, וכמות הקריאות נשארת הרבה מתחת למכסה של 100 קריאות בדקה בפריוריטי בענן.
לקוחות יכולים לענות לעדכון וואטסאפ שנשלח מפריוריטי?
כן. תשובה פותחת חלון של 24 שעות שבו מותר לענות בטקסט חופשי. התשובה מגיעה ל-webhook שמוגדר באפליקציה ב-Meta ולא לפריוריטי, ולכן צריך להחליט לפני העלייה לאוויר מי מטפל בה: אדם, תיבה משותפת או בוט שקורא את נתוני פריוריטי. מילות הסרה חייבות לעצור כל שליחה נוספת למספר.
להמשך קריאה
שירות רלוונטי
WhatsApp Cloud API
תבניות, אינבוקס דו-כיווני ותזכורות על ה-API הרשמי של Meta.
יש לך פרויקט דומה?
ספר לי מה אתה רוצה לבנות או איזה תהליך להפוך לאוטומטי. אני חוזר תוך 24 שעות עסקים עם כמה שאלות ממוקדות, ואז עוברים על זה יחד בשיחת היכרות חינמית של 30 דקות, בלי התחייבות. בסוף יש לך היקף עבודה, לוח זמנים ומחיר קבוע - או תשובה כנה שלא שווה לבנות את זה.