Passer au contenu principal

Apercu

TransactionGuard fournit un scoring de transactions en temps reel pour prevenir la fraude au paiement. Scorez les transactions en moins de 50ms et obtenez des decisions instantanees d’approbation/revision/refus.

Demarrage Rapide

const score = await txcloud.transactions.score({
  amount: 5000,
  currency: 'MAD',
  type: 'p2p_transfer',

  sender: {
    user_id: 'usr_abc123',
    device_id: 'dev_xyz789',
    ip_address: '102.45.67.89'
  },

  recipient: {
    type: 'phone',
    value: '+212612345678',
    name: 'Mohammed El Amrani'
  }
});

console.log('Decision:', score.decision);  // 'approve'
console.log('Score de Risque:', score.risk_score);  // 180

Logique de Decision

TransactionGuard retourne l’une des quatre decisions :
DecisionPlage de ScoreAction
approve0-300Proceder avec la transaction
review301-600Mettre en file pour revision manuelle
challenge601-800Demander une authentification supplementaire
decline801-1000Bloquer la transaction
switch (score.decision) {
  case 'approve':
    await processPayment(transaction);
    break;

  case 'review':
    await queueForReview(transaction, score);
    // Peut encore traiter avec delai
    break;

  case 'challenge':
    await requestOTP(user);
    // Traiter apres verification OTP
    break;

  case 'decline':
    await blockTransaction(transaction);
    await notifyUser('Transaction refusee pour des raisons de securite');
    break;
}

Reponse de Score

{
  "id": "trs_a1b2c3d4e5f6",
  "created_at": "2025-01-15T10:30:00Z",
  "processing_time_ms": 45,

  "decision": "approve",
  "risk_score": 180,
  "risk_level": "low",

  "signals": {
    "positive": ["known_recipient", "normal_amount", "trusted_device"],
    "negative": [],
    "neutral": ["first_transfer_this_week"]
  },

  "checks": {
    "velocity": {
      "passed": true,
      "daily_count": 2,
      "daily_limit": 10
    },
    "amount": {
      "passed": true,
      "vs_average": 1.2
    },
    "recipient": {
      "passed": true,
      "is_known": true,
      "trust_level": "high"
    },
    "device": {
      "passed": true,
      "is_trusted": true
    }
  }
}

Types de Transaction

TypeDescription
p2p_transferTransfert de personne a personne
bill_paymentPaiement de facture/service public
merchant_paymentPaiement a un commercant
cash_withdrawalRetrait DAB/agent
bank_transferVirement bancaire
international_transferTransfert transfrontalier
mobile_topupRecharge mobile/airtime

Profils de Risque Utilisateur

TransactionGuard construit des profils de risque a partir de l’historique des transactions :
// Obtenir le profil de transaction de l'utilisateur
const profile = await txcloud.transactions.users.getProfile(userId);

console.log('Niveau de Confiance:', profile.trust_level);
console.log('Total Transactions:', profile.statistics.total_transactions);
console.log('Montant Moyen:', profile.statistics.average_amount);

// Le profil inclut les patterns
console.log('Plage Montant Typique:', profile.patterns.typical_amount_range);
console.log('Destinataires Typiques:', profile.patterns.typical_recipients);
console.log('Horaires Typiques:', profile.patterns.typical_times);

Reponse

{
  "user_id": "usr_abc123",
  "trust_level": "high",
  "trust_score": 850,

  "statistics": {
    "total_transactions": 156,
    "total_amount": 245000,
    "average_amount": 1571,
    "max_amount": 15000
  },

  "patterns": {
    "typical_amount_range": [500, 5000],
    "typical_recipients": 8,
    "typical_frequency": "weekly",
    "typical_channels": ["mobile_app"],
    "typical_times": ["09:00-18:00"]
  },

  "risk_factors": {
    "fraud_reports": 0,
    "disputes": 0,
    "chargebacks": 0
  }
}

Verification du Destinataire

