Skip to content
جميع المقالات

إرسال الأحداث لتقييم المخاطر في الوقت الفعلي: دليل التكامل

تشارلز أرشيبونغ

, المؤسس المشارك

قبل اتخاذ أي إجراء، قم باستدعاء نقطة نهاية المعاملات لتحويل الأموال ونقطة نهاية الأنشطة لتسجيل الدخول وتغييرات الحساب، من نظامك الخلفي. أرسل بيانات الأطراف كاملةً ومعرفات ثابتة، ثم وجّه العملية بناءً على النتيجة الموجزة: السماح، أو المراجعة، أو الحظر.

عنوان رئيسي "الأحداث تدخل، والقرارات تخرج" بجانب رسم توضيحي لمخطط مراقبة مع ارتفاعات حادة تعبر خط العتبة، على تدرج لوني نيلي داكن.

أهم النقاط

  • إرسال حركة الأموال إلى /api/v1/transactions وتسجيلات الدخول أو تغييرات الحساب إلى /api/v1/activities.
  • اتصل قبل صرف الأموال، وقم بتوجيهها على assessment.summary.outcome: السماح أو المراجعة أو الحظر.
  • يؤدي نقص أسماء الأطراف المقابلة أو محافظها إلى قرار مراجعة، وليس قرارًا واضحًا، لذا أرسل بيانات الأطراف كاملة.
  • إعادة استخدام externalActivityId في عمليات إعادة المحاولة؛ حيث تعيد عملية إعادة التشغيل التقييم الحالي دون إعادة تسجيله.

للحصول على قرار بشأن المخاطر في الوقت الفعلي، يقوم نظامك الخلفي بإجراء مكالماتPOST /api/v1/transactionsلكل عملية دفع أو تحويل أو إيداع أو سحب، وPOST /api/v1/activitiesلكل عملية تسجيل دخول، أو إنشاء حساب، أو إعادة تعيين كلمة المرور، أو تغيير المستفيد، أو أي حدث مشابه في الحساب. كل استدعاء يُعيد قرارًا في نفس الطلب:allow،reviewأوblockمع تحديد النتيجة، وأقوى سبب، والخطوة التالية المقترحة. يقوم الكود الخاص بك بتقييد الإجراء بناءً على هذا القرار.

ثلاثة عوامل تحدد مدى جودة التكامل: الاتصال في الوقت المناسب (قبل تحويل الأموال، وليس بعده)، وإرسال معلومات كاملة عن المرسل والمستلم، واستخدام معرّفات ثابتة لتجنب إعادة التقييم عند إعادة المحاولة. يغطي هذا الدليل كل عامل من هذه العوامل، مع نماذج الطلبات من وثائق مراقبة الأحداث (يفتح في علامة تبويب جديدة) .

التوافر. تنتمي نقاط النهاية هذه إلى مجال مراقبة الاحتيال في Toden تتوفر خدمة معلومات المخاطر للحسابات التي لديها صلاحية الوصول إليها. ويتطلب استخدامها في بيئة الإنتاج أيضًا ملف تعريف أعمال معتمد. إذا لم تكن نقاط النهاية مُفعّلة لحسابك، فتواصل مع Toden قبل أن تبني ضدهم.

إلى أي نقطة نهاية ينتمي كل حدث؟

ماذا حدث

نقطة النهاية

لماذا

تم تحويل الأموال، أو على وشك التحويل، مع تفاصيل المرسل والمستلم.

POST /api/v1/transactions

يسجل العلاقة، والحسابات أو المحافظ المستخدمة، ويفحص الطرف المقابل، ويقيّم المعاملة

قام أحد العملاء بإجراء تغيير ما على حسابه

POST /api/v1/activities

يقوم النظام بجمع أدلة سلوكية من خصائص الجهاز، وعنوان IP، والموقع، والحدث، ثم يقوم بتقييمها.

تكامل قديم يرسل شكل الحدث الحر

POST /api/identity/events

التوافق فقط؛ لا يمكنه محاكاة الأطراف أو الأدوات الكاملة

نشاطtypeهي قائمة مغلقة:login،signup،password_reset،beneficiary_added،profile_change،device_change،payoutوwithdrawalتؤكد الوثائق بشكل قاطع أن تحويل الأموال مع إثبات المرسل والمستلم يتم عبر نقطة نهاية المعاملات، وليس عبر نقطة نهاية النشاط.payout.

أين يجب أن يكون موضع المكالمة في مسار العمل الخاص بك؟

