Condividi tramite


Guida di riferimento al linguaggio

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 include l'elenco completo di operatori, funzioni e istruzioni che compongono il linguaggio:

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>)
[ WHEN <BooleanExpression>

]

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:

  • Regole di acquisto
  • Regole di valutazione personalizzata
  • Regole di protezione dell'account

    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:

    • Regole di acquisto
    • Regole di valutazione personalizzata
    • Regole di protezione dell'account

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

      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
      FROM Purchase
      WHEN @"ruleEvaluation.decision" == "Reject"
      GROUPBY @"user.email"

      SELECT DistinctCount(@"purchaseId")
      AS _BankDeclines_Per_Device
      FROM BankEvent
      WHEN @"status" == "DECLINED"
      GROUPBY @"purchase.deviceContext.externalDeviceId"

      WHEN <BooleanExpression>

      L'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

      Le funzioni variabili globali possono essere usate per impostare e ottenere variabili all'interno delle regole. È possibile accedere alle variabili globali una volta impostate all'interno di una regola decisionale, della velocità, delle regole di routing e delle azioni post-decisione all'interno dello stesso ambiente o degli ambienti figlio nella gerarchia nella tabella seguente. Ad esempio, se si impostano variabili globali in una regola all'interno dell'ambiente radice, il relativo valore può essere recuperato all'interno di qualsiasi altra regola all'interno della 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:

      • Approve(String motivo)
      • Approve(String reason, String supportMessage)

      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:

      • Reject(String reason)
      • Reject(String reason, String supportMessage)

      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:

      • Review(String reason)
      • Review(String reason, String supportMessage)

      RETURN Review()

      RETURN Review("user on watch list")

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

      Challenge(String challengeType)

      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:

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

      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.Hypen)
      ContainsAny() Questo operatore controlla se una stringa contiene uno qualsiasi dei set di caratteri forniti. @”zipcode”.ContainsAny(CharSet.Numeric|CharSet.Hypen)

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

      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
      BIN. Lookup(String BIN).cardCategory

      Questo operatore cerca BIN e restituisce la categoria di carte (ad esempio, Prepagato, Aziendale, Rewards).

      BIN. 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 "Unknown".

      L'esempio nella colonna successiva cerca il valore della variabile @"user.email" nella colonna "Email" dell'elenco "Email Support List". Se viene trovata una corrispondenza, la funzione restituirà il valore della colonna "Status" dalla riga corrispondente nell'elenco. Se non viene trovata una corrispondenza, la funzione restituirà 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"}]}

      LET $x = External.myCall(). AsJsonObject()
      LET $value = Array.GetValue($x.group[0]. AsJsonObject(), "item1", "a", "item2")
      RETURN Approve()
      WHEN $value. AsString() == "a1"

      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, . GetValue o . 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"