Webhooks
Webhooks מאפשרים ל-Your AI Connector להודיע באופן אוטומטי לכלי העבודה האחרים שלך בכל פעם שמשהו חשוב קורה — יצירת איש קשר חדש, קביעת פגישה, או קבלת הודעה. במקום לבדוק עדכונים באופן ידני, המערכות המחוברות שלך מקבלות התראה מיידית ברגע שמשהו קורה.
מהם Webhooks?
חשוב על Webhook כעל הודעת טקסט אוטומטית בין שתי אפליקציות. כאשר משהו קורה ב-Your AI Connector (כמו הרשמה של איש קשר חדש), הפלטפורמה שולחת התראה מיידית למערכת אחרת לבחירתך. עליך לספק כתובת אינטרנט (הנקראת “כתובת URL של Webhook”) שאליה יישלחו התראות אלו — כתובת זו מסופקת בדרך כלל על ידי ה-CRM שלך, פלטפורמת האוטומציה או המפתח שלך.
Webhooks שולחים נתונים רק מחוץ ל-Your AI Connector. Webhook הוא כביש חד-סטרי מ-Your AI Connector אל הכלים האחרים שלך. אין כתובת URL של webhook ששולחת לידים, אנשי קשר או הודעות לתוך הפלטפורמה. כדי להזין ליד חדש — מטופס באתר, מה-CRM שלך או מ-GoHighLevel — המערכת שלך מבצעת קריאת API במקום זאת. עיין ב-גישת API (פעולת יצירת איש קשר) וב-משפכים. הדבר היחיד שאתה צריך עבור הכיוון הנכנס הוא מפתח ה-API שלך, שנמצא בסעיף משלו — עיין ב-גישת API. דף ה-Webhooks המתואר כאן מיועד אך ורק לכיוון היוצא.
הערה: הגדרת Webhooks כרוכה בתצורה טכנית מסוימת. אם אינך מרגיש בנוח עם זה, שתף את הדף הזה עם המפתח שלך או השתמש בפלטפורמת אוטומציה כמו Zapier, Make או Pabbly, המספקות כתובות Webhook ללא צורך בכתיבת קוד.
שימושים נפוצים כוללים:
- סנכרון אנשי קשר חדשים ל-CRM שלך.
- הפעלת תהליך עבודה ב-Zapier, Make או Pabbly כאשר מוחלת תגית.
- התראה לצוות שלך ב-Slack כאשר אדם נדרש להתערבות.
- עדכון מערכת היומן שלך כאשר נקבעת פגישה.
- רישום סיכומי שיחות למסד הנתונים שלך.
הגדרת Webhooks
- בסרגל הצד השמאלי, לחץ על Settings (סמל גלגל השיניים).
- בסרגל הצד של ההגדרות, תחת קבוצת Integrations, לחץ על Webhooks.
בחשבון שבו עדיין לא הוגדרו Webhooks, הדף נראה כך:
- לחץ על New webhook (Webhook חדש), בפינה הימנית העליונה. טופס ייפתח בתוך הדף:
- מלא את הפרטים:
- כתובת URL של נקודת קצה (Endpoint URL) — כתובת האינטרנט שאליה Your AI Connector תשלח התראות על אירועים. תקבל אותה מהמערכת החיצונית שלך (CRM, פלטפורמת אוטומציה או שרת מותאם אישית).
- שם — תווית שתזהה מאוחר יותר (למשל “התראות Slack” או “סנכרון CRM”). לשימושך האישי בלבד.
כתובת ה-Webhook שלך חייבת להיות כתובת
https://נגישה לציבור. כתובותhttp://פשוטות, כתובותlocalhostאו כתובות רשת פנימיות נדחות בעת השמירה. כדי לבדוק מהמחשב שלך, השתמש במנהרה ציבורית (webhook.site או ngrok) במקום ב-localhost.
- תחת אירועים (Events), לחץ על האירועים שברצונך ש-webhook זה יקבל — כל 22 האירועים מפורטים ב-22 אירועי ה-Webhook.
- (אופציונלי) הפעל את נסה שוב משלוחים שנכשלו (Retry failed deliveries) אם ברצונך ש-Your AI Connector ימשיך לנסות במקרה של כשל זמני — ראה ניסיון חוזר של משלוחים שנכשלו.
- לחץ על צור webhook (Create webhook). הוא יופיע ברשימה מתחת לטופס, ותוכל ללחוץ על בדיקה (Test) בשורה שלו בכל עת כדי לשלוח מטען (payload) לדוגמה לנקודת הקצה שלך.
נדרשת הרשאה. הוספה, עריכה או בדיקה של Webhooks דורשות הרשאת “עריכה” (edit) של Integrations (חברי צוות בעלי הרשאת צפייה בלבד יראו הודעת קריאה בלבד במקום הטופס).
חתימה על Webhook מחייבת שהוא כבר יהיה שמור — פתח שורה של Webhook קיים כדי לערוך אותו, ולוח ה-Signing secret יופיע בתחתית טופס העריכה. לטיוטה חדשה לגמרי שלא נשמרה עדיין אין אפשרות חתימה — עיין ב-מטענים חתומים להלן.
Webhook אחד עבור כל חשבונות הלקוחות שלך (סוכנויות)
אם אתה מנהל סוכנות, אינך צריך ליצור מחדש את אותו ה-webhook בכל חשבון לקוח. בחשבון הסוכנות, לטופס ה-webhook יש מתג נוסף: Also fire for all client accounts. הפעל אותו, וה-webhook הזה יקבל גם אירועים המתרחשים בכל חשבון לקוח תחת הסוכנות שלך — נקודת קצה אחת, כל הסוכנות.
כיצד זה פועל:
- הבלוק
userמציין לאיזה לקוח שייך האירוע. כל התראה כבר נושאת בלוקuserהמזהה את החשבון שבו התרחש האירוע, כך שהאוטומציה שלך יכולה לנתב לפי לקוח. - הגדרות ה-webhook שלך חלות בכל מקום. האירועים שבחרת, סוד החתימה והגדרת הניסיון החוזר משמשים גם עבור משלוחים לחשבונות לקוחות.
- אין משלוחים כפולים. אם לחשבון לקוח יש webhook משלו המצביע על אותה כתובת URL, הוא זה שישמש עבור אירועי אותו חשבון — אותו אירוע לעולם לא יגיע פעמיים לאותה נקודת קצה.
- הלקוחות לא רואים זאת. ה-webhook אינו מופיע בדף ה-Webhooks של חשבון הלקוח, והלקוחות אינם יכולים לכבות אותו — הוא מנוהל על ידך בלבד.
- האמינות מנוטרת לפי חשבון לקוח. אם נקודת הקצה שלך ממשיכה להיכשל, היא תכובה אוטומטית עבור החשבון שהמשלוחים שלו נכשלו (ראה אמינות Webhook), ולא עבור כל הסוכנות בבת אחת.
המתג מופיע רק בחשבונות סוכנות. הגדרתו דרך ה-API נתמכת גם היא — ראה את השדה apply_to_sub_accounts ב-Webhooks API.
אירועי הפעלה זמינים
באפשרותך להפעיל או להשבית כל אחד מ-22 אירועי ה-webhook באופן עצמאי. כאשר אירוע מופעל, Your AI Connector שולח התראה לכתובת ה-webhook שלך עם הנתונים הרלוונטיים. כל אירוע, משמעותו, וקוד ה-event שהוא מציב במטען (payload) מפורטים יחד ב-22 אירועי ה-Webhook בהמשך דף זה.
כדאי לדעת: משימה נוצרה (Task Created), משימה עודכנה (Task Updated), ו-משימה הושלמה (Task Completed) ניתנים לבחירה מלאה ונשמרים כראוי. סיכום יומי נוצר (Daily Summary Created) הוא גם תוספת חדשה. ראה Webhook של משימה הושלמה להלן עבור מבנה המטען הזה.
טריגרים של Webhook מבוססי תגיות
subscribed_to_tags אינו מגביל אירועי webhook לתגית מסוימת. הוא רק מצמצם אילו תגיות מייצרות התראה על סיכום שיחה. כדי לקבל בקשה כאשר מוחלת תגית ספציפית, הגדר כתובת webhook על אותה תגית בכרטיסיית תגיות (Tags) של הסוכן (או הקמפיין).
לטופס ה-webhook עצמו אין בורר תגיות, לא בעת יצירת webhook חדש ולא בעת עריכתו, לכן ניתן לקרוא או לשנות את ה-subscribed_to_tags רק דרך ממשק ה-API של Webhooks, או על ידי פנייה לתמיכה.
כדאי לדעת: עריכת webhook קיים שיש לו רשימת
subscribed_to_tags(שינוי שם, שינוי אירועים, החלפת מצב ניסיונות חוזרים) אינה מוחקת עוד את הרשימה הזו — מכיוון שלטופס אין בורר תגיות לשליחה חזרה, שמירה מדף זה כעת מותירה את הרשימה הקיימת ללא שינוי. (זה היה באג אמיתי לפני ה-21 ביולי 2026: שמירה מטופס ה-webhook נהגה למחוק את הרשימה מכיוון שהיא תמיד שלחה רשימת תגיות ריקה. אם webhook איבד את רשימת ה-subscribed_to_tagsשלו לפני תאריך זה, יהיה צורך להגדיר אותו מחדש דרך ה-API.)
יצירת סיכום עבור אנשי קשר מתויגים
במקום שבו ל-webhook יש רשימת subscribed_to_tags, ניתן להפעיל את צור סיכום (Generate Summary). כאשר האפשרות מופעלת, Your AI Connector מייצר באופן אוטומטי סיכום שיחה עבור איש הקשר כאשר אחת מהתגיות הללו מוחלת, וכולל אותו בנתוני ה-webhook — הקשר מלא ללא צורך בבקשה נפרדת.
בדיקת ה-Webhook שלך
- פתח את הגדרות ← אינטגרציות ← Webhooks.
- בשורה של ה-webhook שלך, לחץ על בדיקה (Test).
- בדוק במערכת החיצונית שלך כדי לוודא שהיא קיבלה את נתוני הבדיקה.
- עיין בפורמט הנתונים כדי לוודא שהמערכת שלך מסוגלת לנתח אותו כראוי.
לצורך בדיקה מלאה מקצה לקצה, שלח הודעה שתפעיל את אחד האירועים שהגדרת (שידור, או הודעה נכנסת בערוץ מחובר) וודא שה-webhook מופעל עם הנתונים האמיתיים.
טיפ: השתמש בכלי כמו webhook.site או RequestBin במהלך הפיתוח כדי לבדוק את נתוני ה-webhook הגולמיים לפני חיבור מערכת הייצור שלך.
מה נחשב למשלוח מוצלח
בין אם תלחץ על Test (בדיקה) ובין אם האירוע מופעל באמת, אנחנו שולחים את אותו הדבר:
- בקשת POST (לעולם לא GET), עם הגוף כ-JSON ו-
Content-Type: application/json. - הכותרות המפורטות תחת מטענים חתומים. כותרות חתימה נכללות רק לאחר שהגדרת סוד חתימה.
אנחנו מתייחסים למשלוח כאל מוצלח כאשר:
- נקודת הקצה שלך משיבה עם כל סטטוס 2xx (200, 201, 204 — כולם תקינים).
- היא משיבה בתוך 30 שניות.
כמה דברים שמפתיעים אנשים:
- גוף התגובה מתעלם. אין צורך להחזיר JSON ספציפי. תגובת 200 ריקה מספיקה.
- הפניות (Redirects) נחשבות ככישלון. אנחנו לא עוקבים אחריהן, לכן קוד 301 או 302 (כולל הפניה עקב לוכסן בסוף הכתובת, או מ-http ל-https) יירשם כמשלוח שנכשל. שמור את ה-URL הסופי, לא כזה שמבצע הפניה.
- מחרוזות שאילתה (Query strings) נתמכות במלואן.
https://your-app.com/hook?token=abc123נשלח בדיוק כפי ששמרת אותו, לכן הצבת אסימון במחרוזת השאילתה עובדת באותה מידה כמו הצבתו בנתיב. - ה-URL שלך חייב להיות
https://ונגיש לציבור. כתובות השייכות לתשתית של Your AI Connector עצמה נדחות, אך נקודות הקצה שלך ב-Google Cloud Functions, Cloud Run, App Engine, Firebase Hosting או בכל מקום אחר הן תקינות. - חומת אש או שכבת הגנה מפני בוטים לפני נקודת הקצה שלך עלולה לחסום אותנו. המקרה הנפוץ ביותר הוא Cloudflare: אם באזור שלך מופעל מצב Bot Fight Mode או אתגר מנוהל, הבקשה שלנו מקבלת דף אתגר “Just a moment…” עם קוד 403 במקום להגיע לשרת שלך — ובקשת שרת-לשרת לעולם לא תוכל לעבור אתגר דפדפן, לכן גם כפתור ה-Test וגם אירועים אמיתיים נכשלים באותה צורה. כפתור ה-Test יגיד לך מתי זה קורה (“Cloudflare is showing a bot challenge to our request”). תקן זאת ב-Cloudflare באמצעות כלל Security / WAF שמדלג על אתגרים עבור נתיב ה-webhook שלך (או עבור סוכן המשתמש
Webhook-Delivery/1.0), ולאחר מכן לחץ שוב על Test. - אם חומת האש שלך זקוקה לרשימת היתרים (allowlist) של כתובות IP במקום (למשל בתוכנית החינמית של Cloudflare, שבה לא ניתן לדלג על מצב Bot Fight Mode רגיל באמצעות כלל WAF, אך כלל גישה של IP שמוגדר כ-Allow פועל לפניו), אנחנו יכולים לעזור: כל משלוח, בין אם מכפתור ה-Test ובין אם מאירוע חי, נשלח מכתובת IPv4 קבועה אחת (ללא טווחים, ללא IPv6, ללא החלפה). צור קשר עם התמיכה ואנחנו ניתן לך את הכתובת להוספה לרשימת ההיתרים. שמור על אימות חתימה כבדיקת האמון האמיתית שלך, מכיוון שהיא מאמתת כל מטען (payload) ללא קשר למקורו.
- תוצאת ה-Test מציגה לך בדיוק מה ענתה נקודת הקצה שלך. בדיקה שנכשלה מציגה כעת את הסיבה האמיתית (סטטוס ה-HTTP שנקודת הקצה שלך החזירה, פסק זמן, או שלא הצלחנו להגיע לכתובת כלל) במקום שגיאה כללית, ובדיקה על webhook שמור נשלחת חתומה כאשר החתימה מופעלת, בדיוק כמו אירוע חי.
שימוש ב-n8n, Make או Zapier (“כתובת URL לבדיקה” לעומת “כתובת URL לייצור”)
פלטפורמות אוטומציה בדרך כלל מספקות לך שתי כתובות webhook שונות, וזה מבלבל משתמשים רבים:
- כתובת URL לבדיקה (ב-n8n היא מכילה
/webhook-test/). היא מקבלת נתונים רק בזמן שאתה צופה באופן פעיל בקנבס ולחצת זה עתה על Listen for test event (או Test workflow). היא לוכדת אירוע בודד ואז מפסיקה להאזין — לכן לחיצה על בדיקה ב-Your AI Connector מספר פעמים ברצף תתפוס רק את הראשון, ורק אם חלון ההאזנה פעיל באותו רגע בדיוק. כדי לבדוק: לחץ תחילה על Listen for test event ב-n8n, לאחר מכן חזור ל-Your AI Connector ולחץ על בדיקה פעם אחת. - כתובת URL לייצור (ב-n8n היא מכילה
/webhook/, ללא-test). זו הכתובת שיש להדביק ב-Your AI Connector עבור אירועים חיים. היא עובדת רק לאחר שה-workflow שלך מוגדר כ-Active. אם ה-workflow אינו פעיל, n8n תדחה את הבקשה עם שגיאת “404 / webhook not registered”, למרות ש-Your AI Connector שלחה את הנתונים כראוי.
בקצרה: בצע בדיקות עם כתובת ה-URL לבדיקה בזמן האזנה, אך כדי שה-webhook ימשיך לעבוד עם אנשי קשר אמיתיים, שמור את כתובת ה-URL לייצור ב-Your AI Connector וודא שזרימת העבודה מוגדרת כ-Active.
פורמט נתוני Webhook
כאשר Webhook מופעל, Your AI Connector שולחת נתונים מובנים (JSON) לכתובת ה-Webhook שלך. אם אתה משתמש בפלטפורמת אוטומציה כמו Zapier או Make, היא מנתחת נתונים אלו עבורך באופן אוטומטי. אם אתה בונה אינטגרציה מותאמת אישית:
{
"event": "contactCreated",
"contact": { "id": "<contact-id>", "first_name": "Jane", "...": "..." },
"campaign": { "id": "<campaign-id>", "name": "AI Receptionist", "status": "Live" },
"agent": { "id": "<agent-id>", "name": "Front Desk" },
"user": { "id": "<account-id>", "email": "owner@example.com" }
}
| שדה | תיאור |
|---|---|
event |
מחרוזת האירוע המדויקת שהפעילה את ההתראה (לדוגמה, contactCreated, booked). זו אינה תווית התצוגה המוצגת ברשימת האירועים; כל תווית והקוד התואם לה נמצאים ב-22 אירועי ה-Webhook. |
contact |
איש הקשר שהאירוע נוגע אליו, או null עבור אירועים שאינם קשורים לאיש קשר (כגון creditsRecharged). |
campaign |
הקמפיין שאליו שייך איש הקשר, או null אם אין כזה. |
agent |
הסוכן המטפל בשיחה, או null אם אין כזה. |
user |
פרטי זהות בסיסיים עבור החשבון שבבעלותו הנתונים. |
campaignאוagent— בדרך כלל אחד מהם, לא שניהם. אם החשבון שלך משתמש בסוכנים, אנשי הקשר שלך משויכים לסוכן ולא לקמפיין, לכןcampaignמגיע כ-nullו-agentמציין מי מהם טיפל בכך. חשבונות מבוססי-קמפיין ישנים רואים את המצב ההפוך. קרא את השדה המלא; אל תניח ש-campaignתמיד קיים.
הבלוק
agentהגיע ב-15 באוגוסט 2026. הוא מופיע לצדcampaignבאירועים הקשורים לשיחה — צ’אט שהסתיים, ‘נא לא להפריע’, המשך שיחה, ביטול ארכוב, השהיית AI, הודעה חדשה, סיכום שיחה, וה-webhook שניתן להגדיר על תגית — והוא נושא את ה-idוה-nameשל הסוכן המטפל, אוnullכאשר אין סוכן מעורב. זהו תוסף בלבד: כל שדה שאתה כבר מקבל נשאר ללא שינוי, כך שמקלט שבנית לפני תאריך זה ימשיך לעבוד ללא צורך בעדכון.
אירועים מסוימים מוסיפים בלוק עליון נוסף משלהם. לדוגמה, Appointment Booked (קביעת פגישה) מוסיף בלוק appointment (ראו Appointment Booked Webhook), New Message (הודעה חדשה) מוסיף בלוק message מלא עם הטקסט (ראו New Message Webhook), ו-Deliveries (משלוחים) ו-Reads (קריאות) מוסיפים בלוק message קצר עם מזהה ההודעה והסטטוס שלה בלבד (ראו Deliveries and Reads Webhook).
Deliveries ו-Reads מציינים איזו הודעה, אך לא מה היה כתוב בה. הם נושאים בלוק
messageהמכיל את ה-idוה-statusשל ההודעה — וה-idהזה הוא אותו ה-messageIdש-נקודת הקצה לשליחת הודעה מחזירה, כך שתוכלו להתאים אישור מסירה או קריאה להודעה המדויקת ששלחתם — אך ללא גוף ההודעה. Replies (תשובות) אינו נושא בלוקmessageכלל. אם אתם זקוקים למילים שנשלחו או התקבלו, הירשמו ל-New Message לצד אירועים אלו.
שני דברים שכדאי לדעת לפני כתיבת המקלט שלך. אין שדה
timestamp, ואין מעטפתdata. כל בלוק יושב ברמה העליונה של אובייקט ה-JSON, כפי שמוצג לעיל.
22 אירועי ה-Webhook
22 אירועי ה-webhook, עם תווית התצוגה שאתה מסמן באפליקציה וקוד ה-event שנשלח במטען (payload). קוד ה-event הוא מחרוזת קצרה שאינה תואמת לתווית התצוגה, לכן התאם את המקבל שלך לפי הקוד, לא לפי התווית:
| תווית תצוגה (באפליקציה) | קוד event ב-payload |
מה זה אומר |
|---|---|---|
| Contact Created | contactCreated |
איש קשר חדש נוסף לחשבונך (ידנית, דרך ייבוא, או דרך ה-API). |
| Contact Paused | contact_paused |
שיחת איש קשר הושהתה (הבוט מפסיק להגיב). |
| Contact Resumed | contact_resumed |
שיחת איש קשר מושהית חודשה. |
| Contact Do Not Disturb | contact_do_not_disturb_changed |
הגדרת ‘נא לא להפריע’ של איש קשר הופעלה. |
| Contact Unarchived | contact_unarchived |
איש קשר מאורכב שולח הודעה חדשה, מה שמחזיר אותו לתיבת הדואר הנכנס הפעילה שלך. |
| New Message | new_message |
כל הודעה שנוספת לשיחה בכל ערוץ — גם הודעות שאיש הקשר שולח לך וגם הודעות שה-AI או הצוות שלך שולחים לו. זהו האירוע היחיד שנושא את טקסט ההודעה בפועל (ראו New Message Webhook). |
| Replies | replied |
איש קשר משיב להודעה. |
| Reads | read |
איש קשר קורא הודעה (בערוצים התומכים באישור קריאה). נושא את מזהה ההודעה שנקראה — ראו Deliveries and Reads Webhook. |
| Deliveries | delivered או undelivered |
הודעה נמסרה בהצלחה לאיש קשר (undelivered כאשר המסירה נכשלת). נושא את מזהה ההודעה — ראו Deliveries and Reads Webhook. |
| Human Alerted | humanAlerted |
בוט ה-AI קובע שהוא אינו יכול לטפל בשיחה ומסמן אותה לתשומת לב אנושית. |
| Chat Concluded | chat_concluded |
בוט ה-AI מחליט ששיחה הגיעה לסיומה (בוצעה הזמנה, ליד נפסל וכו’). |
| Appointment Booked | booked |
איש קשר קובע פגישה דרך מערכת ההזמנות. |
| Credits Spent | creditsSpent |
נקודות זכות (Credits) מנוכות מחשבונך. |
| Credits Recharged | creditsRecharged |
נקודות זכות מתווספות לחשבונך באמצעות טעינה אוטומטית או רכישה ידנית. |
| Low Credit Balance | lowCreditBalance בבדיקת Test, Low Credit Balance בבדיקה אמיתית |
אזהרה מוקדמת שיתרת נקודות הזכות שלך ירדה מתחת לסף ההתראה (100 נקודות אלא אם הגדרת אחרת). מיועד לסוכנויות, שכל חשבונות המשנה שלהן מוציאים ממאגר אחד. הוא נושא balance, threshold ו-account_email במקום בלוק איש קשר, נשלח לכל היותר פעם ב-24 שעות כל עוד היתרה נשארת נמוכה, ומתאפס ברגע שהיתרה עולה בחזרה מעל הסף. |
| Task Created | taskCreated |
משימה נוצרת. |
| Task Updated | taskUpdated |
משימה משתנה מבלי לעבור לשלב סיום. |
| Task Completed | taskCompleted |
משימה עוברת לשלב שהוגדר כשלב סיום. |
| Daily Summary Created | dailySummaryCreated |
דוח הסיכום היומי שלך נוצר. |
| Channel Connected | channelConnected |
טרם נשלח — ניתן לבחירה, אך דבר לא מפעיל אותו כיום. אל תבנו על בסיס זה. מיועד לרגע שבו ערוץ הודעות מסיים להתחבר. |
| Broadcast Started | broadcastStarted |
שידור מתחיל להישלח (הסטטוס שלו משתנה ל-Sending). מופעל פעם אחת בכל התחלה, כולל כאשר שידור מושהה מתחדש. נושא בלוק broadcast במקום בלוק איש קשר: id, name, channel, status, previous status, הרשימה אליה הוא מופנה (list_id, list_name, is_smart_list), scheduled_at, total_contacts. |
| Broadcast Completed | broadcastCompleted |
שידור מסתיים (הסטטוס שלו משתנה ל-Sent או Failed). אותו בלוק broadcast בתוספת completed_at וכאשר זמין, completion_summary (total_sent, permanently_failed, unique_replied, failure_rate, had_errors). השתמשו בשניים אלו כדי לחבר רשימת שידור חכמה (Smart Broadcast List) לכלים חיצוניים. |
שני קודים נוספים לעולם אינם מופיעים ברשימה זו מכיוון שאינך נרשם אליהם: contact_tags_updated, שנשלח על ידי כתובת webhook שהוגדרה על תגית בודדת, ו-summary_generated, שנשלח כאשר סיכום צ’אט נכתב עבור תגית ברשימת ה-subscribed_to_tags של webhook.
האירוע ‘ערוץ חובר’ (Channel Connected) טרם נשלח. הוא מופיע ברשימת האירועים, אך כרגע שום דבר לא מפעיל אותו. אל תבנה פונקציונליות המסתמכת עליו.
התראות מבוססות תגיות ומשימות משתמשות במבנים נפרדים משלהן. ראו Contact Tags Updated ו-Task Completed.
Webhook של איש קשר שנוצר
נשלח כאשר אירוע יצירת איש קשר (Contact Created) מופעל (איש קשר חדש מתווסף ידנית, באמצעות ייבוא, או באמצעות API).
שם האירוע
contactCreated
פורמט המטען (Payload)
{
"event": "contactCreated",
"contact": {
"id": "<contact-id>",
"email": "jane@example.com",
"phone_number": "+15551234567",
"first_name": "Jane",
"last_name": "Smith",
"human_alerted": false,
"human_alert_reason": null,
"is_bot_active": true,
"ad_referral": null
},
"campaign": {
"id": "<campaign-id>",
"name": "AI Receptionist",
"status": "Live"
},
"agent": {
"id": "<agent-id>",
"name": "Front Desk"
},
"user": {
"id": "<account-id>",
"email": "owner@example.com",
"first_name": "Alex",
"last_name": "Doe"
}
}
| שדה | תיאור |
|---|---|
event |
תמיד contactCreated עבור אירוע זה. |
contact.id |
המזהה הייחודי של איש הקשר החדש. |
contact.email / contact.phone_number |
האימייל והטלפון של איש הקשר, אם ידועים (כל אחד מהם עשוי להיות ריק בהתאם לערוץ). |
contact.first_name / contact.last_name |
שמו של איש הקשר, אם ידוע. |
contact.human_alerted / contact.human_alert_reason |
האם איש הקשר מסומן לצורך טיפול אנושי, ומדוע. |
contact.is_bot_active |
האם בוט ה-AI פעיל כרגע על איש קשר זה. |
contact.ad_referral |
שיוך מודעת Meta Click-to-WhatsApp, או null — עיין ב-שיוך מודעות Click-to-WhatsApp. |
campaign |
הקמפיין שתחתיו נוצר איש הקשר, או null. |
agent |
הסוכן שהוקצה לאיש הקשר, או null. |
user |
פרטי זיהוי בסיסיים עבור החשבון שבבעלותו איש הקשר. |
דגימת ה-“בדיקה” ואירוע אמיתי נראים מעט שונה. כפתור הבדיקה שולח נתוני מציין מיקום (ג’ון דו, קמפיין לדוגמה). אירוע “יצירת איש קשר” אמיתי נושא את פרטי איש הקשר בפועל, וחלק מהשדות עשויים להיות ריקים בהתאם לערוץ.
Webhook הודעה חדשה
ה-Webhook הזה מופעל בכל פעם שהודעה מתווספת לשיחה, בכל ערוץ. הוא מכסה את שני הכיוונים: הודעות שאיש הקשר שולח אליך, והודעות שה-AI, הצוות שלך או קמפיין שולחים לו. זהו ה-Webhook היחיד שכולל את טקסט ההודעה, לכן בו יש להשתמש כאשר ברצונך לשקף שיחות למערכת חיצונית.
שם האירוע
new_message
פורמט המטען (Payload)
{
"event": "new_message",
"contact": {
"id": "<contact-id>",
"email": "jane@example.com",
"phone_number": "+15551234567",
"first_name": "Jane",
"last_name": "Smith",
"human_alerted": false,
"human_alert_reason": null,
"is_bot_active": true,
"ad_referral": null
},
"agent": {
"id": "<agent-id>",
"name": "Front Desk"
},
"user": {
"id": "<account-id>",
"email": "owner@example.com",
"first_name": "Alex",
"last_name": "Doe"
},
"message": {
"id": "<message-id>",
"body": "Hi, are you open on Saturday?",
"direction": "inbound",
"status": "received",
"created_at": "2026-07-30T17:27:06.000Z",
"channel": "whatsapp_web"
}
}
| שדה | תיאור |
|---|---|
event |
תמיד new_message עבור אירוע זה. שימו לב שזו המחרוזת המדויקת שנשלחת — זו אינה תווית התצוגה “New Message”. |
contact |
איש הקשר שהשיחה שלו שייכת להודעה. בעל אותו מבנה כמו ב-Contact Created. |
agent |
הסוכן המטפל בשיחה (id ו-name), או null אם אין סוכן מעורב. |
user |
פרטי זהות בסיסיים עבור החשבון שבבעלותו השיחה. |
message.id |
המזהה הייחודי של ההודעה. |
message.body |
טקסט ההודעה. ריק עבור הודעה שנושאת רק קובץ מצורף (תמונה, הודעה קולית, מסמך). |
message.direction |
inbound עבור הודעה מאיש הקשר, outbound עבור הודעה שנשלחה על ידי ה-AI שלך או על ידי הצוות שלך מתיבת הדואר הנכנס, ו-outbound-api עבור הודעה שנשלחה על ידי קמפיין, שידור, שליחת תבנית, או ה-API. |
message.status |
היכן נמצאת ההודעה במחזור החיים שלה: received עבור נכנסת, ו-queued / sent / delivered / read / failed / undelivered עבור יוצאת. זהו הסטטוס ברגע יצירת ההודעה, לכן הודעה יוצאת מגיעה לכאן בדרך כלל כ-queued או sent ומגיעה ל-delivered לאחר מכן — השתמשו באירועי Deliveries ו-Reads אם אתם זקוקים למעברים מאוחרים אלו. הם נושאים את אותו message.id כמו בלוק זה, כך שתוכלו להתאים את המעבר להודעה זו (ראו Deliveries and Reads Webhook). |
message.created_at |
מתי ההודעה נוצרה, ב-UTC (ISO 8601). |
message.channel |
הערוץ שדרכו עברה ההודעה, לדוגמה whatsapp, whatsapp_web, sms, instagram, messenger, telegram, email או custom. |
עדיין אין בלוק
campaignב-payload זה. הודעה חדשה שולחתcontact,agent,userו-message. הבלוקagentנוסף ב-15 באוגוסט 2026 והוא מציין איזה סוכן מטפל בשיחה; אם אתה זקוק גם להקשר של הקמפיין, חפש את איש הקשר דרך ה-API באמצעותcontact.id.
רשומות AI פנימיות אינן מפעילות את ה-Webhook הזה. לצד הודעות אמיתיות, הפלטפורמה שומרת שורות רישום משלה בתוך שיחה (קריאות לכלי ה-AI ורשומות תור פנימיות). אלו לעולם לא נשלחות — אתה מקבל רק הודעות שנשלחו או התקבלו בפועל.
Deliveries and Reads Webhook
שני אירועים אלו מדווחים מה קרה להודעה לאחר שעזבה את Your AI Connector: Deliveries מופעל כאשר הודעה מגיעה לאיש הקשר (או נכשלת), ו-Reads מופעל כאשר איש הקשר פותח אותה, בערוצים התומכים באישור קריאה.
שניהם נושאים בלוק message עם המזהה של ההודעה שהאירוע עוסק בה, כך שתוכלו להתאים את העדכון להודעה המדויקת ששלחתם.
שמות אירועים
delivered ו-undelivered עבור Deliveries, read עבור Reads.
פורמט המטען (Payload)
{
"event": "delivered",
"contact": {
"id": "<contact-id>",
"email": "jane@example.com",
"phone_number": "+15551234567",
"first_name": "Jane",
"last_name": "Smith",
"ad_referral": null
},
"campaign": {
"id": "<campaign-id>",
"name": "AI Receptionist",
"status": "Live"
},
"agent": {
"id": "<agent-id>",
"name": "Front Desk"
},
"user": {
"id": "<account-id>",
"email": "owner@example.com",
"first_name": "Alex",
"last_name": "Doe"
},
"message": {
"id": "<message-id>",
"status": "delivered"
}
}
| שדה | תיאור |
|---|---|
event |
delivered או undelivered עבור Deliveries, read עבור Reads. |
contact |
איש הקשר שאליו נשלחה ההודעה. |
campaign |
הקמפיין שאליו שייך איש הקשר, או null. |
agent |
הסוכן המטפל בשיחה, או null. |
user |
פרטי זהות בסיסיים עבור החשבון שבבעלותו הנתונים. |
message.id |
המזהה של ההודעה שעדכון זה עוסק בה. זהו אותו ערך ש-נקודת הקצה לשליחת הודעה מחזירה כ-messageId, ואותו message.id שנושאת התראה על New Message. |
message.status |
הסטטוס החדש, תמיד אותה מחרוזת כמו event (delivered, undelivered או read). |
כיצד להתאים עדכון להודעה ששלחתם. שמרו את ה-
messageIdשאתם מקבלים בחזרה כשאתם שולחים הודעה דרך ה-API. כאשר מגיעה התראה על Deliveries או Reads, חפשו את המזהה השמור מולmessage.idב-payload — זהו אישור המסירה או הקריאה שלכם עבור אותה הודעה מדויקת.
אין כאן טקסט הודעה. הבלוק
messageנושא רק את המזהה והסטטוס. הירשמו ל-New Message אם אתם זקוקים גם לגוף ההודעה.
הבלוק
messageקיים רק כאשר אנו יודעים איזו הודעה זו הייתה. בעדכון נדיר שאיננו יכולים לקשר להודעה שמורה, הבלוק מושמט לחלוטין במקום להישלח ריק — לכן בדקו ש-messageקיים לפני קריאתmessage.id.
התראה אחת לכל שינוי סטטוס. הודעה יוצאת בודדת מייצרת בדרך כלל התראת
deliveredולאחר מכן, בערוצים עם אישורי קריאה, התראתread. שליחה שנכשלה מייצרתundeliveredבמקום זאת.
Appointment Booked Webhook
מופעל כאשר איש קשר מזמין פגישה. הוא מופעל באותה צורה בין אם הבינה המלאכותית קבעה אותה במהלך שיחה, בין אם קבעת אותה ידנית, או אם היא הגיעה דרך ה-API.
שם האירוע
booked
פורמט המטען (Payload)
{
"event": "booked",
"contact": {
"id": "<contact-id>",
"email": "jane@example.com",
"phone_number": "+15551234567",
"first_name": "Jane",
"last_name": "Smith"
},
"campaign": {
"id": "<campaign-id>",
"name": "AI Receptionist",
"status": "Live"
},
"user": {
"id": "<account-id>",
"email": "owner@example.com"
},
"appointment": {
"appointment_id": "<appointment-id>",
"start_time": "2026-07-20T15:00:00.000Z",
"end_time": "2026-07-20T15:30:00.000Z",
"status": "confirmed",
"room_name": "Room 1",
"description": "Discovery call",
"summary": "30 min intro",
"google_calendar_event_id": null,
"event": {
"id": "<service-id>",
"event_name": "Intro Call",
"slot_duration": 30,
"location": "Zoom",
"meeting_link": "https://...",
"event_type": "online"
}
}
}
| שדה | תיאור |
|---|---|
event |
תמיד booked עבור אירוע זה. |
contact |
האדם שביצע את ההזמנה. email ו-phone_number עשויים להיות ריקים בהתאם לערוץ. |
appointment.appointment_id |
המזהה הייחודי של ההזמנה. |
appointment.start_time / end_time |
התחלה וסיום של המשבצת שהוזמנה, ב-UTC (ISO 8601). |
appointment.status |
הסטטוס הנוכחי של ההזמנה. |
appointment.room_name |
החדר שבו בוצעה ההזמנה, אם נעשה בו שימוש. |
appointment.description / summary |
פרטים בטקסט חופשי שנתפסו עם ההזמנה. |
appointment.google_calendar_event_id |
המזהה של Google Calendar עבור האירוע המסונכרן. לעיתים קרובות הוא null ב-webhook של פגישה שנקבעה, מכיוון שאירוע היומן נוצר באותו רגע שבו נשלחת ההתראה — משוך מחדש את הפגישה לפי ה-appointment_id שלה רגע לאחר מכן אם אתה זקוק לכך, וצפה ל-null קבוע בחשבונות ללא Google Calendar מחובר. |
appointment.event |
השירות שהוזמן: שם, אורך משבצת, מיקום, קישור לפגישה, סוג. |
google_calendar_event_idהוא לעיתים קרובותnullב-webhook זה, וזה תקין. אירוע Google Calendar נוצר באותו רגע שבו יוצאת התראה זו, לכן המזהה בדרך כלל אינו מוכן עדיין. משוך מחדש את הפגישה לפי ה-appointment_idשלה רגע לאחר מכן אם אתה זקוק לו. הוא נשארnullלצמיתות אם לחשבון אין Google Calendar מחובר, לכן אל תמתין לו לנצח.
כפתור ה-“בדיקה” אינו כולל את בלוק ה-
appointment. השתמש בו כדי לוודא שנקודת הקצה שלך מגיבה, ולאחר מכן בצע הזמנה אחת אמיתית כדי לראות את המטען המלא.
שני מקרים שבהם ה-webhook הזה לא מופעל: פגישות שיובאו מיומן חיצוני, והזמנות שמגיעות דרך האינטגרציה עם Formitable.
Webhook של עדכון תגיות איש קשר
מופעל כאשר תגית מיושמת על איש קשר, ולאותה תגית מוגדרת כתובת webhook בסוכן או בקמפיין שאליהם שייך איש הקשר.
שם האירוע
contact_tags_updated
מתי זה מופעל
- תגית מיושמת על איש קשר שמשויך אליו סוכן, קמפיין, או שניהם.
- לפחות לאחת מהתגיות שיושמו מוגדרת כתובת webhook בלשונית התגיות של אותו סוכן או קמפיין.
אם לאיש הקשר יש גם סוכן וגם קמפיין, והתגיות של הקמפיין נושאות כתובות URL של webhook, הן אלו שיקבעו; אחרת, נעשה שימוש באלו של הסוכן.
אם מיושמות מספר תגיות עם כתובות webhook שונות באותו עדכון, נשלחת בקשה אחת לכל כתובת, כאשר כל אחת מכילה רק את התגיות הממופות לאותה כתובת.
הסרת תגית לעולם אינה שולחת בקשה. רוב האנשים מפנים כתובות אלו לפעולה — גביית פיקדון, קביעת תור, התרעה לנציג — לכן הסרת תגית מאיש קשר בעבר הייתה מפעילה מחדש את אותה פעולה. כעת זה כבר לא אפשרי. הסרה עדיין מופיעה ב-removed_tags כאשר היא מתרחשת באותו עדכון שבו מתבצעת החלה (apply) לאותה כתובת, כך שאוטומציה שקוראת את שני המערכים שומרת על תמונה מלאה; מה שהיא לעולם לא תראה הוא בקשה שנגרמה כתוצאה מהסרה בלבד. (השתנה ב-12 באוגוסט 2026. לפני תאריך זה, הסרות שלחו בקשה גם כן.)
פורמט המטען (Payload)
{
"event": "contact_tags_updated",
"contact": {
"id": "<contact-id>",
"email": "jane@example.com",
"phone_number": "+15551234567",
"first_name": "Jane",
"last_name": "Smith",
"human_alerted": false,
"is_bot_active": true,
"ad_referral": {
"ctwa_clid": "ARAbc123...",
"source_id": "120210000000000",
"source_type": "ad",
"source_url": "https://fb.me/xxxx",
"headline": "Get 20% off today",
"body": "Message us now to claim your discount",
"channel": "whatsapp"
}
},
"added_tags": ["qualified-lead"],
"removed_tags": ["new-lead"],
"agent": {
"id": "<agent-id>",
"name": "Front Desk"
},
"user": {
"email": "owner@example.com",
"first_name": "Alex",
"last_name": "Doe"
}
}
| שדה | תיאור |
|---|---|
event |
תמיד contact_tags_updated עבור webhook זה. |
contact.id |
המזהה הייחודי של איש הקשר שתגיותיו השתנו. |
contact.email / contact.phone_number |
האימייל/טלפון של איש הקשר, אם ידועים. |
contact.first_name / contact.last_name |
השם של איש הקשר. |
contact.human_alerted |
האם איש הקשר מסומן כרגע לטיפול אנושי. |
contact.is_bot_active |
האם בוט ה-AI פעיל כרגע בשיחה של איש קשר זה. |
contact.ad_referral |
מופיע רק כאשר איש הקשר הגיע אליך לראשונה דרך מודעה או פוסט מסוג Meta Click-to-WhatsApp (CTWA). null אחרת. |
added_tags |
מערך של שמות תגיות שהוחלו בעדכון זה. לעולם אינו ריק — החלה היא מה שמפעיל את הבקשה. |
removed_tags |
מערך של שמות תגיות שהוסרו באותו עדכון, אם היו כאלו. הסרה בלבד אינה שולחת דבר. |
agent |
הסוכן המטפל בשיחה של איש הקשר (id ו-name), או null אם אין סוכן מעורב. נוסף ב-15 באוגוסט 2026. |
user |
פרטי זיהוי בסיסיים עבור החשבון שבבעלותו איש הקשר. |
בדיקת webhook של תגית
לצד שדה כתובת ה-URL של ה-webhook בכרטיסיית התגיות (Tags) מופיע כפתור בדיקה (Test). הוא שולח מטען (payload) לדוגמה לכתובת ה-URL הזו באופן מיידי, כך שתוכל לוודא שהאוטומציה שלך מקבלת אותו לפני שתמתין לשיחה אמיתית.
הבדיקה שולחת את אותו מבנה contact_tags_updated המוצג לעיל, תוך שימוש באיש קשר זמני (placeholder), עם התגית שאתה בודק ב-added_tags ו-removed_tags ריק. מה שהאוטומציה שלך רואה בבדיקה הוא מה שהיא תראה בסביבת הייצור.
שני דברים שכדאי לדעת:
- שמור את התגית תחילה. הבדיקה מחפשת את התגית לפי השם השמור שלה, לכן לא ניתן לבדוק תגית חדשה לגמרי או שינוי שם שלא נשמר עדיין. הכפתור נשאר אפור עד שהשם על המסך תואם לשם השמור.
- בדיקה שנכשלה אינה נחשבת נגד ה-webhook שלך. בדיקות לעולם אינן תורמות לכיבוי האוטומטי לאחר כשלים חוזרים המתוארים ב-אמינות Webhook.
אם הבדיקה נכשלת, ההודעה תציין מה השיב ה-endpoint שלך (למשל 404 או 500), מה שבדרך כלל מספיק כדי לזהות כתובת URL שגויה או תהליך עבודה (workflow) שאינו מופעל.
Webhook של השלמת משימה
לעיון בלבד. webhooks של משימות (כנתונים) מתועדים כאן עבור מפתחים; האירועים משימה נוצרה, משימה עודכנה ו-משימה הושלמה ניתנים לבחירה ברשימת האירועים הסטנדרטית בטופס ה-webhook כמו כל אירוע אחר — ראה אירועי הפעלה זמינים ו-22 אירועי ה-Webhook.
מטען (payload) זה נשלח כאשר משימה עוברת לשלב המסומן כשלב השלמה. משימה שעוברת בין שלבים שאינם שלבי השלמה שולחת את המבנה taskUpdated במקום זאת.
שם האירוע
taskCompleted
מתי זה מופעל
- משימה עודכנה.
- הערך
stageשלה השתנה בהשוואה לערכו הקודם. - השלב החדש מוגדר כשלב השלמה בהגדרות שלבי המשימות של החשבון.
פורמט המטען (Payload)
{
"event": "taskCompleted",
"contact": {
"email": "jane@example.com",
"phone_number": "+15551234567",
"first_name": "Jane",
"last_name": "Smith",
"human_alerted": false,
"human_alert_reason": null
},
"user": {
"email": "owner@example.com",
"first_name": "Alex",
"last_name": "Doe"
},
"message": {
"id": "<task-id>",
"title": "Follow up with Jane",
"description": "Confirm pricing and send proposal",
"type": "follow_up",
"priority": "high",
"stage": "<stage-id>",
"due_date": "2026-01-20T15:00:00Z",
"source": "ai",
"source_detail": "<source-detail>",
"campaign_id": "<campaign-id>",
"linked_human_alert": "<human-alert-id>",
"tags": ["qualified-lead"],
"notes": "Customer requested a callback"
}
}
| שדה | תיאור |
|---|---|
event |
תמיד taskCompleted עבור ה-webhook הזה. אותו מבנה מטען נשלח כ-taskUpdated כאשר משימה משתנה מבלי להיכנס לשלב השלמה. |
contact |
איש הקשר המקושר למשימה, אם קיים. null כאשר אין קישור. |
contact.human_alert_reason |
הסיבה לכך שאיש הקשר סומן לטיפול אנושי, אם רלוונטי. |
user |
פרטי זיהוי בסיסיים עבור החשבון שבבעלותו המשימה. |
message.id |
המזהה הייחודי של המשימה. |
message.title / description |
הכותרת והתיאור של המשימה. |
message.type |
סוג המשימה (לדוגמה, follow_up, call, custom). |
message.priority |
עדיפות המשימה (low, medium, high). |
message.stage |
המזהה של השלב שבו נמצאת המשימה כעת. |
message.due_date |
תאריך היעד של המשימה, אם הוגדר. |
message.source |
מה יצר את המשימה (ai, manual, api). |
message.source_detail |
פרטים נוספים על המקור. |
message.campaign_id |
המזהה של הקמפיין המקושר, או null. |
message.linked_human_alert |
המזהה של התראה אנושית מקושרת, אם קיימת. |
message.tags |
תגיות שהוחלו על המשימה. |
message.notes |
הערות חופשיות על המשימה. |
כיבוי (או מחיקה) של Webhook
לכל webhook יש מתג הפעלה/כיבוי, ממש בשורה שלו. כיבוי (OFF) של אחד מהם מפסיק את קבלת האירועים, אך שומר על כל מה שהגדרת — ה-URL, האירועים, וכל מפתח חתימה. הפעל אותו בחזרה והוא ימשיך מהמקום שבו הפסיק; שום דבר שקרה בזמן שהוא היה כבוי לא יישלח לאחר מכן.
השתמש באפשרות זו כאשר ברצונך להפסיק את המשלוחים לזמן מה: נקודת הקצה שלך בבנייה מחדש, אתה מנפה שגיאות באינטגרציה רועשת, או שאתה משהה אוטומציה.
מחיקה של webhook (סמל פח האשפה בשורה שלו) מסירה אותו לצמיתות, כולל מפתח החתימה שלו. אם אתה רק רוצה להפסיק את המשלוחים, כבה אותו במקום זאת — מחיקה מיועדת למקרים שבהם סיימת להשתמש בנקודת הקצה (endpoint) לחלוטין.
זה לא אותו דבר כמו כיבוי אוטומטי של webhook. אם נשבית את ה-webhook שלך לאחר כשלים חוזרים ונשנים (ראה אמינות Webhook), המתג שלעיל לא יחזיר אותו לפעולה. ברגע שנקודת הקצה שלך תתוקן, ערוך את ה-webhook ושמור אותו עם כתובת URL שונה (כל שינוי ב-URL מפעיל אותו מחדש), או קרא ל-נקודת קצה להפעלה מחדש דרך ה-API — או פנה לתמיכה ואנחנו נפעיל אותו עבורך בחזרה.
מטען חתום (אימות שה-Webhook אכן הגיע מאיתנו)
כל מי שלומד את כתובת ה-webhook שלך יכול לשלוח אליה בקשה מזויפת. אם אתה פועל על סמך webhooks באופן אוטומטי — עדכון חיובים, יצירת רשומות ב-CRM — הפעלת חתימה מאפשרת לך לוודא שכל בקשה הגיעה מאיתנו באמת.
חתימה היא אופציונלית וכבויה כברירת מחדל, ואתה מפעיל אותה עבור כל webhook בנפרד, מתוך תצוגת העריכה של אותו webhook (פתח את השורה של webhook שמור).
הפעלת חתימה
- פתח את ה-webhook (הגדרות ← אינטגרציות ← Webhooks ← לחץ על השורה של ה-webhook שלך).
- בסעיף מפתח חתימה (Signing secret), לחץ על הפקה (Generate).
- העתק את המפתח (הוא מתחיל ב-
whsec_) ושמור אותו במערכת הקולטת שלך. התייחס אליו כמו אל סיסמה.
אתה יכול לחזור ולחשוף, להעתיק, להחליף או לכבות את המפתח בכל עת מאותו לוח בקרה.
מה אנחנו שולחים
ברגע שהחתימה מופעלת, כל משלוח עבור ה-webhook הזה נושא את שני כותרי ה-HTTP הנוספים הבאים:
| כותרת | משמעות |
|---|---|
X-Webhook-Signature |
החתימה, בצורה v1=<hex>. |
X-Webhook-Timestamp |
מתי שלחנו את זה, כ-Unix timestamp בשניות. |
שלושת אלו נמצאים בכל משלוח, חתום או לא:
| כותרת | משמעות |
|---|---|
X-Webhook-Delivery |
מזהה ייחודי לאירוע זה. נשאר זהה לאורך ניסיונות חוזרים, לכן זהו הערך לפיו יש לבצע ניכוי כפילויות (dedupe). |
X-Webhook-Attempt |
איזה ניסיון זה (1 הוא הניסיון הראשון). |
X-Webhook-Event |
שם האירוע, כך שתוכל לנתב ללא קריאת גוף ההודעה. |
כיצד לאמת
החתימה היא HMAC-SHA256 של המחרוזת <timestamp>.<raw request body>, תוך שימוש בסוד החתימה שלך כמפתח.
אמת מול גוף הבקשה הגולמי (raw request body) — הבייטים המדויקים שקיבלת. אם המערכת שלך מנתחת את ה-JSON ומסדרת אותו מחדש לפני הבדיקה, הבייטים עלולים להשתנות והחתימה לא תתאים.
דוגמה ב-Node.js:
const crypto = require("crypto");
function verify(rawBody, headers, secret) {
const timestamp = headers["x-webhook-timestamp"];
const signature = headers["x-webhook-signature"]; // "v1=<hex>"
// Reject anything older than 5 minutes so a captured request can't be replayed later.
if (Math.abs(Date.now() / 1000 - Number(timestamp)) > 300) return false;
const expected = crypto.createHmac("sha256", secret).update(`${timestamp}.${rawBody}`).digest("hex");
return crypto.timingSafeEqual(Buffer.from(signature.replace("v1=", "")), Buffer.from(expected));
}
דוגמה ב-Python:
import hashlib, hmac, time
def verify(raw_body: bytes, headers, secret: str) -> bool:
timestamp = headers["X-Webhook-Timestamp"]
signature = headers["X-Webhook-Signature"].replace("v1=", "")
# Reject anything older than 5 minutes so a captured request can't be replayed later.
if abs(time.time() - int(timestamp)) > 300:
return False
expected = hmac.new(secret.encode(), f"{timestamp}.".encode() + raw_body, hashlib.sha256).hexdigest()
return hmac.compare_digest(signature, expected)
השוו חתימות באמצעות פונקציה בטוחה מפני תזמון (timing-safe) (
timingSafeEqual/compare_digest), ולא באמצעות==. זה לא עולה דבר ומונע סוג עדין של התקפה.
החלפת הסוד
לחצו על Rotate (רענון) כדי להחליף את הסוד. ההחלפה היא מיידית: המשלוח הבא בלבד ייחתם באמצעות הסוד החדש. אם נקודת הקצה שלכם פעילה, קבלו את שני הסודות (הישן והחדש) למשך מספר דקות בזמן שאתם פורסים את החדש.
כיבוי החתימה פשוט מפסיק את שליחת כותרות החתימה.
ניסיון חוזר למשלוחים שנכשלו
כברירת מחדל, משלוח שנכשל לא מבוצע שוב — אם המערכת שלך מושבתת באותו רגע, האירוע הזה יוחמץ.
הפעילו את Retry failed deliveries (נסה שוב משלוחים שנכשלו) ב-webhook (בטופס היצירה/עריכה) ואנחנו נמשיך לנסות:
| ניסיון | מתי |
|---|---|
| 1 | מיידית |
| 2 | דקה לאחר מכן |
| 3 | 5 דקות לאחר מכן |
| 4 | 30 דקות לאחר מכן |
| 5 | שעתיים לאחר מכן |
זה משתרע על פני כ-שעתיים ו-40 דקות, כך ש-webhook יכול לשרוד חלון תחזוקה או תקלה קצרה בצד שלך.
מה מבוצע שוב: בעיות זמניות — השרת שלך מחזיר שגיאת 5xx, פסק זמן (timeout), או כשל בחיבור.
מה לא מופעל מחדש: אם נקודת הקצה שלכם דוחה את הבקשה עצמה (כל שגיאת 4xx), אנחנו לא ננסה שוב — שליחה חוזרת של אותה בקשה בדיוק רק תניב את אותה דחייה.
אילו אירועים מבוצעים שוב (retry): webhooks של תגיות (contact_tags_updated), שלושת אירועי המשימות, והסיכום היומי. השאר נשלחים פעם אחת, כך שעבורם למתג אין משמעות. כל אירוע עדיין נושא את X-Webhook-Delivery, כך שכלל ניכוי כפילויות אחד מכסה את כולם.
הפעילו ניסיונות חוזרים רק אם נקודת הקצה שלכם היא אידמפוטנטית. ניסיונות חוזרים אומרים שאותו אירוע יכול להגיע יותר מפעם אחת. השתמשו בכותרת
X-Webhook-Deliveryכדי לזהות כפילות: היא נשארת זהה בכל ניסיון עבור אירוע אחד, כך שתוכלו להתעלם בבטחה ממזהה שכבר טיפלתם בו.
ניסיונות חוזרים (Retries) פועלים יחד עם הכיבוי האוטומטי לאחר כשלים חוזרים ונשנים (ראו אמינות Webhook) בדיוק כפי שהייתם מצפים: מונה הכשלים סופר משלוח מלא, רק לאחר שכל ניסיון חוזר נוצל — ולא כל ניסיון בודד בנפרד.
אמינות Webhook
- Your AI Connector שולחת Webhooks דרך חיבור מאובטח (HTTPS). ודא שכתובת האינטרנט שאתה מספק משתמשת ב-HTTPS.
- אם המערכת שלך מחזירה שגיאה, המשלוח נחשב כנכשל.
- עקוב אחר זמן הפעילות (uptime) של המערכת המקבלת כדי להימנע מאיבוד אירועים.
- עבור תהליכי עבודה קריטיים, הפעל את ניסיון חוזר של משלוחים שנכשלו, ושקול גם מנגנון גיבוי.
Webhooks כבים אוטומטית לאחר כשלים חוזרים ונשנים. אם כתובת ה-URL של ה-webhook שלך נכשלת שוב ושוב (כ-5 שגיאות ברצף, או 3 ברצף עבור שגיאות מסוג הגדרה), Your AI Connector מפסיקה אוטומטית לשלוח אירועים לכתובת URL זו. כדי להחזיר אותו לפעולה ברגע שנקודת הקצה שלך תקינה: ערוך את ה-webhook ושמור אותו עם כתובת URL שונה (כל שינוי ב-URL מפעיל אותו מחדש), או השתמש ב-נקודת קצה להפעלה מחדש דרך ה-API — שמירה מחדש עם אותה כתובת URL אינה מספיקה. התמיכה יכולה גם להפעיל אותו מחדש עבורך.
פתרון בעיות
| בעיה | פתרון |
|---|---|
| ה-Webhook לא מופעל | ראשית, בדקו שה-Webhook אינו כבוי בשורה שלו. לאחר מכן, ודאו שהאירועים הנכונים נבחרו ושה-URL שלכם נגיש מהאינטרנט. |
| אירוע בדיקה עובד אך אירועים אמיתיים לא | ודאו שסוג האירוע הספציפי מופעל. אם ציפיתם לבקשה כאשר תגית מוחלת, שימו לב ש-subscribed_to_tags אינו מגביל אירועי Webhook לתגית מסוימת — הוא רק מצמצם אילו תגיות מייצרות התראת סיכום שיחה. כדי לקבל בקשה כאשר מוחלת תגית ספציפית, הגדירו URL של Webhook באותה תגית בלשונית תגיות של הסוכן (או הקמפיין) — ראו Webhook של עדכון תגיות איש קשר. |
| שום דבר לא מגיע ל-n8n / Make / Zapier | כנראה שאתם משתמשים ב-Test URL של הפלטפורמה, שמקשיב רק לאירוע בודד מיד לאחר לחיצה על “Listen for test event”. עבור אירועים חיים, שמרו את ה-Production URL והעבירו את זרימת העבודה למצב פעיל (Active). |
| קבלת אירועים כפולים | בדקו אם קיימים מספר Webhooks המצביעים על אותו URL. אם האפשרות נסה שוב משלוחים שנכשלו מופעלת, כפילות צפויה בכל פעם שנקודת הקצה שלכם קיבלה אירוע אך לא הצליחה להשיב בזמן — בצעו ביטול כפילויות (dedupe) ב-X-Webhook-Delivery. |
| בדיקת החתימה תמיד נכשלת | כמעט תמיד בגלל שהגוף (body) עבר סריאליזציה מחדש לפני הבדיקה. אמת מול גוף הבקשה ה-raw, חתום ב-<timestamp>.<body>, וודאו שאתם משתמשים בסוד הנוכחי אם ביצעתם רוטציה לאחרונה. |
| ניסיונות חוזרים לא מתבצעים | ניסיונות חוזרים כבויים אלא אם הופעלו ב-Webhook הספציפי הזה. אנחנו לא מבצעים ניסיונות חוזרים עבור תגובות 4xx. |
הבלוק campaign הוא תמיד null |
צפוי אם החשבון שלכם משתמש בסוכנים: אנשי קשר משויכים לסוכן ולא לקמפיין. קראו במקום זאת את הבלוק agent — ראו פורמט נתוני Webhook. |
| הנתונים ריקים או פגומים | ודאו שמערכת הקליטה שלכם מקבלת JSON. בדקו את יומני השרת שלכם עבור שגיאות ניתוח (parsing). |
| ה-URL של ה-Webhook מחזיר שגיאות | בדקו את ה-URL שלכם עם כלי כמו Postman או webhook.site. |
| ה-Webhook הפסיק לפעול לחלוטין לאחר תקלה | כשלים חוזרים משביתים אוטומטית Webhook. שמירה מחדש לא מפעילה אותו שוב — תקנו את נקודת הקצה שלכם, ולאחר מכן צרו קשר עם התמיכה. |
| שמירה או בדיקה נותנים שגיאת הרשאה | אתם זקוקים להרשאת “עריכה” של אינטגרציות. בקשו מבעל החשבון להעניק אותה. |
רשימת ה-subscribed_to_tags של ה-Webhook חזרה ריקה |
subscribed_to_tags אינו מגביל אירועי Webhook לתגית מסוימת — הוא רק מצמצם אילו תגיות מייצרות התראת סיכום שיחה. עריכה מטופס ה-Webhook כבר לא מנקה את הרשימה הזו (תוקן ב-21 ביולי 2026). אם Webhook איבד את הרשימה שלו לפני תאריך זה, הגדירו את subscribed_to_tags שוב דרך Webhooks API — ראו טריגרים של Webhook מבוססי תגית. |
צעדים הבאים
- אינטגרציה עם GoHighLevel — השתמש ב-Webhooks כדי לשלב את Your AI Connector עם GHL.
- גישת API — שלב Webhooks עם ה-API לאוטומציות עוצמתיות.
- שימוש בתגיות לתיוג אנשי קשר — הגדר תגיות שמפעילות את ה-Webhooks שלך.