Partage via


Guide de référence du langage

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 du langage comprend la liste complète des opérateurs, des fonctions et des instructions qui composent le langage :

Le guide couvre également d’autres articles. Voici quelques exemples :

Relevés

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

Une instruction LET est utilisée pour définir une nouvelle variable. La portée de la variable est l’ensemble de règles ou de vélocités dans lequel elle 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 @"riskscore"> 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 @"riskscore"> 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 @"riskscore"> 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 et doit être suivie d’une fonction Action DO SetResponse(name = @”firstname” + @”lastname”)

      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’action

      Les fonctions d’action sont utilisées pour spécifier l’action à entreprendre dans une règle d’action post-décision.

      Type d’action 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. Vous pouvez spécifier une sous-section sectionName dans laquelle la paire de valeurs clés doit entrer.

      Surcharges :

      • SetResponse(k=v)

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

      SetResponse(test=”123”)

      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 transmettre des paires clé-valeur à la réponse de l’API. 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")

      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 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 d’attribut d’appareil

      Opérateur Description Exemple
      Device.GetAttributes(String sessionId) Retourne les attributs de l’appareil sélectionnés depuis la prise d’empreinte numérique des appareils. Les attributs d’appareil sélectionnés sont organisés par Fraud Protection et constituent un ensemble d’attributs couramment utilisés dans les règles. Device.GetAttributes(@"deviceContext.deviceContextId).attribute_name
      Device.GetFullAttributes(String sessionId) Retourne un ensemble complet d’attributs de l’appareil sélectionnés depuis la prise d’empreinte numérique des appareils. Utilisez cette fonction uniquement lorsqu’elle est nécessaire pour accéder à l’ensemble complet des attributs de l’appareil. Pour afficher l’ensemble complet des attributs de l’appareil, consultez Configurer la prise d’empreinte numérique des appareils. Device.GetFullAttributes(@"deviceFingerprinting.id").attribute_name

      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 requête, ou il peut être généré par Microsoft Dynamics 365 Fraud Protection.

      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 cet attribut est déduit du contexte dans lequel il 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
      @"botScore"

      Pour chaque événement Création de compte ou Connexion à un compte, les modèles IA de Fraud Protection génèrent un score de bot compris entre 0 et 999. Un score plus élevé indique une probabilité plus élevée que l’événement ait été déclenché par un bot.

      Vous pouvez utiliser @botScore pour référencer ce score dans clauses post-notation des bots et clauses de notation post-risque.

      @"botScore"
      @"riskScore"

      Pour chaque événement Achat ou Protection de compte, les modèles IA de Fraud Protection génèrent un score de risque compris entre 0 et 999. Un score plus élevé indique un risque plus élevé.

      Vous pouvez utiliser @riskScore pour référencer ce score dans les clauses de notation post-risque.

      @"riskScore"
      @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")
      Réponse. Décision() Cette fonction fait référence à la décision pour l’évaluation en cours d’évaluation. Response.Decision() == « Approuver »
      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

      Opérateurs logiques

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

      @"riskScore" > 500 && @"riskScore"< 800

      @"riskScore" > 500 et @"riskScore"< 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"

      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.

      ContainsKey("Email Support List", "Emails", @"user.email")

      Cet exemple vérifie si la colonne "Emails" de la liste "Email Support List" contient la variable @"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é.

      Lookup("Email Support List", "Emails", @"user.email", "Status",0)

      Cet exemple recherche la variable @"user.email" dans la colonne "Emails" de la liste "Email Support List" et renvoie la valeur correspondante dans la colonne "Status".

      Si la clé ne figure pas dans la liste, Fraud Protection renvoie 0.

      LookupClosest(
      String listName, String keyColumnName, String clé,
      String valueColumnName, String defaultValue)

      Cet opérateur recherche la valeur d’une clé dans une colonne de liste Fraud Protection. Si la clé n’est pas trouvée, la valeur de la clé qui est alphabétiquement la plus proche de la clé que vous recherchez est renvoyée.

      Surcharges :

      • Lookup(String listName, String keyColumnName, String key, String valueColumnName, String defaultValue)

      LookupClosest("IP Addresses", "IP", @"device.ipAddress", "City") == "Seattle"

      Cet exemple recherche la variable @ipAddress dans la colonne "IP" de la liste "IP Addresses" et renvoie la valeur correspondante dans la colonne "City". Si @ipAddress est introuvable dans la liste, l’expression renvoie la valeur de l’adresse IP la plus proche suivante dans la liste.

      Entrée

      Cet opérateur vérifie si une clé est contenue dans une liste de valeurs séparées par des virgules.

      In(String key, String list)

      In(@"user.countryRegion", "US, MX, CA")

      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. @"riskScore"> 500
      < Cet opérateur vérifie si la première valeur est inférieure à la deuxième valeur. @"riskScore"< 500
      >= Cet opérateur vérifie si la première valeur est supérieure ou égale à la deuxième valeur. @"riskScore">= 500
      <= Cet opérateur vérifie si la première valeur est inférieure ou égale à la deuxième valeur. @"riskScore"<= 500

      Fonctions de recherche BIN

      Les fonctions de recherche BIN fournissent des informations de paiement carte compte (par exemple, carte réseau, carte type, code de pays carte, catégorie 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 carte réseau (par exemple, Visa, Master carte).

      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
      BIN. Lookup(String BIN).carteCatégorie

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

      BIN. Recherche(@"carte.bin »).carteCatégorie
      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 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 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
      Contains(String substring)

      Cet opérateur vérifie si une chaîne contient une autre chaîne.

      Contains(String substring)

      @"productList`.productName".Contains("Xbox")
      ContainsOnly(CharSet)

      Cet opérateur vérifie si une chaîne contient uniquement les jeux de caractères fournis.

      ContainsOnly(Charset1 Charset2 ...etc.)

      @"zipcode".ContainsOnly(CharSet.Numeric)
      ContainsAll(CharSet)

      Cet opérateur vérifie si une chaîne contient tous les jeux de caractères fournis.

      ContainsAll(Charset1 Charset2 ...etc.)

      @"zipcode ». ContainsAll(CharSet.Numeric|CharSet.Hypen)
      ContainsAny(CharSet)

      Cet opérateur vérifie si une chaîne contient un des jeux de caractères fournis.

      ContainsAll(Charset1 Charset2 ...etc.)

      @”zipcode”.ContainsAny(CharSet.Numeric|CharSet.Hypen)
      StartsWith(String prefix)

      Cet opérateur vérifie si une chaîne commence par un préfixe spécifié.

      StartsWith(String prefix)

      @"user.phoneNumber".StartsWith("1-")
      EndsWith(String suffix)

      Cet opérateur vérifie si une chaîne se termine par un suffixe spécifié.

      EndsWith(String suffix)

      @"user.email".EndsWith("@contoso.com")
      IsNumeric()

      Cet opérateur vérifie si une chaîne contient une valeur numérique.

      (String).IsNumeric()

      @"user.email".IsNumeric()
      Longueur

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

      @"user.username".Length
      Convert.ToDateTime(@"user.creationDate").ToString("yyyy-MM-dd HH:mm:ss")

      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")

      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 ,
      Hypen -
      Numérique 0–9
      Période .
      Barre oblique /
      Trait de soulignement _
      WhiteSpace Seul espace

      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(@"riskScore",@"botScore")
      Math.Max(Double valeur1, Double valeur2) Cet opérateur calcule le maximum de deux valeurs. Math.Max(@"riskScore",@"botScore")
      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
      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")
      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
      Année 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
      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. @"riskScore".ToInt32()

      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

      Fonctions des variables globales

      Les fonctions de variables globales peuvent être utilisées pour définir et obtenir des variables globales dans les règles, les vitesses, les règles de routage et les règles d’action post-décision. Les variables définies sont accessibles depuis le même environnement ou depuis les environnements situés en bas de la pile. Par exemple, si vous définissez des variables globales dans une règle au sein de l’environnement racine, les variables sont accessibles dans les règles à partir du même environnement ou à partir de leurs enfants. De plus, les variables globales sont spécifiques à une évaluation. Un ensemble de variables dans une évaluation ne peut pas être accessible à partir d’une autre évaluation.

      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()

      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.

      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 @"riskScore" > 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 @"riskScore" <@"botScore", 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 au format 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, . GetValue ou . 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 .

      Exemple :

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