Partilhar via


Guia de referência linguística

O Microsoft Dynamics 365 tem sua própria linguagem rica e expressiva para ajudá-lo a definir e expressar sua estratégia de fraude. Essa linguagem tem muitas semelhanças com C# e SQL e foi projetada para oferecer a flexibilidade necessária para lidar com fraudes em cenários de negócios exclusivos.

Você pode usar essa 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 idioma inclui a lista completa de operadores, funções e instruções que compõem o idioma:

Extratos

Sintaxe da instrução Description Exemplo
Expressão LET VariableName<> = <>

Uma instrução LET é usada para definir uma nova variável. O escopo da variável é a regra ou conjunto de velocidades em que a variável é definida. Os nomes das variáveis devem ser prefixados com um cifrão ($).

Para obter mais informações, consulte Definindo 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 regras e conjuntos de velocidade.

DEIXE $fullName = @"user.firstName" + @"user.lastName"

OBSERVAR

OBSERVE <ObservationFunction>(<KeyValuePairs>)
[ QUANDO <BooleanExpression>

]

Uma declaração OBSERVE não encerra a execução da regra com uma decisão. Ele apenas registra pares chave-valor para a resposta da API ou logs de rastreamento. As regras subsequentes e as cláusulas de regra continuam a ser executadas até que uma instrução RETURN seja alcançada.

Uma instrução OBSERVE deve ser seguida por 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.