بين تأكيد العميل والخطوة غير القابلة للتراجع. لنأخذ مثالاً توضيحياً لتحويل بنكي صادر في تطبيق محفظة إلكترونية:

  1. يؤكد العميل تحويل الأموال إلى مستفيد جديد.

  2. يقوم نظامك الخلفي بإرسال المعاملة وينتظر الرد.

  3. يقوم بتوجيه البياناتassessment.summary.outcome.

  4. حصرياً علىallowهل يقوم بتحويل الدفعة إلى سكة حديد البنك؟

حصيلة

ما يفعله نظامك الخلفي

allow

استمر. لا حاجة لأي إجراء من جانب المشغل.

review

أوقف الإجراء وأرسله إلى عملية المراجعة الخاصة بك.

block

أوقفوا الإجراء. احتفظوا بالقرار وأدلته للتحقيق.

يُعدّ تسجيل النقاط بعد دفع المبلغ بمثابة مراقبة، لا تزال ذات قيمة للتحقيقات، لكنها لا تمنع الخسارة. إذا كان القرار هو منع أي شيء، فيجب أن يتم ذلك أولاً. Toden يقوم بإرجاع قرار؛ فهو لا يحظر الحسابات في تطبيقك، لذا فإن البوابة هي التعليمات البرمجية الخاصة بك.

كيف يبدو الطلب الأول؟

تستخدم جميع استدعاءات تحليل المخاطر مفتاحًا سريًا من نظامك الخلفي:sk_test_ضدhttps://sandbox-api.toden.co/api/v1،sk_live_ضدhttps://api.toden.co/api/v1. Node.js الرسمي SDK يكون@myazahq/trust-sdk( ESM (خاص بـ Node.js 20 أو أحدث)، ويختار المضيف منenvironmentخيار. من دليل البدء السريع لمعلومات المخاطر (يفتح في علامة تبويب جديدة) :

import { Myaza } from '@myazahq/trust-sdk';

const myaza = new Myaza({
  apiKey: process.env.MYAZA_SECRET_KEY,
  environment: 'sandbox',
});

const assessment = await myaza.transactions.create({
  externalActivityId: 'activity_txn_10001',
  subject: { type: 'individual', externalUserId: 'user_42' },
  occurredAt: new Date().toISOString(),
  transaction: {
    externalTransactionId: 'txn_10001',
    assetClass: 'fiat',
    direction: 'outbound',
    amount: '48000.00',
    currency: 'NGN',
    transactionType: 'bank_transfer',
  },
}, { idempotencyKey: 'transaction-txn_10001' });

console.log(assessment.summary?.outcome, assessment.summary?.reason);

لاحظ أنamountهو سلسلة. API يأخذ سلسلة عشرية موجبة تصل إلى ثمانية منازل عشرية، لذلك لا يتم تقريب الأموال أبدًا من خلال رقم الفاصلة العائمة عند إدخالها.

هذا الطلب صحيح، ولكنه غير مكتمل، والقسم التالي يوضح سبب أهمية ذلك.

لماذا تُعدّ الأحزاب مهمة للغاية؟

لأن الفحص يعتمد عليهم. المعاملةdirectionدائماً ما يكون ذلك من وجهة نظر العميل، و Toden يقوم بفحص الجانب الآخر من الحركة قبل اتخاذ القرار:

التوجيه والأصول

تم عرض الحفل

ما الذي يتم عرضه

العملة الورقية الصادرة

متلقي

الاسم وإثبات الهوية المتاح

العملات الورقية الواردة

مرسل

الاسم وإثبات الهوية المتاح

العملات المشفرة الصادرة

متلقي

عنوان المحفظة والشبكة

العملات المشفرة الواردة

مرسل

عنوان المحفظة والشبكة

تُحفظ أرقام الحسابات المصرفية كدليل على العلاقة ولا تُستخدم لأغراض التدقيق. في حال عدم توفر الاسم أو رقم المحفظة المطلوب للتدقيق، يتم اتخاذ قرار مراجعة مع ذكر سبب عدم كفاية البيانات، بدلاً من اعتبار المعاملة واضحة.

هذا هو السلوك الصحيح، ويعني أن التكامل البسيط ينتج عنه قائمة انتظار مراجعة مزدحمة. أرسلpartiesمجموعة. يحتاج كل طرف إلىrole(sender،recipient،customerأوcounterparty)، مرجع واحد مستقر (externalUserId،entityIdأوexternalPartyId)، ولفحص العملات الورقية الخارجية أdisplayNameأرفق الحساب أو المحفظة التي استخدمها كل طرف كأداة:

