خطأ txn_id المكرر
الأعراض. يُرجع إرسال معاملة الاستجابة 400 مع الرسالة A transaction with this transaction_id already exists. في حقل transaction_id، أو الاستجابة 409 عندما يتسابق طلبان متطابقان.
السبب. قيمة txn_id (أي transaction_id الذي ترسله) فريدة لكل تطبيق.
ترفض Didit معاملة ثانية بالقيمة transaction_id نفسها، ولا تُعيد السجل الموجود.
الحل.
- ولّد
txn_idبشكل حتمي من جهتك (مثلاً استخدم معرّف المعاملة في قاعدة بياناتك). - عند تلقي
400أو409بسببtransaction_idمكرر أثناء إعادة المحاولة، ابحث عن المعاملة الموجودة بدلاً من إعادة الإرسال: اقرأها عبرGET /v3/transactions/{uuid}/باستخدامuuidمن الاستجابة الأولى، أو استخدمtransaction_id(وهو uuid الخاص بـ Didit) الذي يرسله webhook الحدثtransaction.createdبجانبtxn_idالخاص بك. - إذا لم يكن الطلب إعادة محاولة، فامنح المعاملة الجديدة
transaction_idخاصاً بها.
القاعدة لا تُطلق
الأعراض. أنشأت قاعدة يفترض أن تتطابق، لكن لا تظهر أي معاملة فيهاmatched: true ضمن rule_runs[].
الأسباب والحلول.
- التطبيق في وضع البيئة التجريبية - تتجاوز بيئة التطبيق التجريبية تقييم القواعد، وفحص AML، والفوترة، وwebhook الحدثين
transaction.createdوtransaction.status.updated. تستمر عمليات تبادل Travel Rule عند تفعيلها، مع Didit Test VASP، وترسل webhook الحدثtravel_rule.status.updatedمعenvironment: sandbox. تُرجعrule_runsقائمة فارغة وتبقى الدرجة0مهما كان وضع قواعدك، وتبقى المعاملة في حالةAPPROVEDما لم تُطبّق عملية تحويل Travel Rule عند انتهاء مهلة الانتظار قيمةtimeout_outcomeالخاصة بك. تحقق منenvironmentفي استجابة المعاملة: القيمة"sandbox"تعني أنها لم تُقيَّم أبداً. راجع مراقبة المعاملات في البيئة التجريبية لمعرفة كيفية التحقق من القاعدة قبل تفعيلها. - وضع القاعدة هو
DISABLEDأوTEST- تحقق من Rules → [rule] → Mode. تُسهم القواعدACTIVEفقط في الاحتساب؛ القواعدTESTتُقيَّم لكنها لا تؤثر في الحالة. - تصفية النطاق تستثني المعاملة - مثلاً، إذا ضُبط النطاق على
transaction_type = financeفلن تتطابق مع معاملاتtravelRule. - نافذة التجميع أقصر مما يلزم - لن تتطابق قاعدة “20 معاملة خلال 30 يوماً” بعد 15 معاملة فقط.
- قيمة حقل الشرط هي null - مثلاً، تتحقق قاعدتك من
counterparty.country_codeلكنك لم ترسل طرفاً مقابلاً. - تحويل العملة - تعتمد القاعدة على الحدود في
amount_in_default_currency؛ إذا اختلفت العملة الافتراضية لتطبيقك عن عملة المعاملة، فقد يقع المبلغ المحوّل دون الحد.
القاعدة تُطلق على كل شيء
الأعراض. تُطلق القاعدة على 90% أو أكثر من المعاملات، فتغمر قائمة المراجعة لديك. السبب. الشروط واسعة جداً، أو الحدود منخفضة جداً. الحل.- أضف عمليات تصفية
scopeلتضييق نطاق التطبيق (مثلاً الحوالات الصادرة فقط، أو أنواع معاملات محددة). - ارفع الحدود (المبالغ وعدد المعاملات خلال فترة).
- ضع القاعدة في وضع
TESTلمدة أسبوع، وحلّلrule_runsلمعرفة معدل التطابق، وشدّد الشروط قبل إعادة تفعيلها.
انتهت مهلة فحص العملات المشفرة
الأعراض. اكتملت المعاملة بالحالةstatus: APPROVED، لكن المصفوفة provider_results[] تُظهر status: FAILED لمحفظة أو تجزئة معاملة أو مزوّد فحص عملات مشفرة.
الأسباب.
- توقفت واجهة برمجة تطبيقات المزوّد لفترة وجيزة.
- انتهت مهلة الاستعلام (عادةً نحو 10 ثوانٍ).
- لا تفشل المعاملات بسبب مشكلات المزوّدين، فالإثراء يعمل على أساس أفضل جهد.
- إذا فشل مزوّد بعينه مراراً، فتحقق من صفحة حالته أو افتح تذكرة دعم.
- فكّر في ضبط تفضيلات المزوّدين في Settings → Transaction Monitoring → Providers لتوجيه الطلبات إلى مزوّدين بديلين.
بيانات إثراء IP مفقودة
الأعراض. إما أنapplicant.ip_enrichment للمعاملة غائب أو جزئي.
الأسباب.
- لا يوجد
applicant.device.ipفي الإرسال. - عنوان IP خاص أو محجوز (غير قابل للتوجيه).
- كان جميع مزوّدي الإثراء غير متاحين مؤقتاً.
- اجمع عنوان IP للمرسل في عميلك أو خادمك، ومرّره مع كل معاملة.
- استخدم عناوين IP القابلة للتوجيه فقط، فتتجاهل Didit النطاقات الخاصة دون إشعار.
- تحقق من حالة المزوّدين في Settings → Status داخل الواجهة.
عدم تطابق توقيع webhook
الأعراض. يرفض نقطة الاستقبال لديك الأحداث لأن التوقيع لا يتطابق. الأسباب.- تغيّر الجسم الخام للطلب (أُعيدت تسلسل JSON بمسافات بيضاء مختلفة).
- سر خاطئ.
- وجود وجهات متعددة بالعنوان نفسه؛ فالتواقيع تختلف من وجهة إلى أخرى.
- وقّع على الجسم الخام للطلب، وليس على JSON المحلل. تُتيح كثير من الأطر وسيطاً للوصول إلى الجسم الخام.
- بدّل السر إذا تعرّض للاختراق: Webhook destinations → [destination] → Rotate secret.
- احتفظ بوجهة واحدة لكل عنوان URL لتجنب الالتباس في الأسرار.
webhook لا يصل
الأعراض. تُنشأ المعاملات، لكن لا يصل أي webhook. الأسباب.- قيمة
enabledللوجهة هيfalse. - عنوان URL غير متاح للوصول من الإنترنت العام.
- عُطّلت الوجهة تلقائياً بعد إخفاقات متكررة.
- الحدث غير موجود في
subscribed_events.
- أرسل حدثاً تجريبياً: Webhook destinations → [destination] → Send test.
- تحقق من عمليات التسليم الأخيرة: Webhooks → [destination] → Deliveries. راجع الاستجابات 4xx و5xx مع الجسم والرؤوس.
- أعد تفعيل الوجهات المعطّلة.
يبدو تحويل العملة غير صحيح
الأعراض. لا يطابقamount_in_default_currency السعر الذي تتوقعه.
الأسباب.
- سعر الصرف هو سعر السوق المتوسط عند
txn_date. - تستخدم المعاملات المؤرخة بأثر رجعي سعر الصرف التاريخي في ذلك التاريخ.
- تتمتع بعض العملات (العملات الأجنبية النادرة) بفترات تحديث أطول.
- استخدم
amountوcurrency(العملة الأصلية) للعرض. - استخدم
amount_in_default_currencyفقط لتطبيق حدود القواعد داخلياً. - لأغراض التدقيق، يحفظ سجل المعاملة سعر التحويل المستخدم وقت التقييم.
عدم تطابق الطرف المقابل مع قائمة الحظر لديّ
الأعراض. أدرجت شركة في قائمة الحظر باستخدامvendor_data، لكن معاملة مع هذا الطرف المقابل تمت مع ذلك.
الأسباب.
- الطرف المقابل في حمولة المعاملة لا يحتوي على
vendor_data، وقد خُزّن كلقطة خارجية. - حالة الأحرف في
vendor_dataمختلفة.
- مرّر دائمًا
counterparty.vendor_dataعندما يكون الطرف المقابل كيانًا على منصتك. - استخدم حالة الأحرف نفسها في كل مكان، فـ
vendor_dataحساس لحالة الأحرف.
المعاملات العالقة في AWAITING_USER
الأعراض. المعاملات عالقة فيAWAITING_USER لأن المستخدم لا يُكمل جلسة المعالجة أبدًا.
الأسباب.
- لم يفتح المستخدم رابط جلسة المعالجة.
- انتهت صلاحية جلسة المعالجة.
- المعاملة تحويل Travel Rule، وقد نقلتها قاعدة من المكتبة مثل
travel-rule-pending-actionإلىAWAITING_USER. لا تنشئ Didit جلسة المعالجة الافتراضية لمعاملة Travel Rule، لذلك ما لم تسمِّ القاعدة سير عمل المعالجة الخاص بها فلا يوجد رابط لإرساله.
- الرابط الذي يُرسَل هو
remediation_session_urlفي استجابة المعاملة. أعد إرساله إلى المستخدم. - بالنسبة لمعاملة Travel Rule، حُلّ التحويل من علامة التبويب Travel rule، ثم غيّر حالة المعاملة بنفسك، لأن حلّ التحويل لا ينقل المعاملة وحدَه خارج
AWAITING_USER. - تتبع جلسات المعالجة النمط نفسه في البدء السريع لـ KYC، واشترك في webhook الخاص بالاكتمال.
- اضبط مهلة في نظامك لجعل المعاملات القديمة منتهية الصلاحية إذا لم تكتمل المعالجة أبدًا.
حد المعدل عند الإنشاء
الأعراض. يظهر الخطأ429 Too Many Requests أثناء فترات الارتفاع المفاجئ في حجم الطلبات.
الحل.
- التزم بالرأس
Retry-After. - قيّد معدل الطلبات من جهة العميل أثناء فترات الارتفاع المفاجئ في حجم الطلبات.
- تواصل مع الدعم للحصول على حدود أعلى بناءً على حجم إنتاج مثبت.
الخطوات التالية
دليل التكامل
أنماط التكامل الكاملة.
القواعد
كيف يعمل تقييم القواعد.
Webhooks
آلية webhook.