Informazioni di riferimento sul linguaggio di frode
Microsoft Dynamics 365 comporta un linguaggio ricco ed espressivo per consentire di definire ed esprimere la propria strategia antifrode. Questo linguaggio ha molte somiglianze con C# e SQL ed è progettato per offrirti la flessibilità di cui hai bisogno per impedire le frodi per scenari aziendali univoci.
Puoi usare questo linguaggio adesso per definire regole e velocità. Per ulteriori informazioni, vedi Gestisci regole e Eseguire controlli di velocità.
Questa guida di riferimento al linguaggio di frode include l'elenco completo di operatori, funzioni e istruzioni che costituiscono il linguaggio:
- Rendiconti
- Riferimento ad attributi e variabili
- Definire le proprie variabili
- Funzioni delle variabili globali
- Funzioni decisionali
- Funzioni di osservazione
- Funzione di aggregazione
- Operatori logici
- Operatori di confronto
- Funzioni matematiche
- Funzioni datetime
- Operatori di cast tipo
- Funzioni di stringa
- Funzioni di rilevamento inintelligibili
- Funzioni di rilevamento dei criteri
- Funzioni del modello
- Funzioni geografiche
- Funzioni degli attributi del dispositivo
- Funzioni di ricerca BIN
- Funzioni di elenco
- Utilizzo degli elenchi nelle regole
- Utilizzo di chiamate, valutazioni esterne e velocità
- Inferenza del tipo di attributi
- Matrici e oggetti JSON
- Funzioni disponibili all'interno di Post Decision Actions
Rendiconti
Sintassi dell'istruzione | Descrizione | Esempio |
---|---|---|
LET <VariableName> = <Expression> | Un'istruzione LET viene utilizzata per definire una nuova variabile. L'ambito della variabile è la regola o la velocità impostata in cui è definita la variabile. I nomi delle variabili devono essere preceduti dal simbolo di dollaro ($). Per ulteriori informazioni, vedi Definire le proprie variabili. Qualsiasi numero di istruzioni LET possono essere utilizzate nella sezione Condizione e nelle clausole di tutti i tipi di regole e set di velocità. |
LET $fullName = @"user.firstName" + @"user.lastName" |
OBSERVE OBSERVE <ObservationFunction>(<KeyValuePairs>) |
Un'istruzione OBSERVE non termina l'esecuzione della regola con una decisione. Registra semplicemente le coppie chiave-valore nella risposta API o nei log di traccia. Le regole e le clausole successive continuano a essere valide fino a quando un'istruzione RETURN non viene raggiunta. Un'istruzione OBSERVE deve essere seguita da una o più funzioni di osservazione. Se una clausola WHEN è presente e viene valutata su Falso, l'istruzione OBSERVE non viene registrata. Un massimo di uno può essere utilizzato per ogni clausola nelle seguenti regole:
|
OBSERVE Output(reason="high score") OBSERVE TRACE(ip=@"device.ipAddress") WHEN Model.Risk(). Punteggio > 400 |
RETURN <DecisionFunction> [ ,<ObservationFunction>(<KeyValuePairs>) ] [ WHEN <BooleanExpression> ] |
Un'istruzione RETURN termina l'esecuzione della regola con una decisione. L'istruzione deve specificare una funzione decisionale valida: Approve(), Reject(), Challenge() o Review(). L'istruzione può anche specificare una o più funzioni di osservazione: Output() o Trace() Infine, la dichiarazione può includere una clausola WHEN per specificare la condizione in base alla quale dovrebbe eseguire una delle operazioni precedenti. Un massimo di uno può essere utilizzato per clausola nelle seguenti regole:
|
RETURN Review() RETURN Reject(), Trace(ip=@"device.ipAddress") WHEN Model.Risk(). Punteggio > 400 |
ROUTETO QUEUE <QueueName> [ WHEN <BooleanExpression> ] |
Il comando ROUTETO viene utilizzato nelle regole di instradamento per indirizzare le valutazioni di corrispondenza alle code di gestione dei casi. La clausola WHEN facoltativa può essere utilizzata per descrivere le condizioni in base alle quali il comando deve eseguire l'instradamento. Un massimo di uno può essere utilizzato per clausola nelle regole di gestione. |
ROUTETO Queue("High Value Queue") WHEN @"purchase.request.totalAmount"> 500 |
SELECT <AggregationFunction> AS <VelocityName> FROM <AssesmentType> GROUPBY <GroupExpression> [ WHEN <BooleanExpression> ] |
Un'istruzione SELECT viene utilizzata in set di velocità per definire una velocità. Deve specificare una funzione di aggregazione. La clausola AS obbligatoria viene utilizzata per creare un alias per la velocità. È quindi possibile fare riferimento a questo alias dalle regole. La clausola FROM obbligatoria viene utilizzata per specificare il tipo di valutazione su cui osservare una velocità. I valori validi sono Purchase, AccountLogin, AccountCreation, Chargeback, BankEvent e CustomAssessment. La clausola GROUPBY obbligatoria specifica una proprietà o un'espressione. Tutti gli eventi che restituiscono lo stesso valore nell'istruzione GROUPBY vengono combinati per calcolare l'aggregazione richiesta nell'istruzione SELECT. Ad esempio, per calcolare un'aggregazione per ogni utente, utilizza GROUPBY @"user.userId". La clausola WHEN facoltativa specifica un'espressione booleana che determina se la valutazione che viene elaborata deve essere inclusa nella velocità che viene definita. Un massimo di uno può essere utilizzato per clausola nei set di velocità. |
SELECT Count() AS _Purchase_Rejections_Per_Email SELECT DistinctCount(@"purchaseId") |
WHEN <BooleanExpression> | L'istruzione WHEN è come le clausole WHEN sulle altre istruzioni, ma si trova da solo nella sezione Condizione di regole e insiemi di velocità. Specifica una condizione booleana che determina se deve essere eseguita l'intera regola, il set di velocità o la regola di instradamento. È possibile utilizzarne al massimo uno nella sezione Condizione di tutti i tipi di regole e set di velocità. |
WHEN Model.Risk(). Punteggio > 400 |
DO <Funzione delle azioni> | Un'istruzione DO viene utilizzata per eseguire un'azione al termine dell'esecuzione della regola. Questa istruzione può essere usata solo nelle azioni post-decisione | DO SetResponse(name = @”firstname” + @”lastname”) |
Riferimento ad attributi e variabili
Puoi utilizzare l'operatore chiocciola (@) per fare riferimento a un attributo dell'evento corrente.
Variabile | descrizione | Esempio |
---|---|---|
@ | Il simbolo chiocciola (@) viene utilizzato per fare riferimento a un attributo dell'evento in arrivo. L'attributo potrebbe essere inviato come parte del payload della richiesta o Microsoft Dynamics 365 Fraud Protection potrebbe generarlo. Dopo il simbolo di chiocciola (@), specificare il percorso completo dell'attributo a cui si desidera fare riferimento. Racchiudere il percorso tra virgolette (ad esempio, @"address.city"). Se l'attributo a cui fa riferimento non fa parte del payload dell'evento, viene restituito il valore predefinito per quel tipo: 0.0 per stringa doppia, vuota per stringhe e così via. Il tipo dell'attributo viene dedotto dal contesto in cui viene usato l'attributo . Se non viene fornito un contesto sufficiente, il tipo String viene utilizzato per impostazione predefinita. Per informazioni sull'inferenza del tipo, vedi Inferenza del tipo di attributi. |
@"address.city" |
$ | Un segno di dollaro ($) viene usato per fare riferimento a una variabile definita in un'istruzione LET . Per ulteriori informazioni, vedi Definire le proprie variabili. | $fullName |
@a[x] | Questa variabile viene utilizzata per indicizzare le variabili dell'array. Se il payload della richiesta per una valutazione contiene un array di elementi, puoi accedere a singoli elementi dell'array utilizzando la sintassi seguente: @"productList[0]". Per accedere a un attributo di quell'elemento, usa la seguente sintassi: @"productList[0].productId" |
@"productList[0].productId" @"paymentInstrumentList[3].type" |
Esiste | Questo operatore controlla se esiste una variabile nel payload dell'evento. Exists(String variable) |
Exists(@"user.email") |
Request.CorrelationId() | Questa funzione fa riferimento all'ID di correlazione univoco dell'evento in corso di valutazione. Puoi utilizzare questa funzione per accedere all'ID di correlazione di un evento nell'esperienza delle regole e passarla a una chiamata esterna come parametro o intestazione. | External.MyExternalCall(Request.CorrelationId()) |
.GetDiagnostics() | Questa funzione può essere utilizzata per scoprire importanti informazioni diagnostiche e di debug da una chiamata esterna o da una risposta di valutazione esterna. Per una chiamata esterna, l'oggetto Diagnostica contiene il payload della richiesta, l'endpoint, il codice HttpStatus, il messaggio di errore e la latenza. L'endpoint non è disponibile nell'oggetto Diagnostica per una risposta di valutazione esterna. Uno di questi campi può essere usato nelle regole dopo aver creato l'oggetto Diagnostics usando il metodo di estensione corrispondente". GetDiagnostics()" | LET $extResponse = External. myCall(@"device.ipAddress") LET $extResponseDiagnostics = $extResponse.GetDiagnostics() OBSERVE Output(Diagnostics = $extResponseDiagnostics ) WHEN $extResponseDiagnostics. HttpStatusCode != 200 |
Definire le proprie variabili
Puoi usare la parola chiave LET per definire una variabile. È quindi possibile fare riferimento a tale variabile in altri punti della regola. Aggiungi il simbolo del dollaro ($) come prefisso a tutte le variabili. Ad esempio, declari la seguente variabile:
LET $fullName = @"user.firstName" + @"user.lastName"
Le variabili dichiarate in un'istruzione LET possono essere utilizzate solo nell'ambito del set di regole o velocità in cui è definita l'istruzione.
Ad esempio, per fare riferimento alla variabile dell'esempio precedente, puoi scrivere la seguente istruzione.
WHEN $fullName == "Kayla Goderich"
Nota
Dopo che una variabile è definita, non può essere aggiornata con un nuovo valore.
Funzioni delle variabili globali
È possibile usare le funzioni Variabili globali per impostare e ottenere variabili all'interno delle regole. Dopo aver impostato le variabili globali, è possibile accedervi all'interno di una regola decisionale, velocità, regole di routing e azioni post-decisione all'interno dello stesso ambiente o degli ambienti figlio. La gerarchia utilizzo di Fraud Protection è elencata nella tabella seguente. Ad esempio, se si impostano variabili globali in una regola all'interno dell'ambiente radice, La protezione dalle frodi può recuperare il valore all'interno di qualsiasi altra regola nella stessa valutazione nello stesso ambiente o in qualsiasi ambiente figlio.
Operatore | Descrizione | Esempio |
---|---|---|
SetVariables(k=v) | Questa funzione può essere usata per impostare coppie chiave-valore, ovvero impostare valori su variabili. | Do SetVariables(key= 123, email=@"user.email") |
GetVariable("k") | Questa funzione può essere utilizzata per accedere alle variabili già impostate. Nei casi in cui si accede a variabili che non vengono mai impostate, viene restituito un valore predefinito. | GetVariable("key").AsInt() GetVariable("email").AsString() GetVariable("key").AsDouble() GetVariable("key").AsBool() GetVariable("key").AsDateTime() GetVariable("key").AsJsonObject() GetVariable("key").AsJsonArray() |
Nota
Le variabili globali sono specifiche di una singola transazione per una determinata valutazione. Non è possibile recuperare un set di variabili all'interno di una transazione da un'altra transazione o da un'altra valutazione.
Funzioni decisionali
Le funzioni decisionali sono utilizzate nelle regole per specificare una decisione.
Tipo di decisione | descrizione | Esempio |
---|---|---|
Approve() | Questo tipo specifica una decisione di Approve. Può includere un motivo per l'approvazione e un altro messaggio di supporto. Overload:
|
RETURN Approve() RETURN Approve("on safe list") RETURN Approve ("on safe list", "do not escalate") |
Reject() | Questo tipo specifica una decisione di Reject. Può includere un motivo per il rifiuto e un altro messaggio di supporto. Overload:
|
RETURN Reject () RETURN Reject("embargo country") RETURN Reject("embargo country", "do not escalate") |
Review() | Questo tipo specifica una decisione di Review. Può includere un motivo per l'analisi e un altro messaggio di supporto. Overload:
|
RETURN Review() RETURN Review("user on watch list") RETURN Review("user on watch list", "do not escalate") |
Challenge(String challengeType) | Questo tipo specifica una decisione di Challenge e un tipo di sfida. Può anche includere un motivo per la sfida e un altro messaggio di supporto. Overload:
|
RETURN Challenge ("SMS") RETURN Challenge ("SMS", "suspected bot") RETURN Challenge ("SMS", suspected bot", "do not escalate") |
Funzioni di osservazione
Le funzioni di osservazione possono essere utilizzate per acquisire dati dal contesto corrente e scriverli altrove.
Tipo restituito | descrizione | Esempio |
---|---|---|
Output(k=v) | Questa funzione può essere usata per passare coppie chiave-valore alla sezione CustomProperties della risposta API. La coppia chiave-valore verrebbe annidata all'interno di un oggetto il cui nome sarebbe uguale al nome della clausola contenente l'istruzione Output(). | Output(key="test", email=@"user.email", countryRegion=Geo.CountryRegion(@"device.ipAddress")) |
Trace(k=v) | Questa funzione può essere utilizzata per attivare un evento di traccia e inviare coppie chiave-valore allo spazio dei nomi Traccia eventi FraudProtection.Trace.Rule. | Trace(key="Manual Review", ip=@"device.ipAddress") |
SetResponse(String sectionName, k=v) | Questa funzione può essere usata per passare coppie chiave-valore alla sezione CustomProperties della risposta API. SectionName è un parametro facoltativo che può essere ignorato. Questa funzione può essere usata solo all'interno di Post Decision Actions; non è disponibile all'interno della regola decisionale | SetResponse("Scores", bot = Model.Bot(@deviceContextId), risk=Model.Risk()) SetResponse(test="123") |
Response.Decision() | Questa funzione fa riferimento alla decisione per la valutazione corrente in corso di valutazione. | Response.Decision() == "Approve" |
Funzione di aggregazione
Funzione | Descrizione | Esempio |
---|---|---|
Count() | Questa funzione restituisce il numero di volte in cui si è verificato un evento. | SELECT Count() AS numPurchases |
DistinctCount(String key) | Questa funzione restituisce il numero di valori distinti per la proprietà specificata. Se la proprietà specificata è null o vuota per un evento in ingresso, l'evento non contribuisce all'aggregazione. | SELECT DistinctCount(@"device.ipAddress") AS distinctIPs |
Sum(Double value) | Questa funzione restituisce la somma dei valori per una proprietà numerica specificata. | SELECT Sum(@"totalAmount") AS totalSpending |
Operatori logici
Operatore | Descrizione | Esempio |
---|---|---|
and (&&) | And logico | Model.Risk(). Punteggio > 500 && Model.Risk(). Punteggio < 800 Model.Risk(). Punteggio > 500 e Model.Risk(). Punteggio < 800 |
o (||) | Or logico | @"email.isEmailUsername" == false || @"email.isEmailValidated" == false @"email.isEmailUsername" == false or @"email.isEmailValidated" == false |
not | Negazione logica | @"email.isEmailUsername" not(!) @"email.isEmailUsername" |
Operatori di confronto
Fraud Protection supporta tutti le operazioni di confronto e uguaglianza C# standard. Questa tabella include alcuni esempi di operatori che potresti trovare utili. Se applichi questi operatori alle stringhe vengono effettuati confronti lessicografici.
Operatore | Descrizione | Esempio |
---|---|---|
== | Questo operatore verifica l'uguaglianza. | @"user.countryRegion" == @"shippingAddress.countryRegion" |
!= | Questo operatore verifica la disuguaglianza. | @"user.countryRegion" != @"shippingAddress.countryRegion" |
> | Questo operatore controlla se il primo valore è maggiore del secondo valore. | Model.Risk(). Punteggio > 500 |
< | Questo operatore controlla se il primo valore è minore del secondo valore. | Model.Risk(). Punteggio < 500 |
>= | Questo operatore controlla se il primo valore è maggiore o uguale al secondo valore. | Model.Risk(). Punteggio >= 500 |
<= | Questo operatore controlla se il primo valore è minore o uguale al secondo valore. | Model.Risk(). Punteggio <= 500 |
X ? Y : Z | Questo operatore controlla se la condizione X è true o meno. Se è true, l'istruzione Y viene eseguita e viene restituito il relativo risultato. In caso contrario, viene eseguita l'istruzione Z e viene restituito il relativo risultato. È anche possibile combinare più controlli logici usando parentesi quadre per definire una logica IF <> THEN <> ELSE <> annidata | LET $riskbucket = Model.Risk(). Punteggio > 500 ? "Alto": (Model.Risk(). Punteggio > 300 ? "Medio" : "Basso") |
Funzioni matematiche
Fraud Protection supporta tutti i metodi matematici e tutti gli operatori aritmetici C# standard. Questa tabella include alcuni esempi di metodi che potresti trovare utili.
Operatore | Descrizione | Esempio |
---|---|---|
Math.Min(Double value1, Double value2) | Questo operatore calcola il minimo di due valori. | Math.Min(Model.Risk(). Score, Model.Bot(@"deviceFingerprinting.id"). Punteggio) |
Math.Max(Double value1, Double value2) | Questo operatore calcola il massimo di due valori. | Math.Max(Model.Risk(). Score, Model.Bot(@"deviceFingerprinting.id"). Punteggio) |
RandomInt(Integer min, Integer max) | Questo operatore restituisce un numero intero casuale nell'intervallo fornito, incluso il valore minimo ed escluso il valore massimo. | RandomInt(0, 100) |
Operatori DateTime
Fraud Protection supporta tutti gli operatori, i metodi e le proprietà DateTime C# standard. Questa tabella include alcuni esempi di funzioni e proprietà che potresti trovare utili.
Operatore | Descrizione | Esempio |
---|---|---|
UtcNow | Questo operatore ottiene un oggetto DateTime impostato sulla data e l'ora correnti sul computer, espresso come UTC. | DateTime.UtcNow |
Oggi | Questo operatore ottiene un oggetto impostato sulla data corrente, dove il componente orario è impostato su 00:00:00. | DateTime.Today |
Sottrai | Questo operatore restituisce un nuovo valore DateTime sottraendo una data e un'ora specificate da un valore DateTime di input. | DateTime.UtcNow.Subtract(@var1. ToDateTime()) |
DaysSince(DateTime date) | Questo operatore restituisce un numero intero che rappresenta il numero di giorni trascorsi tra i valori DateTime e la data corrente (espressa come Coordinated Universal Time [UTC]). | DaysSince(@"user.CreationDate") |
Anno | Questo operatore ottiene il componente anno della data rappresentata da questa istanza. | @"user.creationDate".Year |
Data | Questo operatore ottiene un nuovo oggetto che ha la stessa data di questa istanza ma dove il valore dell'ora è impostato su 00:00:00 (mezzanotte). | @"user.creationDate".Date |
Operatori di cast tipo
Per informazioni sull'inferenza del tipo, vedi la sezione Inferenza del tipo di attributi più avanti in questo articolo.
Operatore | Descrizione | Esempio |
---|---|---|
Convert.ToDateTime | Questo operatore converte la stringa in datetime e converte datetime in una stringa utilizzando il formato specificato. |
Convert.ToDateTime(@"user.creationDate").ToString("yyyy-MM-dd") |
Convert.ToInt32 | Questo operatore converte il valore specificato in Int32. |
Convert.ToInt32(@var) |
Convert.ToDouble | Questo operatore converte il valore specificato in Double. |
Convert.ToDouble(@var) |
Funzioni di stringa
Fraud Protection supporta la classe di stringa C# standard. Questa tabella include alcuni esempi di funzioni e operatori che potresti trovare utili.
Operatore | Descrizione | Esempio |
---|---|---|
StartsWith() | Questo operatore controlla se una stringa inizia con un prefisso specificato. | @"user.phoneNumber".StartsWith("1-") |
EndsWith() | Questo operatore controlla se una stringa finisce con un suffisso specificato. | @"user.email".EndsWith("@contoso.com") |
IsNumeric() | Questo operatore controlla se una stringa è un valore numerico. | @"user.email".IsNumeric() |
Length | Questo operatore restituisce il numero di caratteri nella stringa. |
@"user.username".Length |
ToDateTime() | Questo operatore converte una stringa in un oggetto DateTime. | @"user.creationDate".ToDateTime() |
ToDouble() | Questo operatore converte una stringa in un valore Double. | @"productList.purchasePrice".ToDouble() |
ToInt32() | Questo operatore converte una stringa in un valore Int32. | @"zipcode".ToInt32() |
ToUpper() | Questo operatore restituisce una copia di questa stringa convertita in maiuscolo. | @"user.username". ToUpper() |
ToLower() | Questo operatore restituisce una copia di questa stringa convertita in lettere minuscole. | @"user.username". ToLower() |
IndexOf() | Questo operatore segnala l'indice in base zero della prima occorrenza di una determinata sottostringa all'interno della stringa specificata. | @"user.username". IndexOf("@") |
LastIndexOf() | Questo operatore segnala l'indice in base zero dell'ultima occorrenza di una determinata sottostringa all'interno della stringa specificata. | @"user.username". LastIndexOf("@") |
Sottostring() | Questo operatore restituisce una sottostringa a partire da un indice in base zero all'interno di una stringa, con un secondo parametro facoltativo che specifica la lunghezza della sottostringa desiderata | @"user.username". Sottostringa (0,5) |
IsNullOrEmpty() | Questo operatore restituisce se la stringa specificata è null o vuota. In caso contrario, restituisce false. | @"user.username". IsNullOrEmpty() |
IgnoreCaseEquals() | Questo operatore restituisce true se le due stringhe sono uguali, indipendentemente dalle differenze di maiuscole e minuscole. In caso contrario, restituisce false. | @"user.username". IgnoreCaseEquals(@"user.email") |
Contains() | Questo operatore controlla se una stringa contiene un'altra stringa. | @"productList.productName".Contains("Xbox") |
ContainsOnly() | Questo operatore controlla se una stringa contiene solo i set di caratteri forniti. | @"zipcode".ContainsOnly(CharSet.Numeric) |
ContainsAll() | Questo operatore controlla se una stringa contiene tutti i set di caratteri forniti. | @"zipcode". ContainsAll(CharSet.Numeric|CharSet.Hyphen) |
ContainsAny() | Questo operatore controlla se una stringa contiene uno qualsiasi dei set di caratteri forniti. | @"zipcode". ContainsAny(CharSet.Numeric|CharSet.Hyphen) |
Uso di set di caratteri in ContainsOnly, ContainsAll e ContainsAny
Il tipo di caratteri seguente può essere utilizzato in ContainsOnly, ContainsAll e ContainsAny.
Tipo di carattere | Descrizione |
---|---|
Alfabetico | a-z, A-Z |
Apostrofo | ' |
E commerciale | @ |
Barra rovesciata | \ |
Virgola | , |
Hyphen | - |
Numerico | 0-9 |
Periodo | . |
Barra | / |
Carattere di sottolineatura | _ |
WhiteSpace | Singolo spazio |
Funzioni di rilevamento inintelligibili
Queste funzioni consentono di evitare frodi rilevando in modo rapido ed efficiente se i campi chiave di input dell'utente (ad esempio nomi e indirizzi) contengono gibberish.
Funzione | Descrizione | Esempio |
---|---|---|
GetPattern(String).maxConsonants | Numero massimo di consonanti contigue in una stringa che non sono separate da una vocale. Ad esempio, maxConsonants per la stringa "01gggyturah" è 5. | GetPattern(@"user.email").maxConsonants |
GetPattern(String).gibberScore | Punteggio basato su ML compreso tra 0 e 1; 0 significa che è molto probabile che sia incomprensibile e 1 significa che è meno probabile che sia incomprensibile. | GetPattern(@"user.email").gibberScore |
Nota
Il modello di rilevamento inintelligibile si basa sulla frequenza di due caratteri alfanumerici consecutivi nei documenti inglesi disponibili al pubblico. Si presuppone che più frequentemente compaiono due caratteri alfanumerici consecutivi nei documenti pubblici, meno è probabile che siano incomprensibili. Il modello dovrebbe fornire punteggi ragionevoli per i testi in inglese e può essere utilizzato per rilevare se i nomi o gli indirizzi contengono parole senza senso. Tuttavia, il modello potrebbe non essere adatto per le abbreviazioni, come la forma abbreviata per gli stati (AZ, TX, ecc.) e non può essere utilizzato nemmeno per convalidare nomi o indirizzi. Infine, il modello non è stato testato per testi non inglesi.
Funzioni di rilevamento dei criteri
Queste funzioni consentono di evitare frodi rilevando in modo rapido ed efficiente se i campi chiave di input dell'utente (ad esempio nomi e indirizzi) contengono gibberish.
Funzione | Descrizione | Esempio |
---|---|---|
Patterns.IsRegexMatch(string pattern, string source) | Esegue una corrispondenza di espressione regolare (regex) del criterio stringa rispetto a un'origine stringa. Il risultato è un valore booleano, ovvero true (che indica la stringa specificata corrispondente al criterio) o false (che indica nessuna corrispondenza) | Patterns.IsRegexMatch("^.com$", @ "user.email") Patterns.IsRegexMatch( "^.[aAeEiIoOuU]+.*$", @ "user.firstname") |
Nota
- Il modello di stringa deve essere un input costante.
- La funzione restituisce false (risultato predefinito) se il tempo di valutazione supera i 10 millisecondi.
- Tutte le limitazioni che non supportano il nonbacktracking si applicano anche alla funzione IsRegexMatch.
Funzioni del modello
Le funzioni del modello eseguono i vari modelli di frode e sono utili quando la valutazione non esegue automaticamente uno o più modelli di frode. Quando vengono eseguite le funzioni del modello, le informazioni sul modello in esecuzione durante la valutazione delle regole vengono emesse nella chiamata API di valutazione delle frodi. Quindi, la regola ha accesso al risultato del modello, inclusi punteggio, i motivi e altro, che può essere utilizzato per l'ulteriore elaborazione delle regole e il processo decisionale.
Tipo di modello | Descrizione | Esempio |
---|---|---|
Rischio | Valuta la probabilità che una sessione sia a rischio. | Model.Risk() |
Bot | Valuta la probabilità che una sessione venga avviata da un bot. Passa un ID di contesto del dispositivo che è stato inviato alla soluzione di creazione impronta digitale del dispositivo di Fraud Protection. | Model.Bot(@deviceContextId) |
Funzioni geografiche
Le funzioni geografiche forniscono la risoluzione mediante la conversione di un indirizzo IP in un indirizzo geografico. Le funzioni geografiche possono essere richiamate nelle regole solo utilizzando IP che fanno parte del payload della transazione o raccolte da Fraud Protection utilizzando la creazione impronta digitale dispositivo. Le funzioni geografiche non possono essere richiamate per valori IP arbitrari.
Operatore | Descrizione | Esempio |
---|---|---|
Geo.RegionCode(String ip) | Questo operatore converte un indirizzo IPv4 nel suo codice area USA (ovvero l'abbreviazione del nome dello stato o del territorio statunitense). Ad esempio, per un indirizzo IP nello stato di Washington, viene restituito "WA". |
Geo.RegionCode(@"device.ipAddress") |
Geo.Region(String ip) | Questo operatore converte un indirizzo IPv4 nella sua area geografica USA (ovvero il nome dello stato o del territorio statunitense). Ad esempio, per un indirizzo IP nello stato di Washington, viene restituito "Washington". |
Geo.Region(@"device.ipAddress") |
Geo.CountryCode(String ip) | Questo operatore converte un indirizzo IPv4 nel suo codice paese/area geografica. Ad esempio, per un indirizzo IP in Australia, viene restituito "AU". |
Geo.CountryCode(@"device.ipAddress") |
Geo.CountryRegion(String ip) | Questo operatore converte un indirizzo IP in un nome di area geografica. Ad esempio, per un indirizzo IP in Australia, viene restituito "Australia". |
Geo.CountryRegion(@"device.ipAddress") |
Geo.City(String ip) | Questo operatore converte un indirizzo IPv4 in un nome di città. Ad esempio, per un indirizzo IP in New York City, viene restituito "New York City". |
Geo.City(@"device.ipAddress") |
Geo.MarketCode(String ip) | Questo operatore converte un indirizzo IPv4 nel codice di mercato dell'indirizzo IP. Ad esempio, per un indirizzo IP dal Canada, viene restituito "NA" (Nord America). |
Geo.MarketCode(@"device.ipAddress") |
Funzioni degli attributi del dispositivo
Operatore | Descrizione | Esempio |
---|---|---|
Device.GetFullAttributes(String sessionId) | Restituisce un set completo di attributi del dispositivo per la sessione di impronta digitale del dispositivo specificata. Vedere Configurare l'impronta digitale del dispositivo per visualizzare il set completo di attributi del dispositivo | Device.GetFullAttributes(@"deviceFingerprinting.id") |
Device.GetAttributes(String sessionId) | Restituisce un subset più piccolo di attributi del dispositivo per la sessione di impronta digitale del dispositivo specificata. Il sottoinsieme è un elenco curato da Fraud Protection e contiene gli attributi più usati. | Device.GetAttributes(@"deviceFingerprinting.id") |
Device.GetSelectedAttributes(String sessionId, String attributeName) | Restituisce fino a 20 attributi del dispositivo per la sessione di impronta digitale del dispositivo specificata. L'elenco degli attributi desiderati deve essere specificato come parametri delimitati da virgole | Device.GetSelectedAttributes(@"deviceFingerprinting.id", "deviceAsn","deviceCountryCode") |
Device.GetSpeedOfRoute(String sessionId) | Restituisce la velocità massima di viaggio di un dispositivo in miglia all'ora. La protezione dalle frodi determina la velocità massima prendendo le ultime cinque sessioni di impronta digitale consecutiva e calcolando la velocità del dispositivo dalla sessione alla sessione, restituendo il massimo. Il dispositivo viene identificato nelle sessioni usando l'ID cookie. | Device.GetSpeedOf Write(@"deviceFingerprinting.id") |
Funzioni di ricerca BIN
Le funzioni di ricerca BIN forniscono informazioni sull'account della carta di pagamento (ad esempio, rete di carte, tipo di carta, codice paese della carta, categoria di carte) in base al numero di identificazione bancario (BIN). I dati per la ricerca BIN vengono originati dai principali provider di dati BIN di terze parti e quindi curati da Protezione dalle frodi.
Operatore | Descrizione | Esempio |
---|---|---|
BIN.Lookup(String BIN).cardNetwork | Questa funzione cerca BIN e restituisce la rete di carte (ad esempio, Visa, Esegue la ricerca). |
BIN.Lookup(@"card.bin").cardNetwork |
BIN.Lookup(String BIN).cardType | Questo operatore cerca il BIN e restituisce il tipo di carta (ad esempio, Debito, Credito). |
BIN.Lookup(@"card.bin").cardType |
BIN.Lookup(String BIN).issuer | Questo operatore cerca il BIN e restituisce l'organizzazione emittente. |
BIN.Lookup(@"card.bin").issuer |
BIN.Lookup(String BIN).countryCode | Questo operatore cerca il BIN e restituisce il codice paese ISO a due lettere della carta. |
BIN.Lookup(@"card.bin").countryCode |
BIDONE. Lookup(String BIN).cardCategory | Questo operatore cerca BIN e restituisce la categoria di carte (ad esempio, Prepagato, Aziendale, Rewards). |
BIDONE. Ricerca(@"card.bin").cardCategory |
BIN.Lookup(String BIN).error | Questo operatore cerca BIN e restituisce un messaggio di errore se non è stato possibile trovare IL BIN. |
BIN.Lookup(@"card.bin").error |
Funzioni di elenco
Fraud Protection ti consente di caricare elenchi personalizzati e di farvi riferimento nel linguaggio. Per informazioni su come caricare questi elenchi, vedi Gestire gli elenchi. Per ulteriori informazioni su come utilizzare gli elenchi nelle regole, vedi la sezione Utilizzo di elenchi nelle regole più avanti in questo articolo.
Operatore | Descrizione | Esempio |
---|---|---|
ContainsKey( String listName, String columnName, String key) |
Questo operatore controlla se una chiave è contenuta nella colonna specificata di un elenco di Fraud Protection. Nell'esempio nella colonna successiva viene verificato se la colonna "Email" nell'elenco "Email Support List" contiene la variabile @"user.email". |
ContainsKey("Email Support List", "Emails", @"user.email") |
Lookup( String listName, String keyColName, String valueColName) |
Questo operatore cerca il valore di una chiave in un elenco di Fraud Protection. È necessario specificare sia il nome della colonna che contiene la chiave sia il nome della colonna che contiene il valore. Il valore viene sempre restituito come stringa. Se la chiave non viene trovata e se il parametro defaultValue non è specificato, viene restituito "Sconosciuto". L'esempio nella colonna successiva cerca il valore della variabile @"user.email" nella colonna Messaggi di posta elettronica dell'elenco Elenco di supporto di posta elettronica. Se viene trovata una corrispondenza, la funzione restituisce il valore della colonna Status dalla riga corrispondente nell'elenco. Se non viene trovata una corrispondenza, la funzione restituisce 0. |
Lookup("Email Support List", "Emails", @"user.email", "Status",0) |
In entrata | Questo operatore controlla se una chiave è contenuta in un elenco di valori separato da virgole. | In(@"user.countryRegion", "US, MX, CA") |
InSupportList | Questo operatore controlla se un attributo si trova in un elenco di supporto. | InSupportList('Email Support List', @"user.email") |
IsSafe | Questo operatore verifica se un'entità è contrassegnata come sicura in un elenco di supporto. | IsSafe('Email Support List', @"user.email") |
IsBlock | Questo operatore verifica se un'entità è contrassegnata come Blocca in un elenco di supporto. | IsBlock('Email Support List', @"user.email") |
IsWatch | Questo operatore controlla se un'entità è contrassegnata come Espressione di controllo in un elenco di supporto. | IsWatch('Email Support List', @"user.email") |
Utilizzo degli elenchi nelle regole
Puoi usare gli operatori ContainsKey e Lookup per fare riferimento agli elenchi che hai caricato in Fraud Protection. Per ulteriori informazioni sull'utilizzo degli elenchi, vedi Gestire gli elenchi.
ContainsKey
Per verificare se uno dei tuoi elenchi contiene un valore specifico, utilizza l'operatore ContainsKey. Specifica il nome dell'elenco, la colonna e la chiave che vuoi controllare.
Ad esempio, puoi caricare un elenco a colonna singola di indirizzi e-mail rischiosi e denominarlo Elenco di indirizzi e-mail rischiosi.
Indirizzo di posta elettronica |
---|
Kayla@contoso.com |
Jamie@bellowscollege.com |
Marie@atatum.com |
Puoi quindi utilizzare la sintassi seguente per rifiutare tutte le transazioni dagli indirizzi e-mail rischiosi in questo elenco.
RETURN Reject("risky email")
WHEN ContainsKey("Risky email list", "Email", @"user.email")
Questa clausola verifica se la colonna "E-mail" nell'elenco "Elenco indirizzi e-mail rischiosi" contiene la chiave @email. In tal caso, la transazione viene rifiutata.
Ricerca
Per gli elenchi a più colonne, puoi utilizzare l'operatore Lookup per controllare il valore di una colonna per una chiave specifica.
Ad esempio, puoi creare un elenco con una colonna per gli indirizzi e-mail e un'altra colonna che indica lo stato di tali indirizzi e-mail. Assegni a questo elenco il nome Elenco e-mail.
Indirizzo di posta elettronica | Stato |
---|---|
Kayla@contoso.com |
Rischioso |
Jamie@bellowscollege.com |
Rischioso |
Marie@atatum.com |
Rischioso |
Camille@fabrikam.com |
Sicuro |
Miguel@proseware.com |
Sicuro |
Tyler@contoso.com |
Sicuro |
Puoi quindi utilizzare la sintassi seguente per rifiutare tutte le transazioni dagli indirizzi e-mail che in questo elenco hanno lo stato Rischioso.
RETURN Reject("risky email")
WHEN Lookup("Email List", "Email", @"user.email", "Status") == "Risky"
Questa clausola cerca la chiave @"user.email nella colonna "E-mail" dell'elenco "Elenco e-mail" e controlla se il valore nella colonna "Stato" è Rischioso. In tal caso, la transazione viene rifiutata.
Se la chiave @"user.email non è presente nell'elenco, Fraud Protection restituisce "Sconosciuto".
Puoi anche specificare il tuo valore predefinito come quinto parametro. Per ulteriori informazioni, vedi la sezione Operatori logici descritta precedentemente in questo articolo.
L'operatore Lookup restituisce sempre un valore String. Per convertire questo valore in un valore Int, Double o DateTime, utilizza un operatore di cast tipo.
Utilizzo di chiamate, valutazioni esterne e velocità
- Per fare riferimento a una chiamata esterna, digita Esterno, seguito dalla chiamata esterna a cui desideri fare riferimento. Per ulteriori informazioni, vedi Usare una chiamata esterna nelle regole.
- Per fare riferimento a una valutazione, digita Valutazioni, seguito dalla valutazione esterna a cui desideri fare riferimento. Per ulteriori informazioni, vedi Usare una valutazione esterna nelle regole.
- Per fare riferimento a una velocità, digita Velocità, seguito dalla velocità a cui desideri fare riferimento. Per ulteriori informazioni, vedi Usare una velocità nelle regole.
Inferenza del tipo di attributi
I tipi di variabile vengono dedotti dal contesto in cui vengono usati. Di seguito sono riportati alcuni esempi.
- Nell'espressione WHEN @isEmailValidated, la variabile viene interpretata come un valore Boolean.
- Nell'espressione Model.Risk(). Punteggio > 500, la variabile viene interpretata come valore Double .
- Nell'espressione @"user.creationDate".Year < DateTime.UtcNow.Year, la variabile viene interpretata come un valore DateTime.
Se il contesto non è sufficiente per dedurre il tipo di una variabile, viene considerato un valore String. Ad esempio, nell'espressione Model.Risk(). Score < Model.Bot(@"deviceFingerprinting.id"). Score, entrambe le variabili vengono interpretate come stringhe.
Per specificare il tipo di una variabile nonstring, usare un operatore di cast dei tipi.
Matrici e oggetti JSON
FQL supporta la costruzione di oggetti strutturati complessi come variabili locali, che possono essere passate alla chiamata esterna o alla valutazione esterna in formato JSON. Come con tutti gli altri locali in FQL, le matrici e gli oggetti sono immutabili una volta creati.
Matrici JSON
Le matrici vengono create racchiudendo le espressioni in una coppia di parentesi:
LET $arr1 = [ "hello", "world" ]
LET $arr2 = [
"this is also an array",
78.4,
$arr1,
@"user.email",
External.MyExtcall()
]
Oggetti JSON
Gli oggetti vengono creati con parentesi graffe:
LET $obj1 = { isObject: true }
LET $obj2 = {
numberField: 7,
fieldIs: "string",
internalObj: $obj1,
inline: {
innerInnerField: "hello"
}
}
Funzioni FQL per matrici e oggetti JSON
Sintassi | Descrizione | Esempio |
---|---|---|
myArr[0] | È possibile usare questa sintassi per accedere a un elemento di matrice specifico in base al relativo indice. | myArr [0].property myArr [0][0] myArr [0][0].property myArr [0].property[0] myArr [0].property[0].property[0].property |
Dove myArr, negli esempi precedenti, è una matrice. L'origine di questa matrice può essere la @@payloadProperty, la risposta di valutazione esterna, la risposta di chiamata esterna, la variabile locale o una variabile globale.
Di seguito sono riportati esempi di come usare la sintassi basata su origini di matrice diverse:
- Origine matrice: Payload
LET $sample = @@"myArr[0]".AsJsonArray()
RETURN Approve()
WHEN $sample[0].AsString() == "a"
- Origine matrice: variabile locale
LET $group1 =["a", "b", "c"] LET $group1 =[{ item1: "a", item2: "b"}, { item1: "c", item2: "d"}] LET $group3 =[{ item1: "a", item2: "b", item3: ["c", "d"]}, {{ item1: "e", item2: "f", item3: ["g", "h"]}] RETURN Approve() WHEN $group1[0].AsString() == "a" && $group1[0].item2.AsString() == "b" && $group3[0].item3[0].AsString() == "c"
Sintassi | Descrizione | Esempio |
---|---|---|
Array.GetValue (TargetArray . AsJsonArray(), matchKey, matchValue, lookupKey) | Con questa funzione, è possibile accedere al primo elemento della matrice che corrisponde a una condizione. Restituisce un valore |
Array.GetValue(@@"payloadProperty". AsJsonArray(), matchKey, matchValue, lookupKey) |
Array.GetValues(TargetArray . AsJsonArray(), matchKey, matchValue) | Con questa funzione, è possibile accedere a un set di elementi di matrice che corrispondono a una condizione. Restituisce una matrice |
Array.GetValues(@@"payloadProperty". AsJsonArray(), matchKey, matchValue) |
Di seguito sono riportati alcuni esempi più dettagliati di come usare la sintassi precedente in base a origini di matrice diverse:
Origine matrice | Array.GetValue | Array.GetValues |
---|---|---|
Valutazioni esterne | 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" |
Payload | Esempio di payload: {"group":[{"item1": "a", "item2": "a1"}, {"item1": "b", "item2": "b1"}]} LET $sample = Array.GetValue(@@"group". AsJsonArray(), "item1", "a", "item2") RETURN Approve()WHEN $sample. AsString() == "a1" |
Esempio di payload: { "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" |
Variabili globali | Uso dello stesso esempio di payload precedente Do SetVariables(Var=@@"group") LET $group = GetVariable("Var"). AsJsonObject() LET $value = Array.GetValue($group, "item1", "a", "item2") RETURN Approve() WHEN $value. AsString() == "a1" |
Uso dello stesso esempio di payload precedente Do SetVariables(Var=@@"group") LET $group = GetVariable("Var"). AsJsonObject() LET $arr = Array.GetValues($group. AsJsonArray(), "item1", "a") RETURN Approve() |
Chiamata esterna | Risposta chiamata esterna (myCall): {"group":[{"item1": "a", "item2": "a1"}, {"item1": "b", "item2": "b1"}]} |
Risposta chiamata esterna (myCall): {"group":[{"item1": "a", "item2": "a1"}, {"item1": "b", "item2": "b1"}]} LET $x = External.myCall(). AsJsonObject() LET $arr = Array.GetValues($x.group[0]. AsJsonObject(), "item1", "a") RETURN Approve()WHEN $arr[0].item2. AsString() == "a1" |
Cast dei tipi per matrici e oggetti JSON
L'oggetto seguente . Poiché<Type>() è supportato da JsonObject:
- AsString()
- AsInt()
- AsDouble()
- AsDateTime()
- AsBool()
- AsJsonArray()
- AsJsonObject()
Quando si usa uno dei due metodi helper di matrice, Array.GetValue o Arrays.GetValues, è necessario digitare cast usando . As<Type>(). Esempio:
LET $arr = {myArr:[{item1: "red", number: 45}, {item1: "blue", number: 56}, {item1: "green", number: 33}]} LET $sample = Array.GetValues($arr.myArr.AsJsonArray(), "item1", "blue")
Dopo aver convertito i dati in un oggetto JSON o in una matrice in modo esplicito, è possibile usare . Come<Type>() per eseguire il cast a un tipo di dati diverso, se necessario. Esempio:
RETURN Approve() WHEN $sample[0].number.AsInt() == 56
Quando si usa @@, i dati vengono cast in modo implicito in un oggetto JSON. Se si vuole convertire l'oggetto JSON in un tipo di dati diverso, è necessario usare . As<Type>(). Esempio:
LET $sample = @@”user.addresses”.AsJsonArray()
Quando si desidera eseguire l'output in un determinato formato, è necessario usare . As<Type>(). Esempio:
LET $sample = @@”user.addresses” Output(abc = $sample.AsJsonArray())
Nota
Procedure consigliate per il cast dei tipi:
- Digitare sempre cast alla fine della catena .
- Quando non si è certi, digitare sempre in modo esplicito il cast usando . As<Type>(). Esempio:
LET $sample = External.myCall().data[0].Item1[0].AsJsonArray()
Or
LET $sample = @@”accommodations[0].rooms”.AsJsonArray()
Funzioni disponibili all'interno di Post Decision Actions
Le funzioni seguenti possono essere usate solo all'interno di Post Decision Actions.Following functions can be used within Post Decision Actions only. Non sono disponibili all'interno delle regole decisionali
Sintassi | Descrizione | Esempio |
---|---|---|
SetResponse(String sectionName, k=v) | Questa funzione può essere usata per passare coppie chiave-valore alla sezione CustomProperties della risposta API. SectionName è un parametro facoltativo che può essere ignorato. | SetResponse("Scores", bot = Model.Bot(@deviceContextId), risk=Model.Risk()) SetResponse(test="123") |
Response.Decision() | Questa funzione fa riferimento alla decisione per la valutazione corrente in corso di valutazione. | Response.Decision() == "Approve" |