Partager via


Informations de référence sur la langue de fraude

Microsoft Dynamics 365 possède son propre langage riche et expressif pour vous aider à définir et à exprimer votre stratégie de lutte contre la fraude. Ce langage a de nombreuses similarités avec C# et SQL et est conçu pour vous donner la puissance et la flexibilité dont vous avez besoin pour répondre à la fraude dans le cadre de vos scénarios d’entreprise exclusifs.

Vous pouvez utiliser ce langage aujourd’hui pour définir des règles et des vitesses. Pour plus d’informations, consultez Gérer les règles et Effectuer des contrôles de vitesse.

Ce guide de référence sur le langage de fraude inclut la liste complète des opérateurs, fonctions et instructions qui composent la langue :

Relevés

Syntaxe de l’instruction Description Exemple
LET <VariableName> = <Expression>

Une instruction LET est utilisée pour définir une nouvelle variable. L’étendue de la variable est la règle ou le jeu de vitesse dans lequel la variable est définie. Les noms de variables doivent être précédés d’un signe dollar ($).

Pour plus d’informations, consultez Définition de vos propres variables.

Tout nombre présent dans les instructions LET peut être utilisé dans la section Condition et les clauses de tous les types de règle et ensembles de vitesse.

LET $fullName = @"user.firstName" + @"user.lastName"

OBSERVE

OBSERVE <ObservationFunction>(<KeyValuePairs>)
[ WHEN <BooleanExpression>

]

Une instruction OBSERVE ne met pas fin à l’exécution de la règle avec une décision. Elle enregistre simplement les paires clé-valeur soit dans la réponse de l’API, soit dans les journaux de suivi. Les règles et clauses de règles suivantes continuent de s’appliquer jusqu’à ce qu’une instruction RETURN est atteinte.

Une instruction OBSERVE doit être suivie d’une ou de plusieurs fonctions d’observation.

Si une clause WHEN est présente et évaluée sur False, l’instruction OBSERVE n’est pas enregistrée.