Verifiez le risque du destinataire avant d’afficher la confirmation :
const recipientCheck = await txcloud.transactions.recipients.check({
  type: 'phone',
  value: '+212612345678',
  sender_user_id: userId
});

// Afficher un avertissement de risque si necessaire
if (recipientCheck.risk_level === 'high') {
  await showWarning('Ce destinataire a ete signale. Procedez avec prudence.');
}

// Afficher les infos de relation
if (recipientCheck.relationship.is_known) {
  console.log(`Vous avez envoye a ce destinataire ${recipientCheck.relationship.times_sent} fois`);
}

Regles Personnalisees

Creez des regles specifiques aux transactions :
// Transfert international de haute valeur
await txcloud.transactions.rules.create({
  name: 'International Haute Valeur',
  condition: "type = 'international_transfer' AND amount > 20000",
  action: 'review',
  score_adjustment: 300
});

// Nouveau destinataire gros montant
await txcloud.transactions.rules.create({
  name: 'Nouveau Destinataire Haute Valeur',
  condition: "recipient.times_sent = 0 AND amount > 5000",
  action: 'challenge',
  score_adjustment: 200
});

// Horaire inhabituel
await txcloud.transactions.rules.create({
  name: 'Nuit Haute Valeur',
  condition: "(time.hour >= 23 OR time.hour <= 5) AND amount > 5000",
  action: 'review',
  score_adjustment: 150
});

Boucle de Retour

Signalez les resultats des transactions pour ameliorer le scoring :
// Signaler une transaction completee
await txcloud.transactions.report({
  score_id: 'trs_a1b2c3d4e5f6',
  outcome: 'completed',
  fraud_reported: false
});

// Signaler une fraude
await txcloud.transactions.report({
  score_id: 'trs_xyz789',
  outcome: 'fraud_confirmed',
  fraud_reported: true,
  notes: 'Client a signale une transaction non autorisee'
});
Les retours reguliers ameliorent la precision du modele. Signalez tous les resultats, surtout les fraudes confirmees.

Analytics

Surveillez les patterns de transaction :
const analytics = await txcloud.transactions.analytics.summary({
  period: '30d'
});

console.log('Total Transactions:', analytics.volume.total_transactions);
console.log('Approuvees:', analytics.decisions.approved);
console.log('Refusees:', analytics.decisions.declined);
console.log('Taux de Fraude:', analytics.fraud.fraud_rate);

Exemple d’Integration

Flux de paiement complet avec TransactionGuard :
async function processPayment(userId, amount, recipientPhone) {
  // 1. Scorer la transaction
  const score = await txcloud.transactions.score({
    amount,
    currency: 'MAD',
    type: 'p2p_transfer',
    sender: { user_id: userId },
    recipient: { type: 'phone', value: recipientPhone }
  });

  // 2. Gerer la decision
  if (score.decision === 'decline') {
    throw new Error('Transaction refusee pour des raisons de securite');
  }

  if (score.decision === 'challenge') {
    // Demander OTP
    const otpVerified = await verifyOTP(userId);
    if (!otpVerified) {
      throw new Error('Verification OTP echouee');
    }
  }

  if (score.decision === 'review') {
    // Mettre en file pour revision mais permettre de continuer
    await queueForReview(score.id);
  }

  // 3. Traiter le paiement
  const payment = await executePayment(userId, amount, recipientPhone);

  // 4. Signaler le resultat
  await txcloud.transactions.report({
    score_id: score.id,
    outcome: 'completed'
  });

  return payment;
}

Bonnes Pratiques

Scorez les transactions avant d’afficher la confirmation pour detecter la fraude tot.
Plus vous fournissez de contexte, meilleur est le scoring :
  • ID d’appareil
  • Adresse IP
  • Infos de session
  • Contexte utilisateur
Implementez des flux appropries pour les quatre decisions (approuver, reviser, challenger, refuser).
Retournez les transactions completees ET les fraudes pour ameliorer le modele.

Prochaines Etapes