Sdílet prostřednictvím


Referenční informace k jazyku podvodů

Microsoft Dynamics 365 má svůj vlastní bohatý a výrazný jazyk, který vám pomůže definovat a vyjádřit strategii podvodu. Tento jazyk má mnoho podobností s jazykem C# a SQL a je navržený tak, aby vám poskytl flexibilitu, kterou potřebujete k řešení podvodů ve vašich jedinečných obchodních scénářích.

Tento jazyk můžete použít dnes k definování pravidel a rychlosti. Další informace najdete v tématu Správa pravidel a provádění kontrol rychlosti.

Tato referenční příručka k jazyku podvodů obsahuje úplný seznam operátorů, funkcí a příkazů, které tvoří jazyk:

Výkazy

Syntaxe příkazu Popis Příklad
VÝRAZ LET <VariableName> = <>

Příkaz LET slouží k definování nové proměnné. Rozsah proměnné je pravidlo nebo nastavení rychlosti, ve které je proměnná definována. Názvy proměnných by měly mít předponu znak dolaru ($).

Další informace najdete v tématu Definování vlastních proměnných.

Libovolný počet příkazů LET lze použít v části Podmínka a klauzule všech typů pravidel a sad rychlosti.

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

POZOROVAT

OBSERV <ObservationFunction>(<KeyValuePairs>)
[ KDYŽ <BooleanExpression>

]

Příkaz OBSERVE neukončí provádění pravidel rozhodnutím. Pouze protokoluje páry klíč-hodnota do protokolů odpovědi rozhraní API nebo trasování. Další pravidla a klauzule pravidel se budou spouštět až do dosažení příkazu RETURN .

Za příkazEM OBSERV musí následovat jedna nebo více funkcí pozorování.

Pokud je k dispozici klauzule WHEN a je vyhodnocena jako Nepravda, příkaz OBSERVE se nezaprotokoluje.