Um máximo de um pode ser usado para cada cláusula nas seguintes regras:

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

    OBSERVE Output(reason="high score")

    OBSERVE TRACE(ip=@"device.ipAddress") QUANDO Model.Risk(). Pontuação > 400

    Função de decisão RETURN <>
    [ ,<ObservationFunction>(<KeyValuePairs>) ]
    [ QUANDO <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: Aprove(), 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 sob a qual deve fazer qualquer um dos anteriores.

    Pode ser utilizado um máximo de um por cláusula nas seguintes regras:

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

      Revisão RETURN()
      WHEN IsWatch("Lista de suporte de dispositivos", @"deviceAttributes.deviceId") ||
      IsWatch ("Lista de Suporte de Pagamento", @"paymentInstrumentList.merchantPaymentInstrumentId")

      RETURN Reject(), Trace(ip=@"device.ipAddress") QUANDO Model.Risk(). Pontuação > 400

      ROUTETO QUEUE <QueueName>
      [ QUANDO <BooleanExpression> ]

      O comando ROUTETO é usado em regras de roteamento para direcionar avaliações de correspondência para filas de gerenciamento de casos.

      A cláusula WHEN opcional pode ser usada para descrever as condições sob as quais o comando deve executar o roteamento.

      Um máximo de um pode ser usado por cláusula nas regras de roteamento.

      Fila ROUTETO("Fila de Alto Valor")
      QUANDO @"purchase.request.totalAmount"> 500
      SELECT <AggregationFunction>
      AS <VelocityName>
      FROM <AssesmentType>
      GROUPBY <GroupExpression>
      [ QUANDO <BooleanExpression> ]

      Uma instrução SELECT é usada em conjuntos de velocidade para definir uma velocidade. Deve especificar uma função de agregação.

      A cláusula AS necessária é usada para criar um alias para sua velocidade. Esse alias pode ser referenciado a partir de regras.

      A cláusula FROM exigida é usada para especificar o tipo de avaliação para observar uma velocidade. Os valores válidos são Purchase, AccountLogin, AccountCreation, Chargeback, BankEvent e CustomAssessment.

      A cláusula GROUPBY necessária especifica uma propriedade ou uma expressão. Todos os eventos que são avaliados com o mesmo valor na instrução GROUPBY sã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.

      Um máximo de um pode ser usado por cláusula em conjuntos de velocidade.

      SELECIONE Count() COMO _Purchase_Rejections_Per_Email
      DA Compra
      QUANDO @"ruleEvaluation.decision" == "Rejeitar"
      GRUPOPOR @"user.email"

      SELECIONAR DistinctCount(@"purchaseId")
      COMO _BankDeclines_Per_Device
      FROM BankEvent
      QUANDO @"status" == "RECUSADO"
      GRUPOPOR @"purchase.deviceContext.externalDeviceId"

      QUANDO <BooleanExpression>

      A instrução WHEN é como as cláusulas WHEN nas outras instruções, mas fica sozinha na seção Condition de regras e conjuntos de velocidade. Ele especifica uma condição booleana que determina se toda a regra, conjunto de velocidades ou regra de roteamento deve ser executada.

      Um máximo de um pode ser usado na seção Condição de todos os tipos de regras e conjuntos de velocidade.

      QUANDO Model.Risk(). Pontuação > 400
      Função DO <Action> Uma instrução DO é usada para executar alguma ação no final da execução da regra. Esta declaração só pode ser usada em ações pós-decisão DO SetResponse(nome = @"nome" + @"sobrenome")

      Referenciando atributos e variáveis

      Você pode usar o operador at sign (@) para fazer referência a um atributo do evento atual.

      Variável Description 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 útil da solicitação ou a Proteção contra Fraude do Microsoft Dynamics 365 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 da carga útil do evento, o valor padrão para esse tipo será retornado: 0.0 para duplos, uma cadeia de caracteres vazia para cadeias de caracteres e assim por diante.

      O tipo do atributo é inferido a partir do contexto em que o atributo é usado. Se não for fornecido contexto suficiente, o tipo String será usado por padrão.

      Para obter informações sobre inferência de tipo, consulte Inferência de tipo de atributos.

      @"endereço.cidade"

      $ Um cifrão ($) é usado para fazer referência a uma variável definida em uma instrução LET . Para obter mais informações, consulte Definindo suas próprias variáveis. $fullName
      @a[x]

      Esta variável é usada para indexar variáveis de matriz.

      Se a carga útil da solicitação para 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 útil do evento.

      Exists(variável String)

      Existe(@"user.email")
      Request.CorrelationId() Esta função faz referência à ID de correlação exclusiva do evento que está sendo avaliado. 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 importantes de diagnóstico e depuração de uma chamada externa ou de uma resposta de avaliação externa. Para uma chamada externa, o objeto Diagnostics contém a carga útil Request, Endpoint, código HttpStatus, mensagem de erro e 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 uma vez que o objeto Diagnostics é criado usando seu método de extensão correspondente". GetDiagnostics()"

      LET $extResponse = Externo. myCall(@"device.ipEndereço")

      DEIXE $extResponseDiagnostics = $extResponse.GetDiagnostics()

      OBSERVE Output(Diagnóstico = $extResponseDiagnostics )

      QUANDO $extResponseDiagnostics. HttpStatusCode != 200

      Definir as suas próprias variáveis

      Você pode usar a palavra-chave LET para definir uma variável. Essa variável pode então ser referenciada em outros lugares da regra. Prefixar 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 dentro do escopo da regra ou do conjunto de velocidades no qual a instrução está definida.

      Por exemplo, para fazer referência à variável do exemplo anterior, você pode escrever a seguinte instrução.

      WHEN $fullName == "Kayla Goderich"
      

      Nota

      Depois que uma variável é definida, ela não pode ser atualizada com um novo valor.

      Funções de variáveis globais

      As funções Variáveis Globais podem ser usadas para definir e obter variáveis dentro de regras. As variáveis globais, uma vez definidas, podem ser acessadas dentro de uma regra de decisão, velocidade, regras de roteamento e ações pós-decisão dentro do mesmo ambiente ou ambientes filhos na hierarquia na tabela a seguir. Por exemplo, se você definir variáveis globais em uma regra dentro do ambiente raiz, seu valor poderá ser recuperado dentro de qualquer outra regra dentro da mesma avaliação no mesmo ambiente ou em qualquer ambiente filho.

      Operator Description Exemplo
      SetVariables(k=v) Esta função pode ser usada para definir pares chave-valor, ou seja, definir valores para variáveis. Faça SetVariables(key= 123, email=@"user.email")
      GetVariable("k") Esta função pode ser usada para acessar as variáveis que já estão definidas. Nos casos em que acessamos variáveis que nunca são definidas, um valor padrão é retornado.

      GetVariable("chave"). AsInt()

      GetVariable("e-mail"). AsString()

      GetVariable("chave"). AsDouble()

      GetVariable("chave"). AsBool()

      GetVariable("chave"). AsDateTime()

      GetVariable("chave"). AsJsonObject()

      GetVariable("chave"). AsJsonArray()

      Nota

      As variáveis globais são específicas de uma única transação para uma determinada avaliação. Um conjunto de variáveis dentro de uma transação não pode ser recuperado 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 Description Exemplo
      Aprovar()

      Este tipo especifica uma decisão de Aprovar. Pode incluir um motivo para a aprovação e outra mensagem de apoio.

      Sobrecargas:

      • Aprovar(Razão da cadeia de caracteres)
      • Aprovar(String reason, String supportMessage)

      RETORNO Aprovar()

      RETURN Aprove("na lista segura")

      RETURN Approve ("na lista segura", "não escalar")

      Rejeitar()

      Este tipo especifica uma decisão de Rejeição. Pode incluir um motivo para a rejeição e outra mensagem de apoio.

      Sobrecargas:

      • Rejeitar (razão da cadeia de caracteres)
      • Reject(String reason, String supportMessage)

      RETURN Reject()

      RETURN Reject("país do embargo")

      RETURN Reject("país do embargo", "não escalar")

      Revisão()

      Este tipo especifica uma decisão de Revisão. Pode incluir um motivo para a avaliação e outra mensagem de apoio.

      Sobrecargas:

      • Revisão(String reason)
      • Revisão(String reason, String supportMessage)

      Revisão RETURN()

      RETURN Review("usuário na lista de observação")

      RETURN Review("usuário na lista de observação", "não escalar")

      Desafio(String challengeType)

      Este tipo especifica uma decisão de Contestação e um tipo de contestação. Pode também incluir uma razão para o desafio e outra mensagem de apoio.

      Sobrecargas:

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

      Desafio RETURN ("SMS")

      RETURN Challenge ("SMS", "bot suspeito")

      RETURN Challenge ("SMS", bot suspeito", "não escalar")

      Funções de observação

      As funções de observação podem ser usadas para pegar dados do contexto atual e escrevê-los em outro lugar.

      Tipo de retorno Description Exemplo
      Saída(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 dentro de um objeto cujo nome seria o mesmo que o nome da cláusula que contém a instrução Output(). Saída(key="test", email=@"user.email", countryRegion=Geo.CountryRegion(@"device.ipAddress"))
      Traço(k=v) Essa função pode ser usada para disparar um evento Trace e enviar pares chave-valor para o namespace FraudProtection.Trace.Rule Event Tracing. Trace(key="Revisão manual", 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. Esta função só pode ser usada dentro de Ações Pós-Decisão; não está disponível na Regra de Decisão

      SetResponse("Pontuações", bot = Model.Bot(@deviceContextId), risk=Model.Risk())

      SetResponse(teste="123")

      Resposta.Decisão() Esta função refere-se à decisão para a avaliação atual que está sendo avaliada. Response.Decision() == "Aprovar"

      Funções de agregação

      Function Description Exemplo
      Contagem() Esta função devolve o número de vezes que ocorreu um evento. SELECT Count() AS numPurchases
      DistinctCount(chave String) Esta 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
      Soma(Valor duplo) Esta função retorna a soma de valores para uma propriedade numérica especificada. SELECT Sum(@"totalAmount") AS totalSpending

      Operadores lógicos

      Operator Description Exemplo
      e (&&) lógica e

      Modelo.Risco(). Pontuação > 500 && Model.Risk(). Pontuação < 800

      Modelo.Risco(). Pontuação > 500 e Model.Risk(). Pontuação < 800

      ou (||) lógico ou

      @"email.isEmailUsername" == falso || @"email.isEmailValidated" == falso

      @"email.isEmailUsername" == falso ou @"email.isEmailValidated" == falso

      not Negação lógica @"email.isEmailUsername" não(!) @"email.isEmailUsername"

      Operadores de comparação

      A Proteção contra Fraude suporta todas as operações padrão de comparação e igualdade em C#. Esta tabela inclui alguns exemplos de operadores que você pode achar úteis. Se você aplicar esses operadores a cadeias de caracteres, ocorrerão comparações lexicográficas.

      Operator Description 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 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 Este operador verifica se a condição X é verdadeira ou não. Se for verdadeira, a instrução Y é executada e seu resultado é retornado. Caso contrário, a instrução Z é executada e seu resultado é retornado. Várias verificações lógicas também podem ser combinadas usando colchetes, para definir uma lógica aninhada If <> Then <> Else <> DEIXE $riskbucket = Model.Risk(). Pontuação > 500 ? "Alto" : (Model.Risk(). Pontuação > 300 ? "Médio" : "Baixo")

      Funções matemáticas

      A Proteção contra Fraude suporta todos os métodos matemáticos C# padrão e operadores aritméticos. Esta tabela inclui alguns exemplos de métodos que você pode achar úteis.

      Operator Description Exemplo
      Math.Min(Valor duplo1, Valorduplo 2) Este operador calcula o mínimo de dois valores. Math.Min(Modelo.Risco(). Pontuação,Model.Bot(@"deviceFingerprinting.id"). Pontuação)
      Math.Max(Valor duplo1, Valorduplo 2) Este operador calcula o máximo de dois valores. Math.Max(Model.Risk(). Pontuação,Model.Bot(@"deviceFingerprinting.id"). Pontuação)
      RandomInt(Inteiro min, Integer max) Este operador retorna um inteiro aleatório no intervalo fornecido, incluindo o valor mínimo e excluindo o valor máximo. RandomInt(0, 100)

      Operadores DateTime

      A Proteção contra Fraude suporta as propriedades, métodos e operadores padrão do C# DateTime . Esta tabela inclui alguns exemplos de funções e propriedades que você pode achar úteis.

      Operator Description Exemplo
      UtcNow Este operador obtém um objeto DateTime que é definido para a data e hora atuais no computador, expresso como UTC. DateTime.UtcNow
      Hoje Este operador obtém um objeto que está definido para a data atual, onde o componente de hora é definido como 00:00:00. DateTime.Today
      Subtract Este operador retorna um novo DateTime subtraindo uma data e hora especificadas de uma entrada DateTime. DateTime.UtcNow.Subtrair(@var1. ToDateTime())
      DaysSince(Data DateTime) Este operador retorna um inteiro que representa o número de dias que passaram entre o valor DateTime especificado e a data atual (expresso como Tempo Universal Coordenado [UTC]). DaysSince(@"usuário. CreationDate")
      Anual Este operador obtém o componente ano da data representada por esta instância. @"user.creationDate". Ano
      Date Este operador obtém um novo objeto que tem a mesma data que esta instância, mas onde o valor de hora é definido como 00:00:00 (meia-noite). @"user.creationDate". Data

      Operadores de fundição de tipo

      Para obter informações sobre inferência de tipo, consulte a seção Inferência de tipo de atributos mais adiante neste artigo.

      Operator Description Exemplo
      Convert.ToDateTime

      Este operador converte a cadeia de caracteres em datetime e converte datetime em uma string usando o formato fornecido.

      Convert.ToDateTime(@"user.creationDate"). ToString("aaaa-MM-dd")
      Convert.ToInt32

      Este operador converte o valor especificado para Int32.

      Convert.ToInt32(@var)
      Convert.ToDouble

      Este operador converte o valor especificado em Double.

      Convert.ToDouble(@var)

      Funções de cadeia

      A Proteção contra Fraude suporta a classe de cadeia de caracteres C# padrão. Esta tabela inclui alguns exemplos de funções e operadores que você pode achar úteis.

      Operator Description 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()
      Duração

      Este operador retorna o número de caracteres na cadeia de caracteres.

      @"user.username". Comprimento
      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 para um valor Int32 . @"zipcode". ToInt32()
      ToUpper() Este operador retorna uma cópia dessa cadeia de caracteres convertida em maiúsculas. @"user.username". ToUpper()
      ToLower() Este operador retorna uma cópia dessa cadeia de caracteres convertida em minúsculas. @"user.username". ToLower()
      IndexOf() Este operador relata o índice baseado em zero da primeira ocorrência de uma determinada substring dentro da string especificada. @"user.username". IndexOf("@")
      LastIndexOf() Este operador relata o índice baseado em zero da última ocorrência de uma determinada substring dentro da string especificada. @"user.username". LastIndexOf("@")
      Substring() Este 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() Este operador retorna se a cadeia de caracteres especificada for nula ou vazia. Caso contrário, devolve false. @"user.username". IsNullOrEmpty()
      IgnoreCaseEquals() Este operador retornará true se as duas cadeias de caracteres forem iguais, independentemente das diferenças de invólucro. Caso contrário, devolve false. @"user.username". IgnoreCaseEquals(@"user.email")
      Contém() Este operador verifica se uma cadeia de caracteres contém outra cadeia de caracteres. @"productList.productName". Contém("Xbox")
      ContainsOnly() Este operador verifica se uma cadeia de caracteres contém apenas os charsets fornecidos. @"CEP". ContainsOnly(CharSet.Numeric)
      ContémTudo() Este operador verifica se uma cadeia de caracteres contém todos os conjuntos de caracteres fornecidos. @"CEP". ContainsAll(CharSet.Numeric|CharSet.Hypen)
      ContémQualquer() Este operador verifica se uma cadeia de caracteres contém algum dos conjuntos de caracteres fornecidos. @"CEP". ContémAny(CharSet.Numeric|CharSet.Hypen)

      Usando CharSet em ContainsOnly, ContainsAll e ContainsAny

      Os seguintes tipos de caracteres podem ser usados em ContainsOnly, ContainsAll e ContainsAny.

      Tipo de caractere Description
      Por ordem alfabética a-z, de A a Z
      Apóstrofo '
      Asperand @
      Barra invertida \
      Comma ,
      Hypen -
      Numérico 0-9
      Período .
      Barra /
      Caráter de sublinhado _
      Espaço em branco Espaço único

      Funções de deteção Gibberish

      Essas funções ajudam a prevenir fraudes, detetando de forma rápida e eficiente se os principais campos de entrada do usuário (como nomes e endereços) contêm disparates.

      Function Description Exemplo
      GetPattern(String).maxConsoantes Número máximo de consoantes contíguas em uma cadeia que não estão separadas por uma vogal. Por exemplo, maxConsoantes para a string "01gggyturah" é 5. GetPattern(@"user.email").maxConsoantes
      GetPattern(String).gibberScore Pontuação baseada em ML entre 0 e 1; 0 significa mais provável de ser ridículo e 1 significa menos provável de ser ridículo. GetPattern(@"user.email").gibberScore

      Nota

      O modelo de deteção Gibberish é baseado na frequência de dois caracteres alfanuméricos consecutivos em documentos em inglês disponíveis publicamente. Parte-se do princípio de que quanto mais frequentemente aparecem dois caracteres alfanuméricos consecutivos em documentos públicos, menos provável é que sejam ridículos. O modelo deve fornecer pontuações razoáveis para textos em inglês, e pode ser usado para detetar se os nomes ou endereços contêm bobagens. No entanto, o modelo pode não ser adequado para abreviaturas, como 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 não ingleses.

      Funções do modelo

      As funções de modelo executam os vários modelos de fraude e são úteis quando a 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 da API de avaliação de fraude. Em seguida, a regra obtém acesso ao resultado do modelo, incluindo pontuação, motivos e muito mais, que pode ser usado para processamento adicional de regras e tomada de decisão.

      Tipo de modelo Description Exemplo
      Risco Avalia a probabilidade de uma sessão ser arriscada. Modelo.Risco()
      Bot Avalia a probabilidade de uma sessão ser iniciada por bot. Passe um ID de contexto de dispositivo que foi enviado para a solução de impressão digital de dispositivo da Proteção contra Fraude. Modelo.Bot(@deviceContextId)

      Funções geográficas

      As funções geográficas fornecem resolução convertendo um endereço IP em um endereço geográfico. As funções geográficas podem ser invocadas em regras somente usando IPs que fazem parte da carga útil da transação ou coletados pela Proteção contra Fraude usando a impressão digital do dispositivo. As funções geográficas não podem ser invocadas para valores IP arbitrários.

      Operator Description Exemplo
      Geo.RegionCode(String ip)

      Este operador converte um endereço IPv4 para o seu código de região dos EUA (ou seja, a abreviatura do nome do estado ou território 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 a sua região dos EUA (ou seja, o nome do estado ou território dos EUA).

      Por exemplo, para um endereço IP no estado de Washington, "Washington" é retornado.

      Geo.Region(@"device.ipEndereço")
      Geo.CountryCode(String ip)

      Este operador converte um endereço IPv4 para o seu 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.ipEndereço")
      Geo.City(String ip)

      Este operador converte um endereço IPv4 em um nome de cidade.

      Por exemplo, para um endereço IP em Nova York, "New York City" é retornado.

      Geo.City(@"device.ipEndereço")
      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) é retornado.

      Geo.MarketCode(@"device.ipEndereço")

      Funções de atributo do dispositivo

      Operator Description 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 a 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 com curadoria da Proteção contra Fraude e contém os atributos mais usados. Device.GetAttributes(@"deviceFingerprinting.id")
      Device.GetSelectedAttributes(String sessionId) 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írgulas Device.GetSelectedAttributes(@"deviceFingerprinting.id", "deviceAsn","deviceCountryCode")

      Funções de pesquisa BIN

      As funções de pesquisa de BIN fornecem informações sobre a 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 obtidos dos principais fornecedores de dados BIN de terceiros e, em seguida, selecionados pela Proteção contra fraude.

      Operator Description Exemplo
      LIXEIRA. Lookup(String BIN).cardNetwork

      Esta função procura BIN e devolve a rede de cartões (por exemplo, Visa, Mastercard).

      LIXEIRA. Pesquisa(@"card.bin").cardNetwork
      LIXEIRA. Lookup(String BIN).cardType

      Este operador procura o BIN e devolve o tipo de cartão (por exemplo, Débito, Crédito).

      LIXEIRA. Pesquisa(@"card.bin").cardType
      LIXEIRA. Lookup(String BIN).issuer

      Este operador procura o BIN e devolve a organização emissora.

      LIXEIRA. Pesquisa(@"card.bin").emissor
      LIXEIRA. Lookup(String BIN).countryCode

      Este operador procura o BIN e devolve o código ISO de país de duas letras do cartão.

      LIXEIRA. Pesquisa(@"card.bin").countryCode
      LIXEIRA. Lookup(String BIN).cardCategory

      Este operador procura o BIN e devolve a categoria do cartão (por exemplo, Pré-pago, Corporativo, Recompensas).

      LIXEIRA. Pesquisa(@"card.bin").cardCategory
      LIXEIRA. Lookup(String BIN).error

      Este operador procura o BIN e devolve uma mensagem de erro se o BIN não puder ser encontrado.

      LIXEIRA. Lookup(@"card.bin").error

      Funções de lista

      A Proteção contra Fraude permite-lhe carregar listas personalizadas e consultá-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 Usando listas em regras , mais adiante neste artigo.

      Operator Description Exemplo
      ContémKey(
      String listName,
      String columnName,
      Tecla String)
      Esse operador verifica se uma chave está contida na coluna especificada em uma lista de Proteção contra fraude.

      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("Lista de suporte por e-mail", "E-mails", @"user.email")
      Pesquisa(
      String listName,
      String keyColName,
      Valor da cadeia de caracteresColName)
      Este operador procura o valor de uma chave numa lista de Proteção contra Fraudes. 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 retornado como uma cadeia de caracteres. Se a chave não for encontrada e se o parâmetro defaultValue não for especificado, "Unknown" 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.

      Pesquisa("Lista de Suporte de E-mail", "E-mails", @"user.email", "Status",0)
      Em Este operador verifica se uma chave está contida em uma lista de valores separados por vírgula. In(@"user.countryRegion", "EUA, MX, CA")
      InSupportList Este operador verifica se um atributo está em uma Lista de Suporte. InSupportList('Lista de suporte por e-mail', @"user.email")
      IsSafe Este operador verifica se uma entidade está marcada como Segura numa Lista de Suporte. IsSafe('Lista de suporte por e-mail', @"user.email")
      IsBlock Este operador verifica se uma entidade está marcada como Bloco numa Lista de Suporte. IsBlock('Lista de suporte por e-mail', @"user.email")
      IsWatch Este operador verifica se uma entidade está marcada como Vigia numa Lista de Suporte. IsWatch ('Lista de suporte por e-mail', @"user.email")

      Usando listas em regras

      Você pode usar os operadores ContainsKey e Lookup para fazer referência a listas que você carregou para a Proteção contra fraude. Para obter mais informações sobre listas, consulte Gerenciar listas.

      Contém-chave

      Para verificar se uma das suas listas contém um valor específico, use o operador ContainsKey . Especifique o nome da lista, a coluna e a chave que você deseja verificar.

      Por exemplo, você carrega uma lista de coluna única de endereços de e-mail arriscados e nomeia-a lista de e-mail de risco.

      E-mail
      Kayla@contoso.com
      Jamie@bellowscollege.com
      Marie@atatum.com

      Em seguida, você pode usar a sintaxe a seguir para rejeitar todas as transações dos endereços de e-mail arriscados nesta lista.

      RETURN Reject("risky email") 
      WHEN ContainsKey("Risky email list", "Email", @"user.email")
      

      Esta cláusula verifica se a coluna "E-mail" na lista "Lista de e-mails arriscados" contém a chave @email . Se isso acontecer, a transação é rejeitada.

      Procura

      Para listas de várias colunas, você pode usar o operador Pesquisa para verificar o valor de uma coluna para 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 Lista de e-mail.

      E-mail Status
      Kayla@contoso.com Arriscado
      Jamie@bellowscollege.com Arriscado
      Marie@atatum.com Arriscado
      Camille@fabrikam.com Safe
      Miguel@proseware.com Safe
      Tyler@contoso.com Safe

      Em seguida, você pode usar a sintaxe a seguir para rejeitar todas as transações dos endereços de e-mail nesta lista que tenham um status de Risco.

      RETURN Reject("risky email") 
      WHEN Lookup("Email List", "Email", @"user.email", "Status") == "Risky"
      

      Esta cláusula procura a chave @"user.email" na coluna "Email" na lista "Email List" e verifica se o valor na coluna "Status" é Arriscado. Se assim for, a transação é rejeitada.

      Se a chave @"user.email" não for encontrada na lista, a Proteção contra fraude retornará "Desconhecido".

      Você também pode especificar seu próprio valor padrão como o quinto parâmetro. Para obter mais informações, consulte a seção Operadores lógicos anteriormente neste artigo.

      O operador Lookup sempre retorna um valor String . Para converter esse valor em um valor Int, Double ou DateTime , use um operador de transmissão de tipo.

      Usando chamadas externas, avaliações externas e velocidades

      • Para fazer referência a uma chamada externa, digite Externa, seguida da chamada externa que você deseja referenciar. Para obter mais informações, consulte Usar uma chamada externa em regras.
      • Para fazer referência a uma avaliação externa, digite Avaliações, seguida da avaliação externa que você deseja referenciar. Para obter mais informações, consulte Usar uma avaliação externa em regras.
      • Para fazer referência a uma velocidade, digite Velocidade, seguida da velocidade que você deseja referenciar. 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 a partir do contexto em que são usados. Seguem-se alguns exemplos:

      • Na expressão WHEN @isEmailValidated, a variável é interpretada como um valor booleano .
      • 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, ela será considerada um valor String . Por exemplo, na expressão Model.Risk(). Score < Model.Bot(@"deviceFingerprinting.id"). Pontuação, ambas as variáveis são interpretadas como strings.

      Para especificar o tipo de uma variável não string, use um operador de transmissã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 passados para a chamada externa ou avaliação externa no formato JSON. Como acontece com todos os outros locais no FQL, matrizes e objetos são imutáveis uma vez criados.

      Matrizes JSON

      As matrizes são criadas colocando expressões entre 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 JSON e objetos

      Sintaxe Description 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 a @@payloadProperty, resposta de avaliação externa, resposta de chamada externa, variável local ou uma variável global.

      A seguir estão exemplos de como usar a sintaxe com base em diferentes fontes de matriz:

      • Origem da matriz: Carga útil
      LET $sample = @@"myArr[0]".AsJsonArray()   
      RETURN Approve()   
      WHEN $sample[0].AsString() == "a"
      
      • Origem da matriz: 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 Description 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.

      Devolve 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 matriz:

      Origem do array 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"
      Payload Amostra de carga útil: {"group":[{"item1": "a", "item2": "a1"}, {"item1": "b", "item2": "b1"}]}

      LET $sample = Array.GetValue(@@"group". AsJsonArray(), "item1", "a", "item2")
      RETURN Aprove()WHEN $sample. AsString() == "a1"
      Amostra de carga útil: { "group":[{"item1": "a", "item2": "a1"}, {"item1": "b", "item2": "b1"}]}

      LET $sample = Array.GetValues(@@"group". AsJsonArray(), "item1", "a")
      RETURN Aprove()

      QUANDO $sample[0].item2. AsString() == "a1"

      Variáveis globais Usando a mesma amostra de carga útil como 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 útil como acima

      Do SetVariables(Var=@@"group")
      LET $group = GetVariable("Var"). AsJsonObject()
      LET $arr = Array.GetValues($group. AsJsonArray(), "item1", "a")
      RETURN Aprove()
      Chamada externa

      Resposta de chamada externa (myCall): {"group":[{"item1": "a", "item2": "a1"}, {"item1": "b", "item2": "b1"}]}

      DEIXE $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"}]}

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

      Tipo de transmissão para matrizes e objetos JSON

      • O seguinte . Como<Type>() são suportados a partir do JsonObject:

        • AsString()
        • AsInt()
        • AsDouble()
        • AsDateTime()
        • AsBool()
        • AsJsonArray()
        • AsJsonObject()
      • Quando você usa um dos dois métodos auxiliares de matriz, . GetValue ou . GetValues, você precisa digitar cast usando . Como<tipo>(). 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 ou matriz JSON explicitamente, você pode usar o . As<Type>() para converter para 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 digitados para um objeto JSON. Se você quiser converter o objeto JSON em um tipo de dados diferente, deverá usar . Como<tipo>(). Exemplo:

        LET $sample = @@”user.addresses”.AsJsonArray()
        
      • Quando você quiser saída em um determinado formato, você deve usar . Como<tipo>(). Exemplo:

        LET $sample = @@”user.addresses”
        Output(abc = $sample.AsJsonArray())
        

      Nota

      Práticas recomendadas de fundição de tipo:

      • Sempre digite cast no final da cadeia.
      • Quando não tiver certeza, sempre digite explicitamente cast usando . Como<tipo>(). 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 dentro das Regras de Decisão

      Sintaxe Description 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(teste="123")

      Resposta.Decisão() Esta função refere-se à decisão para a avaliação atual que está sendo avaliada. Response.Decision() == "Aprovar"