Webhooks (וובהוקים) הם המנגנון הסטנדרטי של Shopify (שופיפיי) להודיע למערכת חיצונית שמשהו קרה בחנות — מבלי שאותה מערכת תצטרך לדגום (polling) את ה-API שוב ושוב. במקום ש-CRM או מערכת לוגיסטיקה ישאלו פעם בדקה 'יש הזמנה חדשה?', הסוחר נרשם פעם אחת ל-topic כמו orders/create, ו-Shopify שולחת POST לאותו endpoint תוך שניות ספורות מרגע יצירת ההזמנה. זו אבן יסוד לכל אינטגרציה רצינית עבור סוחר ישראלי שמחבר את החנות שלו לפריוריטי, רווחית, חשבשבת, מערכת שילוח, או CRM פנים-ארגוני — וזה הדרך הנכונה לבנות אוטומציות שלא ייחנקו ב-rate limits של ה-API.

טכנית, webhook הוא רשומה ב-Shopify שמקשרת בין topic לבין delivery destination. אפשר ליצור אותם בשני מקומות: בממשק החנות (Settings → Notifications → Webhooks — ידני, נוח לטסטים), או דרך GraphQL Admin API באמצעות המוטציה webhookSubscriptionCreate — שזה הדרך הנכונה לאפליקציות שצריכות להירשם בצורה תוכניתית בעת installation. ה-payload מגיע כ-JSON עם כל הנתונים הרלוונטיים לאירוע (למשל אצל orders/paid תקבל את id, total_price, customer, line_items, shipping_address ועוד). Shopify תומכת גם ב-EventBridge ו-Google Pub/Sub כיעדי אספקה — שמאפשרים queueing מובנה לעומסים גבוהים בלי לבנות תור עצמאי.

השוק הישראלי מנצל webhooks בעיקר לארבעה תרחישים. ראשית: סנכרון הזמנות מ-Shopify (שופיפיי) למערכות חשבוניות מקומיות — כל הזמנה שאירוע orders/paid יוצר מפיקה אוטומטית חשבונית מס בפריוריטי, חשבשבת או רווחית, עם מספר עוקב נכון לרשויות. שנית: דחיפה ל-HYP או Cardcom כאשר משלימים תשלום מחוץ ל-Shopify Payments (לדוגמה ביט) ויש צורך לסגור את ההזמנה ב-Shopify. שלישית: עדכון מצב משלוח דרך אירוע fulfillments/create למערכות שילוח כמו Yango Delivery, באקאת או דואר ישראל. רביעית: התראות Slack/Telegram לצוות התפעול על chargeback או refund. בלי הכלים האלה כל סוחר היה ממציא תור משלו.

בעיית האבטחה הקריטית שמפתחים ישראלים מפספסים שוב ושוב: אימות HMAC signature. בכל webhook ש-Shopify שולחת יש header בשם X-Shopify-Hmac-Sha256, שערכו הוא חתימה של גוף ה-request עם ה-app secret. הקוד באשליו (Node.js) הוא פשוט יחסית: יוצרים HMAC עם אלגוריתם SHA-256 והסוד של האפליקציה, מזינים אליו את גוף ה-request כפי שהתקבל (raw bytes, לא אחרי JSON parse), מבקשים פלט בקידוד base64, ומשווים לערך של ה-header. אם השוויון נכשל — מחזירים 401 ומסיימים. נקודה קריטית: חייבים לחתום על ה-raw body לפני ש-express.json() או middleware אחר מעכל אותו, אחרת ההשוואה תיכשל תמיד. הרבה אפליקציות ישראליות שראיתי מקבלות webhooks ללא אימות בכלל — וזה פוטנציאל לזיוף הזמנות, הרצת חשבוניות מזויפות, ושיבוש דוחות.

טעויות נפוצות נוספות שעולות אצל סוחרים בארץ: (א) Shopify מנסה לשלוח webhook חוזר עד 19 פעמים תוך 48 שעות במידה ו-endpoint מחזיר שגיאה — אם השרת שלכם איטי (יותר מ-5 שניות) או נופל, אתם עלולים לקבל hits כפולים, או גרוע מכך, להפיק חשבונית מס פעמיים על אותה הזמנה. הפיתרון: לענות 200 OK מהר ולעבד אסינכרונית בתור (Bull/Redis/SQS/AWS Lambda), עם idempotency key לפי ה-header X-Shopify-Webhook-Id. (ב) רישום ל-topic ישן לאחר שדרוג גרסת API — ה-webhookSubscription כפוף ל-API version, ושינוי גרסה בלי ליצור מחדש מסתיים ב-deprecation שקטה שמתגלה רק כשמשהו נשבר. כדאי לעיין במונח webhooks-api-version להבנת המנגנון. (ג) שכחה למחוק webhooks ישנים כשעוברים מסביבת dev ל-production — מקרים שראיתי בהם webhook נשאר רשום לכתובת localhost:3000 של מפתח שכבר עזב, ו-Shopify מנסה לדפוק לשם בלי הצלחה במשך חודשים, עד שהיא כובה את ה-subscription אוטומטית. (ד) חוסר ניטור: webhook שנכשל שעה אחת ולא מטופל יכול להוביל לאיבוד הזמנות, חוסר התאמה במלאי, או דיווח כפול. שווה להגדיר alert ב-Slack על כל 500/timeout.

Webhooks משתלבים יפה עם שאר הארכיטקטורה של Shopify (שופיפיי): Shopify Flow יכול לטריגר על אותם אירועים בלי קוד (פתרון לסוחר ללא מפתח), Functions של Shopify יכולות לרוץ במהלך ה-checkout עצמו לפני שה-webhook יוצא, ו-Bulk Operations מאפשרות לעבד היסטוריה גדולה בלי לחרוג מ-rate limits. בנוסף, EventBridge ו-Pub/Sub עוטפים את ה-webhooks ב-message queue מנוהל — בחירה חכמה לחנויות עם תעבורה גבוהה ש-endpoint יחיד לא יעמוד בה. סוחר ישראלי שמחפש לבנות מעטפת אוטומציה רצינית כדאי שיעבור על מדריך התפעול המלא (/help/manual), יבדוק אפליקציות חשבוניות ואינטגרציה בתיקיית האפליקציות הישראליות (/apps/israel), ויעיין באפליקציות עם ממשק עברי (/apps/hebrew). למימוש מתקדם של אינטגרציה לפריוריטי, חשבשבת או רווחית כדאי לשקול שירות הקמה דרך מדריך השירותים (/services) — חיסכון של חודשי פיתוח. חיוני לציין: Shopify Storefront תומכת בעברית ו-RTL, אך Shopify Admin עצמו (שבו מנהלים את ה-webhooks ורואים את ה-log) עדיין באנגלית בלבד — לעבודה בעברית מלאה במחשב הניהולי נדרשת שכבת ecomOS מעל ה-Admin.