Webhooks
Webhooks מאפשרים ל-Your AI Connector להודיע באופן אוטומטי לכלי העבודה האחרים שלך בכל פעם שמשהו חשוב קורה — יצירת איש קשר חדש, קביעת פגישה, או קבלת הודעה. במקום לבדוק עדכונים באופן ידני, המערכות המחוברות שלך מקבלות התראה מיידית ברגע שמשהו קורה.
מהם Webhooks?
חשוב על Webhook כעל הודעת טקסט אוטומטית בין שתי אפליקציות. כאשר משהו קורה ב-Your AI Connector (כמו הרשמה של איש קשר חדש), הפלטפורמה שולחת התראה מיידית למערכת אחרת לבחירתך. עליך לספק כתובת אינטרנט (הנקראת “כתובת URL של Webhook”) שאליה יישלחו התראות אלו — כתובת זו מסופקת בדרך כלל על ידי ה-CRM שלך, פלטפורמת האוטומציה או המפתח שלך.
דף ה-Webhooks שולח נתונים מחוץ ל-Your AI Connector בלבד. ה-Webhooks שמוגדרים כאן פועלים בכיוון אחד, מ-Your AI Connector אל הכלים האחרים שלך. כדי להכניס ליד חדש או נתונים אחרים פנימה (מטופס באתר, מה-CRM שלך או מ-GoHighLevel), עומדות בפניך שתי אפשרויות. אוטומציה עם טריגר Webhook מספקת לך כתובת אינטרנט שאליה הטופס או הכלי שלך יכולים לשלוח נתונים, והשלבים שלה יכולים לאחר מכן ליצור את איש הקשר, לשלוח הודעה ועוד. לחלופין, המערכת שלך יכולה לבצע קריאת API, למשל פעולת Create a Contact, באמצעות מפתח ה-API שלך; ראה גישת API ו-משפכים.
Webhooks כלולים בחלק מהתוכניות בלבד. אם התוכנית שלך אינה כוללת Webhooks, דף ה-Webhooks לא יהיה זמין ולא יישלחו אירועים. כל מה ששמרת בעבר נשאר בחשבונך ויתחיל להישלח שוב ברגע שתעבור לתוכנית הכוללת 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 זה יקבל — כל 24 האירועים מפורטים ב-24 אירועי ה-Webhook.
- (אופציונלי) הפעל את נסה שוב משלוחים שנכשלו (Retry failed deliveries) אם ברצונך ש-Your AI Connector ימשיך לנסות במקרה של כשל זמני — ראה ניסיון חוזר של משלוחים שנכשלו.
- לחץ על צור 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.
אירועי הפעלה זמינים
באפשרותך להפעיל או להשבית כל אחד מ-24 אירועי ה-webhook באופן עצמאי. כאשר אירוע מופעל, Your AI Connector שולח התראה לכתובת ה-webhook שלך עם הנתונים הרלוונטיים. כל אירוע, משמעותו, וקוד ה-event שהוא מציב במטען מפורטים יחד ב-24 אירועי ה-Webhook בהמשך דף זה.
כדאי לדעת: משימה נוצרה (Task Created), משימה עודכנה (Task Updated), ו-משימה הושלמה (Task Completed) ניתנים לבחירה מלאה ונשמרים כראוי. סיכום יומי נוצר (Daily Summary Created) הוא גם תוספת חדשה. ראה Webhook של משימה הושלמה להלן עבור מבנה המטען הזה.
טריגרים של Webhook מבוססי תגיות
subscribed_to_tags אינו מגדיר את אירועי ה-webhook לפי תגית. הוא רק מצמצם אילו תגיות יפיקו התראה על סיכום שיחה. כדי לקבל בקשה כאשר מוחלת תגית ספציפית, הגדר כתובת URL של 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). זו אינה תווית התצוגה המוצגת ברשימת האירועים; כל תווית והקוד התואם לה נמצאים ב-24 אירועי ה-Webhook. |
contact |
איש הקשר שהאירוע נוגע אליו, או null עבור אירועים שאינם קשורים לאיש קשר (כגון creditsRecharged). |
campaign |
הקמפיין הקלאסי שאליו שייך איש הקשר, או null אם אין כזה. אנשי קשר המטופלים על ידי סוכן יגיעו עם null כאן. |
agent |
הסוכן המטפל בשיחה, או null אם אין כזה. |
user |
פרטי זהות בסיסיים עבור החשבון שבבעלותו הנתונים. |
קרא את
agent, לא אתcampaign. קמפיינים עברו לסוכני AI ושידורים (ראו קמפיינים עברו), לכן אנשי הקשר שלכם נמצאים אצל סוכן ו-agentמציין לכם מי מהם טיפל בשיחה. השדהcampaignעדיין נשלח כדי שמקלטים ישנים ימשיכו לעבוד, אך הוא בדרך כללnull; הוא מתמלא רק עבור איש קשר שעדיין נושא קישור לקמפיין קלאסי. אל תניחו ש-campaignתמיד נמצא שם.
הבלוק
agentהגיע ב-15 באוגוסט 2026. הוא מופיע לצדcampaignבאירועים הקשורים לשיחה — צ’אט שהסתיים, ‘נא לא להפריע’, המשך שיחה, ביטול ארכוב, השהיית AI, הודעה חדשה, סיכום שיחה, וה-webhook שניתן להגדיר על תגית — והוא נושא את ה-idוה-nameשל הסוכן המטפל, אוnullכאשר אין סוכן מעורב. זהו תוסף בלבד: כל שדה שאתה כבר מקבל נשאר ללא שינוי, כך שמקלט שבנית לפני תאריך זה ימשיך לעבוד ללא צורך בעדכון.
חלק מהאירועים מוסיפים בלוק עליון נוסף משלהם. לדוגמה, פגישה נקבעה (Appointment Booked), פגישה בוטלה (Appointment Cancelled) ו-פגישה נקבעה מחדש (Appointment Rescheduled) מוסיפים בלוק appointment (ראה Webhook של פגישה שנקבעה), הודעה חדשה (New Message) מוסיפה בלוק message מלא עם הטקסט (ראה Webhook של הודעה חדשה), ו-משלוחים (Deliveries) ו-קריאות (Reads) מוסיפים בלוק message קצר עם מזהה ההודעה והסטטוס בלבד (ראה Webhook של משלוחים וקריאות).
Deliveries ו-Reads מציינים איזו הודעה, אך לא מה היה כתוב בה. הם נושאים בלוק
messageהמכיל את ה-idוה-statusשל ההודעה — וה-idהזה הוא אותו ה-messageIdש-נקודת הקצה לשליחת הודעה מחזירה, כך שתוכלו להתאים אישור מסירה או קריאה להודעה המדויקת ששלחתם — אך ללא גוף ההודעה. Replies (תשובות) אינו נושא בלוקmessageכלל. אם אתם זקוקים למילים שנשלחו או התקבלו, הירשמו ל-New Message לצד אירועים אלו.
שני דברים שכדאי לדעת לפני כתיבת המקלט שלך. אין שדה
timestamp, ואין מעטפתdata. כל בלוק יושב ברמה העליונה של אובייקט ה-JSON, כפי שמוצג לעיל.
24 אירועי ה-Webhook
24 אירועי ה-webhook, עם תווית התצוגה שאתה מסמן באפליקציה וקוד ה-event שנשלח במטען. קוד ה-event הוא מחרוזת קצרה שאינה תואמת לתווית התצוגה, לכן התאם את המקלט שלך לפי הקוד, לא לפי התווית:
| תווית תצוגה (באפליקציה) | קוד event במטען |
מה זה אומר |
|---|---|---|
| איש קשר נוצר | contactCreated |
איש קשר חדש מתווסף לחשבונך (ידנית, באמצעות ייבוא, או באמצעות API). |
| איש קשר הושהה | contact_paused |
שיחת איש קשר מושהית (הבוט מפסיק להגיב). |
| איש קשר חודש | contact_resumed |
שיחת איש קשר מושהית מתחדשת. |
| איש קשר ‘נא לא להפריע’ | contact_do_not_disturb_changed |
הגדרת ‘נא לא להפריע’ של איש קשר מופעלת. |
| איש קשר שוחזר מארכיון | contact_unarchived |
איש קשר בארכיון שולח הודעה חדשה, מה שמחזיר אותו לתיבת הדואר הנכנס הפעילה שלך. |
| הודעה חדשה | new_message |
כל הודעה שמתווספת לשיחה בכל ערוץ — גם הודעות שאיש הקשר שולח לך וגם הודעות שה-AI או הצוות שלך שולחים לו. זהו האירוע היחיד שנושא את טקסט ההודעה בפועל (ראה Webhook של הודעה חדשה). |
| תשובות | replied |
איש קשר משיב להודעה. |
| קריאות | read |
איש קשר קורא הודעה (בערוצים התומכים באישור קריאה). נושא את מזהה ההודעה שנקראה — ראה Webhook של משלוחים וקריאות. |
| משלוחים | delivered או undelivered |
הודעה נמסרה בהצלחה לאיש קשר (undelivered כאשר המשלוח נכשל). נושא את מזהה ההודעה — ראה Webhook של משלוחים וקריאות. |
| התראה על אדם | humanAlerted |
בוט ה-AI קובע שהוא אינו יכול לטפל בשיחה ומסמן אותה לתשומת לב אנושית. |
| שיחה הסתיימה | chat_concluded |
בוט ה-AI מחליט ששיחה הגיעה לסיומה (נקבעה פגישה, ליד נפסל וכו’). |
| פגישה נקבעה | booked |
איש קשר קובע פגישה דרך מערכת קביעת התורים. |
| פגישה בוטלה | appointment_cancelled |
פגישה מבוטלת: על ידי ה-AI בצ’אט, על ידך באפליקציה, דרך ה-API, או ביומן Google המקושר. גוף זהה ל’פגישה נקבעה’, עם appointment.cancelation_reason. ראה Webhooks של פגישה בוטלה ונקבעה מחדש. |
| פגישה נקבעה מחדש | appointment_rescheduled |
פגישה עוברת לזמן חדש, מכל אחד מאותם מקומות. גוף זהה ל’פגישה נקבעה’ בתוספת בלוק previous עם זמן ההתחלה והסיום הישנים. |
| נקודות זכות נוצלו | creditsSpent |
נקודות זכות מנוכות מחשבונך. |
| נקודות זכות נטענו | creditsRecharged |
נקודות זכות מתווספות לחשבונך באמצעות טעינה אוטומטית או רכישה ידנית. |
| יתרת נקודות זכות נמוכה | lowCreditBalance בבדיקת Test, Low Credit Balance באמיתית |
אזהרה מוקדמת שיתרת נקודות הזכות שלך ירדה מתחת לסף ההתראה (100 נקודות אלא אם הגדרת אחרת). מיועד לסוכנויות, שכל חשבונות המשנה שלהן מוציאים ממאגר אחד. הוא נושא balance, threshold ו-account_email במקום בלוק איש קשר, נשלח לכל היותר פעם ב-24 שעות כל עוד היתרה נשארת נמוכה, ומתאפס ברגע שהיתרה עולה בחזרה מעל הסף. |
| משימה נוצרה | taskCreated |
משימה נוצרת. |
| משימה עודכנה | taskUpdated |
משימה משתנה מבלי לעבור לשלב סיום. |
| משימה הושלמה | taskCompleted |
משימה עוברת לשלב שהוגדר כשלב סיום. |
| סיכום יומי נוצר | dailySummaryCreated |
דוח הסיכום היומי שלך נוצר. |
| ערוץ חובר | channelConnected |
טרם נשלח — ניתן לבחירה, אך דבר לא מפעיל זאת כיום. אל תבנה על זה. מיועד למקרה שבו ערוץ הודעות מסיים להתחבר. |
| שידור התחיל | broadcastStarted |
שידור מתחיל להישלח (הסטטוס שלו משתנה ל’שולח’). מופעל פעם אחת בכל התחלה, כולל כאשר שידור מושהה מתחדש. נושא בלוק broadcast במקום בלוק איש קשר: id, name, channel, status, previous status, הרשימה אליה הוא מכוון (list_id, list_name, is_smart_list), scheduled_at, total_contacts. |
| שידור הושלם | broadcastCompleted |
שידור מסתיים (הסטטוס שלו משתנה ל’נשלח’ או ‘נכשל’). אותו בלוק broadcast בתוספת completed_at, וכאשר זמין, completion_summary (total_sent, permanently_failed, unique_replied, failure_rate, had_errors). השתמש בשניים אלו כדי לחבר רשימת שידור חכמה לכלים חיצוניים. |
שני קודים נוספים לעולם אינם מופיעים ברשימה זו מכיוון שאינך נרשם אליהם: 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,
"ad_attribution": 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, Click-to-Instagram או Click-to-Messenger), או null. ראה שיוך מודעות Click-to-WhatsApp. |
contact.ad_attribution |
לחיצת המודעה באתר שלך שאליה הותאם איש קשר זה, או null. ראה שיוך לחיצות מודעה עבור WhatsApp. |
campaign |
הקמפיין הקלאסי שתחתיו נוצר איש הקשר, או null (הערך הרגיל כעת כאשר אנשי קשר מנוהלים על ידי סוכנים). |
agent |
הסוכן שהוקצה לאיש הקשר, או null. |
user |
פרטי זהות בסיסיים עבור החשבון שבבעלותו איש הקשר. |
דגימת ה-“Test” ואירוע אמיתי נראים מעט שונים. כפתור הבדיקה שולח נתוני מציין מיקום (ג’ון דו, בלוק קמפיין לדוגמה). אירוע “איש קשר נוצר” אמיתי נושא את פרטי איש הקשר בפועל, וחלק מהשדות עשויים להיות ריקים בהתאם לערוץ.
Webhook הודעה חדשה
webhook זה מופעל בכל פעם שמתווספת הודעה לשיחה, בכל ערוץ. הוא מכסה את שני הכיוונים: הודעות שאיש הקשר שולח אליכם, והודעות שסוכן ה-AI שלכם, הצוות שלכם או שידור שולחים אליהם. זהו ה-webhook היחיד שכולל את טקסט ההודעה, לכן זהו ה-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,
"ad_attribution": 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",
"media_url": null,
"media_content_type": null
}
}
| שדה | תיאור |
|---|---|
event |
תמיד new_message עבור אירוע זה. שימו לב שזו המחרוזת המדויקת שנשלחת — זו אינה תווית התצוגה “הודעה חדשה”. |
contact |
איש הקשר שהשיחה שלו שייכת להודעה. בעל מבנה זהה לזה שב-איש קשר נוצר. |
agent |
הסוכן שמטפל בשיחה (id ו-name), או null אם אין סוכן מעורב. |
user |
פרטי זהות בסיסיים עבור החשבון שבבעלותו השיחה. |
message.id |
המזהה הייחודי של ההודעה. |
message.body |
טקסט ההודעה. עבור הודעה עם קובץ מצורף, הגוף מתחיל בהערה בסוגריים על מה שהגיע, ואחריה כל כיתוב, לדוגמה [THE CONTACT UPLOADED AN IMAGE] Here is my CV, [THE CONTACT UPLOADED A DOCUMENT] או [THE CONTACT UPLOADED A VOICE NOTE] - [TRANSCRIPTION: ...]. הודעות קוליות וסרטונים כוללים את התמלול. |
message.direction |
inbound עבור הודעה מאיש הקשר, outbound עבור הודעה שנשלחה על ידי ה-AI שלכם או על ידי הצוות שלכם מתיבת הדואר הנכנס, ו-outbound-api עבור הודעה שנשלחה על ידי שידור (כולל קמפיין קלאסי), שליחת תבנית, או ה-API. |
message.status |
היכן נמצאת ההודעה במחזור החיים שלה: received עבור נכנסת, ו-queued / sent / delivered / read / failed / undelivered עבור יוצאת. זהו הסטטוס ברגע יצירת ההודעה, לכן הודעה יוצאת מגיעה לכאן בדרך כלל כ-queued או sent ומגיעה ל-delivered לאחר מכן — השתמשו באירועי משלוחים (Deliveries) ו-קריאות (Reads) אם אתם זקוקים למעברים מאוחרים אלו. הם נושאים את אותו message.id כמו בלוק זה, כך שתוכלו להתאים את המעבר להודעה זו (ראו Webhook של משלוחים וקריאות). |
message.created_at |
מתי ההודעה נוצרה, ב-UTC (ISO 8601). |
message.channel |
הערוץ שדרכו עברה ההודעה, לדוגמה whatsapp, whatsapp_web, sms, instagram, messenger, telegram, email או custom. |
message.media_url |
קישור להורדה עבור הקובץ המצורף להודעה (תמונה, הודעה קולית, סרטון או מסמך), או null כאשר אין כזה. תמיד נוכח. |
message.media_content_type |
סוג הקובץ, לדוגמה image/jpeg, audio/ogg או application/pdf. null בכל פעם ש-media_url הוא null. |
עדיין אין בלוק
campaignבמטען זה. הודעה חדשה שולחת אתcontact,agent,userו-message. הבלוקagentנוסף ב-15 באוגוסט 2026 והוא מציין לכם איזה סוכן מטפל בשיחה; אם אתם זקוקים להקשר נוסף לגבי איש הקשר, חפשו אותו דרך ה-API באמצעותcontact.id.
שמור קבצים מצורפים זמן קצר לאחר הגעתם. הקישור
media_urlמפסיק לעבוד 7 ימים לאחר הגעת ההודעה, בכל הערוצים (WhatsApp Business API, WhatsApp Web, אינסטגרם, מסנג’ר, טלגרם, ווידג’ט צ’אט והשאר); הקובץ עצמו נשאר. כדי לקבל קישור חדש מאוחר יותר, קרא ל-הורדת קובץ מצורף של הודעה עםcontacts/{contact.id}/messages/{message.id}. השדות נוספו ב-13 בספטמבר 2026.
כאשר
media_urlהואnullאך גוף ההודעה מציין שקובץ הגיע. מספר קבצים מצורפים מאוחסנים בצורה שאין לה קישור ישיר, ו-Reel, פוסט או אזכור בסטורי באינסטגרם ששותפו הם קישור לאינסטגרם ולא קובץ, לכן גם הם מגיעים כ-null(גוף ההודעה מציין מה שותף). עבור קובץ, קרא ל-Download a message’s attachment עם מזהה ההודעה כדי לקבל קישור.
היסטוריה מיובאת לא מפעילה את ה-webhook הזה. כאשר מספר WhatsApp Web מייבא את השיחות הקודמות שלו, ההודעות הישנות הללו נשמרות ללא התראה על הודעה חדשה עבור כל אחת מהן.
רשומות 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,
"ad_attribution": 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 שהתראת הודעה חדשה נושאת. |
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,
"external_reference": "crm-booking-1042",
"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 Booked, מכיוון שאירוע היומן נוצר בדיוק ברגע שבו נשלחת ההתראה — בצע משיכה חוזרת (re-fetch) של הפגישה לפי ה-appointment_id שלה רגע לאחר מכן אם תזדקק לו, וצפה ל-null קבוע בחשבונות ללא Google Calendar מחובר. |
appointment.external_reference |
המזהה מהמערכת שלך שאיתו נוצרה ההזמנה דרך ה-API, או null. |
appointment.event |
השירות שהוזמן: שם, אורך משבצת, מיקום, קישור לפגישה, סוג. |
google_calendar_event_idהוא לעיתים קרובותnullב-webhook זה, וזה תקין. אירוע Google Calendar נוצר באותו רגע שבו יוצאת התראה זו, לכן המזהה בדרך כלל אינו מוכן עדיין. משוך מחדש את הפגישה לפי ה-appointment_idשלה רגע לאחר מכן אם אתה זקוק לו. הוא נשארnullלצמיתות אם לחשבון אין Google Calendar מחובר, לכן אל תמתין לו לנצח.
כפתור ה-“Test” שולח בלוק
appointmentלדוגמה עם ערכים מומצאים, כדי שתוכל לבנות מול המבנה לפני שתגיע פגישה אמיתית.
שני מקרים שבהם ה-webhook הזה לא מופעל: פגישות שיובאו מיומן חיצוני, והזמנות שמגיעות דרך האינטגרציה עם Formitable.
Webhooks של פגישה בוטלה ונקבעה מחדש
פגישה בוטלה מופעל כאשר פגישה מבוטלת, ו-פגישה נקבעה מחדש מופעל כאשר היא עוברת לזמן התחלה או סיום חדש. שניהם מופעלים באותה צורה בין אם ה-AI עשה זאת במהלך שיחה, שינית זאת באפליקציה, זה הגיע דרך ה-API, או שמישהו שינה את האירוע ביומן Google המקושר.
שמות אירועים
appointment_cancelled ו-appointment_rescheduled
פורמט המטען (Payload)
הגוף זהה ל-פגישה נקבעה, עם הפגישה כפי שהיא לאחר השינוי. ביטול מוסיף appointment.cancelation_reason; קביעה מחדש מוסיפה בלוק previous עליון עם הזמנים הישנים:
{
"event": "appointment_rescheduled",
"contact": { "id": "<contact-id>", "email": "jane@example.com", "phone_number": "+15551234567", "first_name": "Jane", "last_name": "Smith" },
"campaign": null,
"agent": { "id": "<agent-id>", "name": "Front desk" },
"user": { "id": "<account-id>", "email": "owner@example.com" },
"appointment": {
"appointment_id": "<appointment-id>",
"start_time": "2026-07-21T09:00:00.000Z",
"end_time": "2026-07-21T09:30:00.000Z",
"status": "Confirmed",
"room_name": "Room 1",
"description": "Discovery call",
"summary": "30 min intro",
"google_calendar_event_id": "<calendar-event-id>",
"external_reference": "crm-booking-1042",
"cancelation_reason": null,
"event": { "id": "<service-id>", "event_name": "Intro Call", "slot_duration": 30 }
},
"previous": {
"start_time": "2026-07-20T15:00:00.000Z",
"end_time": "2026-07-20T15:30:00.000Z"
}
}
| שדה | תיאור |
|---|---|
event |
appointment_cancelled או appointment_rescheduled. |
appointment.status |
Canceled בביטול (אחד l, הערך שה-API מחזיר), Confirmed בקביעה מחדש. |
appointment.cancelation_reason |
הסיבה שניתנה כאשר הפגישה בוטלה, או null. |
appointment.start_time / end_time |
המשבצת לאחר השינוי, ב-UTC (ISO 8601). |
previous.start_time / previous.end_time |
קביעה מחדש בלבד: המשבצת שממנה הפגישה עברה. |
campaign / agent |
הקמפיין והסוכן הנוכחיים של איש הקשר, או null. |
שינוי אחד, אירוע אחד. ביטול פגישה שולח ‘פגישה בוטלה’ בלבד, גם אם הזמן שלה השתנה באותה עריכה. עריכת הכותרת, ההערות או החדר בלבד לא שולחת אף אחד מהם. הזזת אותה פגישה פעמיים שולחת שני אירועי ‘פגישה נקבעה מחדש’.
Webhook של סיום שיחה
מופעל כאשר ה-AI מחליט ששיחה הגיעה לסיומה (בוצעה הזמנה, ליד נפסל, וכן הלאה).
שם האירוע
chat_concluded
פורמט המטען (Payload)
המטען נושא את event, את ה-contact המלא, את ה-agent שטיפל בצ’אט ואת ה-user של החשבון. הוא נושא גם את conversation_cost, כמה עלתה שיחה זו בקרדיטים, כך שזרימת n8n או Make יכולה לתעד זאת ללא קריאה נוספת:
{
"event": "chat_concluded",
"contact": { "id": "abc123", "first_name": "Jane", "channel": "whatsapp" },
"agent": { "id": "agent_1", "name": "Sales Agent" },
"user": { "id": "user_1" },
"conversation_cost": {
"credits": 7.5,
"session_id": "sess_9f2",
"started_at": "2026-09-26T09:14:02.000Z",
"outcome": "contained"
}
}
credits: קרדיטים שחויבו בתוך שיחה זו, לאחר הפחתת החזרים. זה נספר באותה דרך כמו דוח עלויות השיחה ב-API.outcome:contained(ה-AI טיפל בזה לבד),handed_off(מישהו מהצוות שלכם השיב לאחר ה-AI, או שה-AI התריע בפני אדם) אוno_ai.conversation_costמושמט כאשר לא ניתן לחשב את הנתון באותו רגע. התייחסו אליו כאל אופציונלי.
Webhook של עדכון תגיות איש קשר
מופעל כאשר תגית מוחלת על איש קשר, ולאותה תגית יש כתובת URL של webhook שהוגדרה בסוכן שאליו מוקצה איש הקשר.
שם האירוע
contact_tags_updated
מתי זה מופעל
- תג מוחל על איש קשר שמשויך אליו סוכן AI.
- לפחות אחד מהתגים המוחלים כולל כתובת URL של webhook שהוגדרה בלשונית תגים (Tags) בעורך של אותו סוכן.
איש קשר שעדיין נושא קישור לקמפיין קלאסי מלפני המעבר לסוכנים הוא מקרה מיוחד: אם התגים של אותו קמפיין כוללים כתובות 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"
},
"ad_attribution": null
},
"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, Click-to-Instagram או Click-to-Messenger) או הפניה מפוסט ב-WhatsApp. אחרת null. ראה שיוך מודעות Click-to-WhatsApp. |
contact.ad_attribution |
מופיע רק כאשר איש הקשר הותאם ללחיצה על מודעה שהובילה לאתר שלך, כפי שתועד על ידי סקריפט לחיצות המודעות. אחרת 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 כמו כל אירוע אחר — ראה אירועי טריגר זמינים ו-24 אירועי ה-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 הזה. מבנה ה-payload שנשלח זהה ל-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 |
מה יצר את המשימה: manual, human_alert, ai_tool, api, automation, daily_summary, chat או chat_composer. |
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): כל אירוע, החל מ-24 בספטמבר 2026. זה כולל את ה-webhooks של התגיות (contact_tags_updated), שלושת אירועי המשימות, הסיכום היומי, ה-webhook של הסיכום, הודעה חדשה, צ’אט הסתיים, איש קשר הושהה, איש קשר חודש, איש קשר במצב ‘נא לא להפריע’, איש קשר הוצא מארכיון, יתרה נמוכה, אירועי שידור, ואירועי איש קשר ופעילות: איש קשר נוצר, פגישה נקבעה, התראה אנושית, תשובות, קריאות, משלוחים, קרדיטים שנוצלו וקרדיטים שנטענו. לפני תאריך זה, הודעה חדשה, צ’אט הסתיים, איש קשר הושהה, איש קשר חודש, איש קשר במצב ‘נא לא להפריע’, איש קשר הוצא מארכיון וה-webhook של הסיכום נשלחו פעם אחת ללא קשר למתג. כל אירוע נושא 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. אם Retry failed deliveries מופעל, צפויה חזרה על הפעולה בכל פעם שה-endpoint שלך קיבל אירוע אך לא ענה בזמן — בצע ניכוי כפילויות (dedupe) לפי X-Webhook-Delivery. |
| בדיקת חתימה נכשלת תמיד | כמעט תמיד בגלל שהגוף (body) עבר סריאליזציה מחדש לפני הבדיקה. אמת מול גוף הבקשה ה-raw, חתום על <timestamp>.<body>, וודא שאתה משתמש בסוד (secret) הנוכחי אם ביצעת רוטציה לאחרונה. |
| ניסיונות חוזרים לא מתרחשים | ניסיונות חוזרים כבויים אלא אם הופעלו ב-webhook הספציפי הזה. אנחנו לא מבצעים ניסיונות חוזרים עבור תגובות 4xx. |
הבלוק campaign הוא תמיד null |
צפוי: אנשי קשר נמצאים עם סוכן AI ולא עם קמפיין. קרא במקום זאת את הבלוק agent. ראה פורמט נתוני Webhook. |
| הנתונים ריקים או פגומים | ודא שהמערכת הקולטת שלך מקבלת JSON. בדוק את יומני השרת שלך עבור שגיאות ניתוח (parsing). |
| כתובת ה-webhook מחזירה שגיאות | בדוק את ה-URL שלך עם כלי כמו Postman או webhook.site. |
| ה-webhook הפסיק לפעול לחלוטין לאחר תקלה | כשלים חוזרים משביתים את ה-webhook באופן אוטומטי. שמירה מחדש לא מפעילה אותו שוב — תקן את ה-endpoint שלך, ולאחר מכן פנה לתמיכה. |
| שמירה או בדיקה נותנים שגיאת הרשאה | אתה זקוק להרשאת “עריכה” עבור אינטגרציות. בקש מבעל החשבון להעניק אותה. |
רשימת ה-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 שלך.