Skip to main content
بدلاً من الاستقصاء الدوري (polling)، يمكنك أن تجعل Sahl ترسل حدثاً إلى خادمك عند انتهاء كل استدعاء. والـ Webhooks اختيارية. يُرسَل كل حدث KYC بعد اعتماد (commit) قاعدة البيانات للاستدعاء، وفي الخلفية، فلا تنتظر استجابة API نقطتك الطرفية أبداً ولا تفشل بسببها.

تسجيل نقطة طرفية

في وحدة التحكم افتح Settings، ثم Webhooks، ثم Add Webhook.
  1. أدخل Endpoint URL. يجب أن يكون https وأن يُحلَّ إلى عنوان عام. تُرفض العناوين الخاصة وعناوين الحلقة المحلية (loopback) وعناوين البيانات الوصفية للسحابة، عند الحفظ ومرة أخرى قبل كل إرسال. ولا تُتبَع إعادات التوجيه.
  2. اختر الأحداث (أدناه).
  3. احفظ. إذا لم تقدّم سرّاً خاصاً بك (16 حرفاً فأكثر)، تولّد Sahl سرّاً يظهر مرة واحدة، بصيغة whsec_ يليها 48 حرفاً. انسخه.
  4. انقر Test على النقطة الطرفية. ترسل Sahl حدث test.ping إلى عنوانك، موقّعاً كأي تسليم حقيقي، وتعرض الحالة التي ردّ بها خادمك. وبنية حمولة الاختبار لا تشبه حدث KYC (راجع قسم «نبضة الاختبار» أدناه).
تتطلب إدارة النقاط الطرفية دور مسؤول المستأجر (tenant admin) أو مدير API. وتُدار نقاط Webhook الطرفية من وحدة التحكم، لا عبر Partner API.

الأحداث

لا يصدر أحداثاً إلا الاستدعاءات التي تحمل reference، لأن الحدث يسمّي حالة (case). فالاستدعاء بلا مرجع لا يخزّن شيئاً ولا يصدر شيئاً. تُرسَل الأحداث للبيئتين كلتيهما. وتبيّن الحمولة أيّهما.

الحمولات

تحمل كل حمولة هذه المفاتيح الأربعة. تحمل الحمولات المعرّفات، وreference الخاص بك، والبيئة، وملخصاً للحكم. ولا تحمل أبداً قيمة حقل أو اسماً أو تاريخ ميلاد أو أي محتوى وثيقة: فالتسليمات تُخزَّن لدى Sahl وتُرسَل إلى عنوان كتبتَه أنت.

kyc.documents_read

تحوي failed_checks معرّفات الفحوص الفاشلة ذات الخطورة critical أو warning، دون تكرار.

kyc.case_verified وkyc.case_assessed

kyc.eid_completed

تكون complete بقيمة false حين انتهى الطلب مؤرشفاً دون أن يُكمله العميل. وتحوي failed_checks معرّفات فحوص eID الحرجة (critical) الفاشلة.

نبضة الاختبار

يرسل زر Test بنية مختلفة، موقّعة بالطريقة نفسها:
قيمة ترويسته X-Sahl-Event هي test.ping. وليس فيها مفتاح event ولا event_id، فوجّه الحدث بحسب الترويسة لا بحسب مفتاح. ولا تحمل ترويسة X-Sahl-Delivery، وتنتظر ردّك 10 ثوانٍ، وتعدّ أي حالة أقل من 400 نجاحاً (أما التسليمات الحقيقية فتتطلب 2xx وتنتظر 30 ثانية).

ترويسات الطلب

التحقق من التوقيع

  1. اقرأ بايتات الجسم الخام قبل تحليل JSON. فإعادة تسلسل JSON لا تطابق التوقيع.
  2. احسب HMAC-SHA256(secret, timestamp + "." + body) وقارنه بـ X-Sahl-Signature-V2 في زمن ثابت.
  3. ارفض أي طابع زمني يبعد عن ساعتك أكثر من بضع دقائق (تستخدم الشيفرة أدناه 5 دقائق، وهذا اختيارك وليس قاعدة من Sahl). تُوقَّع كل إعادة محاولة من جديد، فيكون طابعها الزمني حديثاً.
مستقبِل في Express. تحتفظ express.raw بالبايتات.
شُغّلت الدالتان أعلاه على الشيفرة التي توقّع التسليمات الحقيقية: التسليم الصحيح يجتاز التحقق، والجسم المعدَّل يفشل، والطابع الزمني القديم يفشل.

التسليم وإعادة المحاولة

تُجرى المحاولة الأولى فور الاستدعاء. أما المحاولات اللاحقة فتجريها مهمة إعادة محاولة تعمل كل بضع دقائق، فقد تأتي إعادة المحاولة بعد موعدها المجدول بقليل. والنقطة الطرفية التي توقفها تحتفظ بالتسليمات المستحقة وتستأنفها عند إعادة تشغيلها. اجعل معالجك عديم الأثر عند التكرار (idempotent). أزِل التكرار بحسب X-Sahl-Delivery (معرّف واحد لكل تسليم) أو event_id (معرّف واحد لكل حدث). وأجب بسرعة بـ 2xx ثم نفّذ العمل بعد ذلك. تعرض وحدة التحكم كل تسليمات النقطة الطرفية مع حالة HTTP وعدد المحاولات، وتحتفظ بما يصل إلى 2,000 حرف من جسم ردّك.

استكشاف الأخطاء