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:
- Uppgifter
- Referera till attribut och variabler
- Definiera dina egna variabler
- Funktioner för globala variabler
- Beslutsfunktioner
- Observationsfunktioner
- Sammansättningsfunktioner
- Logiska operatorer
- Jämförelseoperatorer
- Matematikfunktioner
- DateTime-funktioner
- Typgjutningsoperatorer
- Strängfunktioner
- Funktioner för gibberishidentifiering
- Funktioner för mönsteridentifiering
- Modellfunktioner
- Geo-funktioner
- Funktioner för enhetsattribut
- BIN-uppslagsfunktioner
- Listfunktioner
- Använda listor i regler
- Använda externa anrop, externa utvärderingar och hastigheter
- Typinferens för attribut
- JSON-matriser och -objekt
- Funktioner som är tillgängliga i Åtgärder efter beslut
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>) |
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:
|
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:
|
RETURN Review() 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 SELECT DistinctCount(@"purchaseId") |
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:
|
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:
|
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:
|
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:
|
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.
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.
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.
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
- Om du vill referera till ett externt anrop skriver du Externt följt av det externa anrop som du vill referera till. Mer information finns i Använda ett externt anrop i regler.
- Om du vill referera till en extern utvärdering skriver du Utvärderingar följt av den externa utvärdering som du vill referera till. Mer information finns i Använda en extern utvärdering i regler.
- Om du vill referera till en hastighet skriver du Hastighet följt av den hastighet som du vill referera till. Mer information finns i Använda en hastighet i regler.
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"}]} |
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" |