{
  "role": "recipient",
  "externalPartyId": "beneficiary_998877",
  "type": "individual",
  "displayName": "Amina Bello",
  "country": "NG",
  "instruments": [
    {
      "type": "bank_account",
      "externalInstrumentId": "beneficiary_account_998877",
      "identifier": "9988776655",
      "institutionName": "Recipient Bank",
      "country": "NG",
      "currency": "NGN"
    }
  ]
}

الخام للآلة الموسيقيةidentifierيتم أخذ بصمة رقمية لمطابقة العلاقات ولا يتم تخزينها بصيغتها الخام. إذا كنت تفضل عدم إرسال الرقم الخام، فقم بتوفير رقمك الخاص.externalInstrumentIdأو موجودfingerprintبدلاً من.

كيف يمكنني إرسال تقرير عن نشاط الحساب؟

نفس الظرف بدونtransactionكتلة، بالإضافة إلىtypeتسجيل الدخول عبر HTTP :

curl -X POST "https://sandbox-api.toden.co/api/v1/activities" \
  -H "Authorization: Bearer $MYAZA_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "externalActivityId": "login_10001",
    "subject": { "type": "individual", "externalUserId": "user_42" },
    "type": "login",
    "occurredAt": "2026-08-16T09:30:00.000Z",
    "channel": "mobile_app",
    "deviceRef": "device_7f53",
    "ipAddress": "102.89.12.34",
    "country": "NG",
    "customAttributes": { "trustedDevice": false, "failedAttemptsBeforeSuccess": 2 }
  }'

يحمل حقلان معظم القيمة.deviceRefهو مرجع جهازك الثابت الخاص بك؛ إعادة استخدامه تبني تاريخ الجهاز وهو ما يجعل إشارة الجهاز الجديد تعني أي شيء.ipAddressيجب أن يكون عنوان المستخدم النهائي .API لا يستبدل عنوان IP الخاص بخادمك، لذلك إذا كان نظامك الخلفي يقوم بإعادة توجيه المكالمة، فقم بتمرير عنوان العميل الذي لاحظته، وليس عنوانك الخاص.

أرسل فقط الأدلة التي جمعتها بنفسك. يجب تقديم خطوط الطول والعرض معًا، ويبقى الموقع الذي تقدمه هو الموقع الأساسي بغض النظر عن أي معلومات مستنتجة من عنوان IP.

كيف ينبغي عليك قراءة الرد؟

يقرأassessment.summaryأولاً. إنه يحملoutcome،title،reason،score،riskLevel،matchedRulesوnextActionوهذا يكفي للتوجيه العادي. كما تتضمن الاستجابة نفسها قواعد المطابقة التفصيلية، وأدلة الفحص، وتفاصيل الفواتير عند إجراء أي تحقيق. المتجرdecisionIdوalertIdمقابل معاملتك الخاصة حتى يتمكن الموظف من العثور على الدليل لاحقًا.

استخدم قيم الجهاز (allow،review،block) في الكود واكتب نسختك الخاصة الموجهة للعميل، كما تنصح الوثائق، بدلاً من تمرير نص التقييم إلى العميل.

كيف تعيد المحاولة دون أن تُسجل هدفين؟

