Webhooks אירועים בזמן אמת
התקשרות חוזרת חתומה עם HMAC עבור כל אירוע של מסמך, משימה, סביבת עבודה ומטלה. 22 סוגי אירועים, ניסיונות חוזרים מעריכיים, HTTPS מומלץ.
{
"event_type": "document.processed",
"event_id": "a3b7f9c1d4e8b2a6",
"timestamp": "2026-04-17T14:23:11Z",
"subscription_id": 42,
"data": { "pofid": "doc_01HZY8K3…" }
} 22 סוגי אירועים, מקובצים לפי ישות
הירשם לאירועים בודדים או השתמש בתו הכללי * עבור הכל.
מסמכים
14-
document.uploadedמסמך חדש הועלה לסביבת עבודה -
document.createdכינוי עבור document.uploaded (תאימות) -
document.processedצינור OCR/IDP הסתיים בהצלחה -
document.editedמטא-נתונים, תגיות או תוכן עודכנו -
מסמך נמחקמסמך הועבר לאשפה -
מסמך שוחזרמסמך שוחזר מהאשפה -
document.movedמסמך הועבר בין סביבות עבודה -
גרסת מסמך נוצרהגרסה חדשה נוספה למסמך קיים -
מחזור חיים של מסמך השתנהסטטוס שמירה / ארכיון שונה -
הערה נוספה למסמךהערה פורסמה על מסמך -
פתק נוסף למסמךהערה פנימית צורפה -
תגית נוספה למסמךתגית הוקצתה למסמך -
הוטל עיכוב משפטי על מסמךהחזקה משפטית הופעלה (בלתי ניתנת לשינוי) -
הוסר עיכוב משפטי ממסמךהחזקה משפטית שוחררה
משימות
3-
משימה הושלמהמשימה אסינכרונית הסתיימה בהצלחה -
משימה נכשלהמשימה אסינכרונית נכשלה סופית -
התקדמות משימהעדכון התקדמות במהלך משימות ארוכות טווח
סביבות עבודה
2-
סביבת עבודה שותפהסביבת עבודה שותפה עם משתמש או צוות -
שיתוף סביבת עבודה בוטלגישה לסביבת עבודה בוטלה
מטלות
3-
משימה נוצרהמטלה חדשה נוצרה -
משימה הושלמהמטלה סומנה כהושלמה -
משימה בפיגורמטלה עברה את תאריך היעד שלה
הירשם ל-["*"] כדי לקבל כל אירוע של החשבון שלך.
כל מסירה עוקבת אחר אותו סכמה
גוף JSON צפוי, חמש כותרות HTTP חתומות, חותמות זמן ISO-8601 UTC.
{
"event_type": "document.processed",
"event_id": "a3b7f9c1d4e8b2a6c9f1d4e7b2a5c8f1",
"timestamp": "2026-04-17T14:23:11Z",
"subscription_id": 42,
"data": {
"pofid": "doc_01HZY8K3M7P2Q9R5T1V6W4X2Y8",
"workspace_id": 17,
"filename": "invoice-2026-04-17.pdf",
"mime_type": "application/pdf",
"size_bytes": 284521,
"processing_result": {
"ocr_done": true,
"classification": "invoice",
"confidence": 0.98
}
}
} Content-Type application/json תמיד JSON, מקודד UTF-8 User-Agent PaperOffice-Webhook/1.0 מזהה קבוע לרשימות הרשאה של חומת אש X-PaperOffice-Event document.processed סוג האירוע הנמסר X-PaperOffice-Event-ID a3b7f9c1… מזהה ייחודי בן 128 סיביות. השתמש עבור אידמפוטנטיות. X-PaperOffice-Subscription-ID 42 מזהה של המנוי המקבל את האירוע X-PaperOffice-Signature sha256=… HMAC-SHA256 של הגוף הגולמי, מקודד הקסדצימלי אמת כל מסירה עם HMAC-SHA256
חשב HMAC-SHA256 על גוף הבקשה הגולמי באמצעות הסוד המשותף שלך, ולאחר מכן השווה מול X-PaperOffice-Signature באמצעות השוואת זמן קבוע (hash_equals, crypto.timingSafeEqual).
import crypto from 'crypto';
import express from 'express';
const app = express();
const WEBHOOK_SECRET = process.env.PAPEROFFICE_WEBHOOK_SECRET;
app.post('/webhooks/paperoffice', express.raw({ type: 'application/json' }), (req, res) => {
const signature = req.header('X-PaperOffice-Signature'); // "sha256=..."
const eventId = req.header('X-PaperOffice-Event-ID');
const eventType = req.header('X-PaperOffice-Event');
const expected = 'sha256=' + crypto
.createHmac('sha256', WEBHOOK_SECRET)
.update(req.body)
.digest('hex');
if (!signature || !crypto.timingSafeEqual(Buffer.from(signature), Buffer.from(expected))) {
return res.status(401).send('invalid signature');
}
const event = JSON.parse(req.body.toString());
// eventId als Idempotency-Key speichern -> gleiche ID nicht zweimal verarbeiten
console.log(eventType, event.data);
res.status(200).send('ok');
}); שלוש אסטרטגיות ניסיון חוזר, עד 10 ניסיונות
בחר מדיניות לכל מנוי. כל ניסיון נרשם עם קוד סטטוס, גוף תגובה ותזמון.
exponential מעריכי (ברירת מחדל)
ההמתנה מוכפלת לאחר כל ניסיון: 30 שניות, 60 שניות, 120 שניות, 240 שניות, 480 שניות…
linear ליניארי
גידול קבוע: 30 שניות, 60 שניות, 90 שניות, 120 שניות, 150 שניות…
none ללא
שלח ושכח. ללא ניסיונות חוזרים גם במקרה של שגיאות 5xx. שימושי עבור הוקים לבדיקה.
9 נקודות קצה תחת /latest/webhooks/
CRUD מלא עבור מנויים, יומני מסירה, מנויים חד-פעמיים למשימות ונקודת קצה לבדיקה — כולם עם OAuth2 Bearer, כולם מוכנים ל-MCP.
/webhooks/subscribe יצירת מנוי חדש (ללא הגבלה לכל חשבון) po_webhooks_subscribe /webhooks/list הצגת כל המנויים של החשבון po_webhooks_list /webhooks/update עדכון מנוי קיים po_webhooks_update /webhooks/delete מחיקה רכה (Soft-delete) של מנוי (יומן המסירה נשמר) po_webhooks_delete /webhooks/deliveries אחזור יומן מסירה עם מסננים (event_type, success_only) po_webhooks_deliveries /webhooks/test שליחת אירוע test.ping לאימות המסירה po_webhooks_test /webhooks/subscribe-job Webhook חד-פעמי עבור job_id ספציפי po_webhooks_subscribe_job /webhooks/job-subscriptions הצגת מנויים המוגבלים למשימה (job-scoped) po_webhooks_job_subscriptions /webhooks/info אירועים זמינים, נקודות קצה, מדיניות ניסיונות חוזרים, מידע על חתימה po_webhooks_info מחוזק מתוך תכנון
HMAC-SHA256
כל מטען (payload) חתום באמצעות הסוד שלך. השוואה בזמן קבוע היא חובה.
הגנה מפני SSRF
כתובות IP פרטיות / פנימיות, localhost ונקודות קצה של מטא-דאטה בענן חסומות בעת ההרשמה והשליחה.
בטוח מפני DNS Rebinding
ה-IP מאומת מחדש בזמן השליחה, מקובע באמצעות CURLOPT_RESOLVE.
העדפה חזקה ל-HTTPS
http ו-https מתקבלים. מומלץ להשתמש ב-HTTPS בסביבת ייצור.
אידמפוטנטיות של Event-ID
כל מסירה נושאת X-PaperOffice-Event-ID ייחודי. יש לבצע Dedupe בצד שלך.
שביל ביקורת מלא
כל הניסיונות מתועדים: קוד סטטוס, גוף התגובה, תזמון, הודעת שגיאה.
מנויים ללא הגבלה, התנהגות המסירה ניתנת להגדרה מלאה
זמין בכל החבילות. תשלום לפי שימוש: 1 קרדיט לכל מסירה מוצלחת (HTTP 2xx). ניסיונות חוזרים, אירועי בדיקה ומסירות שנכשלו הם בחינם.
ה-webhook הראשון שלך תוך 60 שניות
צור נקודת קצה, הרשם באמצעות ה-API, שלח אירוע בדיקה. זה הכל.