8 באוקטובר 2026 | 9 דקות קריאה
הגדירו העברת נתונים אוטומטית, הגדירו אירועים מפעילים (Triggers) וחברו את כלי העבודה שלכם.
Webhooks ב־Eventact
Webhook של Eventact שולח נתונים למערכות חיצוניות כאשר מתרחש אירוע או שינוי ב־Eventact. במקום שתוכנת צד שלישי תבדוק אם יש עדכונים ב־Eventact (בדיקה מחזורית באמצעות API, המכונה polling), המערכת שולחת את הפרטים באופן יזום לכתובת אינטרנט (URL) שאתם מגדירים בממשק הניהול.
לדוגמה, כאשר משתתף משלים הרשמה, Eventact שולחת את פרטי ההרשמה שלו למערכת האחרת.
Webhook לעומת API
בבדיקה מחזורית באמצעות API (polling), המערכת החיצונית בודקת שוב ושוב אם יש הרשמות חדשות ב־Eventact. באמצעות webhook, Eventact מעבירה כל רשומה מיד עם יצירתה.
API (your system asks):
Your system ── "Any new registrations?" ──> Eventact
Your system <── "No." ─── Eventact
Your system ── "Any new registrations?" ──> Eventact
Your system <── "Yes, 1." ─── Eventact
Webhook (Eventact sends):
Attendee registers ──> Eventact ── HTTP POST ──> Your destination URL
Webhooks מהירים יותר ודורשים פחות בקשות מבדיקה מחזורית (polling). לאחר הפעלת webhook, המערכת המקבלת יכולה לפנות ל־Eventact API לקבלת נתונים נוספים או לביצוע פעולות נוספות. Webhooks וה־API משלימים זה את זה.
שימושים אפשריים ב־Webhooks
- אוטומציה באמצעות Zapier ו־Make: הוסיפו כל נרשם לגיליון Google Sheets, שלחו SMS או פרסמו הודעה פנימית ב־Slack כאשר מישהו נרשם. אין צורך בתכנות.
- סנכרון CRM: ל־Eventact יש ממשקים מובנים ל־HubSpot ול־Salesforce. עבור מערכות CRM אחרות או תהליכי העברת נתונים מותאמים אישית, השתמשו ב־webhook.
- מערכות פנים־ארגוניות: שלחו הרשמות ישירות למסד נתונים פנימי, למערכת צד שלישי להדפסת תגי משתתפים בשטח או לפורטל משתתפים ייעודי של הארגון.
אירועים מפעילים נתמכים (Triggers)
| אירוע מפעיל (Trigger) | שם האירוע | מתי מתבצעת השליחה |
|---|---|---|
| Registration created | registration.created | נשלחת הרשמה חדשה. נכללות גם הרשמות שממתינות לאישור מנהל או לתשלום לא מקוון. |
עריכת הרשמות קיימות וביטולים מפעילים שמות אירועים אחרים, שאינם נידונים במאמר זה.
כפילויות: מנהל Eventact יכול לשלוח מחדש webhook של הרשמה באופן ידני מממשק הניהול, ולכן נקודת הקצה המקבלת (Endpoint) עשויה לקבל את אותה הרשמה יותר מפעם אחת. השתמשו ב־
data.registrationIdכדי לדלג על הרשמות שכבר עיבדתם.
Webhooks ברמת החברה לעומת Webhooks ברמת הפרויקט
| רמה | היכן מגדירים | תחולה |
|---|---|---|
| חברה | Settings › Integrations › Webhooks | מופעל עבור כל פרויקט בחשבון שלכם, כולל פרויקטים עתידיים. השתמשו באפשרות זו כדי לסנכרן את כל נתוני המשתתפים למערכת CRM אחת או למחסן נתונים. |
| פרויקט | בתוך הפרויקט: Registration › Webhooks | מופעל עבור אותו פרויקט בלבד. השתמשו באפשרות זו לתהליכים של אירוע יחיד, כגון ערוץ Slack ייעודי או תהליך Zapier עבור כנס מסוים. |
אם גם webhook ברמת הפרויקט וגם webhook ברמת החברה פעילים, שניהם מופעלים. אם הם מפנים לאותה כתובת URL, נקודת הקצה מקבלת שתי בקשות עבור כל הרשמה.
הגדרת Webhook
- פתחו את Webhooks ברמת החברה או הפרויקט ולחצו על Add webhook.
- הזינו שם שתוכלו לזהות בהמשך (לדוגמה, HubSpot - Production או Zapier - Attendee Sync).
- הזינו את כתובת ה־URL של היעד. עליה להתחיל ב־
https://ולהיות נגישה מהאינטרנט הציבורי. - תחת Triggers, בחרו Registration created.
- הגדירו את Status כ־Enabled ולחצו על Save.