باستخدام معرّفات ثابتة:

  • واحدexternalActivityIdلكل تقييم منطقي، يتم الحفاظ على تطابقه عبر جميع المحاولات. تُعيد إعادة التشغيل التقييم الحالي معreplayed: trueولا يسجلها أو يفوتها مرة أخرى.

  • واحدexternalTransactionIdلكل معاملة عميل.

  • إعادة استخدام أي من المعرفين مع بيانات ثابتة مختلفة ينتج عنها409(idempotency_conflictأوtransaction_id_conflictهذا خطأ في نظام التعريف الخاص بك، وليس شيئًا يجب إعادة المحاولة.

  • أرسل النسخة الأصليةoccurredAtلا يمكن أن يكون ذلك بعد أكثر من خمس دقائق، و Toden يسجل كل من وقت الحدوث ووقت الاستلام، لذلك يظل الحدث المتأخر مرئيًا دون تشويه الجدول الزمني.

ماذا ينبغي أن يحدث عندما لا يتم التوصل إلى قرار؟

حدد هذا قبل الإطلاق، لأن السلوك الموثق هو الفشل عند الإغلاق. الأخطاء التي ستواجهها:

حالة

خطأ

ما يجب القيام به

400

invalid_request

أصلح البيانات المرسلة: الحقول المفقودة، المبلغ ليس سلسلة عشرية دقيقة، الموقع غير مكتمل.

402

insufficient_wallet

لا يغطي رصيد الإنتاج الخاص بك تكلفة التقييم. قم بزيادة الرصيد؛ لم يتم اتخاذ أي قرار بعد.

404

subject_not_foundأوparty_not_found

العميل أو الكيان المشار إليه غير موجود في هذه البيئة.

409

idempotency_conflictأوtransaction_id_conflict

تمت إعادة استخدام المعرّف لبيانات مختلفة. أصلح المشكلة، ولا تحاول مرة أخرى.

422

subject_type_not_supported

لا يمكن تقييم نوع الموضوع بموجب هذا العقد.

503

عطل في الخدمة

أعد المحاولة باستخدام نفس المعرفات وتراجع.

تُضيف وثائق الأخطاء (يفتح في علامة تبويب جديدة) نقطةً جديرةً بالتسجيل في دليل التشغيل الخاص بك: تفشل قرارات المعاملات والأنشطة عند عدم توفر الرصيد، ولا يُعدّ السجل المتأخر استجابةً للتفويض. إذا لم تتمكن من الحصول على قرار في الوقت المناسب، يحتاج منتجك إلى قاعدة خاصة به، على سبيل المثال، تعليق التحويلات الصادرة التي تتجاوز حدًا تحدده أنت حتى يصل القرار. دوّن هذه القاعدة؛ ولا تجعل مهلة الانتظار تُفعّل تلقائيًا.

هل ما زلت بحاجة إلى روابط الويب؟

بالنسبة للعمليات، نعم. اشترك فيfraud.transaction.assessedوfraud.activity.assessedلتلقي كل قرار، وscreening.match،risk.signal.createdوalert.createdلاتخاذ الإجراءات اللازمة بناءً على النتائج. تحقق من كل توقيع مقابل النص الأصلي، وقم بإزالة التكرارات باستخدام معرّف الحدث.event.flaggedيبقى هذا الخيار مجرد اسم بديل للتوافق مع قرارات عدم السماح. إذا كنت تستخدمPOST /api/identity/events، خطط للانتقال إلى نقاط النهاية v1: يمكن للشكل القديم تسجيل حدث بسيط ولكنه لا يستطيع حمل الحفلات المنظمة أو الآلات الموسيقية.

قائمة التحقق

  • مفتاح سري واستضافة معلومات المخاطر على الواجهة الخلفية فقط؛sk_test_مع مضيف Sandbox أثناء البناء.

  • يتم استدعاء المعاملات قبل تحويل الأموال؛ البوابة هي رمزك.

  • partiesمع ذكر الأسماء أو المحافظ للجانب المحمي من كل حركة.

  • عنوان IP الخاص بالمستخدم النهائي وعنوان IP الخاص بك الثابتdeviceRefبشأن الأنشطة.

  • مستقرexternalActivityIdوexternalTransactionId، إبداعيoccurredAt.

  • قاعدة مكتوبة لما يحدث عندما لا يتوفر قرار.

  • تم الاشتراك في Webhooks والتحقق منها وإزالة التكرارات.

تصف صفحة منتج مراقبة المعاملات القواعد وأدوات التحقيق التي تقف وراء هذه القرارات، ويربط مركز المطورين المراجع الكاملة.

المصادر

تشارلز أرشيبونغ

عن الكاتب

Charles Archibong

المؤسس المشارك

شارك تشارلز أرتشيبونغ في تأسيس شركة Toden. وهو يكتب عن التحقق من الهوية، والتكنولوجيا المالية، والعمل العملي لبناء خدمات رقمية موثوقة.

  • Risk & Compliance

    قواعد مراقبة المعاملات التي تحدد المخاطر بدلاً من الضوضاء

    تُصبح قاعدة المراقبة فعّالة عندما تُطابق مخاطر حقيقية تواجهها، وتُفعّل بناءً على بيانات تُرسلها فعلياً، وتُصدر تنبيهات يُمكن للمحلل إغلاقها بناءً على سبب وجيه. اضبط القواعد وفقاً للنتائج المُحددة، وليس بناءً على عدد التنبيهات فقط.

  • Product Updates

    الاستيلاء على الحساب: صعّد التحدي بدلاً من حظر العميل

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

ابنِ منتجك.وسنتولى الباقي.

الهوية والامتثال من البداية إلى النهاية، وفق معايير عالمية وبأسعار تناسب المؤسسين.

إرسال المعاملات والأحداث لتقييم المخاطر في الوقت الفعلي · Toden