Compartilhar via


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:

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

]

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:

  • Regras de compra
  • Regras de avaliação personalizada
  • Regras de proteção da conta

    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:

    • Regras de compra
    • Regras de avaliação personalizada
    • Regras de proteção da conta

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

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

      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:

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

      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:

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

      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:

      • 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)

      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:

      • 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")

      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.

      Email
      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.

      Email 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"}]}

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

      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"