Webhooks יוצאים וחתימה
Webhook שולח למערכת שלכם בקשת POST בכל פעם שקורה משהו — בלי לשאול את ה-API כל דקה. זמין בתוכנית Business ומעלה.
הגדרה
- API ← Webhooks ← מנוי חדש: כתובת HTTPS, האירועים שמעניינים אתכם, וסוד (
whsec_…, נוצר אוטומטית; אפשר להחליף). - לוחצים «בדיקה» — נשלח אירוע
ping. השרת שלכם צריך לענות 2xx תוך 8 שניות. עבודה כבדה — אחרי שהחזרתם 200.
אירועים
| אירוע | מתי |
|---|---|
lead.created | ליד חדש נשמר (מוואטסאפ, מהטלפון או מה-API). |
message.received | הודעת וואטסאפ נכנסת מלקוח. |
appointment.booked · appointment.canceled | פגישה נקבעה (קול, וואטסאפ, דף ההזמנה או API) / בוטלה. |
call.ended | שיחה הסתיימה ונותחה — סיכום, משך, תוצאה וקישור להקלטה. |
contact.optout | לקוח ביקש הסרה — עדכנו גם את המערכת שלכם. |
payment.reported | לקוח דיווח ששילם. |
גוף הבקשה: JSON עם id, event, created_at ו-data. כותרות: X-WABOT-Event, X-WABOT-Delivery (מזהה ייחודי — לסינון כפילויות), X-WABOT-Timestamp ו-X-WABOT-Signature.
אימות החתימה
X-WABOT-Signature: sha256=<hex> — HMAC-SHA256 של גוף הבקשה הגולמי עם הסוד שלכם. בדקו אותה לפני שאתם מאמינים לתוכן:
<?php
$secret = 'whsec_...'; // from the API page
$raw = file_get_contents('php://input');
$given = (string)($_SERVER['HTTP_X_WABOT_SIGNATURE'] ?? '');
$calc = 'sha256=' . hash_hmac('sha256', $raw, $secret);
if (!hash_equals($calc, $given)) { http_response_code(401); exit; }
http_response_code(200); // answer first, work later
$evt = json_decode($raw, true);
// $evt['event'], $evt['data'], $evt['id']
ניסיונות חוזרים
תשובה שאינה 2xx או timeout ⇒ עד 5 ניסיונות חוזרים: אחרי דקה, 5 דקות, חצי שעה, שעתיים ו-12 שעות. אחרי 20 מסירות כושלות ברצף המנוי מושבת ואתם מקבלים התראה; מפעילים מחדש בלחיצה אחרי שתיקנתם. היומן בעמוד (וגם GET events) מציג כל מסירה עם קוד התשובה, ואפשר לשלוח מחדש מסירה שנכשלה.