Dela via


Referens för bedrägerispråk

Microsoft Dynamics 365 har ett eget rikt och uttrycksfullt språk som hjälper dig att definiera och uttrycka din bedrägeristrategi. Det här språket har många likheter med C# och SQL och är utformat för att ge dig den flexibilitet som du behöver för att hantera bedrägerier för dina unika affärsscenarier.

Du kan använda det här språket i dag för att definiera regler och funktioner. Mer information finns i Hantera regler och Utföra hastighetskontroller.

Den här referensguiden för bedrägerispråk innehåller en fullständig lista över operatorer, funktioner och instruktioner som utgör språket:

Utdrag

Instruktionssyntax beskrivning Exempel
LET VariableName-uttryck<> = <>

En LET-instruktion används för att definiera en ny variabel. Variabelns omfång är den regel eller hastighetsuppsättning som variabeln definieras i. Variabelnamn ska föregås av ett dollartecken ($).

Mer information finns i Definiera egna variabler.

Valfritt antal LET-instruktioner kan användas i avsnittet Villkor och satserna för alla regeltyper och hastighetsuppsättningar.

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

OBSERVERA

OBSERVE <ObservationFunction>(<KeyValuePairs>)
[ NÄR <BooleanExpression>

]

En OBSERVE-instruktion avslutar inte regelkörningen med ett beslut. Den loggar bara nyckel/värde-par till antingen API-svaret eller spårningsloggarna. Efterföljande regler och regelsatser fortsätter att köras tills en RETURN-instruktion har nåtts.

En OBSERVE-instruktion måste följas av en eller flera observationsfunktioner.

Om en WHEN-sats finns och utvärderas till False loggas inte INSTRUKTIONEN OBSERVERA .