Pro každou klauzuli v následujících pravidlech se dá použít maximálně jedna klauzule:

  • Nákupní pravidla
  • Vlastní pravidla posouzení
  • Pravidla ochrany účtů

    VÝSTUP APLIKACE OBSERVE(reason="high score")

    POZORUJTE TRACE(ip=@"device.ipAddress") WHEN Model.Risk(). Podle > 400

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

    Příkaz RETURN ukončí provádění pravidla s rozhodnutím.

    Příkaz musí zadat platnou rozhodovací funkci: Approve(), Reject(), Challenge()nebo Review().

    Příkaz může také zadat jednu nebo více funkcí pozorování: Output() nebo Trace().

    Příkaz může nakonec obsahovat klauzuli WHEN , která určuje podmínku, za které by měla provést některou z předchozích podmínek.

    Maximální počet lze použít pro každou klauzuli v následujících pravidlech:

    • Nákupní pravidla
    • Vlastní pravidla posouzení
    • Pravidla ochrany účtů

      RETURN Review()
      WHEN IsWatch("Seznam podpory zařízení"; @"deviceAttributes.deviceId") ||
      IsWatch("Seznam podpory plateb", @"paymentInstrumentList.merchantPaymentInstrumentId")

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

      ROUTETO QUEUE <QueueName>
      [ KDYŽ <BooleanExpression> ]

      Příkaz ROUTETO se používá v pravidlech směrování k směrování odpovídajících hodnocení frontám pro správu případů.

      Volitelná klauzule WHEN lze použít k popisu podmínek, za kterých má příkaz provést směrování.

      V pravidlech směrování lze použít maximálně jednu klauzuli.

      FRONTA ROUTETO("Fronta s vysokou hodnotou")
      KDYŽ @"purchase.request.totalAmount"> 500
      SELECT <AggregationFunction>
      AS <VelocityName>
      FROM <AssesmentType>
      GROUPBY <GroupExpression>
      [ KDYŽ <BooleanExpression> ]

      Příkaz SELECT se používá v sadě rychlostí k definování rychlosti. Musí zadat agregační funkci.

      Požadovaná klauzule AS slouží k vytvoření aliasu pro vaši rychlost. Na tento alias se pak dá odkazovat z pravidel.

      Požadovaná klauzule FROM slouží k určení typu posouzení, aby bylo možné sledovat rychlost. Platné hodnoty jsou Purchase, AccountLogin, AccountCreation, Chargeback, BankEvent a CustomAssessment.

      Požadovaná klauzule GROUPBY určuje vlastnost nebo výraz. Všechny události, které jsou vyhodnoceny na stejnou hodnotu v příkazu GROUPBY , jsou sloučeny k výpočtu agregace požadované v příkazu SELECT .

      Například k výpočtu agregace pro každého uživatele použijte GROUPBY @"user.userId".

      Volitelná klauzule WHEN určuje logický výraz, který určuje, jestli má být hodnocení, které se zpracovává, zahrnuty do rychlosti, která se definuje.

      Maximální počet je možné použít pro každou klauzuli v sadě rychlostí.

      SELECT Count() AS _Purchase_Rejections_Per_Email
      FROM Purchase
      KDYŽ @"ruleEvaluation.decision" == "Odmítnout"
      GROUPBY @"user.email"

      SELECT DistinctCount(@"purchaseId")
      _BANKDECLINES_PER_DEVICE AS
      FROM BankEvent
      KDYŽ @"status" == "ODMÍTNUTO"
      GROUPBY @"purchase.deviceContext.externalDeviceId"

      KDY <BooleanExpression>

      Příkaz WHEN je jako klauzule WHEN na ostatních příkazech, ale stojí sám v části Podmínka pravidla a sady rychlosti. Určuje logickou podmínku, která určuje, jestli se má spustit celé pravidlo, nastavení rychlosti nebo pravidlo směrování.

      Maximální počet lze použít v části Podmínka všech typů pravidel a sad rychlosti.

      WHEN Model.Risk(). Podle > 400
      Akce DO <> Příkaz DO se používá k provedení určité akce na konci provádění pravidla. Tento příkaz lze použít pouze v akcích po rozhodnutí. DO SetResponse(name = @"firstname" + @"lastname")

      Odkazování na atributy a proměnné

      Pomocí operátoru at sign (@) můžete odkazovat na atribut z aktuální události.

      Proměnná Popis Příklad
      @

      Znak at (@) slouží k odkazu na atribut z příchozí události. Atribut může být odeslán jako součást datové části požadavku nebo microsoft Dynamics 365 Fraud Protection ji může vygenerovat.

      Za znakem at (@) zadejte úplnou cestu atributu, na který chcete odkazovat. Cestu uzavřete do uvozovek (například @"address.city").

      Pokud odkazovaný atribut není součástí datové části události, vrátí se výchozí hodnota tohoto typu: 0,0 pro dvojité hodnoty, prázdný řetězec pro řetězce atd.

      Typ atributu je odvozen z kontextu, ve které se atribut používá. Pokud není k dispozici dostatek kontextu, použije se ve výchozím nastavení typ String .

      Informace o odvození typu naleznete v tématu Odvození typu atributů.

      @"address.city"

      $ Znak dolaru ($) slouží k odkazu na proměnnou definovanou v příkazu LET . Další informace najdete v tématu Definování vlastních proměnných. $fullName
      @a[x]

      Tato proměnná se používá k indexování proměnných pole.

      Pokud datová část požadavku pro posouzení obsahuje pole položek, můžete k jednotlivým prvkům pole přistupovat pomocí následující syntaxe: @"productList[0]".

      Pokud chcete získat přístup k atributu tohoto prvku, použijte následující syntaxi: @"productList[0].productId"

      @"productList[0].productId"

      @"paymentInstrumentList[3].type"

      Exists

      Tento operátor zkontroluje, jestli v datové části události existuje proměnná.

      Exists(Proměnná String)

      Exists(@"user.email")
      Request.CorrelationId() Tato funkce odkazuje na jedinečné ID korelace události, která se vyhodnocuje. Pomocí této funkce můžete získat přístup k ID korelace události v prostředí pravidel a předat ji externímu volání jako parametru nebo hlavičce. External.MyExternalCall(Request.CorrelationId())
      . GetDiagnostics() Tuto funkci lze použít ke zjištění důležitých diagnostických a ladicích informací z externího volání nebo odpovědi na externí posouzení. Pro externí volání objekt Diagnostics obsahuje datovou část požadavku, koncový bod, kód HttpStatus, chybovou zprávu a latenci. Koncový bod není k dispozici v diagnostickém objektu pro odpověď externího posouzení. Některá z těchto polí lze použít v pravidlech po vytvoření objektu Diagnostiky pomocí odpovídající metody rozšíření". GetDiagnostics()"

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

      LET $extResponseDiagnostics = $extResponse.GetDiagnostics()

      VÝSTUP APLIKACE OBSERVE(Diagnostika = $extResponseDiagnostics)

      KDYŽ $extResponseDiagnostics. HttpStatusCode != 200

      Definování vlastních proměnných

      K definování proměnné můžete použít klíčové slovo LET . Na tuto proměnnou se pak dá odkazovat na jiná místa v pravidle. Předpona všech proměnných znakem dolaru ($). Deklarujete například následující proměnnou.

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

      Proměnné deklarované v příkazu LET lze použít pouze v rámci rozsahu pravidla nebo sady rychlosti, ve které je příkaz definován.

      Pokud například chcete odkazovat na proměnnou z předchozího příkladu, můžete napsat následující příkaz.

      WHEN $fullName == "Kayla Goderich"
      

      Poznámka:

      Jakmile je proměnná definovaná, nedá se aktualizovat novou hodnotou.

      Funkce globálních proměnných

      Funkce Globální proměnné můžete použít k nastavení a získání proměnných v rámci pravidel. Jakmile jsou globální proměnné nastavené, dají se k nim přistupovat v rámci rozhodovacího pravidla, rychlosti, pravidel směrování a akcí po rozhodnutí ve stejném prostředí nebo podřízených prostředích. Hierarchie Použití ochrany před podvody je uvedená v následující tabulce. Pokud například nastavíte globální proměnné v pravidle v kořenovém prostředí, může ochrana před podvody načíst jeho hodnotu v rámci jakéhokoli jiného pravidla ve stejném posouzení ve stejném prostředí nebo v podřízených prostředích.

      Operátor Description Příklad
      SetVariables(k=v) Tuto funkci lze použít k nastavení párů klíč-hodnota, to znamená nastavit hodnoty na proměnné. Do SetVariables(klíč= 123; email=@"user.email")
      GetVariable("k") Tuto funkci lze použít pro přístup k již nastaveným proměnným. V případech, kdy přistupujeme k proměnným, které nejsou nikdy nastaveny, se vrátí výchozí hodnota.

      GetVariable("key"). AsInt()

      GetVariable("email"). AsString()

      GetVariable("key"). AsDouble()

      GetVariable("key"). AsBool()

      GetVariable("key"). AsDateTime()

      GetVariable("key"). AsJsonObject()

      GetVariable("key"). AsJsonArray()

      Poznámka:

      Globální proměnné jsou specifické pro jednu transakci pro dané posouzení. Proměnnou nastavenou v rámci jedné transakce nelze načíst z jiné transakce nebo jiného posouzení.

      Rozhodovací funkce

      Rozhodovací funkce se používají v pravidlech k určení rozhodnutí.

      Typ rozhodnutí Popis Příklad
      Approve()

      Tento typ určuje rozhodnutí o schválení. Může obsahovat důvod schválení a další podpůrnou zprávu.

      Přetížení:

      • Approve(Důvod řetězce)
      • Approve(Důvod řetězce, řetězec supportMessage)

      RETURN Approve()

      RETURN Approve("on safe list")

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

      Reject()

      Tento typ určuje rozhodnutí o odmítnutí. Může obsahovat důvod zamítnutí a další podpůrnou zprávu.

      Přetížení:

      • Reject(Důvod řetězce)
      • Reject(Důvod řetězce, řetězec supportMessage)

      RETURN Reject()

      RETURN Reject("country")

      RETURN Reject("country"kuberne"; "do not escalate")

      Review()

      Tento typ určuje rozhodnutí o revizi. Může obsahovat důvod kontroly a další podpůrnou zprávu.

      Přetížení:

      • Review(Důvod řetězce)
      • Review(Důvod řetězce, řetězec supportMessage)

      RETURN Review()

      RETURN Review("user on watch list")

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

      Challenge(String challengeType)

      Tento typ určuje rozhodnutí výzvy a typu výzvy. Může také obsahovat důvod výzvy a další podpůrnou zprávu.

      Přetížení:

      • Challenge(String challengeType, Důvod řetězce)
      • Challenge(String challengeType, Důvod řetězce, Řetězec supportMessage)

      RETURN Challenge ("SMS")

      RETURN Challenge (SMS, podezřelý robot)

      RETURN Challenge ("SMS", podezřelý robot", "ne eskalovat")

      Funkce pozorování

      Funkce pozorování se dají použít k převzetí dat z aktuálního kontextu a jejich zápisu někam jinam.

      Návratový typ Popis Příklad
      Output(k=v) Tato funkce se dá použít k předávání párů klíč-hodnota do oddílu CustomProperties odpovědi rozhraní API. Dvojice klíč-hodnota by byla vnořena do objektu, jehož název by byl stejný jako název klauzule obsahující příkaz Output(). Output(key="test"; email=@"user.email", countryRegion=Geo.CountryRegion(@"device.ipAddress"))
      Trace(k=v) Tuto funkci lze použít k aktivaci události Trasování a odeslání párů klíč-hodnota do oboru názvů FraudProtection.Trace.Rule Event Tracing. Trace(key="Ruční kontrola"; ip=@"device.ipAddress")
      SetResponse(String sectionName; k=v) Tato funkce se dá použít k předávání párů klíč-hodnota do oddílu CustomProperties odpovědi rozhraní API. SectionName je volitelný parametr, který lze přeskočit. Tuto funkci lze použít pouze v rámci akcí post decision; není k dispozici v rámci pravidla rozhodování.

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

      SetResponse(test="123")

      Response.Decision() Tato funkce odkazuje na rozhodnutí o vyhodnocení aktuálního posouzení. Response.Decision() == "Schválit"

      Agregační funkce

      Function Popis Příklad
      Count() Tato funkce vrátí počet výskytů události. SELECT Count() AS numPurchases
      DistinctCount(klíč řetězce) Tato funkce vrátí počet jedinečných hodnot pro zadanou vlastnost. Pokud je zadaná vlastnost pro příchozí událost null nebo prázdná, událost nepřispívá do agregace. SELECT DistinctCount(@"device.ipAddress") AS distinctIPs
      Sum(Dvojitá hodnota) Tato funkce vrátí součet hodnot pro zadanou číselnou vlastnost. SELECT Sum(@"totalAmount") AS totalSpending

      Logické operátory

      Operátor Description Příklad
      a (&) Logický operátor a

      Model.Risk(). Skóre > 500 && Model.Risk(). Podle < 800

      Model.Risk(). Skóre > 500 a Model.Risk(). Podle < 800

      nebo (||) Logický nebo

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

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

      not Logický operátor negace @"email.isEmailUsername" not(!) @"email.isEmailUsername"

      Operátory porovnání

      Ochrana před podvody podporuje všechny standardní operace porovnání a rovnosti v jazyce C#. Tato tabulka obsahuje některé příklady operátorů, které by mohly být užitečné. Pokud tyto operátory použijete u řetězců, dojde k lexikálním porovnáním.

      Operátor Description Příklad
      == Tento operátor kontroluje rovnost. @"user.countryRegion" == @"shippingAddress.countryRegion"
      != Tento operátor kontroluje nerovnost. @"user.countryRegion" != @"shippingAddress.countryRegion"
      > Tento operátor zkontroluje, jestli je první hodnota větší než druhá hodnota. Model.Risk(). Podle > 500
      < Tento operátor zkontroluje, jestli je první hodnota menší než druhá hodnota. Model.Risk(). Podle < 500
      >= Tento operátor zkontroluje, jestli je první hodnota větší nebo rovna druhé hodnotě. Model.Risk(). Skóre >= 500
      <= Tento operátor zkontroluje, jestli je první hodnota menší nebo rovna druhé hodnotě. Model.Risk(). Skóre <= 500
      X ? Y: Z Tento operátor zkontroluje, jestli je podmínka X pravdivá nebo ne. Pokud je pravda, příkaz Y se spustí a vrátí se jeho výsledek. V opačném případě se příkaz Z spustí a vrátí se jeho výsledek. Pomocí závorek lze kombinovat více logických kontrol a definovat tak vnořenou logiku IF <> THEN <> ELSE <> . LET $riskbucket = Model.Risk(). Skóre > 500 ? "High" : (Model.Risk(). Skóre > 300 ? "Střední" : "Nízká")

      Matematické funkce

      Ochrana před podvody podporuje všechny standardní matematické metody jazyka C# a aritmetické operátory. Tato tabulka obsahuje některé příklady metod, které by mohly být užitečné.

      Operátor Description Příklad
      Math.Min(Double value1; Double value2) Tento operátor vypočítá minimálně dvě hodnoty. Math.Min(Model.Risk(). Score, Model.Bot(@"deviceFingerprinting.id"). Skóre)
      Math.Max(Double value1; Double value2) Tento operátor vypočítá maximální počet dvou hodnot. Math.Max(Model.Risk(). Score, Model.Bot(@"deviceFingerprinting.id"). Skóre)
      RandomInt(Integer min, Integer max) Tento operátor vrátí náhodné celé číslo v zadaném rozsahu, včetně minimální hodnoty a s výjimkou maximální hodnoty. RandomInt(0, 100)

      Operátory DateTime

      Ochrana před podvody podporuje standardní vlastnosti, metody a operátory data a času jazyka C#. Tato tabulka obsahuje některé příklady funkcí a vlastností, které by mohly být užitečné.

      Operátor Description Příklad
      UtcNow Tento operátor získá objekt DateTime, který je nastaven na aktuální datum a čas v počítači vyjádřený jako UTC. DateTime.UtcNow
      Dnes Tento operátor získá objekt, který je nastaven na aktuální datum, kde časová komponenta je nastavena na 00:00:00. DateTime.Today
      Subtract Tento operátor vrátí nový dateTime odečtením zadaného data a času ze vstupu DateTime. DateTime.UtcNow.Subtract(@var1. ToDateTime())
      DaysSince(dateTime date) Tento operátor vrátí celé číslo, které představuje počet dní předaných mezi zadanou hodnotou DateTime a aktuálním datem (vyjádřeným jako koordinovaný univerzální čas [UTC]). DaysSince(@"user. CreationDate")
      Year (Rok) Tento operátor získá složku roku data reprezentované touto instancí. @"user.creationDate". Rok
      Datum Tento operátor získá nový objekt, který má stejné datum jako tato instance, ale kde je hodnota času nastavena na 00:00:00 (půlnoc). @"user.creationDate". Rande

      Operátory přetypování typů

      Informace o odvozování typů najdete v části Odvození typu atributů dále v tomto článku.

      Operátor Description Příklad
      Convert.ToDateTime

      Tento operátor převede řetězec na datetime a převede hodnotu datetime na řetězec pomocí daného formátu.

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

      Tento operátor převede zadanou hodnotu na Int32.

      Convert.ToInt32(@var)
      Convert.ToDouble

      Tento operátor převede zadanou hodnotu na Hodnotu Double.

      Convert.ToDouble(@var)

      Funkce řetězců

      Ochrana před podvody podporuje standardní třídu řetězců jazyka C#. Tato tabulka obsahuje některé příklady funkcí a operátorů, které můžou být užitečné.

      Operátor Description Příklad
      StartsWith() Tento operátor zkontroluje, jestli řetězec začíná zadanou předponou. @"user.phoneNumber". StartsWith("1-")
      EndsWith() Tento operátor zkontroluje, jestli řetězec končí zadanou příponou. @"user.email". EndsWith("@contoso.com")
      IsNumeric() Tento operátor zkontroluje, jestli je řetězec číselnou hodnotou. @"user.email". IsNumeric()
      Délka

      Tento operátor vrátí počet znaků v řetězci.

      @"user.username". Délka
      ToDateTime() Tento operátor převede řetězec na objekt DateTime . @"user.creationDate". ToDateTime()
      ToDouble() Tento operátor převede řetězec na hodnotu Double . @"productList.purchasePrice". ToDouble()
      ToInt32() Tento operátor převede řetězec na hodnotu Int32 . @"zipcode". ToInt32()
      ToUpper() Tento operátor vrátí kopii tohoto řetězce převedenou na velká písmena. @"user.username". ToUpper()
      ToLower() Tento operátor vrátí kopii tohoto řetězce převedenou na malá písmena. @"user.username". ToLower()
      IndexOf() Tento operátor hlásí index založený na nule prvního výskytu daného podřetězce v zadaném řetězci. @"user.username". IndexOf("@")
      LastIndexOf() Tento operátor hlásí index založený na nule posledního výskytu daného podřetězce v zadaném řetězci. @"user.username". LastIndexOf("@")
      Podřetěžce() Tento operátor vrátí podřetězce začínající indexem založeným na nule v řetězci s druhým volitelným parametrem, který určuje délku požadovaného podřetězec. @"user.username". Podřetětěr(0,5)
      IsNullOrEmpty() Tento operátor vrátí, pokud je zadaný řetězec null nebo prázdný. V opačném případě vrátí hodnotu false. @"user.username". IsNullOrEmpty()
      IgnoreCaseEquals() Tento operátor vrátí hodnotu true, pokud jsou dva řetězce stejné bez ohledu na rozdíly v velikostech písmen. V opačném případě vrátí hodnotu false. @"user.username". IgnoreCaseEquals(@"user.email")
      Contains() Tento operátor zkontroluje, jestli řetězec obsahuje jiný řetězec. @"productList.productName". Contains("Xbox")
      ContainsOnly() Tento operátor zkontroluje, jestli řetězec obsahuje pouze zadané znakové sady. @"zipcode". ContainsOnly(CharSet.Numeric)
      ContainsAll() Tento operátor zkontroluje, jestli řetězec obsahuje všechny zadané znakové sady. @"zipcode". ContainsAll(CharSet.Numeric|CharSet.Hyphen)
      ContainsAny() Tento operátor zkontroluje, jestli řetězec obsahuje některou z zadaných znakových sad. @"zipcode". ContainsAny(CharSet.Numeric|CharSet.Hyphen)

      Použití sady CharSet v ContainsOnly, ContainsAll a ContainsAny

      Následující typy znaků lze použít v ContainsOnly, ContainsAll a ContainsAny.

      Typ znaku Popis
      Abecedy a-z, A-Z
      Apostrof '
      Asperand @
      Zpětné lomítko \
      Comma ,
      Hyphen -
      Číslo 0–9
      Období .
      Lomítko /
      Podtržítko _
      Prázdné místo Jednoduché mezery

      Funkce detekce gibberish

      Tyto funkce pomáhají předcházet podvodům tím, že rychle a efektivně zjistí, jestli pole pro zadávání klíčů (například jména a adresy) obsahují bláboly.

      Function Popis Příklad
      GetPattern(String).maxConsonants Maximální počet souvislých souhlásek v řetězci, který není oddělen samohláskou. Například maxConsonants pro řetězec "01gggyturah" je 5. GetPattern(@"user.email").maxConsonants
      GetPattern(String).gibberScore Skóre založené na ML mezi 0 a 1; 0 znamená, že s největší pravděpodobností bude gibish a 1 znamená nejméně pravděpodobné, že bude gibish. GetPattern(@"user.email").gibberScore

      Poznámka:

      Model detekce Gibberish je založen na frekvenci dvou po sobě jdoucích alfanumerických znaků ve veřejně dostupných anglických dokumentech. Předpokládá se, že častěji se ve veřejných dokumentech objevují dva po sobě jdoucí alfanumerické znaky, méně pravděpodobné, že jsou blábolické. Model by měl poskytovat přiměřené skóre pro anglické texty a dá se použít ke zjištění, jestli jména nebo adresy obsahují gibberish. Model ale nemusí být vhodný pro zkratky, jako je zkratka pro stavy (AZ, TX atd.) a nedá se použít k ověření názvů nebo adres. A konečně, model nebyl testován pro neanglické texty.

      Funkce detekce vzorů

      Tyto funkce pomáhají předcházet podvodům tím, že rychle a efektivně zjistí, jestli pole pro zadávání klíčů (například jména a adresy) obsahují bláboly.

      Function Popis Příklad
      Patterns.IsRegexMatch(model řetězce, zdroj řetězců) Provede shodu regulárního výrazu (regulárního výrazu) se vzorem řetězce vůči zdroji řetězce. Výsledkem je logická hodnota, to znamená true (označující zadaný řetězec odpovídající vzoru) nebo nepravda (označující žádnou shodu). Patterns.IsRegexMatch("^.com$", @ "user.email") Patterns.IsRegexMatch( "^.[aAeEiIoOuU]+.*$", @ "user.firstname")

      Poznámka:

      • Vzor řetězce musí být konstantní vstup.
      • Funkce vrátí hodnotu false (výchozí výsledek), pokud doba vyhodnocení překročí 10 milisekund.
      • Všechna omezení , která nepodporují NonBacktracking, platí také pro funkci IsRegexMatch.

      Funkce modelu

      Funkce modelu spouštějí různé modely podvodů a jsou užitečné, když vaše posouzení automaticky nespustí jeden nebo více modelů podvodů. Při spuštění funkcí modelu jsou informace o modelu spuštěném během vyhodnocování pravidel výstupem volání rozhraní API pro posouzení podvodů. Pak pravidlo získá přístup k výsledku modelu, včetně skóre, důvodů a dalších, které lze použít k dalšímu zpracování a rozhodování pravidel.

      Typ modelu Popis Příklad
      Riziko Vyhodnocuje pravděpodobnost, že relace je riziková. Model.Risk()
      Robot Vyhodnocuje pravděpodobnost inicializování relace robotem. Předejte ID kontextu zařízení, které bylo odesláno do řešení pro otisky prstů zařízení v rámci ochrany před podvody. Model.Bot(@deviceContextId)

      Geografické funkce

      Geografické funkce poskytují překlad převodem IP adresy na zeměpisnou adresu. Geografické funkce je možné vyvolat v pravidlech pouze pomocí IP adres, které jsou součástí datové části transakcí nebo shromažďovány ochranou před podvody pomocí otisku prstu zařízení. Geografické funkce nelze vyvolat pro libovolné hodnoty IP adres.

      Operátor Description Příklad
      Geo.RegionCode(Řetězcová IP adresa)

      Tento operátor převede adresu IPv4 na kód oblasti USA (tj. zkratku názvu státu nebo území USA).

      Například pro IP adresu ve státě Washington se vrátí "WA".

      Geo.RegionCode(@"device.ipAddress")
      Geo.Region(Řetězcová IP adresa)

      Tento operátor převede adresu IPv4 na svou oblast USA (tj. název státu nebo území USA).

      Například pro IP adresu ve státě Washington se vrátí "Washington".

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

      Tento operátor převede adresu IPv4 na kód země/oblasti.

      Například pro IP adresu v Austrálii se vrátí "AU".

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

      Tento operátor převede IP adresu na název oblasti.

      Například pro IP adresu v Austrálii se vrátí "Austrálie".

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

      Tento operátor převede adresu IPv4 na název města.

      Například pro IP adresu v New Yorku se vrátí "New York City".

      Geo.City(@"device.ipAddress")
      Geo.MarketCode(Řetězcová IP adresa)

      Tento operátor převede adresu IPv4 na kód trhu IP adresy.

      Například pro IP adresu z Kanady se vrátí "NA" (Severní Amerika).

      Geo.MarketCode(@"device.ipAddress")

      Funkce atributů zařízení

      Operátor Description Příklad
      Device.GetFullAttributes(String sessionId) Vrátí úplnou sadu atributů zařízení pro zadanou relaci otisků prstů zařízení. Viz Nastavení otisku prstu zařízení pro zobrazení celé sady atributů zařízení. Device.GetFullAttributes(@"deviceFingerprinting.id")
      Device.GetAttributes(String sessionId) Vrátí menší podmnožinu atributů zařízení pro zadanou relaci otisků prstů zařízení. Podmnožina je seznam kurátorovaný službou Fraud Protection a obsahuje nejčastěji používané atributy. Device.GetAttributes(@"deviceFingerprinting.id")
      Device.GetSelectedAttributes(String sessionId, String attributeName) Vrátí až 20 atributů zařízení pro zadanou relaci otisků prstů zařízení. Seznam požadovaných atributů je třeba zadat jako parametry oddělené čárkami. Device.GetSelectedAttributes(@"deviceFingerprinting.id", "deviceAsn";"deviceCountryCode")
      Device.GetSpeedOfTravel(String sessionId) Vrátí maximální rychlost jízdy zařízení v mílích za hodinu. Ochrana před podvody určuje maximální rychlost tím, že vezme posledních pět po sobě jdoucích relací otisků prstů a vypočítá rychlost zařízení z relace do relace a vrátí maximum. Zařízení se identifikuje přes relace pomocí ID souboru cookie. Device.GetSpeedOfTravel(@"deviceFingerprinting.id")

      Vyhledávací funkce BIN

      Funkce BIN Lookup poskytují informace o platební kartě (například síť karet, typ karty, kód země karty, kategorie karet) na základě identifikačního čísla banky (BIN). Data pro vyhledávání BIN pocházejí od předních poskytovatelů dat BIN třetích stran a pak je kurátoruje ochrana před podvody.

      Operátor Description Příklad
      POPELNICE. Lookup(String BIN).cardNetwork

      Tato funkce vyhledá BIN a vrátí síť karet (například Visa, Mastercard).

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

      Tento operátor vyhledá bin a vrátí typ karty (například Debetní, Kredit).

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

      Tento operátor vyhledá bin a vrátí vydávající organizaci.

      POPELNICE. Lookup(@"card.bin"). vystavitel
      POPELNICE. Lookup(String BIN).countryCode

      Tento operátor vyhledá bin a vrátí kód země se dvěma písmeny ISO karty.

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

      Tento operátor vyhledá bin a vrátí kategorii karet (například Předplacené, Firemní, Odměny).

      POPELNICE. Vyhledávání(@"card.bin").cardCategory
      POPELNICE. Lookup(String BIN).error

      Tento operátor vyhledá bin a vrátí chybovou zprávu, pokud se nepodařilo najít bin.

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

      Funkce seznamu

      Ochrana před podvody umožňuje nahrávat vlastní seznamy a odkazovat na ně v jazyce. Informace o tom, jak tyto seznamy nahrát, najdete v tématu Správa seznamů. Další informace o používání seznamů v pravidlech najdete v části Použití seznamů v části Pravidla dále v tomto článku.

      Operátor Description Příklad
      ContainsKey(
      String listName,
      String columnName,
      Klíč řetězce)
      Tento operátor zkontroluje, jestli je klíč obsažen v zadaném sloupci v seznamu ochrany před podvody.

      Příklad v dalším sloupci zkontroluje, jestli sloupec "E-maily" v seznamu e-mailových podpory obsahuje proměnnou @"user.email" .

      ContainsKey("Seznam e-mailových podpory"; "E-maily"; @"user.email")
      Vyhledávání(
      String listName,
      String keyColName,
      String valueColName)
      Tento operátor vyhledá hodnotu klíče v seznamu ochrany před podvody. Je nutné zadat název sloupce, který obsahuje klíč, i název sloupce, který obsahuje hodnotu.

      Hodnota je vždy vrácena jako řetězec. Pokud se klíč nenajde a pokud není zadaný parametr defaultValue , vrátí se "Unknown".

      Příklad v dalším sloupci hledá hodnotu proměnné @"user.email" ve sloupci E-maily v seznamu e-mailových podpory. Pokud se najde shoda, vrátí funkce hodnotu sloupce Status z odpovídajícího řádku v seznamu. Pokud se shoda nenajde, vrátí funkce hodnotu 0.

      Lookup("Seznam e-mailových podpory", "E-maily", @"user.email""Stav";0)
      V Tento operátor zkontroluje, jestli je klíč obsažen v seznamu hodnot oddělených čárkami. In(@"user.countryRegion", "US, MX, CA")
      InSupportList Tento operátor zkontroluje, jestli je atribut v seznamu podpory. InSupportList('e-mailový seznam podpory', @"user.email")
      IsSafe Tento operátor zkontroluje, jestli je entita v seznamu podpory označená jako bezpečná. IsSafe('e-mailový seznam podpory', @"user.email")
      IsBlock Tento operátor zkontroluje, jestli je entita v seznamu podpory označená jako blok. IsBlock('e-mailový seznam podpory'; @"user.email")
      IsWatch Tento operátor zkontroluje, jestli je entita označená jako Sledování v seznamu podpory. IsWatch('e-mailový seznam podpory', @"user.email")

      Použití seznamů v pravidlech

      Pomocí operátorů ContainsKey a Lookup můžete odkazovat na seznamy, které jste nahráli do ochrany před podvody. Další informace o seznamech najdete v tématu Správa seznamů.

      ContainsKey

      Pokud chcete zkontrolovat, jestli některý ze seznamů obsahuje konkrétní hodnotu, použijte operátor ContainsKey . Zadejte název seznamu, sloupec a klíč, který chcete zkontrolovat.

      Například nahrajete seznam rizikových e-mailových adres s jedním sloupcem a pojmenujete ho Rizikový e-mailový seznam.

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

      Pak můžete pomocí následující syntaxe odmítnout všechny transakce z rizikových e-mailových adres v tomto seznamu.

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

      Tato klauzule zkontroluje, jestli sloupec E-mail v seznamu Rizikový e-mail obsahuje klíč @email . Pokud ano, transakce je odmítnuta.

      Vyhledání

      U seznamů s více sloupci můžete pomocí operátoru Vyhledávání zkontrolovat hodnotu sloupce pro určitý klíč.

      Například vytvoříte seznam, který obsahuje jeden sloupec pro e-mailové adresy a druhý sloupec, který označuje stav těchto e-mailových adres. Tento seznam pojmenujete e-mailový seznam.

      E-mail Stav
      Kayla@contoso.com Riskantní
      Jamie@bellowscollege.com Riskantní
      Marie@atatum.com Riskantní
      Camille@fabrikam.com Safe
      Miguel@proseware.com Safe
      Tyler@contoso.com Safe

      Potom můžete pomocí následující syntaxe odmítnout všechny transakce z e-mailových adres v tomto seznamu, které mají stav Rizikové.

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

      Tato klauzule vyhledá klíč @"user.email" ve sloupci E-mail v seznamu E-mail a zkontroluje, jestli je hodnota ve sloupci Stav riziková. Pokud ano, transakce je odmítnuta.

      Pokud se v seznamu nenajde klíč @"user.email", vrátí funkce Ochrana před podvody "Neznámý".

      Jako pátý parametr můžete také zadat vlastní výchozí hodnotu. Další informace najdete v části Logické operátory uvedené výše v tomto článku.

      Operátor Lookup vždy vrátí hodnotu String . Chcete-li tuto hodnotu převést na hodnotu Int, Double nebo DateTime , použijte operátor přetypování typu.

      Používání externích volání, externích hodnocení a rychlosti

      • Chcete-li odkazovat na externí volání, zadejte Externí, následovaný externím voláním, na které chcete odkazovat. Další informace najdete v tématu Použití externího volání v pravidlech.
      • Pokud chcete odkazovat na externí posouzení, zadejte Posouzení, následované externím posouzením, na které chcete odkazovat. Další informace najdete v tématu Použití externího posouzení v pravidlech.
      • Chcete-li odkazovat na rychlost, zadejte rychlost, následovanou rychlostí, na kterou chcete odkazovat. Další informace najdete v tématu Použití rychlosti v pravidlech.

      Odvození typů atributů

      Typy proměnných se odvozují z kontextu, ve kterém se používají. Několik příkladů:

      • Ve výrazu WHEN @isEmailValidated se proměnná interpretuje jako logická hodnota.
      • Ve výrazu Model.Risk(). Skóre > 500, proměnná se interpretuje jako hodnota Double .
      • Ve výrazu @"user.creationDate". Year < DateTime.UtcNow.Year, proměnná se interpretuje jako hodnota DateTime .

      Pokud neexistuje dostatek kontextu pro odvození typu proměnné, považuje se za řetězcovou hodnotu. Například ve výrazu Model.Risk(). Určení skóre < Model.Bot(@"deviceFingerprinting.id"). Skóre, obě proměnné jsou interpretovány jako řetězce.

      Chcete-li zadat typ neřetězecí proměnné, použijte operátor přetypování typu.

      Pole a objekty JSON

      Jazyk FQL podporuje vytváření složitých strukturovaných objektů jako místních proměnných, které je možné předat externímu volání nebo externímu posouzení ve formuláři JSON. Stejně jako u všech ostatních místních hodnot v jazyce FQL jsou pole a objekty po vytvoření neměnné.

      Pole JSON

      Pole se vytvářejí uzavřením výrazů do dvojice závorek:

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

      Objekty JSON

      Objekty se vytvářejí pomocí složených závorek:

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

      Funkce FQL pro pole a objekty JSON

      Syntaxe Popis Příklad
      myArr[0] Tuto syntaxi můžete použít pro přístup ke konkrétnímu prvku pole podle jeho indexu. myArr [0].property
      myArr [0][0]
      myArr [0][0].property
      myArr [0].property[0]
      myArr [0].property[0].property[0].property

      Kde myArr, v příkladech výše, je pole. Zdrojem tohoto pole může být @@payloadProperty, odpověď externího posouzení, odpověď na externí volání, místní proměnná nebo globální proměnná.

      Tady jsou příklady použití syntaxe založené na různých zdrojích polí:

      • Zdroj pole: Datová část
      LET $sample = @@"myArr[0]".AsJsonArray()   
      RETURN Approve()   
      WHEN $sample[0].AsString() == "a"
      
      • Zdroj pole: Místní proměnná
        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 Popis Příklad
      Array.GetValue (TargetArray . AsJsonArray(), matchKey, matchValue, lookupKey) Pomocí této funkce můžete získat přístup k prvnímu prvku pole, který odpovídá podmínce.

      Vrátí hodnotu.

      Array.GetValue(@@"payloadProperty". AsJsonArray(), matchKey, matchValue, lookupKey)
      Array.GetValues(TargetArray . AsJsonArray(), matchKey, matchValue) Pomocí této funkce můžete získat přístup k sadě prvků pole, které odpovídají podmínce.

      Vrátí matici.

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

      Následuje několik podrobnějších příkladů použití výše uvedené syntaxe na základě různých zdrojů polí:

      Zdroj pole Array.GetValue Array.GetValues
      Externí posouzení 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"
      Datová část Ukázka datové části: {"group":[{"item1": "a", "item2": "a1"}, {"item1": "b", "item2": "b1"}]}

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

      Globální proměnné Použití stejné ukázky datové části jako v předchozím příkladu

      Do SetVariables(Var=@@"group")
      LET $group = GetVariable("Var"). AsJsonObject()
      LET $value = Array.GetValue($group; "item1", "a", "item2")
      RETURN Approve()
      WHEN $value. AsString() == "a1"
      Použití stejné ukázky datové části jako v předchozím příkladu

      Do SetVariables(Var=@@"group")
      LET $group = GetVariable("Var"). AsJsonObject()
      LET $arr = Array.GetValues($group. AsJsonArray(), "item1", "a")
      RETURN Approve()
      Externí volání

      Odpověď externího volání (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"

      Odpověď externího volání (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"

      Přetypování typů pro pole a objekty JSON

      • Následuje . Jako<type>() se podporuje objekt JsonObject:

        • AsString()
        • AsInt()
        • AsDouble()
        • AsDateTime()
        • AsBool()
        • AsJsonArray()
        • AsJsonObject()
      • Pokud používáte některou ze dvou pomocných metod pole, Array.GetValue nebo Arrays.GetValues, je nutné zadat přetypování pomocí . Jako<typ>(). Příklad:

        LET $arr = {myArr:[{item1: "red", number: 45}, {item1: "blue", number: 56}, {item1: "green", number: 33}]}
        LET $sample = Array.GetValues($arr.myArr.AsJsonArray(), "item1", "blue")
        
      • Po explicitní převodu dat na objekt NEBO pole JSON můžete použít . Jako<type>() přetypování na jiný datový typ v případě potřeby. Příklad:

        RETURN Approve()
        WHEN $sample[0].number.AsInt() == 56
        
      • Při použití @@jsou data implicitně přetypována na objekt JSON. Pokud pak chcete převést objekt JSON na jiný datový typ, musíte použít . Jako<typ>(). Příklad:

        LET $sample = @@”user.addresses”.AsJsonArray()
        
      • Chcete-li výstup v určitém formátu, je nutné použít . Jako<typ>(). Příklad:

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

      Poznámka:

      Osvědčené postupy pro přetypování typů:

      • Vždy zadejte přetypování na konec řetězce .
      • Pokud si nejste jistí, vždy explicitně zadejte přetypování pomocí . Jako<typ>(). Příklad:
      LET $sample = External.myCall().data[0].Item1[0].AsJsonArray()
      
      Or
      
      LET $sample = @@”accommodations[0].rooms”.AsJsonArray()
      

      Dostupné funkce v rámci akcí po rozhodnutí

      Následující funkce je možné použít pouze v rámci akcí post decision Actions. Nejsou k dispozici v rámci pravidel rozhodování.

      Syntaxe Popis Příklad
      SetResponse(String sectionName; k=v) Tato funkce se dá použít k předávání párů klíč-hodnota do oddílu CustomProperties odpovědi rozhraní API. SectionName je volitelný parametr, který lze přeskočit. SetResponse("Scores"; bot = Model.Bot(@deviceContextId), risk=Model.Risk())

      SetResponse(test="123")

      Response.Decision() Tato funkce odkazuje na rozhodnutí o vyhodnocení aktuálního posouzení. Response.Decision() == "Schválit"