Webhooks יוצאים
בעוד שערוץ webhook נכנס מקבל אירועים חיצוניים לעיבוד, webhooks יוצאים עושים את ההיפך: הם מתריעים למערכות שלכם כאשר מתרחש אירוע בולט ב-betool.
מדוע
כנראה שכבר יש לכם:
- מערכת alerting (PagerDuty, Opsgenie, Slack).
- כלי ITSM (Jira, ServiceNow) לניהול כרטיסים.
- dashboard מותאם המרכז את המצב התפעולי שלכם.
במקום לבקש ממערכות אלה לבצע polling ל-API של betool, הירשמו אותן ל-webhooks יוצאים: הן יקבלו התראה מיידית בכל אירוע.
הגדרה
- ניהול → Webhooks יוצאים → מינוי חדש.
- בחרו:
- URL יעד — ה-endpoint שיקבל את ה-POSTs.
- אירועים להאזנה — ראו רשימה להלן.
- סוד HMAC — נוצר אוטומטית, לשימוש בצד המקבל שלכם לאימות חתימות.
- (אופציונלי) פילטרים — הגבלה להרצות של פייפליין ספציפי, לרמת חומרה מסוימת וכו'.
אירועים זמינים
| אירוע | מתי מופעל |
|---|---|
execution.failed | הרצת פייפליין נכשלה |
execution.requires_human | צומת confirmation ממתין לאישור |
execution.cost_threshold | הרצה חצתה סף עלות |
billing.low_balance | יתרת הקרדיטים ירדה מתחת לסף המוגדר |
billing.out_of_credits | היתרה אפסית (סירוב pre-call פעיל) |
audit.cross_tenant_read | סוכן חיצוני קרא תוכן של ארגון זה |
webhook.delivery_failed | webhook יוצא קודם נכשל 3 פעמים |
פורמט POST
POST /votre/endpoint HTTP/1.1
Content-Type: application/json
X-Betool-Event: execution.failed
X-Betool-Signature: sha256=...
X-Betool-Delivery: dlv_01HXYZ...
{
"event": "execution.failed",
"delivered_at": "2026-05-24T10:42:13Z",
"org_id": "org_...",
"data": {
"execution_id": "exec_...",
"pipeline_id": "pip_...",
"pipeline_name": "tri d'emails support",
"failed_node": "agent: classifier",
"error_kind": "llm_timeout",
"error_message": "Provider responded after 30s timeout"
}
}
חתימת HMAC
ה-header X-Betool-Signature מכיל sha256=<hmac> כאשר hmac = HMAC-SHA256(secret, body). אמתו אותו בקבלה כדי לוודא שהבקשה אכן מגיעה מ-betool:
import hmac, hashlib
def verify(body: bytes, signature: str, secret: str) -> bool:
expected = "sha256=" + hmac.new(
secret.encode(),
body,
hashlib.sha256,
).hexdigest()
return hmac.compare_digest(expected, signature)
Retry ואידמפוטנטיות
- אם ה-endpoint שלכם מגיב 2xx, האירוע מסומן כנמסר.
- אם non-2xx או timeout, betool מנסה שוב עם exponential backoff (דקה, 5 דקות, 30 דקות, 2 שעות, 12 שעות, 24 שעות — 6 ניסיונות לכל היותר).
- לאחר 6 כשלונות, האירוע מסומן dead-letter ו-
webhook.delivery_failedנשלח (למינויים הפעילים האחרים שלכם).
כל POST נושא מזהה ייחודי X-Betool-Delivery. אם ה-endpoint שלכם מקבל את אותה delivery פעמיים (מקרה רשת), טפלו בה כאידמפוטנטית.
אבטחה
- HTTPS חובה — מינויי HTTP פשוט נדחים.
- סוד ניתן לרוטציה — ניתן לחדש את הסוד בכל עת; POSTs שכבר בדרך ישתמשו בסוד הישן עד לפקיעתו (5 דקות).
- IP מקור — betool מפרסמת את כתובות ה-IP היוצאות שלה ב-status.betool.fr כדי לאפשר לכם להרשות אותן בחומת האש.