Referência de linguagem de fraude
O Microsoft Dynamics 365 tem sua própria linguagem avançada e expressiva para ajudá-lo a definir e expressar a estratégia de fraude. Essa linguagem tem muitas semelhanças com C# e SQL e foi desenvolvida para oferecer a flexibilidade necessária para tratar de fraudes em cenários de negócios exclusivos.
Você pode usar esta linguagem hoje para definir regras e velocidades. Para obter mais informações, consulte Gerenciar regras e Executar verificações de velocidade.
Este guia de referência de linguagem de fraude inclui a lista completa de operadores, funções e instruções que compõem a linguagem:
- Instruções
- Referenciar atributos e variáveis
- Definir suas próprias variáveis
- Funções de variáveis globais
- Funções de decisão
- Funções de observação
- Funções de agregação
- Operadores lógicos
- Operadores de comparação
- Funções matemáticas
- Funções de DateTime
- Operadores de conversão de tipo
- Funções da cadeia de caracteres
- Funções de detecção diversas
- Funções de detecção de padrões
- Funções do modelo
- Funções geográficas
- Funções de atributo de dispositivo
- Funções da pesquisa do BIN
- Funções de lista
- Usando listas em regras
- Usar chamadas externas, avaliações e velocidades
- Inferência de tipo de atributos
- Matrizes e objetos JSON
- Funções disponíveis em Ações pós-decisão
Demonstrativos
Sintaxe da instrução | Descrição | Exemplo |
---|---|---|
LET <VariableName> = <Expression> | Uma instrução LET é usada para definir uma nova variável. O escopo da variável é a regra ou o conjunto de velocidade em que a variável é definida. Os nomes de variáveis devem ser prefixados por um sinal de dólar ($). Para obter mais informações, consulte Definir suas próprias variáveis. Qualquer número de instruções LET pode ser usado na seção Condição e nas cláusulas de todos os tipos de regra e conjuntos de velocidade. |
LET $fullName = @"user.firstName" + @"user.lastName" |
OBSERVE OBSERVE <ObservationFunction>(<KeyValuePairs>) |
Uma instrução OBSERVE não encerra a execução da regra com uma decisão. Apenas registra pares chave-valor na resposta da API ou nos logs de rastreamento. As regras subsequentes e as cláusulas de regra continuarão sendo executadas até que uma instrução RETURN seja atingida. Uma instrução OBSERVE precisa ser seguida de uma ou mais funções de observação. Se uma cláusula WHEN estiver presente e for avaliada como False, a instrução OBSERVE não será registrada. O máximo é um para usar em cada cláusula nas seguintes regras:
|
OBSERVE Output(reason="high score") OBSERVE TRACE(ip=@"device.ipAddress") WHEN Model.Risk(). Pontuação > 400 |
RETURN <DecisionFunction> [ ,<ObservationFunction>(<KeyValuePairs>) ] [ WHEN <BooleanExpression> ] |
Uma instrução RETURN encerra a execução da regra com uma decisão. A instrução deve especificar uma função de decisão válida: Approve(), Reject(), Challenge() ou Review(). A instrução também pode especificar uma ou mais funções de observação: Output() ou Trace() Finalmente, a instrução pode incluir uma cláusula WHEN para especificar a condição na qual ela deve fazer qualquer uma das anteriores. O máximo é um para usar por cláusula nas seguintes regras:
|
RETURN Review() RETURN Reject(), Trace(ip=@"device.ipAddress") WHEN Model.Risk(). Pontuação > 400 |
ROUTETO QUEUE <QueueName> [ WHEN <BooleanExpression> ] |
O comando ROUTETO é usado em regras de roteamento para as avaliações de correspondência direta para filas de gerenciamento de casos. A cláusula WHEN opcional pode ser usada para descrever as condições nas quais o comando deve executar o roteamento. O máximo é um para usar por cláusula nas seguintes regras de roteamento. |
ROUTETO Queue("High Value Queue") WHEN @"purchase.request.totalAmount"> 500 |
SELECT <AggregationFunction> AS <VelocityName> FROM <AssesmentType> GROUPBY <GroupExpression> [ WHEN <BooleanExpression> ] |
Uma instrução SELECT é usada em conjuntos de velocidade para definir uma velocidade. Ela deve especificar uma função de agregação. A cláusula AS exigida é usada para criar um alias para a sua velocidade. Esse alias pode ser referenciado a partir de regras. A cláusula FROM exigida é usada para especificar um tipo de avaliação para observar uma velocidade ativa. Os valores válidos são Purchase, AccountLogin, AccountCreation, Chargeback, BankEvent e CustomAssessment. A cláusula GROUPBY exigida especifica uma propriedade ou uma expressão. Todos os eventos avaliados para o mesmo valor na instrução GROUPBY serão combinados para calcular a agregação solicitada na instrução SELECT. Por exemplo, para calcular uma agregação para cada usuário, use GROUPBY@"user.userId". A cláusula WHEN opcional especifica uma expressão booleana que determina se a avaliação que está sendo processada deve ser incluída na velocidade que está sendo definida. O máximo é um para usar por cláusula nos conjuntos de velocidade. |
SELECT Count() AS _Purchase_Rejections_Per_Email SELECT DistinctCount(@"purchaseId") |
WHEN <BooleanExpression> | A instrução WHEN é como as cláusulas WHEN nas outras instruções, mas ela está sozinha na seção Condição de regras e conjuntos de velocidade. Ela especifica uma condição booliana que determina se a regra inteira, o conjunto de velocidade ou a regra de roteamento deve ser executada. O máximo é um para usar na seção Condição de todos os tipos de regras e conjuntos de velocidade. |
QUANDO Model.Risk(). Pontuação > 400 |
Função de ação <DO> | Uma instrução DO é usada para executar alguma ação no final da execução da regra. Essa instrução só pode ser usada em ações pós-decisão | DO SetResponse(name = @”firstname” + @”lastname”) |
Referenciar atributos e variáveis
Você pode usar o operador de sinal de arroba (@) para fazer referência a um atributo do evento atual.
Variável | Descrição | Exemplo |
---|---|---|
@ | Um sinal de arroba (@) é usado para fazer referência a um atributo do evento de entrada. O atributo pode ser enviado como parte da carga da solicitação ou o Microsoft Dynamics 365 Fraud Protection pode gerá-lo. Após o sinal de arroba (@), especifique o caminho completo do atributo que você deseja referenciar. Coloque o caminho entre aspas (por exemplo, @"address.city"). Se o atributo referenciado não fizer parte do conteúdo do evento, o valor padrão desse tipo será retornado: 0,0 para duplas, uma cadeia de caracteres vazia para cadeias de caracteres e assim por diante. O tipo do atributo é inferido do contexto em que o atributo é usado. Se não houver contexto suficiente, o tipo Cadeia de caracteres será usado por padrão. Para obter informações sobre a inferência de tipo, consulte Inferência de tipo de atributos. |
@"address.city" |
$ | Um cifrão ($) é usado para fazer referência a uma variável definida em uma instrução LET . Para obter mais informações, consulte Definir suas próprias variáveis. | $fullName |
@a[x] | Essa variável é usada para indexar variáveis de matriz. Se o conteúdo de solicitação de uma avaliação contiver uma matriz de itens, você poderá acessar elementos individuais da matriz usando a seguinte sintaxe: @"productList[0]". Para acessar um atributo desse elemento, use a seguinte sintaxe: @"productList[0].productId" |
@"productList[0].productId" @"paymentInstrumentList[3].type" |
Exists | Este operador verifica se existe uma variável na carga do evento. Exists(String variable) |
Exists(@"user.email") |
Request.CorrelationId() | Esta função referencia a ID de correlação exclusiva do evento que está sendo avaliada. Você pode usar essa função para acessar a ID de correlação de um evento na experiência de regras e passá-la para uma chamada externa como um parâmetro ou um cabeçalho. | External.MyExternalCall(Request.CorrelationId()) |
.GetDiagnostics() | Esta função pode ser usada para descobrir informações de diagnóstico e depuração importantes de uma chamada externa ou de uma resposta de avaliação externa. Para uma chamada externa, o objeto Diagnostics contém o conteúdo da solicitação, o ponto de extremidade, o código HttpStatus, a mensagem de erro e a latência. O ponto de extremidade não está disponível no objeto Diagnostic para uma resposta de avaliação externa. Qualquer um desses campos pode ser usado nas regras depois que o objeto Diagnostics for criado usando seu método de extensão correspondente". GetDiagnostics()" | LET $extResponse = External. myCall(@"device.ipAddress") LET $extResponseDiagnostics = $extResponse.GetDiagnostics() OBSERVE Output(Diagnostics = $extResponseDiagnostics ) WHEN $extResponseDiagnostics. HttpStatusCode != 200 |
Definir suas próprias variáveis
Você pode usar a palavra-chave LET para definir uma variável. Essa variável pode ser referenciada em outros locais da regra. Prefixe todas as variáveis por um cifrão ($). Por exemplo, você declara a variável a seguir.
LET $fullName = @"user.firstName" + @"user.lastName"
As variáveis declaradas em uma instrução LET podem ser usadas somente no escopo do conjunto de regras ou de velocidades no qual a instrução está definida.
Por exemplo, para referenciar a variável do exemplo anterior, você pode escrever a instrução a seguir.
WHEN $fullName == "Kayla Goderich"
Anotação
Depois de ser definida, uma variável não poderá ser atualizada com um novo valor.
Funções de variáveis globais
Você pode usar funções de variáveis globais para definir e obter variáveis dentro de regras. Depois que as variáveis globais são definidas, elas podem ser acessadas em uma regra de decisão, velocidade, regras de roteamento e ações pós-decisão no mesmo ambiente ou ambientes filhos. A hierarquia usada pelo Fraud Protection está listada na tabela a seguir. Por exemplo, se você definir variáveis globais em uma regra no ambiente raiz, o Fraud Protection poderá recuperar seu valor em qualquer outra regra na mesma avaliação no mesmo ambiente ou em qualquer ambiente filho.
Operador | Descrição | Exemplo |
---|---|---|
SetVariables(k=v) | Essa função pode ser usada para definir pares de valores-chave, ou seja, definir valores para variáveis. | Do SetVariables(key= 123, email=@"user.email") |
GetVariable("k") | Esta função pode ser usada para acessar as variáveis já definidas. Nos casos em que acessamos variáveis que nunca são definidas, um valor padrão é retornado. | GetVariable("key").AsInt() GetVariable("email").AsString() GetVariable("key").AsDouble() GetVariable("key").AsBool() GetVariable("key").AsDateTime() GetVariable("key").AsJsonObject() GetVariable("key").AsJsonArray() |
Observação
As variáveis globais são específicas de uma única transação para uma determinada avaliação. Uma variável definida em uma transação não pode ser recuperada de outra transação ou outra avaliação.
Funções de decisão
As funções de decisão são usadas em regras para especificar uma decisão.
Tipo de decisão | descrição | Exemplo |
---|---|---|
Approve() | Este tipo especifica uma decisão de Aprovar. Ele pode incluir um motivo da aprovação e outra mensagem de suporte. Sobrecargas:
|
RETURN Approve() RETURN Approve("on safe list") RETURN Approve ("on safe list", "do not escalate") |
Reject() | Este tipo especifica uma decisão de Rejeitar. Ele pode incluir um motivo da rejeição e outra mensagem de suporte. Sobrecargas:
|
RETURN Reject() RETURN Reject("embargo country") RETURN Reject("embargo country", "do not escalate") |
Review() | Este tipo especifica uma decisão de Analisar. Ele pode incluir um motivo da análise e outra mensagem de suporte. Sobrecargas:
|
RETURN Review() RETURN Review("user on watch list") RETURN Review("user on watch list", "do not escalate") |
Challenge(String challengeType) | Este tipo especifica uma decisão de Desafio e um tipo de desafio. Ele também pode incluir um motivo do desafio e outra mensagem de suporte. Sobrecargas:
|
RETURN Challenge ("SMS") RETURN Challenge ("SMS", "suspected bot") RETURN Challenge ("SMS", suspected bot", "do not escalate") |
Funções de observação
As funções de observação podem ser usadas para obter dados do contexto atual e gravá-los em outro local.
Tipo de retorno | descrição | Exemplo |
---|---|---|
Output(k=v) | Essa função pode ser usada para passar pares chave-valor para a seção CustomProperties da resposta da API. O par chave-valor seria aninhado em um objeto cujo nome seria o mesmo que o nome da cláusula que contém a instrução Output(). | Output(key="test", email=@"user.email", countryRegion=Geo.CountryRegion(@"device.ipAddress")) |
Trace(k=v) | Essa função pode ser usada para disparar um evento de rastreamento e enviar pares de chave-valor para o namespace de rastreamento de eventos FraudProtection.Trace.Rule. | Trace(key="Manual Review", ip=@"device.ipAddress") |
SetResponse(String sectionName, k=v) | Essa função pode ser usada para passar pares chave-valor para a seção CustomProperties da resposta da API. O sectionName é um parâmetro opcional que pode ser ignorado. Essa função só pode ser usada em Ações Pós-Decisão; ele não está disponível na Regra de Decisão | SetResponse("Pontuações", bot = Model.Bot(@deviceContextId), risk=Model.Risk()) SetResponse(test=”123”) |
Response.Decision() | Essa função faz referência à decisão para a avaliação atual que está sendo avaliada. | Response.Decision() == "Aprovar" |
Funções de agregação
Função | descrição | exemplo |
---|---|---|
Count() | Essa função retorna o número de vezes que um evento ocorreu. | SELECT Count() AS numPurchases |
DistinctCount(String key) | Essa função retorna o número de valores distintos para a propriedade especificada. Se a propriedade especificada for nula ou vazia para um evento de entrada, o evento não contribuirá para a agregação. | SELECT DistinctCount(@"device.ipAddress") AS distinctIPs |
Sum(Double value) | Essa função retorna a soma de valores para uma propriedade numérica especificada. | SELECT Sum(@"totalAmount") AS totalSpending |
Operadores lógicos
Operador | Descrição | Exemplo |
---|---|---|
and (&&) | Logical And | Modelo.Risco(). Pontuação > 500 && Model.Risk(). Pontuação < 800 Modelo.Risco(). Pontuação > 500 e Model.Risk(). Pontuação < 800 |
or (||) | Lógico Or | @"email.isEmailUsername" == false || @"email.isEmailValidated" == false @"email.isEmailUsername" == false or @"email.isEmailValidated" == false |
not | Negação lógica | @"email.isEmailUsername" not(!) @"email.isEmailUsername" |
Operadores de comparação
O Fraud Protection suporta todas as operações de comparação e igualdade do C#. Esta tabela inclui alguns exemplos de operadores que podem ser úteis. Se você aplicar esses operadores a cadeias de caracteres, ocorrerão comparações lexicográficas.
Operador | Descrição | Exemplo |
---|---|---|
== | Este operador verifica a igualdade. | @"user.countryRegion" == @"shippingAddress.countryRegion" |
!= | Este operador verifica a desigualdade. | @"user.countryRegion" != @"shippingAddress.countryRegion" |
> | Este operador verifica se o primeiro valor é maior do que o segundo valor. | Modelo.Risco(). Pontuação > 500 |
< | Este operador verifica se o primeiro valor é menor do que o segundo valor. | Modelo.Risco(). Pontuação < 500 |
>= | Este operador verifica se o primeiro valor é maior ou igual ao segundo valor. | Modelo.Risco(). Pontuação >= 500 |
<= | Este operador verifica se o primeiro valor é menor ou igual ao segundo valor. | Modelo.Risco(). Pontuação <= 500 |
X ? Y : Z | Esse operador verifica se a condição X é verdadeira ou não. Se for true, a instrução Y é executada e seu resultado é retornado. Caso contrário, a instrução Z será executada e seu resultado será retornado. Várias verificações lógicas também podem ser combinadas usando colchetes, para definir uma lógica IF THEN <> ELSE <> aninhada <> | LET $riskbucket = Model.Risk(). Pontuação > 500 ? "Alto": (Model.Risk(). Pontuação > 300 ? "Médio": "Baixo") |
Funções matemáticas
O Fraud Protection dá suporte a todos os métodos matemáticos e operadores aritméticos padrão C#. Esta tabela inclui alguns exemplos de métodos que podem ser úteis.
Operador | Descrição | Exemplo |
---|---|---|
Math.Min(Double value1, Double value2) | Este operador calcula o mínimo de dois valores. | Math.Min(Model.Risk(). Pontuação, Model.Bot(@"deviceFingerprinting.id"). Pontuação) |
Math.Max(Double value1, Double value2) | Este operador calcula o máximo de dois valores. | Math.Max(Model.Risk(). Pontuação, Model.Bot(@"deviceFingerprinting.id"). Pontuação) |
RandomInt(Inteiro mín, Inteiro máx) | Este operador retorna um número inteiro aleatório no intervalo fornecido, incluindo o valor mínimo e excluindo o valor máximo. | RandomInt(0, 100) |
Operadores DateTime
O Fraud Protection dá suporte a propriedades, métodos e operadores do DateTime padrão C#. Esta tabela inclui alguns exemplos de funções e propriedades que podem ser úteis.
Operador | Descrição | Exemplo |
---|---|---|
UtcNow | Este operador obtém um objeto DateTime definido como a data e a hora atuais no computador, expresso como UTC. | DateTime.UtcNow |
Hoje | Este operador obtém um objeto definido como a data atual, em que o componente de hora está definido como 00:00:00. | DateTime.Today |
Subtract | Esse operador retorna um novo DateTime subtraindo uma data e hora especificadas de um DateTime de entrada. | DateTime.UtcNow.Subtract(@var1. ToDateTime()) |
DaysSince(DateTime date) | Este operador retorna um inteiro que representa o número de dias transcorridos entre o valor DateTime especificado e a data atual (expressa como Tempo Universal Coordenado [UTC]). | DaysSince(@"user.CreationDate") |
Ano | Este operador obtém o componente de ano da data representada por essa instância. | @"user.creationDate".Year |
Data | Este operador obtém um novo objeto que tem a mesma data que essa instância, mas em que o valor de tempo é definido como 00:00:00 (meia-noite). | @"user.creationDate".Date |
Operadores de conversão de tipo
Para obter informações sobre a inferência de tipos, consulte a seção Inferência de tipos de atributos mais adiante neste artigo.
Operador | Descrição | Exemplo |
---|---|---|
Convert.ToDateTime | Esse operador converte a cadeia de caracteres em datatime e converte datatime em uma cadeia de caracteres usando o formato especificado. |
Convert.ToDateTime(@"user.creationDate").ToString("yyyy-MM-dd") |
Convert.ToInt32 | Esse operador converte o valor especificado em Int32. |
Convert.ToInt32(@var) |
Converter.ToDouble | Esse operador converte o valor especificado em Double. |
Convert.ToDouble(@var) |
Funções da cadeia de caracteres
O Fraud Protection dá suporte à classe de cadeia de caracteres padrão C#. Esta tabela inclui alguns exemplos de funções e operadores que podem ser úteis.
Operador | Descrição | Exemplo |
---|---|---|
Começa com() | Este operador verifica se uma cadeia de caracteres começa com um prefixo especificado. | @"user.phoneNumber".StartsWith("1-") |
EndsWith() | Este operador verifica se uma cadeia de caracteres termina com um sufixo especificado. | @"user.email".EndsWith("@contoso.com") |
IsNumeric() | Este operador verifica se uma cadeia de caracteres é um valor numérico. | @"user.email".IsNumeric() |
Length | Esse operador retorna o número de caracteres em uma cadeia de caracteres. |
@"user.username".Extensão |
ToDateTime() | Este operador converte uma cadeia de caracteres em um objeto DateTime. | @"user.creationDate".ToDateTime() |
ToDouble() | Este operador converte uma cadeia de caracteres em um valor Double. | @"productList.purchasePrice".ToDouble() |
ToInt32() | Este operador converte uma cadeia de caracteres em um valor Int32. | @"zipcode".ToInt32() |
ToUpper () | Esse operador retorna uma cópia dessa cadeia de caracteres convertida em maiúsculas. | @"user.username". ToUpper() |
ToLower () | Esse operador retorna uma cópia dessa cadeia de caracteres convertida em minúsculas. | @"user.username". ToLower() |
IndexOf() | Esse operador relata o índice baseado em zero da primeira ocorrência de uma determinada subcadeia de caracteres dentro da cadeia de caracteres especificada. | @"user.username". IndexOf("@") |
LastIndexOf() | Esse operador relata o índice baseado em zero da última ocorrência de uma determinada subcadeia de caracteres dentro da cadeia de caracteres especificada. | @"user.username". LastIndexOf("@") |
Substring() | Esse operador retorna uma substring a partir de um índice baseado em zero dentro de uma string, com um segundo parâmetro opcional especificando o comprimento da substring desejada | @"user.username". Substring(0,5) |
IsNullOrEmpty() | Esse operador retornará se a cadeia de caracteres especificada for nula ou vazia. Caso contrário, retorna falso. | @"user.username". IsNullOrEmpty() |
IgnoreCaseEquals() | Esse operador retornará true se as duas cadeias de caracteres forem iguais, independentemente das diferenças de maiúsculas e minúsculas. Caso contrário, retorna falso. | @"user.username". IgnoreCaseEquals(@"user.email") |
Contains() | Este operador verifica se uma cadeia de caracteres contém outra cadeia de caracteres. | @"productList.productName".Contains("Xbox") |
ContainsOnly() | Este operador verifica se uma cadeia de caracteres contém apenas os conjuntos de caracteres fornecidos. | @"zipcode".ContainsOnly(CharSet.Numeric) |
ContainsAll() | Este operador verifica se uma cadeia de caracteres contém todos os conjuntos de caracteres fornecidos. | @"CEP". ContainsAll(CharSet.Numeric|CharSet.Hyphen) |
ContainsAny() | Este operador verifica se uma cadeia de caracteres contém algum dos conjuntos de caracteres fornecidos. | @"CEP". ContainsAny(CharSet.Numeric|CharSet.Hyphen) |
Uso de CharSet em ContainsOnly, ContainsAll e ContainsAny
Os tipos de caractere a seguir podem ser usados em ContainsOnly, ContainsAll e ContainsAny.
Tipo de caractere | Descrição |
---|---|
Alfabético | a-z, A-Z |
Apóstrofo | ' |
E comercial | @ |
Barra invertida | \ |
Vírgula | , |
Hyphen | - |
Numérico | 0-9 |
Período | . |
Barra | / |
Sublinhado | _ |
Espaço em branco | Espaço único |
Funções de detecção diversas
Essas funções ajudam a evitar fraudes, detectando de forma rápida e eficiente se os principais campos de entrada do usuário (como nomes e endereços) contêm rabiscos.
Função | descrição | Exemplo |
---|---|---|
GetPattern(String).maxConsonants | Número máximo de consoantes contíguas em uma cadeia de caracteres que não são separadas por uma vogal. Por exemplo, maxConsoantes para a string "01gggyturah" é 5. | GetPattern(@"user.email").maxConsonants |
GetPattern(String).gibberScore | Pontuação baseada em ML entre 0 e 1; 0 indica mais probabilidade de ser algo sem sentido e 1 significa menos probabilidade de ser algo sem sentido. | GetPattern(@"user.email").gibberScore |
Observação
O modelo de detecção variado se baseia na frequência de dois caracteres alfanuméricos consecutivos em documentos em inglês disponíveis publicamente. Pressupõe-se que, quanto mais frequentemente dois caracteres alfanuméricos consecutivos serem exibidos em documentos públicos, menores serão as chances de serem algo variado. O modelo deve fornecer apresentar razoáveis para textos em inglês e poderá ser usado para detectar se os nomes ou os endereços contiverem algo variado. No entanto, o modelo talvez não seja indicado para abreviações, como uma forma curta para estados (AZ, TX etc.) e também não pode ser usado para validar nomes ou endereços. Por último, o modelo não foi testado para textos que não sejam em inglês.
Funções de detecção de padrões
Essas funções ajudam a evitar fraudes, detectando de forma rápida e eficiente se os principais campos de entrada do usuário (como nomes e endereços) contêm rabiscos.
Função | descrição | Exemplo |
---|---|---|
Patterns.IsRegexMatch(padrão de cadeia de caracteres, origem da cadeia de caracteres) | Executa uma correspondência de expressão regular (regex) do padrão de cadeia de caracteres em relação a uma fonte de cadeia de caracteres. O resultado é um booleano, ou seja, verdadeiro (indicando que a cadeia de caracteres fornecida correspondeu ao padrão) ou falso (indicando nenhuma correspondência) | Patterns.IsRegexMatch("^.com$", @ "user.email") Patterns.IsRegexMatch( "^.[aAeEiIoOuU]+.*$", @ "user.firstname") |
Observação
- O padrão de cadeia de caracteres deve ser uma entrada constante.
- A função retornará false (o resultado padrão) se o tempo de avaliação exceder 10 milissegundos.
- Todas as limitações que não dão suporte ao NonBacktracking também se aplicam à função IsRegexMatch.
Funções do modelo
As funções de modelo executam os vários modelos de fraude e são úteis quando sua avaliação não executa automaticamente um ou mais modelos de fraude. Quando as funções do modelo são executadas, as informações sobre o modelo em execução durante a avaliação da regra são geradas na chamada à API de apuração de fraudes. Depois, a regra terá acesso ao resultado do modelo, incluindo pontuação, motivos e muito mais, que pode ser usado para o processamento adicional de regras e a tomada de decisões.
Tipo de modelo | Descrição | Exemplo |
---|---|---|
Risco | Avalia a probabilidade do risco de uma sessão. | Model.Risk() |
Bot | Avalia a probabilidade de uma sessão ser iniciada por um bot. Passe uma ID de contexto do dispositivo que foi enviada para a solução de análise de impressões digitais para dispositivos do Fraud Protection. | Model.Bot(@deviceContextId) |
Funções geográficas
As funções geográficas fornecem resolução por conversão de um endereço IP em um endereço geográfico. As funções geográficas podem ser invocadas em regras somente com o uso de IPs que fazem parte do conteúdo ou coletados pelo Fraud Protection por meio da análise de impressões digitais para dispositivos. As funções geográficas não podem ser chamadas para valores IP arbitrários.
Operador | Descrição | Exemplo |
---|---|---|
Geo.RegionCode(String ip) | Este operador converte um endereço IPv4 para o código de região dos EUA (ou seja, a abreviação do nome do estado ou da região dos EUA). Por exemplo, para um endereço IP no estado de Washington, "WA" é retornado. |
Geo.RegionCode(@"device.ipAddress") |
Geo.Region(String ip) | Este operador converte um endereço IPv4 para o código de região dos EUA (ou seja, o nome do estado ou do território dos EUA). Por exemplo, para um endereço IP no estado de Washington, "Washington" é retornado. |
Geo.Region(@"device.ipAddress") |
Geo.CountryCode(String ip) | Este operador converte um endereço IPv4 para o código de país/região. Por exemplo, para um endereço IP na Austrália, "AU" é retornado. |
Geo.CountryCode(@"device.ipAddress") |
Geo.CountryRegion(String ip) | Este operador converte um endereço IP em um nome de região. Por exemplo, para um endereço IP na Austrália, "Austrália" é retornado. |
Geo.CountryRegion(@"device.ipAddress") |
Geo.City(String ip) | Este operador converte um endereço IPv4 em um nome de cidade. Por exemplo, para um endereço IP na cidade de Nova York, "cidade de Nova York" é retornada. |
Geo.City(@"device.ipAddress") |
Geo.MarketCode(String ip) | Este operador converte um endereço IPv4 para o código de mercado do endereço IP. Por exemplo, para um endereço IP do Canadá, "NA" (América do Norte) será retornado. |
Geo.MarketCode(@"device.ipAddress") |
Funções de atributo de dispositivo
Operador | Descrição | Exemplo |
---|---|---|
Device.GetFullAttributes(String sessionId) | Retorna um conjunto completo de atributos de dispositivo para a sessão de impressão digital do dispositivo especificada. Consulte Configurar impressão digital do dispositivo para visualizar o conjunto completo de atributos do dispositivo | Device.GetFullAttributes(@"deviceFingerprinting.id") |
Device.GetAttributes(String sessionId) | Retorna um subconjunto menor de atributos de dispositivo para a sessão de impressão digital do dispositivo especificada. O subconjunto é uma lista selecionada pelo Fraud Protection e contém os atributos mais usados. | Device.GetAttributes(@"deviceFingerprinting.id") |
Device.GetSelectedAttributes(String sessionId, String attributeName) | Retorna até 20 atributos de dispositivo para a sessão de impressão digital do dispositivo especificada. A lista de atributos desejados deve ser especificada como parâmetros separados por vírgula | Device.GetSelectedAttributes(@"deviceFingerprinting.id", "deviceAsn","deviceCountryCode") |
Device.GetSpeedOfTravel(String sessionId) | Retorna a velocidade máxima de deslocamento de um dispositivo em milhas por hora. O Fraud Protection determina a velocidade máxima pegando as últimas cinco sessões consecutivas de impressão digital e calculando a velocidade do dispositivo de sessão para sessão, retornando o máximo. O dispositivo é identificado nas sessões usando o ID do cookie. | Device.GetSpeedOfTravel(@"deviceFingerprinting.id") |
Funções da pesquisa do BIN
As funções de pesquisa de BIN fornecem informações da conta do cartão de pagamento (por exemplo, rede do cartão, tipo de cartão, código do país do cartão, categoria do cartão) com base no número de identificação bancária (BIN). Os dados para pesquisa de BIN são provenientes dos principais provedores de dados BIN de terceiros e, em seguida, selecionados pelo Fraud Protection.
Operador | Descrição | Exemplo |
---|---|---|
BIN.Lookup(String BIN).cardNetwork | Essa função procura BIN e retorna a rede de cartões (por exemplo, Visa, Mastercard). |
BIN.Lookup(@"card.bin").cardNetwork |
BIN.Lookup(String BIN).cardType | Esse operador pesquisa o BIN e retorna o tipo de cartão (por exemplo, Débito, Crédito). |
BIN.Lookup(@"card.bin").cardType |
BIN.Lookup(String BIN).issuer | Esse operador pesquisa o BIN e retorna a organização emissora. |
BIN.Lookup(@"card.bin").issuer |
BIN.Lookup(String BIN).countryCode | Este operador pesquisa o BIN e retorna do código de país ISO de duas letras do cartão. |
BIN.Lookup(@"card.bin").countryCode |
ESCANINHO. Lookup(String BIN).cardCategory | Este operador pesquisa BIN e retorna a categoria do cartão (por exemplo, Pré-pago, Corporativo, Recompensas). |
ESCANINHO. Lookup(@"card.bin").cardCategory |
BIN.Lookup(String BIN).error | Esse operador pesquisa BIN e retorna uma mensagem de erro se o BIN não puder ser encontrado. |
BIN.Lookup(@"card.bin").error |
Funções de listagem
O Fraud Protection permite carregar listas personalizadas e referenciá-las no idioma. Para obter informações sobre como carregar essas listas, consulte Gerenciar listas. Para obter mais informações sobre como usar listas em regras, consulte a seção Usar listas em regras mais adiante neste artigo.
Operador | Descrição | Exemplo |
---|---|---|
ContainsKey( String listName, String columnName, String key) |
Este operador verifica se uma chave está contida na coluna especificada em uma lista do Fraud Protection. O exemplo na próxima coluna verifica se a coluna "E-mails" na lista "Lista de suporte por e-mail" contém a variável @"user.email ". |
ContainsKey("Email Support List", "Emails", @"user.email") |
Lookup( String listName, String keyColName, String valueColName) |
Este operador pesquisa o valor de uma chave em uma lista do Fraud Protection. O nome da coluna que contém a chave e o nome da coluna que contém o valor devem ser especificados. O valor sempre será retornado como uma cadeia de caracteres. Se a chave não for encontrada e se o parâmetro defaultValue não for especificado, "Desconhecido" será retornado. O exemplo na próxima coluna procura o valor da variável @"user.email" na coluna E-mails da lista Lista de suporte por e-mail. Se uma correspondência for encontrada, a função retornará o valor da coluna Status da linha correspondente na lista. Se uma correspondência não for encontrada, a função retornará 0. |
Lookup("Email Support List", "Emails", @"user.email", "Status",0) |
Em | Este operador verifica se uma chave está contida em uma lista de valores separada por vírgulas. | In(@"user.countryRegion", "US, MX, CA") |
InSupportList | Esse operador verifica se um atributo está em uma Lista de Suporte. | InSupportList('Lista de suporte por e-mail', @"user.email") |
IsSafe | Esse operador verifica se uma entidade está marcada como Segura em uma Lista de Suporte. | IsSafe('Lista de suporte por e-mail', @"user.email") |
ÉBloco | Esse operador verifica se uma entidade está marcada como Bloquear em uma Lista de Suporte. | IsBlock('Lista de suporte por e-mail', @"user.email") |
IsWatch | Esse operador verifica se uma entidade está marcada como Observação em uma Lista de Suporte. | IsWatch('Lista de suporte por e-mail', @"user.email") |
Usar listas em regras
Você pode usar os operadores ContainsKey e Lookup para referenciar listas carregadas no Fraud Protection. Para obter mais informações sobre listas, consulte Gerenciar listas.
ContainsKey
Para verificar se uma de suas listas contém um valor específico, use o operador ContainsKey. Especifique o nome da lista, a coluna e a chave a serem verificadas.
Por exemplo, você carrega uma lista de uma única coluna de endereços de email arriscados e a nomeia Lista de emails arriscados.
Kayla@contoso.com |
Jamie@bellowscollege.com |
Marie@atatum.com |
Em seguida, você poderá usar a sintaxe a seguir para rejeitar todas as transações dos endereços de email arriscados nesta lista.
RETURN Reject("risky email")
WHEN ContainsKey("Risky email list", "Email", @"user.email")
Esta cláusula verifica se a coluna "Email" na "Lista de emails arriscados" contém a chave @email. Se tiver, a transação será rejeitada.
Lookup
Para listas de várias colunas, você pode usar o operador Lookup para verificar o valor de uma coluna em uma chave específica.
Por exemplo, você cria uma lista que tem uma coluna para endereços de email e outra coluna que indica o status desses endereços de email. Você nomeia esta lista como Lista de emails.
Status | |
---|---|
Kayla@contoso.com |
Arriscado |
Jamie@bellowscollege.com |
Arriscado |
Marie@atatum.com |
Arriscado |
Camille@fabrikam.com |
Seguro |
Miguel@proseware.com |
Seguro |
Tyler@contoso.com |
Seguro |
Em seguida, você poderá usar a sintaxe a seguir para rejeitar todas as transações dos endereços de email desta lista que têm um status Arriscado.
RETURN Reject("risky email")
WHEN Lookup("Email List", "Email", @"user.email", "Status") == "Risky"
Esta cláusula procura pela chave @"user.email" na coluna "Email" na "Lista de Emails" e verifica se o valor na coluna "Status" é Arriscado. Se tiver, a transação será rejeitada.
Se a chave @"user.email" não for encontrada na lista, o Fraud Protection retornará "Desconhecido".
Você também pode especificar seu próprio valor padrão como quinto parâmetro. Para obter mais informações, consulte a seção Operadores lógicos anteriormente neste artigo.
O operador Pesquisa sempre retorna um valor da Cadeia de caracteres. Para converter esse valor em um valor Int, Double ou DateTime, use um operador de conversão de tipo.
Usar chamadas externas, avaliações e velocidades
- Para fazer referência a uma chamada externa, digite Externo, seguido da chamada externa à qual você deseja fazer referência. Para obter mais informações, consulte Usar uma chamada externa em regras.
- Para fazer referência a uma avaliação externa, digite Avaliações, seguido da avaliação externa à qual você deseja fazer referência. Para obter mais informações, consulte Usar avaliação externa nas regras.
- Para fazer referência a uma velocidade, digite Velocidade, seguido da velocidade individual à qual você deseja fazer referência. Para obter mais informações, consulte Usar uma velocidade em regras.
Inferência de tipo de atributos
Os tipos de variáveis são inferidos do contexto em que são usados. Veja alguns exemplos:
- Na expressão WHEN @isEmailValidated, a variável é interpretada como valor Booliano.
- Na expressão Model.Risk(). Pontuação > 500, a variável é interpretada como um valor Duplo .
- Na expressão @"user.creationDate".Year < DateTime.UtcNow.Year, a variável é interpretada como um valor DateTime.
Se não houver contexto suficiente para inferir o tipo de uma variável, ele será considerado um valor de Cadeia de caracteres. Por exemplo, na expressão Model.Risk(). Pontue < Model.Bot(@"deviceFingerprinting.id"). Pontuação, ambas as variáveis são interpretadas como strings.
Para especificar o tipo de uma variável que não seja string, use um operador de conversão de tipo.
Matrizes e objetos JSON
O FQL tem suporte para a construção de objetos estruturados complexos como variáveis locais, que podem ser passadas para a chamada externa ou avaliação externa no formato JSON. Como com todos os outros locais no FQL, matrizes e objetos são imutáveis depois de criados.
Matrizes JSON
As matrizes são criadas colocando expressões entre um par de colchetes:
LET $arr1 = [ "hello", "world" ]
LET $arr2 = [
"this is also an array",
78.4,
$arr1,
@"user.email",
External.MyExtcall()
]
Objetos JSON
Os objetos são criados com chaves:
LET $obj1 = { isObject: true }
LET $obj2 = {
numberField: 7,
fieldIs: "string",
internalObj: $obj1,
inline: {
innerInnerField: "hello"
}
}
Funções FQL para matrizes e objetos JSON
Sintaxe | Descrição | Exemplo |
---|---|---|
myArr[0] | Você pode usar essa sintaxe para acessar um elemento de matriz específico por seu índice. | myArr [0].property myArr [0][0] myArr [0][0].property myArr [0].property[0] myArr [0].property[0].property |
Onde myArr, nos exemplos acima, é uma matriz. A origem dessa matriz pode ser o @@payloadProperty, a resposta de avaliação externa, a resposta de chamada externa, a variável local ou uma variável global.
Veja a seguir exemplos de como usar a sintaxe com base em diferentes fontes de array:
- Origem da matriz: Carga útil
LET $sample = @@"myArr[0]".AsJsonArray()
RETURN Approve()
WHEN $sample[0].AsString() == "a"
- Origem do array: variável 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"
Sintaxe | Descrição | Exemplo |
---|---|---|
Array.GetValue (TargetArray . AsJsonArray(), matchKey, matchValue, lookupKey) | Com essa função, você pode acessar o primeiro elemento de matriz que corresponde a uma condição. Retorna um valor |
Array.GetValue(@@"payloadProperty". AsJsonArray(), matchKey, matchValue, lookupKey) |
Array.GetValues(TargetArray . AsJsonArray(), matchKey, matchValue) | Com essa função, você pode acessar um conjunto de elementos de matriz que correspondem a uma condição. Retorna uma matriz |
Array.GetValues(@@"payloadProperty". AsJsonArray(), matchKey, matchValue) |
A seguir estão alguns exemplos mais detalhados de como usar a sintaxe acima com base em diferentes fontes de array:
Fonte da matriz | Array.GetValue | Array.GetValues |
---|---|---|
Avaliações 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" |
Conteúdo | Exemplo de 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" |
Exemplo de payload: { "group":[{"item1": "a", "item2": "a1"}, {"item1": "b", "item2": "b1"}]} LET $sample = Array.GetValues(@@"group". AsJsonArray(), "item1", "a") RETURN Aprovar() QUANDO $sample[0].item2. AsString() == "a1" |
Variáveis globais | Usando a mesma amostra de carga acima Do SetVariables(var=@@"group") LET $group = GetVariable("var"). AsJsonObject() LET $value = Array.GetValue($group, "item1", "a", "item2") RETURN Approve() WHEN $value. AsString() == "a1" |
Usando a mesma amostra de carga acima Do SetVariables(var=@@"group") LET $group = GetVariable("var"). AsJsonObject() LET $arr = Array.GetValues($group. AsJsonArray(), "item1", "a") RETURN Aprovar() |
Chamada externa | Resposta de chamada externa (myCall): {"group":[{"item1": "a", "item2": "a1"}, {"item1": "b", "item2": "b1"}]} |
Resposta de chamada 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" |
Conversão de tipo para matrizes e objetos JSON
O seguinte . As<Type>() são suportados a partir do JsonObject:
- AsString()
- AsInt()
- AsDouble()
- AsDateTime()
- AsBool()
- AsJsonArray()
- AsJsonObject()
Ao usar um dos dois métodos auxiliares de matriz, Array.GetValue ou Arrays.GetValues, você precisa digitar cast usando . Como<Type>(). Exemplo:
LET $arr = {myArr:[{item1: "red", number: 45}, {item1: "blue", number: 56}, {item1: "green", number: 33}]} LET $sample = Array.GetValues($arr.myArr.AsJsonArray(), "item1", "blue")
Depois de converter dados em um objeto JSON ou matriz explicitamente, você pode usar . As<Type>() para converter em um tipo de dados diferente, se necessário. Exemplo:
RETURN Approve() WHEN $sample[0].number.AsInt() == 56
Quando você usa @@, os dados são implicitamente convertidos em um objeto JSON. Se você quiser converter o objeto JSON em um tipo de dados diferente, deverá usar . Como<Type>(). Exemplo:
LET $sample = @@”user.addresses”.AsJsonArray()
Quando você deseja produzir em um determinado formato, você deve usar . Como<Type>(). Exemplo:
LET $sample = @@”user.addresses” Output(abc = $sample.AsJsonArray())
Observação
Práticas recomendadas de fundição de tipo:
- Sempre digite cast no final da cadeia . .
- Quando você não tiver certeza, sempre digite explicitamente cast usando . Como<Type>(). Exemplo:
LET $sample = External.myCall().data[0].Item1[0].AsJsonArray()
Or
LET $sample = @@”accommodations[0].rooms”.AsJsonArray()
Funções disponíveis em Ações pós-decisão
As funções a seguir podem ser usadas apenas em Ações Pós-Decisão. Eles não estão disponíveis nas Regras de Decisão
Sintaxe | Descrição | Exemplo |
---|---|---|
SetResponse(String sectionName, k=v) | Essa função pode ser usada para passar pares chave-valor para a seção CustomProperties da resposta da API. O sectionName é um parâmetro opcional que pode ser ignorado. | SetResponse("Pontuações", bot = Model.Bot(@deviceContextId), risk=Model.Risk()) SetResponse(test=”123”) |
Response.Decision() | Essa função faz referência à decisão para a avaliação atual que está sendo avaliada. | Response.Decision() == "Aprovar" |