Un maximum d’un peut être utilisé pour chaque clause dans les règles suivantes :

  • Règles d’achat
  • Règles d’évaluation personnalisée
  • Règles de protection du compte

    OBSERVE Output(reason="high score")

    OBSERVE TRACE(ip=@"device.ipAddress ») WHEN Model.Risk(). Score > 400

    RETURN <DecisionFunction>
    [ ,<ObservationFunction>(<KeyValuePairs>) ]
    [ WHEN <BooleanExpression> ]

    Une instruction RETURN met fin à l’exécution de la règle avec une décision.

    L’instruction doit spécifier une fonction de décision valide : Approve(), Reject(), Challenge() ou Review().

    L’instruction peut également spécifier une ou plusieurs fonctions d’observation: Output() ou Trace()

    Enfin, l’instruction peut inclure une clause WHEN pour spécifier la condition dans laquelle il doit faire l’une des actions précédentes.

    Un maximum d’un peut être utilisé par clause dans les règles suivantes :

    • Règles d’achat
    • Règles d’évaluation personnalisée
    • Règles de protection du compte

      RETURN Review()
      WHEN IsWatch("Device Support List", @"deviceAttributes.deviceId") ||
      IsWatch("Payment Support List", @"paymentInstrumentList.merchantPaymentInstrumentId")

      RETURN Reject(), Trace(ip=@"device.ipAddress ») WHEN Model.Risk(). Score > 400

      ROUTETO QUEUE <QueueName>
      [ WHEN <BooleanExpression> ]

      La commande ROUTETO est utilisée dans les règles d’acheminement pour diriger les évaluations correspondantes vers les files d’attente de gestion des incidents.

      La clause facultative WHEN peut être utilisée pour décrire les conditions dans lesquelles la commande doit effectuer l’acheminement.

      Un maximum d’un peut être utilisé par clause dans les règles d’acheminement.

      ROUTETO Queue("High Value Queue")
      WHEN @"purchase.request.totalAmount"> 500
      SELECT <AggregationFunction>
      AS <VelocityName>
      FROM <AssesmentType>
      GROUPBY <GroupExpression>
      [ WHEN <BooleanExpression> ]

      Une instruction SELECT est utilisée dans les ensembles de vitesse pour définir une vitesse. Elle doit spécifier une fonction d’agrégation.

      La clause AS requise est utilisée pour créer un alias pour votre vitesse. Cet alias peut ensuite être référencé à partir de règles.

      La clause FROM requise est utilisée pour spécifier le type d’évaluation sur laquelle observer une vitesse. Les valeurs valides sont Purchase, AccountLogin, AccountCreation, Chargeback, BankEvent et CustomAssessment.

      La clause GROUPBY requise spécifie une propriété ou une expression. Tous les événements évalués à la même valeur dans l’instruction GROUPBY sont combinés pour calculer l’agrégation requise dans l’instruction SELECT.

      Par exemple, pour calculer une agrégation pour chaque utilisateur, utilisez GROUPBY @"user.userId".

      La clause facultative WHEN spécifie une expression booléenne qui détermine si l’évaluation en cours de traitement doit être incluse dans la vélocité en cours de définition.

      Un maximum d’un peut être utilisé par clause dans les ensembles de vitesse.

      SELECT Count() AS _Purchase_Rejections_Per_Email
      FROM Achats
      WHEN @"ruleEvaluation.decision" == "Reject"
      GROUPBY @"user.email"

      SELECT DistinctCount(@"purchaseId")
      AS _BankDeclines_Per_Device
      FROM BankEvent
      WHEN @"status" == "DECLINED"
      GROUPBY @"purchase.deviceContext.externalDeviceId"

      WHEN <BooleanExpression>

      L’instruction WHEN est similaire aux clauses WHEN dans les autres instructions, mais elle est seule dans la section Condition des règles et des ensembles de vitesse. Elle spécifie une condition booléenne qui détermine si l’ensemble de la règle, de l’ensemble de vitesse ou de la règle d’acheminement doit s’exécuter.

      Un maximum d’un peut être utilisé dans la section Condition de tous les types de règle et ensembles de vitesse.

      WHEN Model.Risk(). Score > 400
      Instruction DO <fonction d’action> Une instruction DO est utilisée pour effectuer une action à la fin de l’exécution de la règle. Cette instruction ne peut être utilisée que dans les actions post-décision DO SetResponse(name = @”firstname” + @”lastname”)

      Référencement d’attributs et de variables

      Vous pouvez utiliser l’opérateur arobase (@) pour référencer un attribut de l’événement en cours.

      Variable Description Exemple
      @

      Un symbole arobase (@) est utilisé pour référencer un attribut provenant de l’événement entrant. L’attribut peut être envoyé dans le cadre de la charge utile de la demande, ou Microsoft Dynamics 365 Fraud Protection peut le générer.

      Après le symbole arobase (@), spécifiez le chemin d’accès complet de l’attribut que vous souhaitez référencer. Mettez le chemin d’accès entre guillemets (par exemple,@"address.city").

      Si l’attribut référencé ne fait pas partie de la charge utile de l’événement, la valeur par défaut pour ce type est renvoyée : 0.0 pour les nombres doubles, une chaîne vide pour les chaînes, etc.

      Le type de l’attribut est déduit du contexte dans lequel l’attribut est utilisé. Si le contexte fourni n’est pas suffisant, le type Chaîne est utilisé par défaut.

      Pour plus d’informations sur l’inférence de type, consultez Inférence de type d’attributs.

      @"address.city"

      $ Un signe dollar ($) est utilisé pour référencer une variable définie dans une instruction LET . Pour plus d’informations, consultez Définition de vos propres variables. $fullName
      @a[x]

      Cette variable est utilisée pour indexer les variables de tableau.

      Si la charge utile de la demande pour une évaluation contient un tableau d’éléments, vous pouvez accéder aux éléments individuels du tableau à l’aide de la syntaxe suivante : @"productList[0]".

      Pour accéder à un attribut de cet élément, utilisez la syntaxe suivante : @"productList[0].productId"

      @"productList[0].productId"

      @"paymentInstrumentList[3].type"

      Existe

      Cet opérateur vérifie si une variable existe dans la charge utile de l’événement.

      Exists(Variable chaîne)

      Exists(@"user.email")
      Request.CorrelationId() Cette fonction fait référence à l’ID de corrélation unique pour l’événement en cours d’évaluation. Vous pouvez utiliser cette fonction pour accéder à l’ID de corrélation d’un événement dans l’expérience des règles et le transmettre à un appel externe en tant que paramètre ou en-tête. External.MyExternalCall(Request.CorrelationId())
      .GetDiagnostics() Cette fonction peut être utilisée pour découvrir des informations importantes de diagnostic et de débogage à partir d’un appel externe ou d’une réponse d’évaluation externe. Pour un appel externe, l’objet Diagnostics contient la charge utile de la demande, le point de terminaison, le code HttpStatus, le message d’erreur et la latence. Le point de terminaison n’est pas disponible dans l’objet Diagnostic pour une réponse d’évaluation externe. L’un de ces champs peut être utilisé dans les règles une fois l’objet Diagnostics créé à l’aide de sa méthode d’extension correspondante. GetDiagnostics()"

      LET $extResponse = Externe. myCall(@"device.ipAddress")

      LET $extResponseDiagnostics = $extResponse.GetDiagnostics()

      OBSERVE Output(Diagnostics = $extResponseDiagnostics )

      WHEN $extResponseDiagnostics. HttpStatusCode != 200

      Définition de vos propres variables

      Vous pouvez utiliser le mot clé LET pour définir une variable. Cette variable peut ensuite être référencée à d’autres endroits de la règle. Toutes les variables doivent être précédés d’un symbole dollar ($). Par exemple, vous pouvez déclarer la variable suivante.

      LET $fullName = @"user.firstName" + @"user.lastName"
      

      Les variables déclarées dans une instruction LET ne peuvent être utilisées que dans le cadre de l’ensemble de règles ou de vélocités dans lequel l’instruction est définie.

      Par exemple, pour référencer la variable de l’exemple précédent, vous pouvez écrire l’instruction suivante.

      WHEN $fullName == "Kayla Goderich"
      

      Remarque

      Une fois qu’une variable a été définie, elle ne peut pas être mise à jour avec une nouvelle valeur.

      Fonctions des variables globales

      Vous pouvez utiliser des fonctions variables globales pour définir et obtenir des variables dans des règles. Une fois les variables globales définies, elles sont accessibles dans une règle de décision, une vitesse, des règles de routage et des actions post-décision dans le même environnement ou dans les mêmes environnements enfants. La protection contre les fraudes de hiérarchie est répertoriée dans le tableau suivant. Par exemple, si vous définissez des variables globales dans une règle dans l’environnement racine, La protection contre les fraudes peut récupérer sa valeur dans une autre règle dans la même évaluation dans le même environnement ou dans tous les environnements enfants.

      Opérateur Description Exemple
      SetVariables(k=v) Cette fonction peut être utilisée pour définir des paires clé-valeur, c’est-à-dire définir des valeurs sur des variables. Do SetVariables(key= 123, email=@"user.email")
      GetVariable("k") Cette fonction peut être utilisée pour accéder aux variables déjà définies. Dans les cas où nous accédons aux variables qui ne sont jamais définies, une valeur par défaut est retournée.

      GetVariable("key").AsInt()

      GetVariable("email").AsString()

      GetVariable("key").AsDouble()

      GetVariable("key").AsBool()

      GetVariable("key").AsDateTime()

      GetVariable("key").AsJsonObject()

      GetVariable("key").AsJsonArray()

      Remarque

      Les variables globales sont spécifiques à une transaction unique pour une évaluation donnée. Un jeu de variables dans une transaction ne peut pas être récupéré à partir d’une autre transaction ou d’une autre évaluation.

      Fonctions de décision

      Les fonctions de décision sont utilisées dans les règles pour spécifier une décision.

      Type de décision Description Exemple
      Approve()

      Ce type spécifie une décision Approve (Approuver). Elle peut inclure un motif d’approbation et un autre message.

      Surcharges :

      • Approve(String reason)
      • Approve(String reason, String supportMessage)

      RETURN Approve()

      RETURN Approve("sur liste blanche")

      RETURN Approve ("sur liste blanche", "ne pas remonter")

      Reject()

      Ce type spécifie une décision Reject (Rejeter). Elle peut inclure un motif du rejet et un autre message.

      Surcharges :

      • Reject(String reason)
      • Reject(String reason, String supportMessage)

      RETURN Reject()

      RETURN Reject("pays sous embargo")

      RETURN Reject("pays sous embargo", "ne pas remonter")

      Review()

      Ce type spécifie une décision Review (Réviser). Elle peut inclure un motif de révision et un autre message.

      Surcharges :

      • Review(String reason)
      • Review(String reason, String supportMessage)

      RETURN Review()

      RETURN Review("utilisateur sur liste de surveillance")

      RETURN Review("utilisateur sur liste de surveillance", "ne pas remonter")

      Challenge(String challengeType)

      Ce type spécifie une décision Challenge (Contester) et un type de contestation. Elle peut inclure un motif de contestation et un autre message.

      Surcharges :

      • Challenge(String challengeType, String reason)
      • Challenge(String challengeType, String reason, String supportMessage)

      RETURN Challenge ("SMS")

      RETURN Challenge ("SMS", "bot suspecté")

      RETURN Challenge ("SMS", "bot suspecté", "ne pas remonter")

      Fonctions d’observation

      Les fonctions d’observation peuvent être utilisées pour prendre des données du contexte actuel et les écrire ailleurs.

      Type de retour Description Exemple
      Output(k=v) Cette fonction peut être utilisée pour passer des paires clé-valeur à la section CustomProperties de la réponse de l’API. La paire clé-valeur serait imbriquée dans un objet dont le nom serait identique au nom de la clause contenant l’instruction Output(). Output(key="test", email=@"user.email", countryRegion=Geo.CountryRegion(@"device.ipAddress"))
      Trace(k=v) Cette fonction peut être utilisée pour déclencher un événement Trace et envoyer des paires clé-valeur à l’espace de noms de traçage d’événements FraudProtection.Trace.Rule. Trace(key="Manual Review", ip=@"device.ipAddress")
      SetResponse(String sectionName, k=v) Cette fonction peut être utilisée pour passer des paires clé-valeur à la section CustomProperties de la réponse de l’API. La sectionName est un paramètre facultatif qui peut être ignoré. Cette fonction ne peut être utilisée que dans les actions post-décision ; elle n’est pas disponible dans la règle de décision

      SetResponse(« Scores », bot = Model.Bot(@deviceContextId), risk=Model.Risk())

      SetResponse(test=”123”)

      Réponse. Décision() Cette fonction fait référence à la décision pour l’évaluation en cours d’évaluation. Response.Decision() == « Approuver »

      Fonction d’agrégation

      Fonction Description Exemple :
      Count() Cette fonction renvoie le nombre de fois qu’un événement s’est produit. SELECT Count() AS numPurchases
      DistinctCount(String clé) Cette fonction renvoie le nombre de valeurs distinctes pour la propriété spécifiée. Si la propriété spécifiée est null ou vide pour un événement entrant, l’événement ne contribue pas à l’agrégation. SELECT DistinctCount(@"device.ipAddress") AS distinctIPs
      Sum(Double value) Cette fonction renvoie la somme des valeurs pour une propriété numérique spécifiée. SELECT Sum(@"totalAmount") AS totalSpending

      Opérateurs logiques

      Opérateur Description Exemple
      and (&&) And logique

      Model.Risk(). Score > 500 &&& Model.Risk(). Score < 800

      Model.Risk(). Score > 500 et Model.Risk(). Score < 800

      ou (||) Or logique

      @"email.isEmailUsername" == false || @"email.isEmailValidated" == false

      @"email.isEmailUsername" == false ou @"email.isEmailValidated" == false

      not Négation logique @"email.isEmailUsername" not(!) @"email.isEmailUsername"

      Opérateurs de comparaison

      Fraud Protection prend en charge toutes les opérations de comparaison et d’égalité C# standard. Ce tableau comprend quelques exemples d’opérateurs que vous pourriez trouver utiles. Si vous appliquez ces opérateurs à des chaînes, cela entraîne des comparaisons lexicographiques.

      Opérateur Description Exemple
      == Cet opérateur vérifie l’égalité. @"user.countryRegion" == @"shippingAddress.countryRegion"
      != Cet opérateur vérifie l’inégalité. @"user.countryRegion" != @"shippingAddress.countryRegion"
      > Cet opérateur vérifie si la première valeur est supérieure à la deuxième valeur. Model.Risk(). Score > 500
      < Cet opérateur vérifie si la première valeur est inférieure à la deuxième valeur. Model.Risk(). Score < 500
      >= Cet opérateur vérifie si la première valeur est supérieure ou égale à la deuxième valeur. Model.Risk(). Score >= 500
      <= Cet opérateur vérifie si la première valeur est inférieure ou égale à la deuxième valeur. Model.Risk(). Score <= 500
      X ? Y : Z Cet opérateur vérifie si la condition X est vraie ou non. S’il est vrai, l’instruction Y est exécutée et son résultat est retourné. Sinon, l’instruction Z est exécutée et son résultat est retourné. Plusieurs vérifications logiques peuvent également être combinées à l’aide de crochets pour définir une logique IF <> THEN <> ELSE <> imbriquée LET $riskbucket = Model.Risk(). Score > 500 ? « High » : (Model.Risk(). Score > 300 ? « Medium » : « Low »)

      Fonctions mathématiques

      Fraud Protection prend en charge toutes les méthodes mathématiques et tous les opérateurs arithmétiques C# standard. Ce tableau comprend quelques exemples de méthodes que vous pourriez trouver utiles.

      Opérateur Description Exemple
      Math.Min(Double valeur1, Double valeur2) Cet opérateur calcule le minimum de deux valeurs. Math.Min(Model.Risk(). Score, Model.Bot(@"deviceFingerprinting.id »). Score)
      Math.Max(Double valeur1, Double valeur2) Cet opérateur calcule le maximum de deux valeurs. Math.Max(Model.Risk(). Score, Model.Bot(@"deviceFingerprinting.id »). Score)
      RandomInt(Integer min, Integer max) Cet opérateur renvoie un entier aléatoire dans la plage fournie, incluant la valeur minimale et excluant la valeur maximale. RandomInt(0, 100)

      Opérateurs DateTime

      Fraud Protection prend en charge tous les propriétés, méthodes et opérateurs DateHeure C# standard. Ce tableau comprend quelques exemples de fonctions et de propriétés que vous pourriez trouver utiles.

      Opérateur Description Exemple
      UtcNow Cet opérateur obtient un objet DateTime qui est défini sur la date et l’heure actuelles sur l’ordinateur, exprimées en temps universel coordonné (UTC). DateTime.UtcNow
      Aujourd’hui Cet opérateur obtient un objet qui est défini sur la date actuelle, où le composant d’heure est défini sur 00:00:00. DateTime.Today
      Soustraire Cet opérateur retourne une nouvelle DateTime en soustrayant une date et une heure spécifiées à partir d’une date et d’une heure d’entrée. DateTime.UtcNow.Soustraction(@var1. ToDateTime())
      DaysSince(DateTime date) Cet opérateur renvoie un entier qui représente le nombre de jours qui se sont écoulés entre la valeur DateTime et la date actuelle (exprimée en temps universel coordonné [UTC]). DaysSince(@"user.CreationDate")
      Year Cet opérateur obtient la composante année de la date représentée par cette instance. @"user.creationDate".Year
      Date Cet opérateur obtient un nouvel objet qui a la même date que cette instance, mais dont la valeur d’heure est définie sur 00:00:00 (minuit). @"user.creationDate".Date

      Opérateurs de transtypage du type

      Pour plus d’informations sur l’inférence de type, consultez la section Inférence de type d’attributs plus loin dans cet article.

      Opérateur Description Exemple
      Convert.ToDateTime

      Cet opérateur convertit la chaîne en DateHeure et convertit DateHeure en chaîne en utilisant le format donné.

      Convert.ToDateTime(@"user.creationDate").ToString("yyyy-MM-dd")
      Convert.ToInt32

      Cet opérateur convertit la valeur spécifiée en Int32.

      Convert.ToInt32(@var)
      Convert.ToDouble

      Cet opérateur convertit la valeur spécifiée en Double.

      Convert.ToDouble(@var)

      Fonctions de chaîne

      Fraud Protection prend en charge la classe de chaîne C# standard. Ce tableau comprend quelques exemples de fonctions et d’opérateurs que vous pourriez trouver utiles.

      Opérateur Description Exemple
      StartsWith() Cet opérateur vérifie si une chaîne commence par un préfixe spécifié. @"user.phoneNumber".StartsWith("1-")
      EndsWith() Cet opérateur vérifie si une chaîne se termine par un suffixe spécifié. @"user.email".EndsWith("@contoso.com")
      IsNumeric() Cet opérateur vérifie si une chaîne contient une valeur numérique. @"user.email".IsNumeric()
      Longueur

      Cet opérateur renvoie le nombre de caractères dans la chaîne.

      @"user.username".Length
      ToDateTime() Cet opérateur convertit une chaîne en objet DateTime. @"user.creationDate".ToDateTime()
      ToDouble() Cet opérateur convertit une chaîne en valeur Double. @"productList.purchasePrice".ToDouble()
      ToInt32() Cet opérateur convertit une chaîne en valeur Int32. @"zipcode".ToInt32()
      ToUpper() Cet opérateur retourne une copie de cette chaîne convertie en majuscules. @"user.username". ToUpper()
      ToLower() Cet opérateur retourne une copie de cette chaîne convertie en minuscules. @"user.username". ToLower()
      IndexOf() Cet opérateur signale l’index de base zéro de la première occurrence d’une sous-chaîne donnée dans la chaîne spécifiée. @"user.username". IndexOf(« @ »)
      LastIndexOf() Cet opérateur signale l’index de base zéro de la dernière occurrence d’une sous-chaîne donnée dans la chaîne spécifiée. @"user.username". LastIndexOf(« @ »)
      Sous-chaîne() Cet opérateur retourne une sous-chaîne à partir d’un index de base zéro dans une chaîne, avec un deuxième paramètre facultatif spécifiant la longueur de la sous-chaîne souhaitée @"user.username". Sous-chaîne(0,5)
      IsNullOrEmpty() Cet opérateur retourne si la chaîne spécifiée est null ou vide. Sinon, retourne false. @"user.username". IsNullOrEmpty()
      IgnoreCaseEquals() Cet opérateur retourne true si les deux chaînes sont égales, quelles que soient les différences de casse. Sinon, retourne false. @"user.username". IgnoreCaseEquals(@"user.email »)
      Contains() Cet opérateur vérifie si une chaîne contient une autre chaîne. @"productList.productName".Contains("Xbox")
      ContainsOnly() Cet opérateur vérifie si une chaîne contient uniquement les jeux de caractères fournis. @"zipcode".ContainsOnly(CharSet.Numeric)
      ContainsAll() Cet opérateur vérifie si une chaîne contient tous les jeux de caractères fournis. @"zipcode ». ContainsAll(CharSet.Numeric|CharSet.Hyphen)
      ContainsAny() Cet opérateur vérifie si une chaîne contient un des jeux de caractères fournis. @"zipcode ». ContainsAny(CharSet.Numeric|CharSet.Hyphen)

      Avec un jeu de caractères dans ContainsOnly, ContainsAll et ContainsAny

      Les types de caractères suivants peuvent être utilisés dans ContainsOnly, ContainsAll et ContainsAny.

      Type de caractère Description
      Alphabétique a-z, A-Z
      Apostrophe '
      Asperand @
      Barre oblique inverse \
      Virgule ,
      Hyphen -
      Numérique 0–9
      Période .
      Barre oblique /
      Trait de soulignement _
      WhiteSpace Seul espace

      Fonctions de détection du charabia

      Ces fonctions aident à prévenir les fraudes en détectant rapidement et efficacement si les champs d’entrée utilisateur clés (tels que les noms et adresses) contiennent du gibberish.

      Fonction Description Exemple
      GetPattern(String).maxConsonants Nombre maximal de consonnes contiguës dans une chaîne qui ne sont pas séparées par une voyelle. Par exemple, maxConsonants pour la chaîne « 01gggyturah » est 5. GetPattern(@"user.email").maxConsonants
      GetPattern(String).gibberScore Score basé sur ML entre 0 et 1 ; 0 signifie le plus susceptible d’être du charabia et 1 signifie le moins susceptible d’être du charabia. GetPattern(@"user.email").gibberScore

      Remarque

      Le modèle de détection du charabia est basé sur la fréquence de deux caractères alphanumériques consécutifs dans des documents anglais accessibles au public. On suppose que plus deux caractères alphanumériques consécutifs apparaissent fréquemment dans les documents publics, moins ils sont susceptibles d’être du charabia. Le modèle doit fournir des scores raisonnables pour les textes anglais et peut être utilisé pour détecter si les noms ou adresses contiennent du charabia. Cependant, le modèle peut ne pas convenir aux abréviations, telles que les formes abrégées pour les États (AZ, TX, etc.), et il ne peut pas non plus être utilisé pour valider des noms ou des adresses. Enfin, le modèle n’a pas été testé pour des textes non anglais.

      Fonctions de détection de modèle

      Ces fonctions aident à prévenir les fraudes en détectant rapidement et efficacement si les champs d’entrée utilisateur clés (tels que les noms et adresses) contiennent du gibberish.

      Fonction Description Exemple
      Patterns.IsRegexMatch(string pattern, string source) Effectue une correspondance d’expression régulière (regex) de modèle de chaîne par rapport à une source de chaîne. Le résultat est une valeur booléenne, c’est-à-dire true (indiquant que la chaîne donnée correspond au modèle) ou false (indiquant qu’aucune correspondance n’est indiquée) Patterns.IsRegexMatch("^.com$ », @ « user.email ») Patterns.IsRegexMatch( « ^.[aAeEiIoOuU]+.*$ », @ « user.firstname »)

      Remarque

      • Le modèle de chaîne doit être une entrée constante.
      • La fonction retourne false (résultat par défaut) si le temps d’évaluation dépasse 10 millisecondes.
      • Toutes les limitations qui ne prennent pas en charge nonBacktracking s’appliquent également à la fonction IsRegexMatch.

      Fonctions de modèle

      Les fonctions de modèle exécutent les différents modèles de fraude et sont utiles lorsque votre évaluation n’exécute pas automatiquement un ou plusieurs modèles de fraude. Lorsque les fonctions du modèle s’exécutent, les informations sur le modèle en cours d’exécution pendant l’évaluation de la règle sont générées dans l’appel d’API d’évaluation de la fraude. Puis la règle a accès au résultat du modèle, y compris le score, les raisons, etc., qui peut être utilisé pour le traitement ultérieur des règles et la prise de décision.

      Type de modèle Description Exemple
      Risque Évalue la probabilité qu’une session soit risquée. Model.Risk()
      Bot Évalue la probabilité qu’une session soit initiée par un bot. Transmettez un ID de contexte de l’appareil qui a été envoyé à la solution d’empreintes digitales de l’appareil de Fraud Protection. Model.Bot(@deviceContextId)

      Fonctions géographiques

      Les fonctions géographiques fournissent une résolution en convertissant une adresse IP en adresse géographique. Les fonctions géographiques peuvent être appelées dans les règles uniquement à l’aide d’adresses IP faisant partie de la charge utile de la transaction ou collectées par Fraud Protection à l’aide de la prise d’empreinte numérique des appareils. Les fonctions géographiques ne peuvent pas être appelées pour des valeurs IP arbitraires.

      Opérateur Description Exemple
      Geo.RegionCode(String ip)

      Cet opérateur convertit une adresse IPv4 en son code de région américain (c’est-à-dire l’abréviation du nom de l’État ou du territoire américain).

      Par exemple, pour une adresse IP dans l’État de Washington, "WA" est renvoyé.

      Geo.RegionCode(@"device.ipAddress")
      Geo.Region(String ip)

      Cet opérateur convertit une adresse IPv4 en sa région américaine (c’est-à-dire le nom de l’État ou du territoire américain).

      Par exemple, pour une adresse IP dans l’État de Washington, "Washington" est renvoyé.

      Geo.Region(@"device.ipAddress")
      Geo.CountryCode(String ip)

      Cet opérateur convertit une adresse IPv4 en son code de pays/région.

      Par exemple, pour une adresse IP en Australie, "AU" est renvoyé.

      Geo.CountryCode(@"device.ipAddress")
      Geo.CountryRegion(String ip)

      Cet opérateur convertit une adresse IP en un nom de région.

      Par exemple, pour une adresse IP en Australie, "Australie" est renvoyé.

      Geo.CountryRegion(@"device.ipAddress")
      Geo.City(String ip)

      Cet opérateur convertit une adresse IPv4 en un nom de ville.

      Par exemple, pour une adresse IP à New York, "New York City" est renvoyée.

      Geo.City(@"device.ipAddress")
      Geo.MarketCode(String ip)

      Cet opérateur convertit une adresse IPv4 en code de marché de l’adresse IP.

      Par exemple, pour une adresse IP du Canada, "NA" (Amérique du Nord) est renvoyé.

      Geo.MarketCode(@"device.ipAddress")

      Fonctions d’attribut d’appareil

      Opérateur Description Exemple
      Device.GetFullAttributes(String sessionId) Retourne un ensemble complet d’attributs d’appareil pour la session d’empreintes digitales de l’appareil spécifiée. Consultez Configurer l’empreinte digitale de l’appareil pour afficher l’ensemble complet d’attributs de l’appareil Device.GetFullAttributes(@"deviceFingerprinting.id »)
      Device.GetAttributes(String sessionId) Retourne un sous-ensemble plus petit d’attributs d’appareil pour la session d’empreintes digitales de l’appareil spécifiée. Le sous-ensemble est une liste organisée par Fraud Protection et contient les attributs les plus couramment utilisés. Device.GetAttributes(@"deviceFingerprinting.id »)
      Device.GetSelectedAttributes(String sessionId, String attributeName) Retourne jusqu’à 20 attributs d’appareil pour la session d’empreintes digitales de l’appareil spécifiée. La liste des attributs souhaités doit être spécifiée en tant que paramètres séparés par des virgules Device.GetSelectedAttributes(@"deviceFingerprinting.id », « deviceAsn »,"deviceCountryCode »)
      Device.GetSpeedOf Travel(String sessionId) Retourne la vitesse maximale de déplacement d’un appareil en miles par heure. La protection contre les fraudes détermine la vitesse maximale en prenant les cinq dernières sessions d’empreintes digitales consécutives et en calculant la vitesse de l’appareil de la session à la session, en retournant le maximum. L’appareil est identifié sur les sessions à l’aide de l’ID de cookie. Device.GetSpeedOfTravel(@"deviceFingerprinting.id »)

      Fonctions de recherche BIN

      Les fonctions de recherche BIN fournissent des informations de compte de carte de paiement (par exemple, réseau de carte, type de carte, code de pays de carte, catégorie de carte) en fonction du numéro d’identification bancaire (BIN). Les données de recherche BIN proviennent des principaux fournisseurs de données BIN tiers, puis organisées par la protection contre les fraudes.

      Opérateur Description Exemple
      BIN.Lookup(String BIN).cardNetwork

      Cette fonction recherche bin et retourne le réseau de cartes (par exemple, Visa, Kanban).

      BIN.Lookup (@"card.bin").cardNetwork
      BIN.Lookup(String BIN).cardType

      Cet opérateur recherche le BIN et renvoie le type de carte (par exemple, Débit, Crédit).

      BIN.Lookup(@"card.bin").cardType
      BIN.Lookup(String BIN).issuer

      Cet opérateur recherche le BIN et renvoie l’organisation émettrice.

      BIN.Lookup(@"card.bin").issuer
      BIN.Lookup(String BIN).countryCode

      Cet opérateur recherche le BIN et renvoie le code de pays ISO à deux lettres de la carte.

      BIN.Lookup(@"card.bin").countryCode
      POUBELLE. Lookup(String BIN).cardCategory

      Cet opérateur recherche bin et retourne la catégorie de carte (par exemple, Prépayé, Entreprise, Récompenses).

      POUBELLE. Lookup(@"card.bin »).cardCategory
      BIN.Lookup(String BIN).error

      Cet opérateur recherche BIN et retourne un message d’erreur si le fichier BIN n’a pas pu être trouvé.

      BIN.Lookup(@"card.bin").error

      Fonctions de liste

      Fraud Protection vous permet de charger des listes personnalisées et de les référencer dans le langage. Pour plus d’informations sur la façon de charger ces listes, consultez Gérer les listes. Pour plus d’informations sur l’utilisation de listes dans les règles, consultez la section Utilisation de listes dans les règles plus loin dans cet article.

      Opérateur Description Exemple
      ContainsKey(
      String listName,
      String columnName,
      String clé)
      Cet opérateur vérifie si une clé est contenue dans la colonne spécifiée dans une liste Fraud Protection.

      L’exemple de la colonne suivante vérifie si la colonne « E-mails » de la liste « Liste de support par e-mail » contient la variable @«user.email ».

      ContainsKey("Email Support List", "Emails", @"user.email")
      Lookup(
      String listName,
      String keyColName,
      String valueColName)
      Cet opérateur recherche la valeur d’une clé dans une colonne de liste Fraud Protection. Le nom de la colonne qui contient la clé et le nom de la colonne qui contient la valeur doivent être spécifiés.

      La valeur est toujours renvoyée sous forme de chaîne. Si la clé n’est pas trouvée, et si le paramètre defaultValue n’est pas spécifié, « Unknown » est retourné.

      L’exemple de la colonne suivante recherche la valeur de la variable @"user.email » dans la colonne e-mails de la liste de la liste de support électronique. Si une correspondance est trouvée, la fonction retourne la valeur de la colonne Status à partir de la ligne correspondante de la liste. Si aucune correspondance n’est trouvée, la fonction retourne 0.

      Lookup("Email Support List", "Emails", @"user.email", "Status",0)
      Dans Cet opérateur vérifie si une clé est contenue dans une liste de valeurs séparées par des virgules. In(@"user.countryRegion", "US, MX, CA")
      InSupportList Cet opérateur vérifie si un attribut se trouve dans une liste de support. InSupportList('Email Support List', @"user.email")
      IsSafe Cet opérateur vérifie si une entité est marquée comme sécurisée dans une liste de support. IsSafe('Email Support List', @"user.email")
      IsBlock Cet opérateur vérifie si une entité est marquée en tant que bloc dans une liste de support. IsBlock('Email Support List', @"user.email")
      IsWatch Cet opérateur vérifie si une entité est marquée comme Espion dans une liste de support. IsWatch('Email Support List', @"user.email")

      Utilisation de listes dans les règles

      Vous pouvez utiliser les opérateurs ContainsKey et Lookup pour référencer des listes que vous avez chargées dans Fraud Protection. Pour plus d’informations sur l’utilisation des listes, voir Gérer les listes.

      ContainsKey

      Pour vérifier si l’une de vos listes contient une valeur spécifique, utilisez l’opérateur ContainsKey. Spécifiez le nom de la liste, la colonne et la clé que vous souhaitez chercher.

      Par exemple, vous chargez une liste à une seule colonne d’adresses e-mail risquées et vous la nommez Liste de diffusion risquée.

      E-mail
      Kayla@contoso.com
      Jamie@bellowscollege.com
      Marie@atatum.com

      Vous pouvez ensuite utiliser la syntaxe suivante pour rejeter toutes les transactions des adresses e-mail à risque de cette liste.

      RETURN Reject("risky email") 
      WHEN ContainsKey("Risky email list", "Email", @"user.email")
      

      Cette clause vérifie si la colonne "Email" de la liste "Liste des adresses e-mail à risque" contient la clé @email. Si c’est le cas, la transaction est rejetée.

      Recherche

      Pour les listes à plusieurs colonnes, vous pouvez utiliser l’opérateur Lookup pour vérifier la valeur d’une colonne pour une clé spécifique.

      Par exemple, vous créez une liste qui comporte une colonne pour les adresses électroniques et une autre colonne qui indique le statut de ces adresses électroniques. Vous nommez cette liste Liste de courrier électronique.

      E-mail Statut
      Kayla@contoso.com Risqué
      Jamie@bellowscollege.com Risqué
      Marie@atatum.com Risqué
      Camille@fabrikam.com Coffre-fort
      Miguel@proseware.com Coffre-fort
      Tyler@contoso.com Coffre-fort

      Vous pouvez ensuite utiliser la syntaxe suivante pour rejeter toutes les transactions des adresses e-mail de cette liste avec un statut de Risqué.

      RETURN Reject("risky email") 
      WHEN Lookup("Email List", "Email", @"user.email", "Status") == "Risky"
      

      Cette clause recherche la clé @"user.email" dans la colonne "Email" de la liste "Liste d’adresses e-mail" et vérifiez si la valeur de la colonne "Statut" est Risqué. Si c’est le cas, la transaction est rejetée.

      Si la clé @"user.email" ne figure pas dans la liste, Fraud Protection renvoie "Unknown."

      Vous pouvez également spécifier votre propre valeur par défaut comme cinquième paramètre. Pour plus d’informations, voir la section Opérateurs logiques plus haut dans cet article.

      L’opérateur Lookup renvoie toujours une valeur de Chaîne. Pour convertir cette valeur en valeur Int, Double, ou DateTime, utilisez un opérateur de transtypage du type.

      Utilisation des appels externes, des évaluations externes et des vitesses

      Inférence de type des attributs

      Les types de variables sont déduits du contexte dans lequel ils sont utilisés. Voici quelques exemples :

      • Dans l’expression WHEN @isEmailValidated, la variable est interprétée comme une valeur Booléenne.
      • Dans l’expression Model.Risk(). Score > 500, la variable est interprétée comme une valeur double .
      • Dans l’expression @"user.creationDate".Year < DateTime.UtcNow.Year, la variable est interprétée comme une valeur DateTime.

      S’il n’y a pas assez de contexte pour déduire le type d’une variable, il est considéré comme une valeur Chaîne. Par exemple, dans l’expression Model.Risk(). Noter < Model.Bot(@"deviceFingerprinting.id »). Score, les deux variables sont interprétées comme des chaînes.

      Pour spécifier le type d’une variable non-chaîne, utilisez un opérateur de cast de type.

      Tableaux et objets JSON

      FQL prend en charge la construction d’objets structurés complexes en tant que variables locales, qui peuvent être transmises à l’appel externe ou à l’évaluation externe sous forme JSON. Comme avec tous les autres paramètres locaux dans FQL, les tableaux et les objets sont immuables une fois créés.

      Tableaux JSON

      Les tableaux sont créés en entourant les expressions d’une paire de crochets :

      LET $arr1 = [ "hello", "world" ]
      LET $arr2 = [
        "this is also an array",
        78.4,
        $arr1,
        @"user.email",
        External.MyExtcall()
      ]
      

      Objets JSON

      Les objets sont créés avec des accolades :

      LET $obj1 = { isObject: true }
      LET $obj2 = {
        numberField: 7,
        fieldIs: "string",
        internalObj: $obj1,
        inline: {
          innerInnerField: "hello"
        }
      }
      

      Fonctions FQL pour les tableaux et objets JSON

      Syntaxe Description Exemple
      myArr[0] Vous pouvez utiliser cette syntaxe pour accéder à un élément de tableau spécifique par son index. myArr [0].property
      myArr [0][0]
      myArr [0][0].property
      myArr [0].property[0]
      myArr [0].property[0].property[0].property[0].property

      myArr, dans les exemples ci-dessus, est un tableau. La source de ce tableau peut être la @@payloadProperty, la réponse d’évaluation externe, la réponse d’appel externe, la variable locale ou une variable globale.

      Voici des exemples d’utilisation de la syntaxe basée sur différentes sources de tableau :

      • Source de tableau : Charge utile
      LET $sample = @@"myArr[0]".AsJsonArray()   
      RETURN Approve()   
      WHEN $sample[0].AsString() == "a"
      
      • Source de tableau : variable locale
        LET $group1 =["a", "b", "c"]
        LET $group1 =[{ item1: "a", item2: "b"}, { item1: "c", item2: "d"}]
        LET $group3 =[{ item1: "a", item2: "b", item3: ["c", "d"]}, {{ item1: "e", item2: "f", item3: ["g", "h"]}]
        RETURN Approve()
        WHEN $group1[0].AsString() == "a" && $group1[0].item2.AsString() == "b" && $group3[0].item3[0].AsString() == "c" 
        
      Syntaxe Description Exemple
      Array.GetValue (TargetArray . AsJsonArray(), matchKey, matchValue, lookupKey) Avec cette fonction, vous pouvez accéder au premier élément de tableau qui correspond à une condition.

      Retourne une valeur

      Array.GetValue(@@"payloadProperty ». AsJsonArray(), matchKey, matchValue, lookupKey)
      Array.GetValues(TargetArray . AsJsonArray(), matchKey, matchValue) Avec cette fonction, vous pouvez accéder à un ensemble d’éléments de tableau qui correspondent à une condition.

      Retourne un tableau

      Array.GetValues(@@"payloadProperty ». AsJsonArray(), matchKey, matchValue)

      Voici quelques exemples plus détaillés de l’utilisation de la syntaxe ci-dessus en fonction de différentes sources de tableau :

      Source de tableau Array.GetValue Array.GetValues
      Évaluations externes LET $a = Assessments.myAssessment.evaluate()
      LET $sample = Array.GetValue($a.ruleEvaluations.AsJsonArray(), « rule », « Sample Payload Generation », « clauseNames »)
      RETURN Approve()
      WHEN $sample[0]. AsString() == « TestData »
      LET $a = Assessments.myAssessment.evaluate()
      LET $sample = Array.GetValues($a.ruleEvaluations.AsJsonArray(), « rule », « Sample Payload Generation »)
      RETURN Approve()
      WHEN $sample[0].clauseNames[0]. AsString() == « TestData »
      Charge utile Exemple de charge utile : {"group » :[{"item1 » : « a », « item2 » : « a1"}, {"item1 » : « b », « item2 » : « b1"}]}

      LET $sample = Array.GetValue(@@"group ». AsJsonArray(), « item1 », « a », « item2 »)
      RETURN Approve()WHEN $sample. AsString() == « a1 »
      Exemple de charge utile : { « group » :[{"item1 » : « a », « item2 » : « a1"}, {"item1 » : « b », « item2 » : « b1"}]}

      LET $sample = Array.GetValues(@@"group ». AsJsonArray(), « item1 », « a »)
      RETURN Approve()

      WHEN $sample[0].item2. AsString() == « a1 »

      Variables globales Utilisation de l’exemple de charge utile ci-dessus

      Do SetVariables(Var=@@"group »)
      LET $group = GetVariable(« Var »). AsJsonObject()
      LET $value = Array.GetValue($group, « item1 », « a », « item2 »)
      RETURN Approve()
      WHEN $value. AsString() == « a1 »
      Utilisation de l’exemple de charge utile ci-dessus

      Do SetVariables(Var=@@"group »)
      LET $group = GetVariable(« Var »). AsJsonObject()
      LET $arr = Array.GetValues($group. AsJsonArray(), « item1 », « a »)
      RETURN Approve()
      Appel externe

      Réponse de l’appel externe (myCall) : {"group » :[{"item1 » : « a », « item2 » : « a1"}, {"item1 » : « b », « item2 » : « b1"}]}

      LET $x = External.myCall(). AsJsonObject()
      LET $value = Array.GetValue($x.group[0]. AsJsonObject(), « item1 », « a », « item2 »)
      RETURN Approve()
      WHEN $value. AsString() == « a1 »

      Réponse de l’appel externe (myCall) : {"group » :[{"item1 » : « a », « item2 » : « a1"}, {"item1 » : « b », « item2 » : « b1"}]}

      LET $x = External.myCall(). AsJsonObject()
      LET $arr = Array.GetValues($x.group[0]. AsJsonObject(), « item1 », « a »)
      RETURN Approve()WHEN $arr[0].item2. AsString() == « a1 »

      Cast de types pour les tableaux et objets JSON

      • Les éléments suivants . Comme<Type>() sont pris en charge à partir du JsonObject :

        • AsString()
        • AsInt()
        • AsDouble()
        • AsDateTime()
        • AsBool()
        • AsJsonArray()
        • AsJsonObject()
      • Lorsque vous utilisez l’une des deux méthodes d’assistance de tableau, Array.GetValue ou Arrays.GetValues, vous devez taper un cast à l’aide de . En tant que<type>(). Exemple :

        LET $arr = {myArr:[{item1: "red", number: 45}, {item1: "blue", number: 56}, {item1: "green", number: 33}]}
        LET $sample = Array.GetValues($arr.myArr.AsJsonArray(), "item1", "blue")
        
      • Une fois que vous avez converti des données en objet OU tableau JSON explicitement, vous pouvez utiliser . En tant que<Type>() pour effectuer un cast vers un autre type de données, si nécessaire. Exemple :

        RETURN Approve()
        WHEN $sample[0].number.AsInt() == 56
        
      • Lorsque vous utilisez @@, les données sont implicitement castées en objet JSON. Si vous souhaitez ensuite convertir l’objet JSON en un autre type de données, vous devez utiliser . En tant que<type>(). Exemple :

        LET $sample = @@”user.addresses”.AsJsonArray()
        
      • Lorsque vous souhaitez générer une sortie dans un certain format, vous devez utiliser . En tant que<type>(). Exemple :

        LET $sample = @@”user.addresses”
        Output(abc = $sample.AsJsonArray())
        

      Remarque

      Bonnes pratiques de cast de type :

      • Tapez toujours un cast à la fin de la chaîne .
      • Quand vous n’êtes pas sûr, tapez toujours explicitement le cast à l’aide de . En tant que<type>(). Exemple :
      LET $sample = External.myCall().data[0].Item1[0].AsJsonArray()
      
      Or
      
      LET $sample = @@”accommodations[0].rooms”.AsJsonArray()
      

      Fonctions disponibles dans les actions post-décision

      Les fonctions suivantes peuvent être utilisées uniquement dans les actions post-décision. Ils ne sont pas disponibles dans les règles de décision

      Syntaxe Description Exemple
      SetResponse(String sectionName, k=v) Cette fonction peut être utilisée pour passer des paires clé-valeur à la section CustomProperties de la réponse de l’API. La sectionName est un paramètre facultatif qui peut être ignoré. SetResponse(« Scores », bot = Model.Bot(@deviceContextId), risk=Model.Risk())

      SetResponse(test=”123”)

      Réponse. Décision() Cette fonction fait référence à la décision pour l’évaluation en cours d’évaluation. Response.Decision() == « Approuver »