روابط ويب أحداث في الوقت الفعلي
استدعاءات مرتجعة موقّعة بـ 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 (للتوافق) -
تمت معالجة المستنداكتمل خط أنابيب OCR/IDP بنجاح -
تم تعديل المستندتم تحديث البيانات الوصفية أو العلامات أو المحتوى -
تم حذف المستندتم نقل المستند إلى سلة المهملات -
تمت استعادة المستندتم استرداد المستند من سلة المهملات -
document.movedتم نقل المستند بين مساحات العمل -
تم إنشاء إصدار المستندتمت إضافة إصدار جديد إلى مستند موجود -
تغيرت دورة حياة المستندتغير حالة الاحتفاظ / الأرشفة -
تمت إضافة تعليق على المستندتم نشر تعليق على مستند -
تمت إضافة ملاحظة إلى المستندتم إرفاق ملاحظة داخلية -
تمت إضافة علامة إلى المستندتم تعيين علامة لمستند -
تم وضع قيد قانوني على المستندتم تفعيل الحجز القانوني (غير قابل للتغيير) -
تم رفع القيد القانوني عن المستندتم إطلاق الحجز القانوني
المهام
3-
اكتملت المهمةاكتملت المهمة غير المتزامنة بنجاح -
فشلت المهمةفشلت المهمة غير المتزامنة فشلًا نهائيًا -
تقدم المهمةتحديث التقدم أثناء المهام طويلة التشغيل
مساحات العمل
2-
تمت مشاركة مساحة العملتمت مشاركة مساحة العمل مع مستخدم أو فريق -
تم إلغاء مشاركة مساحة العملتم إلغاء الوصول إلى مساحة العمل
المهام
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). إعادة المحاولة وأحداث الاختبار والتسليمات الفاشلة مجانية.
أول webhook لك في 60 ثانية
أنشئ نقطة نهاية، اشترك عبر API، أطلق حدث اختبار. هذا كل شيء.