محتويات الوثائق

الويبهوكس

بدل استطلاع نقاط النهاية دوريًا، يرسل منفذ إشعارًا فوريًا إلى خادمك عند كل حدث مهم في شحناتك.

إعداد نقطة الاستقبال

سجّل عنوان HTTPS يستقبل الإشعارات عبر POST /api/v1/webhooks/config. حدّد الأحداث التي تهمك، أو أغفل الحقل events لتستقبلها جميعًا:

curl -s -X POST "https://manfath.example/api/v1/webhooks/config" \
  -H "Authorization: Bearer $MANFATH_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "url": "https://example.sa/manfath/hook",
  "events": ["shipment.status_updated", "shipment.exception"]
}'

تعيد الاستجابة سرّ الويبهوك الخاص بفريقك — خزّنه في مكان آمن فهو أساس التحقق من صحة الإشعارات:

{
  "url": "https://example.sa/manfath/hook",
  "events": ["shipment.status_updated", "shipment.exception"],
  "secret": "whsec_9f2c4a7d1e8b3f6c5a0d9e2b4c7f1a3d"
}

الأحداث

الحدثمتى يُرسل
shipment.createdعند إنشاء شحنة جديدة
shipment.status_updatedعند كل تغيير في حالة الشحنة
shipment.deliveredعند تسليم الشحنة
shipment.exceptionعند وقوع استثناء يعطل المسار

شكل التسليم

يصل كل إشعار طلب POST بجسم JSON وترويستين مميزتين: X-Manfath-Event باسم الحدث، و X-Manfath-Signature بتوقيع الحمولة. مثال إشعار تغيير حالة:

POST /manfath/hook HTTP/1.1
Content-Type: application/json
X-Manfath-Event: shipment.status_updated
X-Manfath-Signature: ...

{
  "event": "shipment.status_updated",
  "tracking_number": "SRE0248817359",
  "manfath_reference": "MNF-2026-K7Q2ZC",
  "status": "IN_TRANSIT",
  "status_ar": "في الطريق",
  "status_en": "In transit",
  "location_ar": "الرياض",
  "location_en": "Riyadh",
  "occurred_at": "2026-07-26T18:40:00+03:00",
  "is_exception": false
}

إعادة المحاولة

يعتبر منفذ التسليم ناجحًا عند أي استجابة 2xx خلال 10 ثوانٍ. عند الفشل — مهلة منتهية أو رمز غير 2xx — يعيد المحاولة وفق الجدول:

بعد 5 ثوانٍ، ثم 30 ثانية، ثم دقيقتين، ثم 10 دقائق، ثم ساعة.

بعد استنفاد المحاولات الخمس يتوقف الإرسال لذلك الإشعار. أعد الاستجابة بسرعة: أكّد الاستلام فورًا بـ 200 وأجّل المعالجة الثقيلة إلى ما بعد الرد.

الأمان

وقّع الحمولة بمفتاحك السري باستخدام HMAC SHA-256 وتحقق من ترويسة X-Manfath-Signature. تجاهل أي إشعار لا يجتاز التحقق.

صندوق الاستقبال المستضاف

ليس لديك خادم عام بعد؟ يوفر منفذ صندوق استقبال جاهزًا لكل فريق على المسار:

https://manfath.example/hook/TEAMCODE

وجّه إعداد الويبهوك إليه (استبدل TEAMCODE برمز فريقك)، ثم راجع كل طلب وصل — بترويساته وجسمه — من فاحص الويبهوكس في لوحة التحكم. وهو طريقة ممتازة لفحص شكل الإشعارات قبل بناء نقطة الاستقبال الحقيقية. لتطبيق يعمل محليًا على جهازك: إما عرّضوا منفذكم المحلي عبر نفق (ngrok أو ما يماثله) ووجّهوا الويبهوك إليه، أو استعلموا عن الصندوق المستضاف برمجيًا عبر GET /api/v1/webhooks/inbox — يعيد الطلبات الأخيرة بجسمها الخام فتستطيعون التحقق من التوقيع في كودكم دون خادم عام.

الترتيب غير مضمون

قد تصل الإشعارات بغير ترتيب وقوعها بسبب إعادة المحاولات. اعتمد على حقل occurred_at في الحمولة لا على ترتيب الوصول عند تحديث حالة الطلب لديك.