Referencia del lenguaje de fraude
Microsoft Dynamics 365 tiene su propio lenguaje rico y expresivo para ayudarlo a definir y expresar su estrategia de fraude. Este lenguaje tiene muchas similitudes con C# y SQL y está diseñado para brindarle la flexibilidad que necesita para solucionar el fraude para sus escenarios comerciales únicos.
Puede utilizar este lenguaje hoy para definir reglas y velocidades. Para más información, vea Administrar reglas y Realizar comprobaciones de velocidad.
Esta guía de referencia del lenguaje de fraude incluye la lista completa de operadores, funciones e instrucciones que componen el lenguaje:
- Instrucciones
- Hacer referencia a atributos y variables
- Definiendo tus propias variables
- Funciones variables globales
- Funciones de decisión
- Funciones de observación
- Funciones de agregado
- Operadores lógicos
- Operadores de comparación
- Funciones matemáticas
- Funciones DateTime
- Operadores de conversión de tipos
- Funciones de cadenas
- Funciones de detección incomprensibles
- Funciones de detección de patrones
- Funciones del modelo
- Funciones geográficas
- Funciones de atributos del dispositivo
- Funciones de búsqueda de BIN
- Funciones de lista
- Usar listas en reglas
- Usar llamadas, evaluaciones y velocidades externas
- Inferencia de tipo de atributos
- Matrices y objetos JSON
- Funciones disponibles en Acciones posteriores a la decisión
Informes
Sintaxis de instrucciones | Description | Ejemplo |
---|---|---|
LET <VariableName> = <Expression> | Una sentencia LET se utiliza para definir una nueva variable. El ámbito de la variable es la regla o el conjunto de velocidad en el que se define la variable. Los nombres de las variables deben ir precedidos de un signo de dólar ($). Para obtener más información, consulte Definir sus propias variables. Cualquier numero de instrucciones LET se pueden utilizar en la sección Condición y en las cláusulas de todos los tipos de reglas y conjuntos de velocidad. |
LET $fullName = @"user.firstName" + @"user.lastName" |
OBSERVAR OBSERVE <ObservationFunction>(<KeyValuePairs>) |
Una declaración OBSERVE no termina la ejecución de la regla con una decisión. Simplemente registra pares clave-valor en la respuesta de la API o en los registros de seguimiento. Las reglas y cláusulas de reglas subsiguientes siguen vigentes hasta que se alcance una instrucción RETURN. Una declaración OBSERVE debe ir seguida de una o más funciones de observación. Si hay una cláusula WHEN presente y se evalúa como False, la instrucción OBSERVE no se registra. Se puede utilizar un máximo de uno para cada cláusula en las siguientes reglas:
|
OBSERVE Output(reason="high score") OBSERVE TRACE(ip=@"device.ipAddress") WHEN Model.Risk(). Puntuación > 400 |
RETURN <DecisionFunction> [ ,<ObservationFunction>(<KeyValuePairs>) ] [ WHEN <BooleanExpression> ] |
Una declaración RETURN termina la ejecución de la regla con una decisión. La declaración debe especificar una función de decisión válida: : Approve(), Reject(), Challenge(), or Review(). La declaración también puede especificar una o más funciones de observación: Output() o Trace() Finalmente, la declaración puede incluir una cláusula WHEN para especificar la condición bajo la cual se debe hacer cualquiera de las anteriores. Se puede utilizar un máximo de una por cláusula en las siguientes reglas:
|
RETURN Review() RETURN Reject(), Trace(ip=@"device.ipAddress") WHEN Model.Risk(). Puntuación > 400 |
ROUTETO QUEUE <QueueName> [ WHEN <BooleanExpression> ] |
El comando ROUTETO se utiliza en las reglas de enrutamiento para dirigir las evaluaciones coincidentes a colas de administración de casos. La cláusula WHEN opcional se puede utilizar para describir las condiciones bajo las cuales el comando debe realizar el enrutamiento. Se puede utilizar un máximo de una por cláusula en las reglas de enrutamiento. |
ROUTETO Queue("High Value Queue") WHEN @"purchase.request.totalAmount"> 500 |
SELECT <AggregationFunction> AS <VelocityName> FROM <AssesmentType> GROUPBY <GroupExpression> [ WHEN <BooleanExpression> ] |
Una instrucción SELECT se usa en conjuntos de velocidad para definir una velocidad. Debe especificar una función de agregación. La cláusula AS requerida se usa para crear un alias para su velocidad. A continuación, se puede hacer referencia a este alias desde las reglas. La cláusula FROM requerida se usa para especificar el tipo de evaluación para observar una velocidad. Los valores válidos son Purchase, AccountLogin, AccountCreation, Chargeback, BankEvent y CustomAssessment. Una cláusula GROUPBY requerida especifica una propiedad o una expresión. Todos los eventos que se evalúan con el mismo valor en la declaración GROUPBY se combinan para calcular la agregación que se solicita en la declaración SELECT. Por ejemplo, para calcular una agregación para cada usuario, use GROUPBY @"user.userId". La cláusula WHEN opcional especifica una expresión booleana que determina si la evaluación que se está procesando debe incluirse en la velocidad que se está definiendo. Se puede utilizar un máximo de una por cláusula en los conjuntos de velocidad. |
SELECT Count() AS _Purchase_Rejections_Per_Email SELECT DistinctCount(@"purchaseId") |
WHEN <BooleanExpression> | La instrucción WHEN es como las cláusulas WHEN en las otras instrucciones, pero está solo en la sección Condición de reglas y conjuntos de velocidad. Especifica una condición booleana que determina si se debe ejecutar toda la regla, el conjunto de velocidades o la regla de enrutamiento. Se puede usar un máximo de uno en la sección Condición de todos los tipos de reglas y conjuntos de velocidad. |
WHEN Model.Risk(). Puntuación > 400 |
DO <Función de acción> | Una instrucción DO se utiliza para realizar alguna acción al final de la ejecución de la regla. Esta instrucción solo se puede usar en acciones posteriores a la decisión. | DO SetResponse(name = @”firstname” + @”lastname”) |
Hacer referencia a atributos y variables
Puede utilizar el operador de signo arroba (@) para hacer referencia a un atributo del evento actual.
Variable | Descripción | Ejemplo |
---|---|---|
@ | El signo arroba (@) se utiliza para hacer referencia a un atributo del evento entrante. El atributo se puede enviar como parte de la carga de la solicitud o Microsoft Dynamics 365 Protección contra fraudes podría generarlo. Después del signo arroba (@), especifique la ruta completa del atributo al que desea hacer referencia. Incluya la ruta entre comillas (por ejemplo, @"address.city"). Si el atributo al que se hace referencia no es parte de la carga útil del evento, se devuelve el valor predeterminado para ese tipo: 0,0 para cadenas dobles y vacía para cadenas, etc. El tipo del atributo se deduce del contexto en el que se usa el atributo. Si no se proporciona suficiente contexto, el tipo String se usa por defecto. Para obtener información sobre la inferencia del tipo, consulte Inferencia de tipo de atributos. |
@"address.city" |
$ | Se usa un signo de dólar ($) para hacer referencia a una variable definida en una instrucción LET . Para obtener más información, consulte Definir sus propias variables. | $fullName |
@a[x] | Esta variable se utiliza para indexar variables de matriz. Si la carga útil de solicitud para una valoración contiene una matriz de elementos, puede acceder a elementos individuales de la matriz utilizando la siguiente sintaxis: @"productList[0]". Para acceder a un atributo de ese elemento, use la siguiente sintaxis: @"productList[0].productId" |
@"productList[0].productId" @"paymentInstrumentList[3].type" |
Existe | Este operador verifica si existe una variable en la carga útil del evento. Exists(String variable) |
Exists(@"user.email") |
Request.CorrelationId() | Esta función hace referencia al id. de correlación único del evento que se está evaluando. Puede utilizar esta función para acceder al ID de correlación de un evento en la experiencia de reglas y pasarlo a una llamada externa como parámetro o encabezado. | External.MyExternalCall(Request.CorrelationId()) |
.GetDiagnostics() | Esta función se puede utilizar para descubrir información importante de diagnóstico y depuración de una llamada externa o una respuesta de evaluación externa. Para una llamada externa, el objeto de Diagnóstico contiene la carga útil de la solicitud, el punto final, el código HttpStatus, el mensaje de error y la latencia. El punto final no está disponible en el objeto Diagnóstico para una respuesta de evaluación externa. Cualquiera de estos campos se puede usar en las reglas una vez creado el objeto Diagnostics mediante su método de extensión correspondiente". GetDiagnostics()" | LET $extResponse = External. myCall(@"device.ipAddress") LET $extResponseDiagnostics = $extResponse.GetDiagnostics() OBSERVE Output(Diagnostics = $extResponseDiagnostics ) WHEN $extResponseDiagnostics. HttpStatusCode != 200 |
Definiendo tus propias variables
Puedes usar la palabra clave LET para definir una variable. A continuación, se puede hacer referencia a esa variable en otros lugares de la regla. Anteponga todas las variables con un signo de dólar ($). Por ejemplo, declare la siguiente variable.
LET $fullName = @"user.firstName" + @"user.lastName"
Variables que se declaran en una instrucción LET solo se puede usar dentro del alcance de la regla o el conjunto de velocidades en el que se define la instrucción.
Por ejemplo, para hacer referencia a la variable del ejemplo anterior, puede escribir la siguiente declaración.
WHEN $fullName == "Kayla Goderich"
Billete
Una vez que se define una variable, no se puede actualizar con un nuevo valor.
Funciones variables globales
Puede usar las funciones variables globales para establecer y obtener variables dentro de las reglas. Una vez establecidas las variables globales, se puede acceder a ellas dentro de una regla de decisión, velocidad, reglas de enrutamiento y acciones posteriores a la decisión dentro del mismo entorno o entornos secundarios. La jerarquía de usos de Protección contra fraudes se muestra en la tabla siguiente. Por ejemplo, si establece variables globales en una regla dentro del entorno raíz, Protección contra fraudes puede recuperar su valor dentro de cualquier otra regla de la misma evaluación en el mismo entorno, o cualquier entorno secundario.
Operator | Descripción | Ejemplo |
---|---|---|
SetVariables(k=v) | Esta función se puede usar para establecer pares clave-valor, es decir, establecer valores en variables. | Do SetVariables(key= 123, email=@"user.email") |
GetVariable("k") | Esta función se puede utilizar para acceder a las variables que ya están configuradas. En los casos en los que se accede a variables que nunca se establecen, se devuelve un valor predeterminado. | GetVariable("key").AsInt() GetVariable("email").AsString() GetVariable("key").AsDouble() GetVariable("key").AsBool() GetVariable("key").AsDateTime() GetVariable("key").AsJsonObject() GetVariable("key").AsJsonArray() |
Nota:
Las variables globales son específicas de una sola transacción para una evaluación determinada. Un conjunto de variables dentro de una transacción no se puede recuperar de otra transacción u otra evaluación.
Funciones de decisión
Las funciones de decisión se utilizan en reglas para especificar una decisión.
Tipo de decisión | Descripción | Ejemplo |
---|---|---|
Approve() | Este tipo especifica una decisión de Aprobar. Puede incluir un motivo de aprobación y otro mensaje de apoyo. Sobrecargas:
|
RETURN Approve() RETURN Approve("en lista segura") RETURN Approve ("en lista segura", "no escalar") |
Reject() | Este tipo especifica una decisión de Rechazar. Puede incluir un motivo de rechazo y otro mensaje de apoyo. Sobrecargas:
|
RETURN Reject() RETURN Reject("país de embargo") RETURN Reject("país de embargo", "no escalar") |
Review() | Este tipo especifica una decisión de Revisar. Puede incluir un motivo de revisión y otro mensaje de apoyo. Sobrecargas:
|
RETURN Review() RETURN Review("usuario en la lista de observación") RETURN Review("usuario en lista de observación", "no escalar") |
Challenge (String challengeType) | Este tipo especifica una decisión de Desafío y un tipo de desafío. También puede incluir un motivo de cuestionamiento y otro mensaje de apoyo. Sobrecargas:
|
RETURN Challenge ("SMS") RETURN Challenge ("SMS", "presunto bot") RETURN Challenge ("SMS", presunto bot", "no escalar") |
Funciones de observación
Las funciones de observación se pueden utilizar para tomar datos del contexto actual y escribirlos en otro lugar.
Tipo de retorno | Descripción | Ejemplo |
---|---|---|
Output(k=v) | Esta función se puede usar para pasar pares clave-valor a la sección CustomProperties de la respuesta de la API. El par clave-valor se anidaría dentro de un objeto cuyo nombre sería el mismo que el nombre de la cláusula que contiene la instrucción Output(). | Output(key="test", email=@"user.email", countryRegion=Geo.CountryRegion(@"device.ipAddress")) |
Trace(k=v) | Esta función se puede utilizar para desencadenar un evento de seguimiento y enviar pares clave-valor al Espacio de nombres de seguimiento de eventos FraudProtection.Trace.Rule. | Trace(key="Manual Review", ip=@"device.ipAddress") |
SetResponse(String sectionName, k=v) | Esta función se puede usar para pasar pares clave-valor a la sección CustomProperties de la respuesta de la API. SectionName es un parámetro opcional que se puede omitir. Esta función solo se puede usar en Acciones posteriores a la decisión; no está disponible en la regla de decisión | SetResponse("Scores", bot = Model.Bot(@deviceContextId), risk=Model.Risk()) SetResponse(test=”123”) |
Response.Decision() | Esta función hace referencia a la decisión para la evaluación actual que se está evaluando. | Response.Decision() == "Aprobar" |
Funciones de agregado
Función | Description | ejemplo |
---|---|---|
Count() | Esta función devuelve el número de veces que ha ocurrido un evento. | SELECT Count () AS numCompras |
DistinctCount(String key) | Esta función devuelve el número de valores distintos para la propiedad especificada. Si la propiedad especificada es nula o está vacía para un evento entrante, el evento no contribuye a la agregación. | SELECT DistinctCount(@"device.ipAddress") AS distinctIPs |
Sum(Double value) | Esta función devuelve la suma de valores de una propiedad numérica especificada. | SELECT Sum(@"totalAmount") AS totalSpending |
Operadores logicos
Operador | Descripción | Ejemplo |
---|---|---|
and (&&) | Lógico And | Model.Risk(). Puntuar > 500 && Model.Risk(). Puntuación < 800 Model.Risk(). Puntuar > 500 y Model.Risk(). Puntuación < 800 |
o (||) | Lógico Or | @"email.isEmailUsername" == false || @"email.isEmailValidated" == false @"email.isEmailUsername" == false o @"email.isEmailValidated" == false |
not | Negación lógica | @"email.isEmailUsername" not(!) @"email.isEmailUsername" |
Operadores de comparación
Fraud Protection es compatible con todos los estándares C# de operaciones de comparación e igualdad. Esta tabla incluye algunos ejemplos de operadores que pueden resultarle útiles. Si aplica estos operadores a las cadenas da como resultado comparaciones lexicográficas.
Operador | Descripción | Ejemplo |
---|---|---|
== | Este operador verifica la igualdad. | @"user.countryRegion" == @"shippingAddress.countryRegion" |
!= | Este operador verifica la desigualdad. | @"user.countryRegion" != @"shippingAddress.countryRegion" |
> | Este operador verifica si el primer valor es mayor que el segundo valor. | Model.Risk(). Puntuación > 500 |
< | Este operador verifica si el primer valor es menor que el segundo valor. | Model.Risk(). Puntuación < 500 |
>= | Este operador verifica si el primer valor es mayor que o igual al segundo valor. | Model.Risk(). Puntuación >= 500 |
<= | Este operador verifica si el primer valor es menor que o igual al segundo valor. | Model.Risk(). Puntuación <= 500 |
X ? Y : Z | Este operador comprueba si la condición X es true o no. Si es true, se ejecuta la instrucción Y y se devuelve su resultado. De lo contrario, se ejecuta la instrucción Z y se devuelve su resultado. También se pueden combinar varias comprobaciones lógicas mediante corchetes para definir una lógica IF <> THEN <> ELSE <> anidada. | LET $riskbucket = Model.Risk(). Puntuación > 500 ? "Alto" : (Model.Risk(). Puntuación > 300 ? "Medio" : "Bajo") |
Funciones matemáticas
Fraud Protection es compatible con todos los métodos matemáticos y todos los operadores aritméticos de C# estándar. Esta tabla incluye algunos ejemplos de métodos que pueden resultarle útiles.
Operador | Descripción | Ejemplo |
---|---|---|
Math.Min(Double value1, Double value2) | Este operador calcula el mínimo de dos valores. | Math.Min(Model.Risk(). Score, Model.Bot(@"deviceFingerprinting.id"). Puntuación) |
Math.Max(Double value1, Double value2) | Este operador calcula el máximo de dos valores. | Math.Max(Model.Risk(). Score, Model.Bot(@"deviceFingerprinting.id"). Puntuación) |
RandomInt(Integer min, Integer max) | Este operador devuelve un número entero aleatorio en el rango proporcionado, incluido el valor mínimo y excluyendo el valor máximo. | RandomInt(0, 100) |
Operadores de fecha y hora
Fraud Protection es compatible con las propiedades, métodos y operadores DateTime estándar de C#. Esta tabla incluye algunos ejemplos de funciones y propiedades que pueden resultarle útiles.
Operador | Descripción | Ejemplo |
---|---|---|
UtcNow | Este operador obtiene un objeto DateTime que se establece en la fecha y hora actuales en la computadora, expresado como UTC. | DateTime.UtcNow |
Hoy | Este operador obtiene un objeto que se establece en la fecha actual, donde el componente de hora se establece en 00:00:00. | DateTime.Today |
Restar | Este operador devuelve un nuevo valor DateTime restando una fecha y hora especificadas de una fecha y hora de entrada. | DateTime.UtcNow.Subtract(@var1. ToDateTime()) |
DaysSince(DateTime date) | Este operador devuelve un número entero que representa el número de días que pasaron entre el valor de Fecha y hora especificado y la fecha actual (expresada como hora universal coordinada [UTC]). | DaysSince(@"user.CreationDate") |
Year | Este operador obtiene el componente de año de la fecha representada por esta instancia. | @"user.creationDate".Year |
Fecha | Este operador obtiene un nuevo objeto que tiene la misma fecha que esta instancia pero el valor de tiempo se establece en 00:00:00 (media noche). | @"user.creationDate".Date |
Operadores de conversión de tipos
Para obtener información sobre la referencia de tipos, consulte la sección Inferencia de tipo de atributos más adelante en este artículo.
Operador | Descripción | Ejemplo |
---|---|---|
Convert.ToDateTime | Este operador convierte la cadena a fecha y hora y convierte la fecha y hora a una cadena usando el formato especificado. |
Convert.ToDateTime(@"user.creationDate").ToString("yyyy-MM-dd") |
Convert.ToInt32 | Este operador convierte el valor especificado en Int32. |
Convert.ToInt32(@var) |
Convert.ToDouble | Este operador convierte el valor especificado en Double. |
Convert.ToDouble(@var) |
Funciones de cadenas
Fraud Protection es compatible con el estándar C# clase de cadena. Esta tabla incluye algunos ejemplos de funciones y operadores que pueden resultarle útiles.
Operador | Descripción | Ejemplo |
---|---|---|
StartsWith() | Este operador verifica si una cadena comienza con un prefijo especificado. | @"user.phoneNumber".StartsWith("1-") |
EndsWith() | Este operador verifica si una cadena termina con un sufijo especificado. | @"user.email".EndsWith("@contoso.com") |
IsNumeric() | Este operador verifica si una cadena contiene un valor numérico. | @"user.email".IsNumeric() |
Length | Este operador devuelve el número de caracteres de la cadena. |
@"user.username".Length |
ToDateTime() | Este operador convierte una cadena en un objeto DateTime. | @"user.creationDate".ToDateTime() |
ToDouble() | Este operador convierte una cadena en un valor Double. | @"productList.purchasePrice".ToDouble() |
ToInt32() | Este operador convierte una cadena en un valor Int32. | @"zipcode".ToInt32() |
ToUpper() | Este operador devuelve una copia de esta cadena convertida en mayúsculas. | @"user.username". ToUpper() |
ToLower() | Este operador devuelve una copia de esta cadena convertida en minúsculas. | @"user.username". ToLower() |
IndexOf() | Este operador informa del índice de base cero de la primera aparición de una subcadena determinada dentro de la cadena especificada. | @"user.username". IndexOf("@") |
LastIndexOf() | Este operador informa del índice de base cero de la última aparición de una subcadena determinada dentro de la cadena especificada. | @"user.username". LastIndexOf("@") |
Subcadena() | Este operador devuelve una subcadena a partir de un índice de base cero dentro de una cadena, con un segundo parámetro opcional que especifica la longitud de la subcadena deseada. | @"user.username". Subcadena(0,5) |
IsNullOrEmpty() | Este operador devuelve si la cadena especificada es null o está vacía. De lo contrario, devuelve false. | @"user.username". IsNullOrEmpty() |
IgnoreCaseEquals() | Este operador devuelve true si las dos cadenas son iguales, independientemente de las diferencias de mayúsculas y minúsculas. De lo contrario, devuelve false. | @"user.username". IgnoreCaseEquals(@"user.email") |
Contains() | Este operador verifica si una cadena contiene otra cadena. | @"productList.productName".Contains("Xbox") |
ContainsOnly() | Este operador verifica si una cadena contiene solo los juegos de caracteres proporcionados. | @"zipcode".ContainsOnly(CharSet.Numeric) |
ContainsAll() | Este operador verifica si una cadena contiene todos los juegos de caracteres proporcionados. | @"código postal". ContainsAll(CharSet.Numeric|CharSet.Hyphen) |
ContainsAny() | Este operador verifica si una cadena contiene cualquiera de los juegos de caracteres proporcionados. | @"código postal". ContainsAny(CharSet.Numeric|CharSet.Hyphen) |
Usar CharSet en ContainsOnly, ContainsAll y ContainsAny
Los siguientes tipos de caracteres se pueden usar en ContainsOnly, ContainsAll y ContainsAny.
Tipo de carácter | Description |
---|---|
Alfabético | a-z, A-Z |
Apóstrofe | ' |
Signo y | @ |
Barra invertida | \ |
Coma | , |
Hyphen | - |
Numeric | 0-9 |
Período | . |
Barra diagonal | / |
Guion bajo | _ |
Espacio en blanco | Único espacio |
Funciones de detección de contenido incomprensible
Estas funciones ayudan a evitar fraudes mediante la detección rápida y eficaz de si los campos clave de entrada de usuario (como nombres y direcciones) contienen gibberish.
Función | Description | Ejemplo |
---|---|---|
GetPattern(String).maxConsonants | Número máximo de consonantes contiguos en una cadena que no están separadas por un vocal. Por ejemplo, maxConsonants para la cadena "01gggyturah" es 5. | GetPattern(@"user.email").maxConsonants |
GetPattern(String).gibberScore | Puntuación basada en ML entre 0 y 1; 0 significa que es más probable que sea un galimatías y 1 significa que es menos probable que sea un galimatías. | GetPattern(@"user.email").gibberScore |
Nota:
El modelo de detección de galimatías se basa en la frecuencia de dos caracteres alfanuméricos consecutivos en documentos en inglés disponibles públicamente. Se supone que cuanto más frecuentemente aparecen dos caracteres alfanuméricos consecutivos en documentos públicos, menos probable es que sean galimatías. El modelo debe proporcionar puntuaciones razonables para los textos en inglés y puede utilizarse para detectar si los nombres o direcciones contienen galimatías. Sin embargo, es posible que el modelo no sea adecuado para abreviaturas, como formas abreviadas para estados (AZ, TX, etc.) y tampoco se puede utilizar para validar nombres o direcciones. Por último, el modelo no ha sido probado para textos que no estén en inglés.
Funciones de detección de patrones
Estas funciones ayudan a evitar fraudes mediante la detección rápida y eficaz de si los campos clave de entrada de usuario (como nombres y direcciones) contienen gibberish.
Función | Description | Ejemplo |
---|---|---|
Patterns.IsRegexMatch(string pattern, string source) | Realiza una coincidencia de expresión regular (regex) de patrón de cadena con un origen de cadena. El resultado es un valor booleano, es decir, true (que indica que la cadena dada coincide con el patrón) o false (que indica que no coincide). | Patterns.IsRegexMatch("^.com$", @ "user.email") Patterns.IsRegexMatch( "^.[aAeEiIoOuU]+.*$", @ "user.firstname") |
Nota:
- El patrón de cadena debe ser una entrada constante.
- La función devuelve false (el resultado predeterminado) si el tiempo de evaluación supera los 10 milisegundos.
- Todas las limitaciones que no admiten NonBacktracking también se aplican a la función IsRegexMatch.
Funciones del modelo
Las funciones de modelo ejecutan los distintos modelos de fraude y son útiles cuando la evaluación no ejecuta automáticamente uno o varios modelos de fraude. Cuando se ejecutan las funciones del modelo, la información sobre el modelo que se ejecuta durante la evaluación de la regla se genera en la llamada API de evaluación del fraude. A continuación, la regla tiene acceso al resultado del modelo, incluida la puntuación, las razones y más, que se puede usar para el procesamiento de reglas y la toma de decisiones.
Tipo de modelo | Description | Ejemplo |
---|---|---|
Riesgo | Evalúa la probabilidad de que una sesión sea de riesgo. | Modelo.Riesgo() |
Bot | Evalúa la probabilidad de que una sesión sea iniciada por un bot. Pase un ID de contexto de dispositivo que se envió a la solución de huellas dactilares de dispositivos de Fraud Protection. | Model.Bot(@deviceContextId) |
Funciones geográficas
Las geo funciones proporcionan resolución al convertir una dirección IP en una dirección geográfica. Las funciones geográficas se pueden invocar en las reglas solo mediante el uso de direcciones IP que forman parte de la carga útil de la transacción o recopiladas por Fraud Protection mediante el uso de huella digital de dispositivos. Las funciones geográficas no se pueden invocar para valores de IP arbitrarios.
Operador | Descripción | Ejemplo |
---|---|---|
Geo.RegionCode(String ip) | Este operador convierte una dirección IPv4 a su código de región de EE. UU. (es decir, la abreviatura del nombre del estado o territorio de EE. UU.). Por ejemplo, para una dirección IP en el estado de Washington, se devuelve "WA". |
Geo.RegionCode(@"device.ipAddress") |
Geo.Region(String ip) | Este operador convierte una dirección IPv4 a su región de EE. UU. (es decir, el nombre del estado o territorio de EE. UU.). Por ejemplo, para una dirección IP en el estado de Washington, se devuelve "Washington". |
Geo.Region(@"device.ipAddress") |
Geo.CountryCode(String ip) | Este operador convierte una dirección IPv4 a su código de país / región. Por ejemplo, para una dirección IP en Australia, se devuelve "AU". |
Geo.CountryCode(@"device.ipAddress") |
Geo.CountryRegion(String ip) | Este operador convierte una dirección IP en un nombre de región. Por ejemplo, para una dirección IP en Australia, se devuelve "Australia". |
Geo.CountryRegion(@"device.ipAddress") |
Geo.City(String ip) | Este operador convierte una dirección IPv4 en un nombre de ciudad. Por ejemplo, para una dirección IP en la ciudad de Nueva York, se devuelve "Nueva York". |
Geo.City(@"device.ipAddress") |
Geo.MarketCode(String ip) | Este operador convierte una dirección IPv4 al código de mercado de la dirección IP. Por ejemplo, para una dirección IP de Canadá, se devuelve "NA" (Norteamérica). |
Geo.MarketCode(@"device.ipAddress") |
Funciones de atributos del dispositivo
Operador | Descripción | Ejemplo |
---|---|---|
Device.GetFullAttributes(String sessionId) | Devuelve un conjunto completo de atributos de dispositivo para la sesión de huellas digitales del dispositivo especificada. Consulte Configuración de la huella digital del dispositivo para ver el conjunto completo de atributos de dispositivo. | Device.GetFullAttributes(@"deviceFingerprinting.id") |
Device.GetAttributes(String sessionId) | Devuelve un subconjunto más pequeño de atributos de dispositivo para la sesión de huellas digitales del dispositivo especificada. El subconjunto es una lista mantenida por Protección contra fraudes y contiene los atributos más usados. | Device.GetAttributes(@"deviceFingerprinting.id") |
Device.GetSelectedAttributes(String sessionId, String attributeName) | Devuelve hasta 20 atributos de dispositivo para la sesión de huella digital del dispositivo especificada. La lista de atributos deseados se debe especificar como parámetros separados por comas. | Device.GetSelectedAttributes(@"deviceFingerprinting.id", "deviceAsn","deviceCountryCode") |
Device.GetSpeedOfAdvisor(String sessionId) | Devuelve la velocidad de desplazamiento máxima de un dispositivo en millas por hora. Protección contra fraudes determina la velocidad máxima tomando las últimas cinco sesiones consecutivas de huellas digitales y calculando la velocidad del dispositivo de la sesión a la sesión, devolviendo el máximo. El dispositivo se identifica a través de sesiones mediante el identificador de cookie. | Device.GetSpeedOfAdvisor(@"deviceFingerprinting.id") |
Funciones de búsqueda de BIN
Las funciones bin Lookup proporcionan información de cuenta de tarjeta de pago (por ejemplo, red de tarjetas, tipo de tarjeta, código de país de tarjeta, categoría de tarjeta) en función del número de identificación bancaria (BIN). Los datos para la búsqueda bin se originan en proveedores de datos BIN de terceros líderes y, a continuación, se mantiene mediante protección contra fraudes.
Operator | Descripción | Ejemplo |
---|---|---|
BIN.Lookup(String BIN).cardNetwork | Esta función busca BIN y devuelve la red de tarjetas (por ejemplo, Visa, Mastercard). |
BIN.Lookup(@"card.bin").cardNetwork |
BIN.Lookup(String BIN).cardType | Este operador busca BIN y devuelve el tipo de tarjeta (por ejemplo, débito, crédito). |
BIN.Lookup(@"card.bin").cardType |
BIN.Lookup(String BIN).issuer | Este operador busca BIN y devuelve la organización emisora. |
BIN.Lookup(@"card.bin").issuer |
BIN.Lookup(String BIN).countryCode | Este operador busca BIN y devuelve el código de país ISO de dos letras de la tarjeta. |
BIN.Lookup(@"card.bin").countryCode |
BOTE. Lookup(String BIN).cardCategory | Este operador busca BIN y devuelve la categoría de tarjetas (por ejemplo, Prepago, Corporativo, Recompensas). |
BOTE. Lookup(@"card.bin").cardCategory |
BIN.Lookup(String BIN).error | Este operador busca BIN y devuelve un mensaje de error si no se encontró la bin. |
BIN.Lookup(@"card.bin").error |
Funciones de lista
Fraud Protection le permite cargar listas personalizadas y hacer referencia a ellas en el idioma. Para obtener información sobre cómo cargar estas listas, consulte Administrar listas. Para obtener más información sobre cómo usar listas en reglas, consulte la sección Usar listas en reglas más adelante en este artículo.
Operador | Descripción | Ejemplo |
---|---|---|
ContainsKey( String listName, String columnName, String key) |
Este operador comprueba si una clave está contenida en la columna especificada en una lista de Fraud Protection. En el ejemplo de la columna siguiente se comprueba si la columna "Correos electrónicos" de la lista "Lista de soporte técnico de correo electrónico" contiene la variable @"user.email ". |
ContainsKey("Lista de soporte por correo electrónico", "Correos electrónicos", @"user.email") |
Lookup( String listName, String keyColName, String valueColName) |
Este operador busca el valor de una clave en una columna de lista de Fraud Protection. Se deben especificar tanto el nombre de la columna que contiene la clave como el nombre de la columna que contiene el valor. El valor siempre se devuelve como una cadena. Si no se encuentra la clave, y el parámetro defaultValue no se especifica, se devuelve "Desconocido". En el ejemplo de la columna siguiente se busca el valor de la variable @"user.email" en la columna Correos electrónicos de la lista Lista de soporte técnico de correo electrónico. Si se encuentra una coincidencia, la función devuelve el valor de la columna Estado de la fila coincidente de la lista. Si no se encuentra una coincidencia, la función devuelve 0. |
Lookup("Lista de soporte por correo electrónico", "Correos electrónicos", @"user.email", "Estado",0) |
In | Este operador verifica si una clave está contenida en una lista de valores separados por comas. | In(@"user.countryRegion", "US, MX, CA") |
InSupportList | Este operador comprueba si un atributo está en una lista de soporte técnico. | InSupportList('Email Support List', @"user.email") |
IsSafe | Este operador comprueba si una entidad está marcada como Segura en una lista de soporte técnico. | IsSafe('Email Support List', @"user.email") |
IsBlock | Este operador comprueba si una entidad está marcada como Bloquear en una lista de soporte técnico. | IsBlock('Email Support List', @"user.email") |
IsWatch | Este operador comprueba si una entidad está marcada como Inspección en una lista de soporte técnico. | IsWatch('Email Support List', @"user.email") |
Usar listas en reglas
Puede usar los operadores ContainsKey y Lookup para hacer referencia a listas que ha subido a Fraud Protection. Para obtener más información acerca de las listas, consulte Gestionar listas.
ContainsKey
Para verificar si una de sus listas contiene un valor específico, use el operador ContainsKey. Especifique el nombre de la lista, la columna y la clave que desea verificar.
Por ejemplo, cargue una lista de una sola columna de direcciones de correo electrónico en riesgo y asígnele el nombre Lista de correo electrónico de riesgo.
Correo electrónico |
---|
Kayla@contoso.com |
Jamie@bellowscollege.com |
Marie@atatum.com |
Luego puede usar la siguiente sintaxis para rechazar todas las transacciones de las direcciones de correo electrónico de riesgo en esta lista.
RETURN Reject("risky email")
WHEN ContainsKey("Risky email list", "Email", @"user.email")
Esta cláusula verifica si la columna "Correos electrónicos" en la lista, "Lista de correo electrónico de riesgo" contiene la variable @email. Si lo hace, la transacción es rechazada.
Buscar
Para listas de varias columnas, puede utilizar el operador Lookup para comprobar el valor de una columna para una clave específica.
Por ejemplo, crea una lista que tiene una columna para direcciones de correo electrónico y otra columna que indica el estado de esas direcciones de correo electrónico. Nombra esta lista Lista de correo electrónico.
Correo electrónico | Estado |
---|---|
Kayla@contoso.com |
De riesgo |
Jamie@bellowscollege.com |
De riesgo |
Marie@atatum.com |
De riesgo |
Camille@fabrikam.com |
Caja fuerte |
Miguel@proseware.com |
Caja fuerte |
Tyler@contoso.com |
Caja fuerte |
Luego puede usar la siguiente sintaxis para rechazar todas las transacciones de las direcciones de correo electrónico en esta lista que tengan un estado de De riesgo.
RETURN Reject("risky email")
WHEN Lookup("Email List", "Email", @"user.email", "Status") == "Risky"
Esta cláusula busca la clave @"user.email" en la columna "Email" en la lista, "Email List" y compruebe si el valor en la columna "Status" es De riesgo. Si lo hace, la transacción es rechazada.
Si la clave @"user.email" no se encuentra en la lista, Fraud Protection devuelve "Desconocido".
También puede especificar su propio valor predeterminado como el quinto parámetro. Para obtener más información, consulte la sección Operadores lógicos descrita anteriormente en este artículo.
El operador Lookup siempre devuelve un valor String. Para convertir este valor en un valor Int, Double o DateTime, use un operador de conversión de tipo.
Usar llamadas, evaluaciones y velocidades externas
- Para hacer referencia a una llamada externa, escriba Externo, seguido de la llamada externa a la que desea hacer referencia. Para más información, vea Usar una llamada externa en las reglas.
- Para hacer referencia a una valoración externa, escriba Evaluaciones, seguido de la evaluación externa a la que desea hacer referencia. Para más información, vea Usar evaluaciones externas en las reglas.
- Para hacer referencia a una velocidad, escriba Velocidad, seguido de la velocidad a la que desea hacer referencia. Para más información, vea Usar una velocidad en las reglas.
Inferencia de tipo de atributos
Los tipos de variable se deducen del contexto en el que se usan. Estos son algunos ejemplos:
- En la expresión WHEN @isEmailValidated, la variable se interpreta como un valor Booleano.
- En la expresión Model.Risk(). Puntuación > 500, la variable se interpreta como un valor Double .
- En la expresión @"user.creationDate".Year < DateTime.UtcNow.Year, la variable se interpreta como un valor DateTime.
Si no hay suficiente contexto para inferir el tipo de una variable, se considera un valor String. Por ejemplo, en la expresión Model.Risk(). Score < Model.Bot(@"deviceFingerprinting.id"). Puntuación, ambas variables se interpretan como cadenas.
Para especificar el tipo de una variable que no es de cadena, use un operador de conversión de tipos.
Matrices y objetos JSON
FQL admite la construcción de objetos estructurados complejos como variables locales, que se pueden pasar a la llamada externa o a la evaluación externa en formato JSON. Al igual que con todos los demás locales en FQL, las matrices y los objetos son inmutables una vez creados.
Matrices JSON
Las matrices se crean encerrando expresiones entre paréntesis:
LET $arr1 = [ "hello", "world" ]
LET $arr2 = [
"this is also an array",
78.4,
$arr1,
@"user.email",
External.MyExtcall()
]
Objetos JSON
Los objetos se crean con llaves:
LET $obj1 = { isObject: true }
LET $obj2 = {
numberField: 7,
fieldIs: "string",
internalObj: $obj1,
inline: {
innerInnerField: "hello"
}
}
Funciones FQL para matrices y objetos JSON
Sintaxis | Descripción | Ejemplo |
---|---|---|
myArr[0] | Puede usar esta sintaxis para acceder a un elemento de matriz específico por su índice. | myArr [0].property myArr [0][0] myArr [0][0]. property myArr [0].property[0] myArr [0].property[0].property |
Donde myArr, en los ejemplos anteriores, es una matriz. El origen de esta matriz puede ser la @@payloadProperty, la respuesta de evaluación externa, la respuesta de llamada externa, la variable local o una variable global.
A continuación se muestran ejemplos de cómo usar la sintaxis basada en orígenes de matriz diferentes:
- Origen de la matriz: carga
LET $sample = @@"myArr[0]".AsJsonArray()
RETURN Approve()
WHEN $sample[0].AsString() == "a"
- Origen de la matriz: variable local
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"
Sintaxis | Descripción | Ejemplo |
---|---|---|
Array.GetValue (TargetArray . AsJsonArray(), matchKey, matchValue, lookupKey) | Con esta función, puede acceder al primer elemento de matriz que coincida con una condición. Devuelve un valor |
Array.GetValue(@@"payloadProperty". AsJsonArray(), matchKey, matchValue, lookupKey) |
Array.GetValues(TargetArray . AsJsonArray(), matchKey, matchValue) | Con esta función, puede acceder a un conjunto de elementos de matriz que coincidan con una condición. Devuelve una matriz |
Array.GetValues(@@"payloadProperty". AsJsonArray(), matchKey, matchValue) |
A continuación se muestran algunos ejemplos más detallados de cómo usar la sintaxis anterior en función de diferentes orígenes de matriz:
Origen de matriz | Array.GetValue | Array.GetValues |
---|---|---|
Evaluaciones externas | 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" |
Carga útil | Ejemplo de carga útil: {"group":[{"item1": "a", "item2": "a1"}, {"item1": "b", "item2": "b1"}]} LET $sample = Array.GetValue(@@"group". AsJsonArray(), "item1", "a", "item2") RETURN Approve()WHEN $sample. AsString() == "a1" |
Ejemplo de carga útil: { "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" |
Variables globales | Uso del mismo ejemplo de carga anterior Do SetVariables(Var=@@"group") LET $group = GetVariable("Var"). AsJsonObject() LET $value = Array.GetValue($group, "item1", "a", "item2") RETURN Approve() WHEN $value. AsString() == "a1" |
Uso del mismo ejemplo de carga anterior Do SetVariables(Var=@@"group") LET $group = GetVariable("Var"). AsJsonObject() LET $arr = Array.GetValues($group. AsJsonArray(), "item1", "a") RETURN Approve() |
Llamada externa | Respuesta de llamada externa (myCall): {"group":[{"item1": "a", "item2": "a1"}, {"item1": "b", "item2": "b1"}]} |
Respuesta de llamada externa (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" |
Conversión de tipos para matrices y objetos JSON
A continuación , . Como<Type>() se admiten en JsonObject:
- AsString()
- AsInt()
- AsDouble()
- AsDateTime()
- AsBool()
- AsJsonArray()
- AsJsonObject()
Al usar cualquiera de los dos métodos auxiliares de matriz, Array.GetValue o Arrays.GetValues, debe escribir la conversión mediante . Como<Type>(). Ejemplo:
LET $arr = {myArr:[{item1: "red", number: 45}, {item1: "blue", number: 56}, {item1: "green", number: 33}]} LET $sample = Array.GetValues($arr.myArr.AsJsonArray(), "item1", "blue")
Una vez que haya convertido los datos en un objeto o matriz JSON explícitamente, puede usar . Como<Type>() para convertir a otro tipo de datos, si es necesario. Ejemplo:
RETURN Approve() WHEN $sample[0].number.AsInt() == 56
Cuando se usa @@, los datos se convierten implícitamente en un objeto JSON. Si desea convertir el objeto JSON en otro tipo de datos, debe usar . Como<Type>(). Ejemplo:
LET $sample = @@”user.addresses”.AsJsonArray()
Cuando desee generar una salida en un formato determinado, debe usar . Como<Type>(). Ejemplo:
LET $sample = @@”user.addresses” Output(abc = $sample.AsJsonArray())
Nota:
Procedimientos recomendados de conversión de tipos:
- Escriba siempre la conversión al final de la cadena .
- Cuando no esté seguro, escriba siempre explícitamente la conversión mediante . Como<Type>(). Ejemplo:
LET $sample = External.myCall().data[0].Item1[0].AsJsonArray()
Or
LET $sample = @@”accommodations[0].rooms”.AsJsonArray()
Funciones disponibles en Acciones posteriores a la decisión
Las siguientes funciones solo se pueden usar en Acciones posteriores a la decisión. No están disponibles en las reglas de decisión
Sintaxis | Descripción | Ejemplo |
---|---|---|
SetResponse(String sectionName, k=v) | Esta función se puede usar para pasar pares clave-valor a la sección CustomProperties de la respuesta de la API. SectionName es un parámetro opcional que se puede omitir. | SetResponse("Scores", bot = Model.Bot(@deviceContextId), risk=Model.Risk()) SetResponse(test=”123”) |
Response.Decision() | Esta función hace referencia a la decisión para la evaluación actual que se está evaluando. | Response.Decision() == "Aprobar" |