Högst en kan användas för varje sats i följande regler:

  • Inköpsregler
  • Anpassade utvärderingsregler
  • Regler för kontoskydd

    OBSERVERA utdata(reason="high score")

    OBSERVERA TRACE(ip=@"device.ipAddress") WHEN Model.Risk(). Poäng > 400

    RETURN <DecisionFunction>
    [ ,<ObservationFunction>(<KeyValuePairs>) ]
    [ NÄR <BooleanExpression> ]

    En RETURN-instruktion avslutar regelkörningen med ett beslut.

    Instruktionen måste ange en giltig beslutsfunktion: Approve(), Reject(), Challenge()eller Review().

    Instruktionen kan också ange en eller flera observationsfunktioner: Output() eller Trace()

    Slutligen kan -instruktionen innehålla en WHEN-sats för att ange under vilket villkor den ska göra något av föregående.

    Högst en kan användas per sats i följande regler:

    • Inköpsregler
    • Anpassade utvärderingsregler
    • Regler för kontoskydd

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

      RETURN Reject(), Trace(ip=@"device.ipAddress") WHEN Model.Risk(). Poäng > 400

      ROUTETO QUEUE <QueueName>
      [ NÄR <BooleanExpression> ]

      ROUTETO-kommandot används i routningsregler för att dirigera matchande utvärderingar till ärendehanteringsköer.

      Den valfria WHEN-satsen kan användas för att beskriva de villkor under vilka kommandot ska utföra routningen.

      Högst en kan användas per sats i routningsregler.

      ROUTETO-kö("Kö med högt värde")
      NÄR @"purchase.request.totalAmount"> 500
      SELECT <AggregationFunction>
      AS <VelocityName>
      FROM <AssesmentType>
      GROUPBY <GroupExpression>
      [ NÄR <BooleanExpression> ]

      En SELECT-instruktion används i hastighetsuppsättningar för att definiera en hastighet. Den måste ange en aggregeringsfunktion.

      Den nödvändiga AS-satsen används för att skapa ett alias för din hastighet. Det här aliaset kan sedan refereras från regler.

      Den from-sats som krävs används för att ange vilken utvärderingstyp som ska observeras. Giltiga värden är Purchase, AccountLogin, AccountCreation, Chargeback, BankEvent och CustomAssessment.

      Den obligatoriska GROUPBY-satsen anger en egenskap eller ett uttryck. Alla händelser som utvärderas till samma värde i GROUPBY-instruktionen kombineras för att beräkna den aggregering som begärs i SELECT-instruktionen.

      Om du till exempel vill beräkna en aggregering för varje användare använder du GROUPBY @"user.userId".

      Den valfria WHEN-satsen anger ett booleskt uttryck som avgör om utvärderingen som bearbetas ska ingå i den hastighet som definieras.

      Högst en kan användas per sats i hastighetsuppsättningar.

      SELECT Count() AS _Purchase_Rejections_Per_Email
      FRÅN köp
      NÄR @"ruleEvaluation.decision" == "Avvisa"
      GROUPBY @"user.email"

      SELECT DistinctCount(@"purchaseId")
      AS-_BankDeclines_Per_Device
      FRÅN BankEvent
      WHEN @"status" == "NEKAD"
      GROUPBY @"purchase.deviceContext.externalDeviceId"

      WHEN <BooleanExpression>

      WHEN-instruktionen är som WHEN-satserna på de andra uttrycken, men den står ensam i avsnittet Villkor i regler och hastighetsuppsättningar. Det anger ett booleskt villkor som avgör om hela regeln, hastighetsuppsättningen eller routningsregeln ska köras.

      Högst en kan användas i avsnittet Villkor för alla regeltyper och hastighetsuppsättningar.

      WHEN Model.Risk(). Poäng > 400
      DO-åtgärdsfunktion <> En DO-instruktion används för att utföra en åtgärd i slutet av regelkörningen. Den här instruktionen kan endast användas i åtgärder efter beslut DO SetResponse(name = @"firstname" + @"lastname")

      Referera till attribut och variabler

      Du kan använda operatorn at sign (@) för att referera till ett attribut från den aktuella händelsen.

      Olika beskrivning Exempel
      @

      Ett vidtecken (@) används för att referera till ett attribut från den inkommande händelsen. Attributet kan skickas som en del av nyttolasten för begäran, eller så kan Microsoft Dynamics 365 Fraud Protection generera det.

      Efter undertecknet (@) anger du den fullständiga sökvägen för det attribut som du vill referera till. Omslut sökvägen inom citattecken (till exempel @"address.city").).

      Om det refererade attributet inte är en del av händelsenyttolasten returneras standardvärdet för den typen: 0.0 för dubbla, en tom sträng för strängar och så vidare.

      Attributets typ härleds från den kontext som attributet används i. Om det inte finns tillräckligt med kontext används strängtypen som standard.

      Information om typinferens finns i Typ slutsatsdragning av attribut.

      @"address.city"

      $ Ett dollartecken ($) används för att referera till en variabel som definieras i en LET-instruktion . Mer information finns i Definiera egna variabler. $fullName
      @a[x]

      Den här variabeln används för att indexeras matrisvariabler.

      Om nyttolasten för begäran för en utvärdering innehåller en matris med objekt kan du komma åt enskilda element i matrisen med hjälp av följande syntax: @"productList[0]".

      Om du vill komma åt ett attribut för det elementet använder du följande syntax: @"productList[0].productId"

      @"productList[0].productId"

      @"paymentInstrumentList[3].type"

      Exists

      Den här operatorn kontrollerar om det finns en variabel i händelsenyttolasten.

      Exists(String variable)

      Finns(@"user.email")
      Request.CorrelationId() Den här funktionen refererar till det unika korrelations-ID:t för händelsen som utvärderas. Du kan använda den här funktionen för att komma åt korrelations-ID:t för en händelse i regelupplevelsen och skicka den till ett externt anrop som en parameter eller ett huvud. External.MyExternalCall(Request.CorrelationId())
      . GetDiagnostics() Den här funktionen kan användas för att identifiera viktig diagnostik- och felsökningsinformation från ett externt anrop eller ett externt utvärderingssvar. För ett externt anrop innehåller objektet Diagnostik nyttolasten Förfrågning, Slutpunkt, HttpStatus-kod, Felmeddelande och Svarstid. Slutpunkten är inte tillgänglig i diagnostikobjektet för ett externt utvärderingssvar. Något av dessa fält kan användas i reglerna när diagnostikobjektet har skapats med dess motsvarande tilläggsmetod". GetDiagnostics()"

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

      LET $extResponseDiagnostics = $extResponse.GetDiagnostics()

      OBSERVERA utdata (diagnostik = $extResponseDiagnostics)

      NÄR $EXTRESPONSEDIAGNOSTICS. HttpStatusCode != 200

      Definiera dina egna variabler

      Du kan använda nyckelordet LET för att definiera en variabel. Variabeln kan sedan refereras till på andra platser i regeln. Prefix för alla variabler med ett dollartecken ($). Du deklarerar till exempel följande variabel.

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

      Variabler som deklareras i en LET-instruktion kan endast användas inom omfånget för regeln eller hastighetsuppsättningen som -instruktionen definieras i.

      Om du till exempel vill referera till variabeln från föregående exempel kan du skriva följande instruktion.

      WHEN $fullName == "Kayla Goderich"
      

      Kommentar

      När en variabel har definierats kan den inte uppdateras med ett nytt värde.

      Funktioner för globala variabler

      Du kan använda funktioner för globala variabler för att ange och hämta variabler i regler. När globala variabler har angetts kan de nås inom en beslutsregel, hastighet, routningsregler och åtgärder efter beslut i samma miljö eller underordnade miljöer. Hierarkin bedrägeriskydd använder visas i följande tabell. Om du till exempel anger globala variabler i en regel i rotmiljön kan Bedrägeriskydd hämta dess värde inom andra regler i samma utvärdering i samma miljö eller i underordnade miljöer.

      Operatör Description Exempel
      SetVariables(k=v) Den här funktionen kan användas för att ange nyckel/värde-par, d.v.s. ange värden till variabler. Do SetVariables(key= 123, email=@"user.email")
      GetVariable("k") Den här funktionen kan användas för att komma åt de variabler som redan har angetts. Om vi kommer åt variabler som aldrig har angetts returneras ett standardvärde.

      GetVariable("key"). AsInt()

      GetVariable("email"). AsString()

      GetVariable("key"). AsDouble()

      GetVariable("key"). AsBool()

      GetVariable("key"). AsDateTime()

      GetVariable("key"). AsJsonObject()

      GetVariable("key"). AsJsonArray()

      Kommentar

      Globala variabler är specifika för en enskild transaktion för en viss utvärdering. En variabeluppsättning inom en transaktion kan inte hämtas från en annan transaktion eller en annan utvärdering.

      Beslutsfunktioner

      Beslutsfunktioner används i regler för att ange ett beslut.

      Beslutstyp beskrivning Exempel
      Godkänn()

      Den här typen anger ett beslut av Godkänn. Det kan innehålla en orsak till godkännandet och ett annat stödjande meddelande.

      Överbelastning:

      • Godkänn(Strängorsak)
      • Approve(String reason, String supportMessage)

      RETURN Approve()

      RETURN Approve("on safe list")

      RETURN Approve ("on safe list", "do not escalate")

      Reject()

      Den här typen anger ett beslut om Avvisa. Det kan innehålla en orsak till avvisandet och ett annat stödjande meddelande.

      Överbelastning:

      • Reject(Strängorsak)
      • Reject(String reason, String supportMessage)

      RETURN Reject()

      RETURN Reject("embargoland")

      RETURN Reject("embargo country", "do not escalate")

      Review()

      Den här typen anger ett beslut om granskning. Den kan innehålla en orsak till granskningen och ett annat stödmeddelande.

      Överbelastning:

      • Granska(Strängorsak)
      • Review(String reason, String supportMessage)

      RETURN Review()

      RETURN Review("user on watch list")

      RETURN Review("user on watch list", "do not escalate")

      Challenge(String challengeType)

      Den här typen anger ett beslut av utmaning och en utmaningstyp. Det kan också innehålla en orsak till utmaningen och ett annat stödjande meddelande.

      Överbelastning:

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

      RETURN Challenge ("SMS")

      RETURN Challenge ("SMS", "misstänkt robot")

      RETURN Challenge ("SMS", misstänkt robot", "eskalera inte")

      Observationsfunktioner

      Observationsfunktioner kan användas för att ta data från den aktuella kontexten och skriva dem någon annanstans.

      Returtyp beskrivning Exempel
      Utdata(k=v) Den här funktionen kan användas för att skicka nyckel/värde-par till avsnittet CustomProperties i API-svaret. Nyckel/värde-paret skulle kapslas i ett objekt vars namn skulle vara samma som namnet på satsen som innehåller instruktionen Output(). Output(key="test", email=@"user.email", countryRegion=Geo.CountryRegion(@"device.ipAddress"))
      Trace(k=v) Den här funktionen kan användas för att utlösa en spårningshändelse och skicka nyckel/värde-par till namnområdet FraudProtection.Trace.Rule Event Tracing. Trace(key="Manual Review", ip=@"device.ipAddress")
      SetResponse(String sectionName, k=v) Den här funktionen kan användas för att skicka nyckel/värde-par till avsnittet CustomProperties i API-svaret. sectionName är en valfri parameter som kan hoppas över. Den här funktionen kan endast användas i Post Decision Actions. det är inte tillgängligt i beslutsregeln

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

      SetResponse(test="123")

      Response.Decision() Den här funktionen refererar till beslutet för den aktuella utvärderingen som utvärderas. Response.Decision() == "Godkänn"

      Aggregeringsfunktioner

      Function beskrivning Exempel
      Count() Den här funktionen returnerar antalet gånger som en händelse inträffade. SELECT Count() AS numPurchases
      DistinctCount(Strängnyckel) Den här funktionen returnerar antalet distinkta värden för den angivna egenskapen. Om den angivna egenskapen är null eller tom för en inkommande händelse bidrar händelsen inte till aggregeringen. SELECT DistinctCount(@"device.ipAddress") SOM distinctIPs
      Sum(Double value) Den här funktionen returnerar summan av värden för en angiven numerisk egenskap. SELECT Sum(@"totalAmount") AS totalSpending

      Logiska operatorer

      Operatör Description Exempel
      och (&&) Logiska och

      Model.Risk(). Poäng > 500 & Modell.Risk(). Poäng < 800

      Model.Risk(). Poäng > 500 och Model.Risk(). Poäng < 800

      eller (||) Logisk eller

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

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

      not Logisk negation @"email.isEmailUsername" not(!) @"email.isEmailUsername"

      Jämförelseoperatorer

      Bedrägeriskydd stöder alla C# -standardjämförelse - och likhetsåtgärder . Den här tabellen innehåller några exempel på operatorer som du kanske tycker är användbara. Om du tillämpar dessa operatorer på strängar sker lexikala jämförelser.

      Operatör Description Exempel
      == Den här operatorn söker efter likhet. @"user.countryRegion" == @"shippingAddress.countryRegion"
      != Den här operatorn söker efter ojämlikhet. @"user.countryRegion" != @"shippingAddress.countryRegion"
      > Den här operatorn kontrollerar om det första värdet är större än det andra värdet. Model.Risk(). Poäng > 500
      < Den här operatorn kontrollerar om det första värdet är mindre än det andra värdet. Model.Risk(). Poäng < 500
      >= Den här operatorn kontrollerar om det första värdet är större än eller lika med det andra värdet. Model.Risk(). Poäng >= 500
      <= Den här operatorn kontrollerar om det första värdet är mindre än eller lika med det andra värdet. Model.Risk(). Poäng <= 500
      X ? Y : Z Den här operatorn kontrollerar om villkor X är sant eller inte. Om det är sant körs instruktionen Y och resultatet returneras. Annars körs instruktion Z och resultatet returneras. Flera logiska kontroller kan också kombineras med hakparenteser för att definiera en kapslad IF <> THEN <> ELSE-logik <> LET $riskbucket = Model.Risk(). Poäng > 500? "Hög" : (Model.Risk(). Poäng > 300? "Medium" : "Low")

      Matematikfunktioner

      Bedrägeriskydd stöder alla vanliga C# -matematiska metoder och aritmetiska operatorer. Den här tabellen innehåller några exempel på metoder som kan vara användbara.

      Operatör Description Exempel
      Math.Min(Double value1, Double value2) Den här operatorn beräknar minst två värden. Math.Min(Model.Risk(). Score, Model.Bot(@"deviceFingerprinting.id"). Poäng)
      Math.Max(Double value1, Double value2) Den här operatorn beräknar maximalt två värden. Math.Max(Model.Risk(). Score, Model.Bot(@"deviceFingerprinting.id"). Poäng)
      RandomInt(Heltal min, Heltal max) Den här operatorn returnerar ett slumpmässigt heltal i det angivna intervallet, inklusive minimivärdet och exklusive det maximala värdet. RandomInt(0, 100)

      DateTime-operatorer

      Bedrägeriskydd stöder C# DateTime-standardegenskaper , metoder och operatorer. Den här tabellen innehåller några exempel på funktioner och egenskaper som kan vara användbara.

      Operatör Description Exempel
      UtcNow Den här operatorn hämtar ett DateTime-objekt som är inställt på det aktuella datumet och tiden på datorn, uttryckt som UTC. DateTime.UtcNow
      Today Den här operatorn hämtar ett objekt som är inställt på det aktuella datumet, där tidskomponenten är inställd på 00:00:00. DateTime.Today
      Subtract Den här operatorn returnerar en ny DateTime genom att subtrahera ett angivet datum och en angiven tid från en indata datetime. DateTime.UtcNow.Subtract(@var1. ToDateTime())
      DaysSince(DateTime-datum) Den här operatorn returnerar ett heltal som representerar antalet dagar som passerat mellan det angivna DateTime-värdet och det aktuella datumet (uttryckt som Coordinated Universal Time [UTC]). DaysSince(@"user. CreationDate")
      Year Den här operatorn hämtar årskomponenten för det datum som representeras av den här instansen. @"user.creationDate". År
      Datum Den här operatorn hämtar ett nytt objekt som har samma datum som den här instansen, men där tidsvärdet är inställt på 00:00:00 (midnatt). @"user.creationDate". Datum

      Typgjutningsoperatorer

      Information om typinferens finns i avsnittet Typ slutsatsdragning av attribut senare i den här artikeln.

      Operatör Description Exempel
      Convert.ToDateTime

      Den här operatorn konverterar strängen till datetime och konverterar datetime till en sträng med det angivna formatet.

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

      Den här operatorn konverterar det angivna värdet till Int32.

      Convert.ToInt32(@var)
      Convert.ToDouble

      Den här operatorn konverterar det angivna värdet till Double.

      Convert.ToDouble(@var)

      Strängfunktioner

      Bedrägeriskydd stöder C# -standardsträngsklassen. Den här tabellen innehåller några exempel på funktioner och operatorer som du kanske tycker är användbara.

      Operatör Description Exempel
      StartsWith() Den här operatorn kontrollerar om en sträng börjar med ett angivet prefix. @"user.phoneNumber". StartsWith("1-")
      EndsWith() Den här operatorn kontrollerar om en sträng slutar med ett angivet suffix. @"user.email". EndsWith("@contoso.com")
      IsNumeric() Den här operatorn kontrollerar om en sträng är ett numeriskt värde. @"user.email". IsNumeric()
      Längd

      Den här operatorn returnerar antalet tecken i strängen.

      @"user.username". Längd
      ToDateTime() Den här operatorn konverterar en sträng till ett DateTime-objekt . @"user.creationDate". ToDateTime()
      ToDouble() Den här operatorn konverterar en sträng till ett Double-värde . @"productList.purchasePrice". ToDouble()
      ToInt32() Den här operatorn konverterar en sträng till ett Int32-värde . @"zipcode". ToInt32()
      ToUpper() Den här operatorn returnerar en kopia av strängen som konverterats till versaler. @"user.username". ToUpper()
      ToLower() Den här operatorn returnerar en kopia av strängen som konverterats till gemener. @"user.username". ToLower()
      IndexOf() Den här operatorn rapporterar det nollbaserade indexet för den första förekomsten av en viss delsträng i den angivna strängen. @"user.username". IndexOf("@")
      LastIndexOf() Den här operatorn rapporterar det nollbaserade indexet för den senaste förekomsten av en viss delsträng i den angivna strängen. @"user.username". LastIndexOf("@")
      Delsträng() Den här operatorn returnerar en delsträng från ett nollbaserat index i en sträng, med en andra valfri parameter som anger längden på önskad delsträng @"user.username". Delsträng(0,5)
      IsNullOrEmpty() Den här operatorn returnerar om den angivna strängen är null eller tom. Annars returneras "falsk". @"user.username". IsNullOrEmpty()
      IgnoreCaseEquals() Den här operatorn returnerar true om de två strängarna är lika med, oavsett höljeskillnader. Annars returneras "falsk". @"user.username". IgnoreCaseEquals(@"user.email")
      Contains() Den här operatorn kontrollerar om en sträng innehåller en annan sträng. @"productList.productName". Contains("Xbox")
      ContainsOnly() Den här operatorn kontrollerar om en sträng endast innehåller de angivna teckenuppsättningarna. @"zipcode". ContainsOnly(CharSet.Numeric)
      ContainsAll() Den här operatorn kontrollerar om en sträng innehåller alla angivna teckenuppsättningar. @"zipcode". ContainsAll(CharSet.Numeric|CharSet.Bindestreck)
      ContainsAny() Den här operatorn kontrollerar om en sträng innehåller någon av de angivna teckenuppsättningarna. @"zipcode". ContainsAny(CharSet.Numeric|CharSet.Bindestreck)

      Använda CharSet i ContainsOnly, ContainsAll och ContainsAny

      Följande teckentyper kan användas i ContainsOnly, ContainsAll och ContainsAny.

      Teckentyp beskrivning
      Alfabetisk a-z, A-Z
      Apostrof '
      Asperand @
      Omvänt snedstreck \
      Comma ,
      Hyphen -
      Numerisk 0–9
      Period .
      Snedstreck /
      Understreck _
      Blanksteg Enkelt utrymme

      Funktioner för gibberishidentifiering

      Dessa funktioner hjälper till att förhindra bedrägerier genom att snabbt och effektivt identifiera om viktiga fält för användarindata (till exempel namn och adresser) innehåller gibberish.

      Function beskrivning Exempel
      GetPattern(String).maxConsonants Maximalt antal sammanhängande konsonanter i en sträng som inte avgränsas med en vokal. Till exempel är maxConsonants för strängen "01gggyturah" 5. GetPattern(@"user.email").maxConsonants
      GetPattern(String).gibberScore ML-baserad poäng mellan 0 och 1; 0 innebär mest sannolikt att vara gibberish och 1 innebär minst sannolikt att vara gibberish. GetPattern(@"user.email").gibberScore

      Kommentar

      Gibberish-identifieringsmodellen baseras på frekvensen av två på varandra följande alfanumeriska tecken i offentligt tillgängliga engelska dokument. Det antas att de två alfanumeriska tecknen i följd visas i offentliga dokument, vilket är mindre troligt att de är gibberiska. Modellen bör ge rimliga poäng för engelska texter och kan användas för att identifiera om namnen eller adresserna innehåller gibberish. Men modellen kanske inte är lämplig för förkortningar, till exempel kort formulär för tillstånd (AZ, TX osv.) och den kan inte heller användas för att verifiera namn eller adresser. Slutligen har modellen inte testats för icke-engelska texter.

      Funktioner för mönsteridentifiering

      Dessa funktioner hjälper till att förhindra bedrägerier genom att snabbt och effektivt identifiera om viktiga fält för användarindata (till exempel namn och adresser) innehåller gibberish.

      Function beskrivning Exempel
      Patterns.IsRegexMatch(strängmönster, strängkälla) Utför en regex-matchning (Regular Expression) för strängmönster mot en strängkälla. Resultatet är ett booleskt värde som antingen är sant (som anger att den angivna strängen matchade mönstret) eller falskt (vilket indikerar ingen matchning) Patterns.IsRegexMatch("^.com$", @ "user.email") Patterns.IsRegexMatch( "^.[aAeEiIoOuU]+.*$", @ "user.firstname")

      Kommentar

      • Strängmönstret måste vara en konstant inmatning.
      • Funktionen returnerar false (standardresultatet) om utvärderingstiden överskrider 10 millisekunder.
      • Alla begränsningar som inte stöder NonBacktracking gäller även för Funktionen IsRegexMatch.

      Modellfunktioner

      Modellfunktioner kör de olika bedrägerimodellerna och är användbara när utvärderingen inte automatiskt kör en eller flera bedrägerimodeller. När modellfunktioner körs matas information om modellen som körs under regelutvärderingen ut i API-anropet för bedrägeriutvärdering. Sedan får regeln åtkomst till modellresultatet, inklusive poäng, orsaker med mera, som kan användas för ytterligare regelbearbetning och beslutsfattande.

      Modelltyp beskrivning Exempel
      Risk Utvärderar sannolikheten för att en session är riskfylld. Model.Risk()
      Robot Utvärderar sannolikheten för att en session initieras av en robot. Skicka in ett enhetskontext-ID som skickades till bedrägeriskyddets lösning för enhets fingeravtryck. Model.Bot(@deviceContextId)

      Geo-funktioner

      Geofunktioner ger upplösning genom att konvertera en IP-adress till en geografisk adress. Geo-funktioner kan endast anropas i regler med hjälp av IP-adresser som ingår i transaktionsnyttolasten eller som samlas in av Bedrägeriskydd med hjälp av fingeravtryck för enheter. Geo-funktioner kan inte anropas för godtyckliga IP-värden.

      Operatör Description Exempel
      Geo.RegionCode(String ip)

      Den här operatorn konverterar en IPv4-adress till dess regionkod i USA (det vill säga förkortningen för namnet på den amerikanska staten eller det amerikanska territoriet).

      Till exempel returneras "WA" för en IP-adress i delstaten Washington.

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

      Den här operatorn konverterar en IPv4-adress till regionen USA (det vill säga namnet på den amerikanska staten eller territoriet).

      Till exempel returneras "Washington" för en IP-adress i delstaten Washington.

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

      Den här operatorn konverterar en IPv4-adress till dess lands-/regionkod.

      Till exempel returneras "AU" för en IP-adress i Australien.

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

      Den här operatorn konverterar en IP-adress till ett regionnamn.

      För en IP-adress i Australien returneras till exempel "Australien".

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

      Den här operatorn konverterar en IPv4-adress till ett ortnamn.

      Till exempel returneras "New York City" för en IP-adress i New York City.

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

      Den här operatören konverterar en IPv4-adress till marknadskoden för IP-adressen.

      För en IP-adress från Kanada returneras till exempel "NA" (Nordamerika).

      Geo.MarketCode(@"device.ipAddress")

      Funktioner för enhetsattribut

      Operatör Description Exempel
      Device.GetFullAttributes(String sessionId) Returnerar en fullständig uppsättning enhetsattribut för den angivna enhetens fingeravtryckssession. Se Konfigurera enhetens fingeravtryck för att visa hela uppsättningen enhetsattribut Device.GetFullAttributes(@"deviceFingerprinting.id")
      Device.GetAttributes(String sessionId) Returnerar en mindre delmängd av enhetsattribut för den angivna enhetens fingeravtryckssession. Delmängden är en lista som kurerats av Bedrägeriskydd och innehåller de vanligaste attributen. Device.GetAttributes(@"deviceFingerprinting.id")
      Device.GetSelectedAttributes(String sessionId, String attributeName) Returnerar upp till 20 enhetsattribut för den angivna enhetens fingeravtryckssession. Listan över önskade attribut ska anges som kommaavgränsade parametrar Device.GetSelectedAttributes(@"deviceFingerprinting.id", "deviceAsn","deviceCountryCode")
      Device.GetSpeedOfTravel(String sessionId) Returnerar den maximala reshastigheten för en enhet i miles per timme. Bedrägeriskydd avgör den maximala hastigheten genom att ta de senaste fem efterföljande fingeravtryckssessionerna och beräkna enhetens hastighet från session till session, vilket returnerar det maximala. Enheten identifieras över sessioner med hjälp av cookie-ID:t. Device.GetSpeedOfTravel(@"deviceFingerprinting.id")

      BIN-uppslagsfunktioner

      BIN Lookup-funktioner tillhandahåller kontoinformation för betalkort (till exempel kortnätverk, korttyp, kort landskod, kortkategori) baserat på bankidentifieringsnummer (BIN). Data för BIN Lookup kommer från ledande BIN-dataleverantörer från tredje part och kureras sedan av Bedrägeriskydd.

      Operatör Description Exempel
      SOPTUNNA. Lookup(String BIN).cardNetwork

      Den här funktionen letar upp BIN och returnerar kortnätverk (till exempel Visa, Mastercard).

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

      Den här operatorn söker efter BIN och returnerar korttyp (till exempel Debet, Kredit).

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

      Den här operatorn söker efter BIN och returnerar utfärdande organisation.

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

      Den här operatorn söker efter BIN och returnerar ISO-landskoden med två bokstäver för kortet.

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

      Den här operatören letar upp BIN och returnerar kortkategori (till exempel Förbetald, Företag, Belöningar).

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

      Den här operatorn söker efter BIN och returnerar ett felmeddelande om BIN inte kunde hittas.

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

      Lista över funktioner

      Med Bedrägeriskydd kan du ladda upp anpassade listor och referera till dem på språket. Information om hur du laddar upp dessa listor finns i Hantera listor. Mer information om hur du använder listor i regler finns i avsnittet Använda listor i regler senare i den här artikeln.

      Operatör Description Exempel
      ContainsKey(
      StränglistaNamn,
      String columnName,
      Strängnyckel)
      Den här operatören kontrollerar om en nyckel finns i den angivna kolumnen i en bedrägeriskyddslista.

      Exemplet i nästa kolumn kontrollerar om kolumnen "E-postmeddelanden" i listan "E-postsupportlista" innehåller variabeln @"user.email" .

      ContainsKey("E-postsupportlista", "E-post", @"user.email")
      Uppslag(
      StränglistaNamn,
      String keyColName,
      SträngvärdeColName)
      Den här operatorn söker efter värdet för en nyckel i en bedrägeriskyddslista. Både namnet på kolumnen som innehåller nyckeln och namnet på den kolumn som innehåller värdet måste anges.

      Värdet returneras alltid som en sträng. Om nyckeln inte hittas och parametern defaultValue inte har angetts returneras "Okänd".

      Exemplet i nästa kolumn letar efter värdet för variabeln @"user.email" i kolumnen E-postmeddelanden i listan e-postsupport. Om en matchning hittas returnerar funktionen värdet för kolumnen Status från den matchande raden i listan. Om en matchning inte hittas returnerar funktionen 0.

      Lookup("Email Support List", "Emails", @"user.email", "Status",0)
      I Den här operatorn kontrollerar om en nyckel finns i en kommaavgränsad lista med värden. In(@"user.countryRegion", "US, MX, CA")
      InSupportList Den här operatorn kontrollerar om ett attribut finns i en supportlista. InSupportList('E-postsupportlista', @"user.email")
      IsSafe Den här operatorn kontrollerar om en entitet har markerats som säker i en supportlista. IsSafe('E-postsupportlista', @"user.email")
      IsBlock Den här operatorn kontrollerar om en entitet har markerats som Blockera i en supportlista. IsBlock('E-postsupportlista', @"user.email")
      IsWatch Den här operatorn kontrollerar om en entitet har markerats som Watch på en supportlista. IsWatch('E-postsupportlista', @"user.email")

      Använda listor i regler

      Du kan använda operatorerna ContainsKey och Lookup för att referera till listor som du laddade upp till Bedrägeriskydd. Mer information om listor finns i Hantera listor.

      ContainsKey

      Om du vill kontrollera om en av dina listor innehåller ett specifikt värde använder du Operatorn ContainsKey . Ange listnamnet, kolumnen och nyckeln som du vill söka efter.

      Du kan till exempel ladda upp en lista med en kolumn med riskfyllda e-postadresser och ge den namnet Riskfylld e-postlista.

      Email
      Kayla@contoso.com
      Jamie@bellowscollege.com
      Marie@atatum.com

      Du kan sedan använda följande syntax för att avvisa alla transaktioner från de riskfyllda e-postadresserna i den här listan.

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

      Den här satsen kontrollerar om kolumnen "E-post" i listan "Riskfylld e-post" innehåller @email nyckel. I så fall avvisas transaktionen.

      Sökning

      För listor med flera kolumner kan du använda uppslagsoperatorn för att kontrollera värdet för en kolumn för en specifik nyckel.

      Du kan till exempel skapa en lista som har en kolumn för e-postadresser och en annan kolumn som anger status för dessa e-postadresser. Du namnger listans e-postlista.

      Email Status
      Kayla@contoso.com Riskabel
      Jamie@bellowscollege.com Riskabel
      Marie@atatum.com Riskabel
      Camille@fabrikam.com Safe
      Miguel@proseware.com Safe
      Tyler@contoso.com Safe

      Du kan sedan använda följande syntax för att avvisa alla transaktioner från e-postadresserna i den här listan som har statusen Riskfylld.

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

      Den här satsen söker efter nyckeln @"user.email" i kolumnen "E-post" i listan "E-postlista" och kontrollerar om värdet i kolumnen Status är riskabelt. I så fall avvisas transaktionen.

      Om nyckeln @"user.email" inte finns i listan returnerar Bedrägeriskydd "Okänd".

      Du kan också ange ditt eget standardvärde som den femte parametern. Mer information finns i avsnittet Logiska operatorer tidigare i den här artikeln.

      Uppslagsoperatorn returnerar alltid ett strängvärde. Om du vill konvertera det här värdet till ett Int-, Double- eller DateTime-värde använder du en typgjutningsoperator.

      Använda externa anrop, externa utvärderingar och hastigheter

      Typinferens för attribut

      Variabeltyper härleds från den kontext som de används i. Nedan följer några exempel:

      • I uttrycket WHEN @isEmailValidated tolkas variabeln som ett booleskt värde.
      • I uttrycket Model.Risk(). Poäng > 500, variabeln tolkas som ett Double-värde .
      • I uttrycket @"user.creationDate". År < DateTime.UtcNow.Year tolkas variabeln som ett DateTime-värde .

      Om det inte finns tillräckligt med kontext för att härleda typen av en variabel anses den vara ett Strängvärde . Till exempel i uttrycket Model.Risk(). Score < Model.Bot(@"deviceFingerprinting.id"). Poäng, båda variablerna tolkas som strängar.

      Om du vill ange typen av en icke-strängvariabel använder du en typgjutningsoperator.

      JSON-matriser och -objekt

      FQL har stöd för konstruktion av komplexa strukturerade objekt som lokala variabler, som kan skickas till det externa anropet eller den externa utvärderingen i JSON-formulär. Precis som med alla andra lokala platser i FQL är matriser och objekt oföränderliga när de har skapats.

      JSON-matriser

      Matriser skapas genom att omsluta uttryck inom ett par hakparenteser:

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

      JSON-objekt

      Objekt skapas med klammerparenteser:

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

      FQL-funktioner för JSON-matriser och -objekt

      Syntax beskrivning Exempel
      myArr[0] Du kan använda den här syntaxen för att komma åt ett specifikt matriselement efter dess index. myArr [0].property
      myArr [0][0]
      myArr [0][0].property
      myArr [0].property[0]
      myArr [0].property[0].property

      Där myArr i exemplen ovan är en matris. Källan för den här matrisen kan vara @@payloadProperty, externt utvärderingssvar, externt anropssvar, lokal variabel eller en global variabel.

      Följande är exempel på hur du använder syntaxen baserat på olika matriskällor:

      • Matriskälla: Nyttolast
      LET $sample = @@"myArr[0]".AsJsonArray()   
      RETURN Approve()   
      WHEN $sample[0].AsString() == "a"
      
      • Matriskälla: Lokal variabel
        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" 
        
      Syntax beskrivning Exempel
      Array.GetValue (TargetArray . AsJsonArray(), matchKey, matchValue, lookupKey) Med den här funktionen kan du komma åt det första matriselementet som matchar ett villkor.

      Returnerar ett värde

      Array.GetValue(@@"payloadProperty". AsJsonArray(), matchKey, matchValue, lookupKey)
      Array.GetValues(TargetArray . AsJsonArray(), matchKey, matchValue) Med den här funktionen kan du komma åt en uppsättning matriselement som matchar ett villkor.

      Returnerar en matris

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

      Följande är några mer detaljerade exempel på hur du använder syntaxen ovan baserat på olika matriskällor:

      Matriskälla Array.GetValue Array.GetValues
      Externa utvärderingar 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"
      Nyttolast Nyttolastexempel: {"group":[{"item1": "a", "item2": "a1"}, {"item1": "b", "item2": "b1"}]}

      LET $sample = Array.GetValue(@@"group". AsJsonArray(), "item1", "a", "item2")
      RETURN Approve()WHEN $sample. AsString() == "a1"
      Nyttolastexempel: { "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"

      Globala variabler Använda samma nyttolastexempel som ovan

      Do SetVariables(Var=@@"group")
      LET $group = GetVariable("Var"). AsJsonObject()
      LET $value = Array.GetValue($group, "item1", "a", "item2")
      RETURN Approve()
      WHEN $value. AsString() == "a1"
      Använda samma nyttolastexempel som ovan

      Do SetVariables(Var=@@"group")
      LET $group = GetVariable("Var"). AsJsonObject()
      LET $arr = Array.GetValues($group. AsJsonArray(), "item1", "a")
      RETURN Approve()
      Externt anrop

      Externt anropssvar (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"

      Externt anropssvar (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"

      Typgjutning för JSON-matriser och -objekt

      • Följande . Som<Type>() stöds från JsonObject:

        • AsString()
        • AsInt()
        • AsDouble()
        • AsDateTime()
        • AsBool()
        • AsJsonArray()
        • AsJsonObject()
      • När du använder någon av de två matrishjälpmetoderna, Array.GetValue eller Arrays.GetValues, måste du skriva cast med . Som<Type>(). Exempel:

        LET $arr = {myArr:[{item1: "red", number: 45}, {item1: "blue", number: 56}, {item1: "green", number: 33}]}
        LET $sample = Array.GetValues($arr.myArr.AsJsonArray(), "item1", "blue")
        
      • När du har konverterat data till ett JSON-objekt eller en matris explicit kan du använda . Som<Type>() för att casta till en annan datatyp, om det behövs. Exempel:

        RETURN Approve()
        WHEN $sample[0].number.AsInt() == 56
        
      • När du använder @@skrivs data implicit till ett JSON-objekt. Om du sedan vill konvertera JSON-objektet till en annan datatyp måste du använda . Som<Type>(). Exempel:

        LET $sample = @@”user.addresses”.AsJsonArray()
        
      • När du vill mata ut i ett visst format måste du använda . Som<Type>(). Exempel:

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

      Kommentar

      Metodtips för typgjutning:

      • Skriv alltid gjuten i slutet av .
      • När du inte är säker skriver du alltid uttryckligen cast med hjälp av . Som<Type>(). Exempel:
      LET $sample = External.myCall().data[0].Item1[0].AsJsonArray()
      
      Or
      
      LET $sample = @@”accommodations[0].rooms”.AsJsonArray()
      

      Funktioner som är tillgängliga i Åtgärder efter beslut

      Följande funktioner kan endast användas i Åtgärder efter beslut. De är inte tillgängliga i beslutsregler

      Syntax beskrivning Exempel
      SetResponse(String sectionName, k=v) Den här funktionen kan användas för att skicka nyckel/värde-par till avsnittet CustomProperties i API-svaret. sectionName är en valfri parameter som kan hoppas över. SetResponse("Scores", bot = Model.Bot(@deviceContextId), risk=Model.Risk())

      SetResponse(test="123")

      Response.Decision() Den här funktionen refererar till beslutet för den aktuella utvärderingen som utvärderas. Response.Decision() == "Godkänn"