خطافات الويب أحداث في الوقت الفعلي
تلقي إشعارات في الوقت الفعلي لجميع الأحداث. تم معالجة المستندات، واكتمل التعرف الضوئي على الحروف، وتم التصنيف.
{
"event_type": "document.processed",
"event_id": "a3b7f9c1d4e8b2a6",
"timestamp": "2026-04-17T14:23:11Z",
"subscription_id": 42,
"data": { "pofid": "doc_01HZY8K3…" }
} 22 نوعًا من الأحداث، مصنفة حسب الكيان
اشترك في أحداث فردية أو استخدم الرمز البدلي * لكل شيء.
المستندات
14-
تم تحميل المستندتم رفع مستند جديد إلى مساحة عمل -
تم إنشاء المستنداسم بديل لـ document.uploaded (للتوافق) -
تمت معالجة المستندتم الانتهاء من خط OCR/AI-IDP بنجاح -
تم تعديل المستندتم تحديث البيانات الوصفية أو العلامات أو المحتوى -
تم حذف المستندتم نقل المستند إلى سلة المهملات -
تمت استعادة المستندتم استرداد المستند من سلة المهملات -
document.movedتم نقل المستند بين مساحات العمل -
تم إنشاء إصدار المستندتمت إضافة إصدار جديد إلى مستند موجود -
تغيرت دورة حياة المستندتغير حالة الاحتفاظ / الأرشفة -
تمت إضافة تعليق على المستندتم نشر تعليق على مستند -
تمت إضافة ملاحظة إلى المستندتم إرفاق ملاحظة داخلية -
تمت إضافة علامة إلى المستندتم تعيين علامة لمستند -
تم وضع قيد قانوني على المستندتم تفعيل الحجز القانوني (غير قابل للتغيير) -
تم رفع القيد القانوني عن المستندتم إطلاق الحجز القانوني
المهام
3-
اكتملت المهمةاكتملت المهمة غير المتزامنة بنجاح -
فشلت المهمةفشلت المهمة غير المتزامنة فشلًا نهائيًا -
تقدم المهمةتحديث التقدم أثناء المهام طويلة التشغيل
Workspaces
2-
تمت مشاركة مساحة العملتمت مشاركة Workspace مع مستخدم أو فريق -
تم إلغاء مشاركة مساحة العملتم إلغاء الوصول إلى Workspace
المهام
3-
تم إنشاء المهمةتم إنشاء مهمة جديدة -
تم اكتمال المهمةتم تحديد المهمة كمكتملة -
المهمة متأخرةتجاوزت المهمة تاريخ استحقاقها
كل تسليم يتبع نفس المخطط
نص JSON متوقع، خمسة رؤوس HTTP موقّعة، طوابع زمنية بصيغة ISO-8601 بالتوقيت العالمي المنسق.
{
"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. مفيد لاختبار الـ hooks.
9 نقاط نهاية تحت /latest/webhooks/
عمليات CRUD كاملة للاشتراكات وسجلات التسليم واشتراكات المهام لمرة واحدة ونقطة نهاية للاختبار — جميعها عبر OAuth2 Bearer وجاهزة لـ MCP.
/webhooks/subscribe إنشاء اشتراك جديد (غير محدود لكل حساب) po_webhooks_subscribe /webhooks/list سرد جميع اشتراكات الحساب po_webhooks_list /webhooks/update تحديث اشتراك موجود po_webhooks_update /webhooks/delete حذف اشتراك بشكل ناعم (يتم الاحتفاظ بسجل التسليم) po_webhooks_delete /webhooks/deliveries استرجاع سجل التسليم مع فلاتر (نوع_الحدث، النجاح_فقط) po_webhooks_deliveries /webhooks/test إرسال حدث test.ping للتحقق من التسليم po_webhooks_test /webhooks/subscribe-job webhook لمرة واحدة لمعرف مهمة محدد po_webhooks_subscribe_job /webhooks/job-subscriptions سرد الاشتراكات المحددة بالمهمة po_webhooks_job_subscriptions /webhooks/info الأحداث المتاحة، نقاط النهاية، سياسات إعادة المحاولة، معلومات التوقيع po_webhooks_info محصّن بالتصميم
HMAC-SHA256
كل حِمل موقّع بسرّك. المقارنة الزمنية الثابتة إلزامية.
حماية SSRF
العناوين الخاصة / الداخلية، localhost ونقاط نهاية بيانات السحابة محظورة عند الاشتراك والإرسال.
آمن ضد إعادة ربط DNS
يتم إعادة التحقق من عنوان IP وقت الإرسال، وتثبيته عبر CURLOPT_RESOLVE.
يُفضل بشدة استخدام HTTPS
يقبل http و https. يُوصى بـ HTTPS للإنتاج.
عدم تكرار معرف الحدث
كل تسليم يحمل معرفًا فريدًا X-PaperOffice-Event-ID. قم بإلغاء التكرار من جانبك.
سجل تدقيق كامل
جميع المحاولات مسجلة: رمز الحالة، نص الرد، التوقيت، رسالة الخطأ.
اشتراكات غير محدودة، سلوك التسليم قابل للتكوين بالكامل
متاح في جميع الخطط. الدفع حسب الاستخدام: رصيد واحد لكل تسليم ناجح (HTTP 2xx). إعادة المحاولة وأحداث الاختبار والتسليمات الفاشلة مجانية.
تلقي الأحداث؟
قم بتكوين خطافات الويب الخاصة بك.