بدء سريع: استقبل أول webhook
ثلاثة أسطح تسليم تُخرج أحداث Orbit من المنصة؛ يساعدك هذا الدليل على اختيار أحدها، ثم يمشي حلقة النقطة المسجلة كاملة — نفق، تسجيل، تحقق، إعادة إرسال — من الطرف إلى الطرف.Step 1 — Pick a delivery surface
الخط الفاصل بين الأسطح الثلاثة واضح: الـ Tester للتجربة، والنقطة المسجلة لكل ما يحمل قيمة إنتاجية، والـ event sink لبث أحجام كبيرة إلى بنية Kafka أو تجميع دفعات تديرها بنفسك.
Start with the Tester when you’re experimenting. Graduate to a registered endpoint as soon as the integration is real — the tester cannot sign requests, so it never exercises your verification logic. Choose an event sink when per-endpoint receivers are the wrong shape — Kafka, batch, or many event types over one destination.
يمشي بقية هذا الدليل حلقة النقطة المسجلة. إذا كنت هنا للاستكشاف فقط، افتح Webhook Tester وَعُد عندما يفشل طلب في فحوص التوقيع.
Step 2 — Expose a local endpoint with a tunnel
شغّل أي مستمع HTTP مجرد محليًا وضع أمامه عنوان URL عامًا: العنوان الذي تسجله في الخطوة التالية هو عنوان إعادة التوجيه HTTPS الخاص بالنفق. أبقِ النفق يعمل طوال العمل في التسجيل وإعادة الإرسال.Step 3 — Register the endpoint in the console (or over the API)
في لوحة التحكم انتقل إلى Developer → Webhooks → Add endpoint (ويمكن الوصول إليها أيضًا تحت Settings → Webhooks). الصق عنوان النفق، واشترك في نوع حدث أو اثنين، واحفظ. تعرض وحدة التحكم سرّ التوقيع الصريح (whsec_...) مرة واحدة بالضبط — انسخه الآن إلى متغير بيئة.
التسجيل نفسه عبر الواجهة البرمجية أو الـ SDKs:
client.Request / client.request / $client->request) — الأغلفة المكتوبة تغطي الموارد الأساسية، بينما تمر الـ webhooks عبر ذلك المهرب.
تحمل الاستجابة معرف نقطتك (wh_...) والسرّ الصريح الذي يُرى مرة واحدة (whsec_...) — احفظه الآن، لأن كل GET لاحق على النقطة يعيد قيمة مقنعة مثل whsec_********...b7a1:
events الضيقة تُبقي حركة الاختبار معقولة؛ أما * فقرار إنتاجي لا قرار تطويري.
Step 4 — Receive and verify the signature
تصل حالات التسليم المسجلة موقعة بترويسةX-Orbit-Signature بصيغة t=<unix>,v1=<hex>. على مستقبلك التحقق من HMAC_SHA256(secret, "<t>.<raw body>") على بايتات الطلب الخام — قبل أن يمسّها أي وسيط JSON — ورفض الطوابع الزمنية الأقدم من 5 دقائق. يقوم الـ SDK بذلك في استدعاء واحد؛ أما التوصيلات المحيطة (الجسم الخام، والتراجع في الترويسة، و401 عند الفشل) فهي الجزء الذي عليك إتقانه. مستقبلات كاملة بخمس لغات:
X-Orbit-Signature إلى X-Devotel-Signature القديم، ويتحقق باستدعاء SDK واحد، ويجيب بـ401 عند الفشل حتى لا تقرّ إعادات المحاولة حركة مزيفة أبدًا. مستقبلات Java وC#، إضافة إلى تدوير الأسرار واستكشاف الأخطاء، في Verify webhook signatures.
أعِد 2xx خلال نافذة التسليم البالغة 30 ثانية وأزل التكرار اعتمادًا على id في الظرف — تعيد الإعادات وعمليات إعادة الإرسال الـ id نفسه. العقد الكامل (جدول الإعادات، وطابور الرسائل الميتة، والحالات المؤكدة الموت) في Webhooks overview؛ ويحتوي Build your first webhook receiver تنفيذًا كاملًا بلغتين، فيما يطرح Webhook security أدوات تحقق بسبع لغات.
Step 5 — Replay deliveries from the console
يمكن فحص كل محاولة تسليم تحت Developer → Webhooks → Events — اختر صفًا لرؤية الحمولة والاستجابة التي أعادها خادمك. يمكن إعادة إرسال التسليم الفاشل بزر Replay على صف التسليم، فتصلح مستقبلك وتعيد إطلاق الحدث الموقع نفسه من دون إثارة حركة جديدة. تهبط حالات التسليم التي تستنفد جدول الإعادات في طابور الرسائل الميتة تحت Developer → Webhooks → Dead-letter queue، ويمكن إعادة تشغيلها لمدة 7 أيام. وعندما يكون لديك تراكم تريد إعادة إطلاقه لا صفًا واحدًا، استخدم تدفق إعادة الإرسال الجماعي في تلك الشاشة. يغطي المساران معًا في Inspecting deliveries.Step 6 — Move to an event sink when you outgrow HTTP receivers
نقطة مسجلة لكل مستقبِل هي الشكل الصحيح إلى أن تعود كذلك — وإشارات الانتقال ملموسة:- جهة المصب لديك Kafka. وجّه sink من نوع
kafkaإلى وسطائك وتوقف عن تشغيل مستقبلات HTTP لكل مجموعة أحداث. - تريد دفعات لا طلبات POST لكل حدث. يفرغ sink من نوع
http_batchمصفوفة JSON من الأظرفة بحجم دفعة قابل للضبط. - تشترك بـ
*لالتقاط كل شيء. sink واحد يحمل التصنيف الكامل خير من أسطول نقاط wildcard.
credentials_configured ولا تعيد السرّ أبدًا. شكل السجل مطابق بايتيًا لظرف الـ webhook، لذا يبقى المستهلك الذي تكتبه اليوم يعمل عندما يصبح تسليم الـ sink حيًا؛ وحتى ذلك الحين أبقِ الحركة الدائمة على الـ webhooks واستخدم الـ sink فقط لتجهيز الإعداد. نموذج الـ fan-out الكامل في Webhook fan-out: one event, many destinations.
See also
- Test webhooks with the Webhook Tester — إرسالات تركيبية غير موقعة للتكرار والتجربة
- Build your first webhook receiver — شرح كامل للمستقبِل
- Build a durable webhook consumer — مستقبِل بمستوى إنتاجي مع معالجة عبر طابور
- Event Sinks API — إعداد sinks من نوع Kafka وHTTP-batch
- Webhook fan-out — كيف يبلغ الحدث الواحد كل اشتراك