לאחר השמירה, מוקצה ל־webhook מפתח סודי לחתימה (Signing Secret) שמתחיל ב־whsec_. לחצו על סמל העין כדי להציג אותו או על סמל ההעתקה כדי להעתיק אותו. תזדקקו למפתח הזה כדי לאמת את מקור הבקשה ואת שלמות הנתונים.
הערה לגבי כניסת שינויים לתוקף: עדכוני הגדרות נכנסים לתוקף עבור הרשמות חדשות בתוך כ־10 דקות.
בדיקת Webhook
קיימות שתי אפשרויות בדיקה, ושתיהן זמינות בתפריט ⋮ של ה־webhook (לחצו על שורת ה־webhook ולאחר מכן על ⋮). האפשרות Send ping זמינה גם ככפתור נפרד בתחתית חלונית ההגדרות של ה־webhook.
| בדיקה | מה נשלח | מטרת השימוש |
|---|---|---|
| Send ping | אירוע ping ללא שדות של נרשם | מאפשרת לוודא שנקודת הקצה בכתובת ה־URL שלכם נגישה, מחזירה תגובת 2xx בתוך 10 שניות ומבצעת אימות חתימות. |
| Send sample registration.created | גוף בקשה מלא מסוג registration.created שכל השדות הסטנדרטיים בו מלאים | מספקת ל־Zapier, ל־Make או למערכות קליטה מותאמות אישית מבנה נתונים מלא למיפוי שדות, בלי ליצור הרשמת דמה. |
הבקשות בשתי הבדיקות נחתמות בדיוק כמו בקשות שנשלחות בפועל.
חיבור Zapier או Make
Zapier
- ב־Zapier, צרו תהליך Zap ובחרו באירוע המפעיל Webhooks by Zapier › Catch Hook.
- העתיקו את כתובת ה־URL ש־Zapier מספקת.
- ב־Eventact, הוסיפו webhook עם הכתובת הזו ושמרו.
- לחצו על שורת ה־webhook, פתחו את תפריט ⋮ ובחרו Send sample registration.created. Zapier תקלוט את דוגמת ההרשמה המלאה.
- מפו את השדות שהתקבלו לפעולות הבאות בתהליך ה־Zap שלכם.
Make (Integromat)
- ב־Make, הוסיפו מודול Webhooks › Custom webhook וצרו כתובת לקבלת הבקשות.
- העתיקו את הכתובת.
- ב־Eventact, הוסיפו webhook עם הכתובת הזו ושמרו.
- לחצו על שורת ה־webhook, פתחו את תפריט ⋮ ובחרו Send sample registration.created. Make קוראת את נתוני הדוגמה ויוצרת את מבנה הנתונים.
- מפו את השדות לתרחיש האוטומציה שלכם (Scenario).
חשוב: אל תשתמשו ב־Send ping להגדרה הראשונית ב־Zapier או ב־Make. הודעת ping אינה כוללת שדות נרשם, ולכן אין בה מבנה נתונים שאפשר למפות לפעולות הבאות.
שאלות מותאמות אישית בטופס וכרטיסים נוספים אינם נכללים בגוף הבקשה של ה־webhook. כדי לקבל אותם, הוסיפו לתהליך שלכם שלב של בקשת HTTP שפונה ל־Eventact API באמצעות
data.registrationId.
מבנה הנתונים בגוף בקשת Webhook (Payload)
כל שליחה היא בקשת HTTPS מסוג POST שגופה מכיל JSON:
{
"id": "6f1c2a9e-1b7d-4a53-9a51-0d2f7c9e1a10",
"event": "registration.created",
"createdAt": "2026-10-08T10:00:01Z",
"companyId": 12,
"projectId": 3456,
"data": {
"registrationId": 487215,
"contactId": 312908,
"formId": 10842,
"formName": "VIP & Speaker Registration",
"projectName": "Hyperion Nexus Live",
"registeredAt": "2026-10-08T09:59:59Z",
"status": "submitted",
"ticket": "VIP Pass",
"firstName": "Nikos",
"lastName": "Andrews",
"fullName": "Nikos Andrews",
"organization": "Quantix Semiconductors",
"jobTitle": "Director of AI Infrastructure",
"email": "nikos.andrews@example.com",
"phone": "+306944123456",
"price": 450.0,
"currency": "EUR"
}
}
מאפייני גוף הבקשה
| מאפיין | סוג | תיאור |
|---|---|---|
id | UUID | מזהה ייחודי של הבקשה שנשלחה, התואם לכותרת webhook-id. |
event | String | registration.created, או ping בבדיקת ping. |
createdAt | ISO 8601 string | המועד שבו נשלח ה־webhook (UTC). |
companyId | Integer | מזהה חשבון ה־Eventact שלכם. |
projectId | Integer | הפרויקט שבו בוצעה ההרשמה. |
data.registrationId | Integer | מזהה ההרשמה. השתמשו בו לזיהוי בקשות כפולות. |
data.contactId | Integer | מזהה איש הקשר, המשותף לכל הפרויקטים בחשבון שלכם. |
data.formId | Integer | מזהה טופס ההרשמה. |
data.formName | String | שם טופס ההרשמה. |
data.projectName | String | שם הפרויקט. |
data.registeredAt | ISO 8601 string | המועד שבו הנרשם שלח את הטופס (UTC). |
data.status | String | submitted (הושלם) או pending (ממתין לאישור או לתשלום לא מקוון). |
data.ticket | String or null | השם הפנימי של הכרטיס הראשון בהרשמה, כפי שהוגדר בממשק הניהול. אם יש כמה כרטיסים, רק הראשון נכלל. אם אין כרטיס, הערך הוא null. |
data.firstName | String | שם פרטי. |
data.lastName | String | שם משפחה. |
data.fullName | String | שם מלא. |
data.organization | String | חברה או ארגון. |
data.jobTitle | String | תפקיד. |
data.email | String | כתובת אימייל. |
data.phone | String | מספר טלפון בפורמט בינלאומי. |
data.price | Decimal | הסכום הכולל של ההרשמה, כולל כרטיסים שאינם מופיעים ב־data.ticket. |
data.currency | String | קוד מטבע ISO (לדוגמה EUR, USD, ILS). |
שאלות מותאמות אישית בטופס אינן נכללות. כדי לקבל אותן או את רשימת הכרטיסים המלאה, פנו ל־Eventact API באמצעות data.registrationId.
כותרות בקשת ה־HTTP
Eventact מגדירה את כותרות בקשת ה־HTTP בהתאם למפרט Standard Webhooks:
| כותרת | תיאור |
|---|---|
webhook-id | מזהה ייחודי של הבקשה שנשלחה, התואם ל־id בגוף הבקשה. |
webhook-timestamp | חותמת זמן Unix, כמספר שלם המייצג שניות, המציינת מתי נשלחה הבקשה. |
webhook-signature | מחרוזת החתימה בפורמט v1,{base64_signature}. |
X-Eventact-Event | שם האירוע, התואם ל־event בגוף הבקשה. |
אימות החתימה
Eventact חותמת על כל בקשה בהתאם למפרט Standard Webhooks. אימות החתימה מאשר שהבקשה הגיעה מ־Eventact ושהיא לא שונתה בדרך.
הדרך הפשוטה ביותר היא להשתמש בחבילה רשמית של standardwebhooks (זמינה עבור Node.js, Python, Go, Ruby ו־Java). העבירו אליה את המפתח הסודי לחתימה, את גוף הבקשה הגולמי ואת כותרות הבקשה.
אזהרה לגבי שלמות גוף הבקשה: בצעו תמיד את האימות מול גוף הבקשה הגולמי, לפני פענוחו. אם מסגרת העבודה (Framework) של היישום שלכם מפענחת את ה־JSON לפני האימות, המרתו מחדש למחרוזת JSON עשויה לשנות את רצף הבתים ואת הרווחים ולגרום לאימות להיכשל.
Node.js (Express)
const express = require('express');
const { Webhook } = require('standardwebhooks');
const app = express();
const wh = new Webhook(process.env.EVENTACT_WEBHOOK_SECRET); // whsec_...
// Use express.raw() on the webhook route so req.body is a raw Buffer
app.post('/eventact/webhook', express.raw({ type: 'application/json' }), (req, res) => {
try {
wh.verify(req.body, req.headers);
} catch (err) {
return res.status(400).send('Invalid signature');
}
const payload = JSON.parse(req.body.toString('utf8'));
// Handle payload...
res.sendStatus(200);
});
Python (Flask)
import os
import json
from flask import Flask, request
from standardwebhooks.webhooks import Webhook
app = Flask(__name__)
wh = Webhook(os.environ["EVENTACT_WEBHOOK_SECRET"]) # whsec_...
@app.post("/eventact/webhook")
def eventact_webhook():
raw_body = request.get_data()
try:
wh.verify(raw_body, dict(request.headers))
except Exception:
return "Invalid signature", 400
payload = json.loads(raw_body.decode('utf-8'))
# Handle payload...
return "", 200
ללא ספרייה
- הסירו מהמפתח הסודי לחתימה את הקידומת
whsec_ופענחו את יתרת המחרוזת מ־base64. התוצאה היא מערך הבתים המשמש כמפתח ה־HMAC שלכם. - בנו את המחרוזת לחתימה:
{webhook-id}.{webhook-timestamp}.{raw body}. - חשבו ערך גיבוב HMAC-SHA256 של המחרוזת באמצעות מערך הבתים של המפתח, וקודדו את התוצאה ב־base64.
- הכותרת
webhook-signatureמכילה חתימות מופרדות ברווחים, בפורמטv1,{signature}. אשרו את הבקשה אם לפחות אחת החתימות תואמת, באמצעות השוואה בזמן קבוע (constant-time comparison). - כדי למנוע התקפות שליחה חוזרת (Replay Attacks), דחו בקשות שבהן
webhook-timestampשונה ביותר מ־5 דקות מהשעה בשרת שלכם.
החלפת המפתח הסודי לחתימה
אם המפתח הסודי לחתימה שלכם נחשף, פתחו את תפריט ⋮ של ה־webhook ובחרו New secret.
כניסת המפתח החדש לתוקף עשויה להימשך 10 דקות או יותר. במהלך חלון המעבר, בקשות עדיין עשויות להיחתם באמצעות המפתח הקודם. הגדירו את נקודת הקצה כך שתתמוך זמנית בשני המפתחות: נסו קודם לאמת באמצעות המפתח החדש, ואם האימות נכשל, נסו את המפתח הישן. הסירו את המפתח הישן לאחר שהבקשות הנכנסות עוברות אימות באמצעות המפתח החדש.
כללי שליחה
- תנאי הצלחה: נקודת הקצה חייבת להחזיר קוד סטטוס HTTP בטווח 2xx בתוך 10 שניות.
- ללא ניסיונות חוזרים: כל אירוע נשלח פעם אחת. אם נקודת הקצה אינה זמינה, אינה מגיבה בזמן או מחזירה שגיאה (4xx/5xx), Eventact אינה שולחת את האירוע מחדש.
- ללא הפניות: Eventact אינה פועלת לפי הפניות HTTP מסוג 301 ו־302. הגדירו את כתובת ה־URL הסופית המדויקת.
- HTTPS ציבורי בלבד: כתובות IP בטווחים פרטיים או כתובות מקומיות מסוג loopback (
localhost,127.0.0.1,10.x.x.x,192.168.x.x) נדחות. - ללא השפעה על הנרשמים: Webhooks נשלחים ברקע באופן אסינכרוני. נקודת קצה שמגיבה באיטיות או מחזירה שגיאות לעולם אינה מאטה את שליחת הטופס ואינה חוסמת הרשמה של משתתף.
טיפול באירועים שלא התקבלו: מאחר שאין ניסיונות חוזרים אוטומטיים, השבתה זמנית של השרת עלולה לגרום לכך שבקשות לא יגיעו ליעדן. כדי לשחזר רשומות חסרות, מנהל יכול לשלוח מחדש webhooks ידנית מממשק הניהול של Eventact, או שהמערכת שלכם יכולה לבצע בדיקות מחזוריות ב־Eventact REST API לפי לוח זמנים.
ניטור ופתרון תקלות
רשימת Webhooks מציגה את המצב הנוכחי של כל webhook ואת מועד השליחה האחרונה שלו. בחרו webhook כדי לבדוק את מספר הבקשות שנשלחו ואת הודעות השגיאה האחרונות, כגון 404 Not Found או Timeout after 10 seconds. סימון אזהרה מופיע כאשר הבקשות האחרונות נכשלות ונעלם אוטומטית לאחר הבקשה המוצלחת הבאה.
אם נקודת הקצה שלכם אינה מקבלת קריאות webhook:
- בדקו שמצב ה־webhook הוא Enabled.
- ודאו שהאפשרות Registration created נבחרה תחת Triggers.
- לחצו על Send ping כדי לוודא שכתובת ה־URL נגישה מהאינטרנט הציבורי ומגיבה בתוך 10 שניות.
- כדי לבדוק הרשמה אמיתית, בקשו ממנהל Eventact לשלוח מחדש את ה־webhook שלה מממשק הניהול.
- אם ביצעתם שינוי לאחרונה, המתינו עד 10 דקות לרענון מטמון ההגדרות.
- בדקו באיזו רמה הוגדר ה־webhook: webhook ברמת פרויקט מופעל רק עבור הפרויקט שלו. כדי לקבל הרשמות מכל פרויקט, הגדירו את ה־webhook תחת Settings › Integrations › Webhooks.