Поделиться через


Справочник по языку мошенничества

Microsoft Dynamics 365 имеет свой собственный богатый и экспрессивный язык, чтобы помочь вам определить и выразить стратегию мошенничества. Этот язык имеет множество сходств с C# и SQL, и предназначен для обеспечения гибкости, необходимой для решения мошенничества для уникальных бизнес-сценариев.

Этот язык можно использовать сегодня для определения правил и скоростей. Дополнительные сведения см. в разделе "Управление правилами " и "Выполнение проверок скорости".

В этом справочном руководстве по языку мошенничества приведен полный список операторов, функций и инструкций, составляющих язык:

Выписки

Синтаксис инструкции Description Пример
Выражение LET <VariableName> = <>

Инструкция LET используется для определения новой переменной. Область переменной — это правило или набор скоростей, в которые определена переменная. Имена переменных должны быть префиксированы знаком доллара ($).

Дополнительные сведения см. в разделе "Определение собственных переменных".

Любое количество инструкций LET можно использовать в разделе условия и предложения всех типов правил и наборов скоростей.

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

НАБЛЮДАТЬ

OBSERVATIONFunction<>(<KeyValuePairs)>
[ WHEN <BooleanExpression>

]

Оператор OBSERVE не завершает выполнение правила с решением. Он просто регистрирует пары "ключ-значение" в ответ API или журналы трассировки. Последующие правила и предложения правил продолжают выполняться до достижения инструкции RETURN .

За инструкцией OBSERVE следует одна или несколько функций наблюдения.

Если предложение WHEN присутствует и оценивается как false, инструкция OBSERVE не регистрируется.

Для каждого предложения в следующих правилах можно использовать не более одного предложения:

  • Правила покупки
  • Пользовательские правила оценки
  • Правила защиты учетных записей

    ПРОСМОТР выходных данных(reason="high score")

    OBSERVE TRACE(ip=@"device.ipAddress") WHEN Model.Risk(). Оценка > 400

    RETURN <DecisionFunction>
    [ ,<ObservationFunction>(<KeyValuePairs>) ]
    [ WHEN <BooleanExpression> ]

    Инструкция RETURN завершает выполнение правила с решением.

    Оператор должен указать действительную функцию принятия решений: Утверждайте(), Отклонить(), Challenge()или Review().

    Инструкция также может указать одну или несколько функций наблюдения: Output() или Trace()

    Наконец, инструкция может включать предложение WHEN , чтобы указать условие, в котором он должен выполнять любой из предыдущих действий.

    Максимальное число можно использовать для каждого предложения в следующих правилах:

    • Правила покупки
    • Пользовательские правила оценки
    • Правила защиты учетных записей

      RETURN Review()
      WHEN IsWatch("Список поддержки устройств", @"deviceAttributes.deviceId") ||
      IsWatch("Список поддержки платежей", @"paymentInstrumentList.merchantPaymentInstrumentId")

      RETURN Reject(), Trace(ip=@"device.ipAddress") WHEN Model.Risk(). Оценка > 400

      ROUTETO QUEUEName <>
      [ WHEN <BooleanExpression> ]

      Команда ROUTETO используется в правилах маршрутизации для прямого сопоставления оценок в очереди управления регистрами.

      Необязательное предложение WHEN можно использовать для описания условий, при которых команда должна выполнять маршрутизацию.

      В правилах маршрутизации можно использовать не более одного предложения.

      Очередь ROUTETO("Очередь высокого значения")
      КОГДА @"purchase.request.totalAmount"> 500
      SELECT <AggregationFunction>
      AS <VelocityName>
      FROM <AssesmentType>
      GROUPBY <GroupExpression>
      [ WHEN <BooleanExpression> ]

      Оператор SELECT используется в наборах скоростей для определения скорости. Он должен указать функцию агрегирования.

      Необходимое предложение AS используется для создания псевдонима для скорости. Затем этот псевдоним можно ссылаться на правила.

      Необходимое предложение FROM используется для указания типа оценки для наблюдения за скоростью. Допустимые значения: Purchase, AccountLogin, AccountCreation, Chargeback, BankEvent и CustomAssessment.

      Требуемое предложение GROUPBY указывает свойство или выражение. Все события, которые оцениваются с одинаковым значением в инструкции GROUPBY , объединяются для вычисления агрегирования, запрошенного в инструкции SELECT .

      Например, чтобы вычислить агрегирование для каждого пользователя, используйте GROUPBY @"user.userId".

      Необязательное предложение WHEN указывает логическое выражение, определяющее, должна ли оценка, которая обрабатывается, включаться в скорость, определяемую.

      Максимальное число может использоваться для каждого предложения в наборах скоростей.

      SELECT Count() AS _Purchase_Rejections_Per_Email
      ПОКУПКА ИЗ
      WHEN @"ruleEvaluation.decision" == "Отклонить"
      GROUPBY @"user.email"

      SELECT DistinctCount(@"purchaseId")
      AS _BankDeclines_Per_Device
      FROM BankEvent
      WHEN @"status" == "ОТКЛОНИЛ"
      GROUPBY @"purchase.deviceContext.externalDeviceId"

      КОГДА <BooleanExpression>

      Оператор WHEN похож на предложения WHEN для других операторов, но он стоит отдельно в разделе условий правил и наборов скоростей. Он указывает логическое условие, определяющее, должно ли выполняться целое правило, набор скоростей или правило маршрутизации.

      Максимальное число можно использовать в разделе условий всех типов правил и наборов скоростей.

      WHEN Model.Risk(). Оценка > 400
      Функция ДЕЙСТВИЯ DO <> Оператор DO используется для выполнения некоторых действий в конце выполнения правила. Эту инструкцию можно использовать только в действиях после принятия решений DO SetResponse(name = @"firstname" + @"lastname")

      Ссылка на атрибуты и переменные

      Оператор at sign (@) можно использовать для ссылки на атрибут из текущего события.

      «Переменная» Description Пример
      @

      Знак (@) используется для ссылки на атрибут из входящего события. Атрибут может быть отправлен как часть полезных данных запроса, или Microsoft Dynamics 365 Fraud Protection может создать его.

      После знака (@) укажите полный путь к атрибуту, на который вы хотите ссылаться. Заключите путь в кавычки (например, @"address.city".

      Если указанный атрибут не является частью полезных данных события, значение по умолчанию для этого типа возвращается: 0,0 для двойных, пустая строка для строк и т. д.

      Тип атрибута выводится из контекста, в который используется атрибут. Если не указан достаточно контекста, тип Строки используется по умолчанию.

      Сведения о выводе типов см. в разделе "Вывод типов" атрибутов.

      @"address.city"

      $ Знак доллара ($) используется для ссылки на переменную, определенную в инструкции LET . Дополнительные сведения см. в разделе "Определение собственных переменных". $fullName
      @a[x]

      Эта переменная используется для индексирования переменных массива.

      Если полезные данные запроса для оценки содержат массив элементов, вы можете получить доступ к отдельным элементам массива с помощью следующего синтаксиса: @"productList[0]".

      Чтобы получить доступ к атрибуту этого элемента, используйте следующий синтаксис: @"productList[0].productId"

      @"productList[0].productId"

      @"paymentInstrumentList[3]. Type"

      Exists

      Этот оператор проверяет, существует ли переменная в полезных данных события.

      Существует(строковая переменная)

      Существует(@"user.email")
      Request.CorrelationId() Эта функция ссылается на уникальный идентификатор корреляции вычисляемого события. Эту функцию можно использовать для доступа к идентификатору корреляции события в интерфейсе правил и передачи его внешнему вызову в качестве параметра или заголовка. External.MyExternalCall(Request.CorrelationId())
      . GetDiagnostics() Эту функцию можно использовать для обнаружения важных диагностических и отладочных сведений из внешнего вызова или ответа внешней оценки. Для внешнего вызова объект diagnostics содержит полезные данные запроса, конечную точку, код HttpStatus, сообщение об ошибке и задержку. Конечная точка недоступна в объекте диагностики для ответа внешней оценки. Любое из этих полей можно использовать в правилах после создания объекта диагностики с помощью соответствующего метода расширения. GetDiagnostics()"

      LET $extResponse = External. myCall(@"device.ipAddress")

      LET $extResponseDiagnostics = $extResponse.GetDiagnostics()

      OUTPUT(OBSERVE Output(Diagnostics = $extResponseDiagnostics)

      КОГДА $extResponseDiagnostics. HttpStatusCode != 200

      Определение собственных переменных

      Ключевое слово LET можно использовать для определения переменной. Затем эта переменная может быть указана в других местах правила. Префикс всех переменных знаком доллара ($). Например, вы объявляете следующую переменную.

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

      Переменные, объявленные в инструкции LET, можно использовать только в пределах области правила или набора скорости, в котором определена инструкция.

      Например, чтобы ссылаться на переменную из предыдущего примера, можно написать следующую инструкцию.

      WHEN $fullName == "Kayla Goderich"
      

      Примечание.

      После определения переменной ее нельзя обновить с новым значением.

      Функции глобальных переменных

      Функции глобальных переменных можно использовать для задания и получения переменных в правилах. После установки глобальных переменных их можно получить в рамках правила принятия решений, скорости, правил маршрутизации и действий после принятия решений в одной среде или дочерних средах. Используется защита от мошенничества иерархии, указанная в следующей таблице. Например, если вы устанавливаете глобальные переменные в правиле в корневой среде, защита от мошенничества может получить его значение в любом другом правиле в той же оценке в той же среде или в любой дочерней среде.

      Operator Description Пример
      SetVariables(k=v) Эту функцию можно использовать для задания пар "ключ-значение", то есть задания значений переменным. Do SetVariables(key= 123, email=@"user.email")
      GetVariable("k") Эту функцию можно использовать для доступа к уже заданным переменным. В случаях, когда мы имеем доступ к переменным, которые никогда не заданы, возвращается значение по умолчанию.

      GetVariable("key"). AsInt()

      GetVariable("email"). AsString()

      GetVariable("key"). AsDouble()

      GetVariable("key"). AsBool()

      GetVariable("key"). AsDateTime()

      GetVariable("key"). AsJsonObject()

      GetVariable("key"). AsJsonArray()

      Примечание.

      Глобальные переменные зависят от одной транзакции для данной оценки. Переменная, заданная в одной транзакции, не может быть получена из другой транзакции или другой оценки.

      Функции принятия решений

      Функции принятия решений используются в правилах для указания решения.

      Тип решения Description Пример
      Утверждение()

      Этот тип задает решение "Утвердить". Это может включать причину утверждения и другое вспомогательное сообщение.

      Перегрузки:

      • Утверждение(Строка причина)
      • Утверждение(Строка причина, строка поддержкиMessage)

      RETURN Утверждает()

      RETURN Утверждает("в безопасном списке")

      УТВЕРЖДЕНИЕ RETURN ("в безопасном списке", "не перерастайте")

      Отклонить()

      Этот тип задает решение "Отклонить". Это может включать причину отказа и другого вспомогательного сообщения.

      Перегрузки:

      • Отклонить(Строка причина)
      • Reject(String reason, String supportMessage)

      RETURN Reject()

      ВОЗВРАТ отклонений("страна эмбарго")

      RETURN Отклонить("страна эмбарго", "не эскалация")

      Review()

      Этот тип задает решение проверки. Она может включать причину для проверки и другого вспомогательного сообщения.

      Перегрузки:

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

      RETURN Review()

      Return Review("user on watch list")

      Return Review("user on watch list", "не эскалация")

      Challenge(String challengeType)

      Этот тип задает решение "Задача " и тип задачи. Она также может включать причину проблемы и другое вспомогательное сообщение.

      Перегрузки:

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

      Задача RETURN ("SMS")

      Return Challenge ("SMS", "подозреваемый бот")

      Return Challenge ("SMS", подозреваемый бот", "не эскалация")

      Функции наблюдения

      Функции наблюдения можно использовать для получения данных из текущего контекста и записи их в другом месте.

      Возвращаемый тип Description Пример
      Output(k=v) Эту функцию можно использовать для передачи пар "ключ-значение" в раздел "CustomProperties " ответа API. Пара "ключ-значение" будет вложена в объект, имя которого совпадает с именем предложения, содержащего инструкцию Output(). Output(key="test", email=@"user.email", countryRegion=Geo.CountryRegion(@"device.ipAddress"))
      Trace(k=v) Эту функцию можно использовать для активации события trace и отправки пар "ключ-значение" в пространство имен трассировки событий FraudProtection.Trace.Rule. Trace(key="Manual Review", ip=@"device.ipAddress")
      SetResponse(String sectionName, k=v) Эту функцию можно использовать для передачи пар "ключ-значение" в раздел "CustomProperties " ответа API. Имя раздела является необязательным параметром, который можно пропустить. Эту функцию можно использовать только в рамках действий после принятия решений; Он недоступен в правиле принятия решений

      SetResponse("Scores", bot = Model.Bot(@deviceContextId), risk=Model.Risk())

      SetResponse(test="123")

      Response.Decision() Эта функция ссылается на решение для оценки текущей оценки. Response.Decision() == "Утвердить"

      Агрегатные функции

      Function Description Пример
      Count() Эта функция возвращает количество случаев, когда произошло событие. SELECT Count() AS numPurchases
      DistinctCount(String key) Эта функция возвращает количество уникальных значений для указанного свойства. Если указанное свойство равно null или пусто для входящего события, событие не вносит вклад в агрегирование. SELECT DistinctCount(@"device.ipAddress") AS distinctIPs
      Sum(Double value) Эта функция возвращает сумму значений для указанного числового свойства. SELECT Sum(@"totalAmount") AS totalSpending

      Логические операторы

      Operator Description Пример
      и (&> Логические и

      Model.Risk(). Оценка > 500 && Model.Risk(). Оценка < 800

      Model.Risk(). Оценка > 500 и Model.Risk(). Оценка < 800

      или (||) Логические или

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

      @"email.isEmailUsername" == false или @"email.isEmailValidated" == false

      not Логическое отрицание @"email.isEmailUsername" not(!) @"email.isEmailUsername"

      Операторы сравнения

      Защита от мошенничества поддерживает все стандартные операции сравнения и равенства C#. В этой таблице приведены некоторые примеры операторов, которые могут оказаться полезными. При применении этих операторов к строкам происходит лексикографическое сравнение.

      Operator Description Пример
      == Этот оператор проверяет равенство. @"user.countryRegion" == @"shippingAddress.countryRegion"
      != Этот оператор проверяет неравенство. @"user.countryRegion" != @"shippingAddress.countryRegion"
      > Этот оператор проверяет, больше ли первое значение, чем второе. Model.Risk(). Оценка > 500
      < Этот оператор проверяет, меньше ли первое значение, чем второе значение. Model.Risk(). Оценка < 500
      >= Этот оператор проверяет, больше ли первое значение или равно второму значению. Model.Risk(). Оценка >= 500
      <= Этот оператор проверяет, меньше ли первое значение или равно второму значению. Model.Risk(). Оценка <= 500
      X ? Y : Z Этот оператор проверяет, является ли условие X истинным или нет. Если это верно, выполняется оператор Y и возвращается его результат. В противном случае выполняется оператор Z и возвращается результат. Можно также объединить несколько логических проверок с помощью квадратных скобок, чтобы определить вложенную логику IF <> THEN <> ELSE <> . LET $riskbucket = Model.Risk(). Оценка > 500 ? "Высокий" : (Model.Risk(). Оценка > 300 ? "Средний" : "Низкий")

      Математические функции

      Защита от мошенничества поддерживает все стандартные математические методы C# и арифметические операторы. В этой таблице приведены некоторые примеры методов, которые могут оказаться полезными.

      Operator Description Пример
      Math.Min(Double value1, Double value2) Этот оператор вычисляет минимум два значения. Math.Min(Model.Risk(). Оценка, Model.Bot (@"deviceFingerprinting.id"). Оценка)
      Math.Max(Double value1, Double value2) Этот оператор вычисляет не более двух значений. Math.Max(Model.Risk(). Оценка, Model.Bot (@"deviceFingerprinting.id"). Оценка)
      RandomInt(Integer min, integer max) Этот оператор возвращает случайное целое число в заданном диапазоне, включая минимальное значение и исключение максимального значения. RandomInt(0, 100)

      Операторы DateTime

      Защита от мошенничества поддерживает стандартные свойства, методы и операторы C# DateTime . В этой таблице приведены некоторые примеры функций и свойств, которые могут оказаться полезными.

      Operator Description Пример
      UtcNow Этот оператор получает объект DateTime, заданный текущей датой и временем на компьютере, выраженным как UTC. DateTime.UTCNow
      Today Этот оператор получает объект, заданный текущей датой, где для компонента времени задано значение 00:00:00. DateTime.Today
      Вычитание Этот оператор возвращает новое значение DateTime путем вычитания указанной даты и времени из входного значения DateTime. DateTime.UTCNow.Subtract(@var1. ToDateTime())
      DaysSince(dateTime date) Этот оператор возвращает целое число, представляющее количество дней, передаваемых между указанным значением DateTime и текущей датой (выражено как согласованное универсальное время [UTC]). DaysSince(@"user". CreationDate")
      Год Этот оператор получает компонент года даты, представленной этим экземпляром. @"user.creationDate". Год
      Дата Этот оператор получает новый объект с той же датой, что и этот экземпляр, но где для значения времени задано значение 00:00:00 (полночь). @"user.creationDate". Дата

      Операторы приведения типов

      Дополнительные сведения о выводе типов см . в разделе "Вывод типов атрибутов " далее в этой статье.

      Operator Description Пример
      Convert.ToDateTime

      Этот оператор преобразует строку в datetime и преобразует datetime в строку с использованием заданного формата.

      Convert.ToDateTime(@"user.creationDate"). ToString("гггг-ММ-дд")
      Convert.ToInt32

      Этот оператор преобразует указанное значение в Int32.

      Convert.ToInt32(@var)
      Convert.ToDouble

      Этот оператор преобразует указанное значение в Double.

      Convert.ToDouble(@var)

      Строковые функции

      Защита от мошенничества поддерживает стандартный строковый класс C#. В этой таблице приведены некоторые примеры функций и операторов, которые могут оказаться полезными.

      Operator Description Пример
      StartsWith() Этот оператор проверяет, начинается ли строка с указанного префикса. @"user.phoneNumber". StartsWith("1-")
      EndsWith() Этот оператор проверяет, заканчивается ли строка указанным суффиксом. @"user.email". EndsWith("@contoso.com")
      IsNumeric() Этот оператор проверяет, является ли строка числовым значением. @"user.email". IsNumeric()
      Length

      Этот оператор возвращает количество символов в строке.

      @"user.username".Length
      ToDateTime() Этот оператор преобразует строку в объект DateTime . @"user.creationDate". ToDateTime()
      ToDouble() Этот оператор преобразует строку в значение Double . @"productList.purchasePrice". ToDouble()
      ToInt32() Этот оператор преобразует строку в значение Int32 . @"zipcode". ToInt32()
      ToUpper() Этот оператор возвращает копию этой строки, преобразованной в верхний регистр. @"user.username". ToUpper()
      ToLower() Этот оператор возвращает копию этой строки, преобразованной в нижний регистр. @"user.username". ToLower()
      IndexOf() Этот оператор сообщает отсчитываемый от нуля индекс первого вхождения заданной подстроки в указанной строке. @"user.username". IndexOf("@")
      LastIndexOf() Этот оператор сообщает отсчитываемый от нуля индекс последнего вхождения заданной подстроки в указанной строке. @"user.username". LastIndexOf("@")
      Подстрока() Этот оператор возвращает подстроку, начиная с отсчитываемого от нуля индекса в строке, с вторым необязательным параметром, указывающим длину требуемой подстроки. @"user.username". Подстрока(0,5)
      IsNullOrEmpty() Этот оператор возвращает значение, если указанная строка имеет значение NULL или пуста. В противном случае возвращает значение false. @"user.username". IsNullOrEmpty()
      IgnoreCaseEquals() Этот оператор возвращает значение true, если две строки равны, независимо от различий в регистре. В противном случае возвращает значение false. @"user.username". IgnoreCaseEquals(@"user.email")
      Contains() Этот оператор проверяет, содержит ли строка другую строку. @"productList.productName". Содержит ("Xbox")
      ContainsOnly() Этот оператор проверяет, содержит ли строка только предоставленные наборы символов. @"zipcode". ContainsOnly(CharSet.Numeric)
      ContainsAll() Этот оператор проверяет, содержит ли строка все предоставленные наборы символов. @"zipcode". ContainsAll(CharSet.Numeric|CharSet.Hyphen)
      ContainsAny() Этот оператор проверяет, содержит ли строка любой из предоставленных символов. @"zipcode". ContainsAny(CharSet.Numeric|CharSet.Hyphen)

      Использование CharSet в ContainsOnly, ContainsAll и ContainsAny

      Следующие типы символов можно использовать в ContainsOnly, ContainsAll и ContainsAny.

      Тип символа Description
      По алфавиту a-z, A-Z
      Апостроф '
      Asperand @
      Обратная косая черта \
      Comma ,
      Hyphen -
      Числовое 0–9
      Период .
      Косая черта /
      Подчеркивание _
      Пробелы Одно пространство

      Функции обнаружения Гиббериш

      Эти функции помогают предотвратить мошенничество, быстро и эффективно обнаруживая, содержат ли ключевые поля ввода пользователей (например, имена и адреса).

      Function Description Пример
      GetPattern(String).maxConsonants Максимальное число смежных консонантов в строке, которая не разделена гласной. Например, maxConsonants для строки "01gggyturah" имеет значение 5. GetPattern(@"user.email").maxConsonants
      GetPattern(String).gibberScore Оценка на основе машинного обучения от 0 до 1; 0 означает, что, скорее всего, будет гиббериш и 1 означает, что, скорее всего, будет гиббериш. GetPattern(@"user.email").gibberScore

      Примечание.

      Модель обнаружения Гиббериш основана на частоте двух последовательных буквенно-цифровых символов в общедоступных английских документах. Предполагается, что более часто два последовательных буквенно-цифровых символа появляются в общедоступных документах, менее вероятно, что они гибчее. Модель должна предоставлять разумные оценки для английского текста и может использоваться для определения того, содержат ли имена или адреса в гибберише. Однако модель может не подходить для сокращенных выражений, таких как короткая форма для состояний (AZ, TX и т. д.), а также не может использоваться для проверки имен или адресов. Наконец, модель не была проверена для текста, отличного от английского языка.

      Функции обнаружения шаблонов

      Эти функции помогают предотвратить мошенничество, быстро и эффективно обнаруживая, содержат ли ключевые поля ввода пользователей (например, имена и адреса).

      Function Description Пример
      Patterns.IsRegexMatch(string pattern, string source) Выполняет сопоставление регулярных выражений (regex) шаблона строки с источником строки. Результатом является логическое значение, т. е. значение true (указывающее, что заданная строка соответствует шаблону) или false (указывающее, что совпадение не соответствует). Patterns.IsRegexMatch("^.com$", @ "user.email") Patterns.IsRegexMatch("^".[aAeEiIoOuU]+.*$, @ user.firstname)

      Примечание.

      • Шаблон строки должен быть константным вводом.
      • Функция возвращает значение false (результат по умолчанию), если время оценки превышает 10 миллисекунда.
      • Все ограничения , которые не поддерживают NonBacktracking, также применяются к функции IsRegexMatch.

      Функции модели

      Функции модели выполняют различные модели мошенничества и полезны, если оценка не запускает одну или несколько моделей мошенничества. При выполнении функций модели сведения о модели, выполняемой во время оценки правил, выходные данные в вызове API оценки мошенничества. Затем правило получает доступ к результату модели, включая оценку, причины и многое другое, которые можно использовать для дальнейшей обработки правил и принятия решений.

      Тип модели Description Пример
      Риск Оценивает вероятность рискованного сеанса. Model.Risk()
      Бот Оценивает вероятность запуска сеанса ботом. Передайте идентификатор контекста устройства, который был отправлен в решение по отпечаткам пальцев устройства защиты от мошенничества. Model.Bot(@deviceContextId)

      Географические функции

      Географические функции обеспечивают разрешение путем преобразования IP-адреса в географический адрес. Гео-функции можно вызывать в правилах только с помощью IP-адресов, которые являются частью полезных данных транзакции или собираются с помощью защиты от мошенничества с помощью отпечатков пальцев устройства. Геофункциональность не может вызываться для произвольных значений IP-адресов.

      Operator Description Пример
      Geo.RegionCode(String ip)

      Этот оператор преобразует IPv4-адрес в код региона США (т. е. сокращенное имя штата ИЛИ территории США).

      Например, для IP-адреса в штате Вашингтон возвращается "WA".

      Geo.RegionCode(@"device.ipAddress")
      Geo.Region(String ip)

      Этот оператор преобразует IPv4-адрес в свой регион США (т. е. имя штата ИЛИ территории США).

      Например, для IP-адреса в штате Вашингтон возвращается "Вашингтон".

      Geo.Region(@"device.ipAddress")
      Geo.CountryCode(String ip)

      Этот оператор преобразует IPv4-адрес в код страны или региона.

      Например, для IP-адреса в Австралии возвращается "AU".

      Geo.CountryCode(@"device.ipAddress")
      Geo.CountryRegion(String ip)

      Этот оператор преобразует IP-адрес в имя региона.

      Например, для IP-адреса в Австралии возвращается "Австралия".

      Geo.CountryRegion(@"device.ipAddress")
      Geo.City(String ip)

      Этот оператор преобразует IPv4-адрес в имя города.

      Например, для IP-адреса в Нью-Йорке возвращается "Нью-йорк".

      Geo.City(@"device.ipAddress")
      Geo.MarketCode(String ip)

      Этот оператор преобразует IPv4-адрес в код рынка IP-адреса.

      Например, для IP-адреса из Канады возвращается "NA" (Северная Америка).

      Geo.MarketCode(@"device.ipAddress")

      Функции атрибута устройства

      Operator Description Пример
      Device.GetFullAttributes(String sessionId) Возвращает полный набор атрибутов устройства для указанного сеанса отпечатков пальцев устройства. Сведения о настройке отпечатков пальцев устройства для просмотра полного набора атрибутов устройства Device.GetFullAttributes(@"deviceFingerprinting.id")
      Device.GetAttributes(String sessionId) Возвращает меньшее подмножество атрибутов устройства для указанного сеанса отпечатков пальцев устройства. Подмножество — это список, курируемый защитой от мошенничества, и содержит наиболее часто используемые атрибуты. Device.GetAttributes(@"deviceFingerprinting.id")
      Device.GetSelectedAttributes(String sessionId, String attributeName) Возвращает до 20 атрибутов устройства для указанного сеанса отпечатков пальцев устройства. Список требуемых атрибутов необходимо указать в качестве параметров разделенных запятыми Device.GetSelectedAttributes(@"deviceFingerprinting.id", "deviceAsn", deviceCountryCode")
      Device.GetSpeedOfTravel(String sessionId) Возвращает максимальную скорость перемещения устройства в милях в час. Защита от мошенничества определяет максимальную скорость, принимая последние пять последовательных сеансов отпечатков пальцев и вычисляя скорость устройства от сеанса к сеансу, возвращая максимальное значение. Устройство определяется по сеансам с помощью идентификатора файла cookie. Device.GetSpeedOfTravel (@"deviceFingerprinting.id")

      Функции подстановки BIN

      Функции подстановки BIN предоставляют сведения об учетной записи кредитной карты (например, сеть карты, тип карты, код карты, категорию карты) на основе идентификатора банка (BIN). Данные для поиска BIN предоставляются от ведущих сторонних поставщиков данных BIN, а затем курируются защитой от мошенничества.

      Operator Description Пример
      БУНКЕР. Lookup(String BIN).cardNetwork

      Эта функция ищет BIN и возвращает сеть карточек (например, Visa, Master).

      БУНКЕР. Lookup(@"card.bin").cardNetwork
      БУНКЕР. Lookup(String BIN).cardType

      Этот оператор ищет BIN и возвращает тип карты (например, "Дебет", "Кредит").

      БУНКЕР. Lookup(@"card.bin").cardType
      БУНКЕР. Lookup(String BIN).issuer

      Этот оператор ищет BIN и возвращает выдачу организации.

      БУНКЕР. Lookup(@"card.bin").издатель
      БУНКЕР. Lookup(String BIN).countryCode

      Этот оператор ищет BIN и возвращает код страны ISO двухбуквенный код карты.

      БУНКЕР. Lookup(@"card.bin").countryCode
      БУНКЕР. Lookup(String BIN).cardCategory

      Этот оператор ищет BIN и возвращает категорию карты (например, Предоплаченная, Корпоративная, Награда).

      БУНКЕР. Lookup(@"card.bin").cardCategory
      БУНКЕР. Ошибка lookup(String BIN).error

      Этот оператор ищет BIN и возвращает сообщение об ошибке, если не удалось найти BIN.

      БУНКЕР. Lookup(@"card.bin").error

      Функции для работы со списками

      Защита от мошенничества позволяет отправлять настраиваемые списки и ссылать их на них на языке. Сведения о том, как отправить эти списки, см. в разделе "Управление списками". Дополнительные сведения об использовании списков в правилах см . в разделе "Использование" в разделе правил далее в этой статье.

      Operator Description Пример
      ContainsKey(
      String listName,
      String columnName,
      Строковый ключ)
      Этот оператор проверяет, содержится ли ключ в указанном столбце в списке защиты от мошенничества.

      Пример в следующем столбце проверяет, содержит ли столбец "Emails" в списке "Список поддержки электронной почты" переменную @"user.email".

      ContainsKey("Список поддержки электронной почты", "Сообщения электронной почты", @"user.email")
      Подстановка()
      String listName,
      String keyColName,
      String valueColName)
      Этот оператор ищет значение ключа в списке защиты от мошенничества. Имя столбца, содержащего ключ, и имя столбца, содержащего значение, необходимо указать.

      Значение всегда возвращается в виде строки. Если ключ не найден, и если параметр defaultValue не указан, возвращается значение "Неизвестно".

      Пример в следующем столбце ищет значение переменной @"user.email" в столбце "Электронная почта" списка поддержки электронной почты. Если совпадение найдено, функция возвращает значение столбца состояния из соответствующей строки в списке. Если совпадение не найдено, функция возвращает значение 0.

      Lookup("Список поддержки электронной почты", "Сообщения электронной почты", @"user.email""Состояние",0)
      In Этот оператор проверяет, содержится ли ключ в разделенном запятыми списке значений. In(@"user.countryRegion", "US, MX, CA")
      InSupportList Этот оператор проверяет, находится ли атрибут в списке поддержки. InSupportList('Список поддержки электронной почты', @"user.email")
      IsSafe Этот оператор проверяет, помечена ли сущность как безопасная в списке поддержки. IsSafe('Список поддержки электронной почты', @"user.email")
      IsBlock Этот оператор проверяет, помечена ли сущность как блок в списке поддержки. IsBlock('Список поддержки электронной почты', @"user.email")
      IsWatch Этот оператор проверяет, помечена ли сущность как наблюдатель в списке поддержки. IsWatch('Список поддержки электронной почты', @"user.email")

      Использование списков в правилах

      Операторы ContainsKey и Lookup можно использовать для ссылки на списки, отправленные в службу защиты от мошенничества. Дополнительные сведения о списках см. в разделе "Управление списками".

      ContainsKey

      Чтобы проверить, содержит ли один из списков определенное значение, используйте оператор ContainsKey . Укажите имя списка, столбец и ключ, который требуется проверить.

      Например, вы отправляете список опасных адресов электронной почты с одним столбцом и присвойте ему список рискованных сообщений электронной почты.

      Эл. почта
      Kayla@contoso.com
      Jamie@bellowscollege.com
      Marie@atatum.com

      Затем можно использовать следующий синтаксис, чтобы отклонить все транзакции из рискованных адресов электронной почты в этом списке.

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

      Это предложение проверяет, содержит ли столбец "Электронная почта" в списке "Список рискованных писем" @email ключ. Если это так, транзакция отклоняется.

      Подстановка

      Для списков с несколькими столбцами можно использовать оператор Lookup , чтобы проверить значение столбца для определенного ключа.

      Например, вы создадите список, имеющий один столбец для адресов электронной почты и другой столбец, указывающий состояние этих адресов электронной почты. Вы назовете этот список электронной почты.

      Эл. почта Состояние
      Kayla@contoso.com Рискованный
      Jamie@bellowscollege.com Рискованный
      Marie@atatum.com Рискованный
      Camille@fabrikam.com Safe
      Miguel@proseware.com Safe
      Tyler@contoso.com Safe

      Затем можно использовать следующий синтаксис, чтобы отклонить все транзакции из адресов электронной почты в этом списке с состоянием "Рискованные".

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

      Это предложение ищет ключ @"user.email" в столбце "Электронная почта" в списке "Список электронной почты" и проверяет, является ли значение в столбце "Состояние" рискованным. Если это так, транзакция отклоняется.

      Если ключ @"user.email" не найден в списке, защита от мошенничества возвращает значение "Неизвестно".

      Вы также можете указать собственное значение по умолчанию в качестве пятого параметра. Дополнительные сведения см. в разделе "Логические операторы " выше в этой статье.

      Оператор подстановки всегда возвращает строковое значение. Чтобы преобразовать это значение в значение Int, Double или DateTime , используйте оператор приведения типов.

      Использование внешних вызовов, внешних оценок и скоростей

      Вывод атрибутов в типе

      Типы переменных выводятся из контекста, в который они используются. Далее приводятся некоторые примеры.

      • В выражении WHEN @isEmailValidated переменная интерпретируется как логическое значение.
      • В выражении Model.Risk(). Оценка > 500, переменная интерпретируется как двойное значение.
      • В выражении @"user.creationDate". Year DateTime.UTCNow.Year <переменная интерпретируется как значение DateTime.

      Если для вывода типа переменной недостаточно контекста, он считается строковым значением. Например, в выражении Model.Risk(). Оценка < модели.Bot(@"deviceFingerprinting.id"). Оценка, обе переменные интерпретируются как строки.

      Чтобы указать тип нестроки переменной, используйте оператор приведения типов.

      Массивы и объекты JSON

      FQL поддерживает построение сложных структурированных объектов в виде локальных переменных, которые можно передать во внешний вызов или внешнюю оценку в формате JSON. Как и все остальные локальные параметры в FQL, массивы и объекты неизменяемы после создания.

      Массивы JSON

      Массивы создаются путем заключения выражений в пару квадратных скобок:

      LET $arr1 = [ "hello", "world" ]
      LET $arr2 = [
        "this is also an array",
        78.4,
        $arr1,
        @"user.email",
        External.MyExtcall()
      ]
      

      Объекты JSON

      Объекты создаются с фигурными скобками:

      LET $obj1 = { isObject: true }
      LET $obj2 = {
        numberField: 7,
        fieldIs: "string",
        internalObj: $obj1,
        inline: {
          innerInnerField: "hello"
        }
      }
      

      Функции FQL для массивов и объектов JSON

      Синтаксис Description Пример
      myArr[0] Этот синтаксис можно использовать для доступа к определенному элементу массива по его индексу. myArr [0].property
      myArr [0][0
      ]myArr [0][0].property
      myArr [0].property[0]
      myArr [0].property[0].property[0].property

      Где myArr в приведенных выше примерах является массивом. Источником этого массива может быть @@payloadProperty, ответ внешней оценки, ответ внешнего вызова, локальная переменная или глобальная переменная.

      Ниже приведены примеры использования синтаксиса на основе различных источников массива:

      • Источник массива: полезные данные
      LET $sample = @@"myArr[0]".AsJsonArray()   
      RETURN Approve()   
      WHEN $sample[0].AsString() == "a"
      
      • Источник массива: локальная переменная
        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" 
        
      Синтаксис Description Пример
      Array.GetValue (TargetArray ). AsJsonArray(), matchKey, matchValue, lookupKey) С помощью этой функции можно получить доступ к первому элементу массива, который соответствует условию.

      Возвращает значение

      Array.GetValue(@"payloadProperty". AsJsonArray(), matchKey, matchValue, lookupKey)
      Array.GetValues(TargetArray . AsJsonArray(), matchKey, matchValue) С помощью этой функции можно получить доступ к набору элементов массива, которые соответствуют условию.

      Возвращает массив

      Array.GetValues(@@"payloadProperty". AsJsonArray(), matchKey, matchValue)

      Ниже приведены более подробные примеры использования приведенного выше синтаксиса на основе различных источников массивов:

      Источник массива Array.GetValue Array.GetValues
      Внешние оценки 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"
      Полезная нагрузка Пример полезных данных: {"group":[{"item1": "a", "item2": "a1"}, {"item1": "b", "item2": "b1"}]}

      LET $sample = Array.GetValue(@@"group". AsJsonArray(), "item1", "a", "item2")RETURN Approve()
      WHEN $sample. AsString() == "a1"
      Пример полезных данных: { "group":[{"item1": "a", "item2": "a1"}, {"item1": "b", "item2": "b1"}]}

      LET $sample = Array.GetValues(@@"group". AsJsonArray(), "item1", "a")
      RETURN Утверждает()

      КОГДА $sample[0].item2. AsString() == "a1"

      Глобальные переменные Использование того же примера полезных данных, что и выше

      Do SetVariables(Var=@@"group")
      LET $group = GetVariable("Var"). AsJsonObject()
      LET $value = Array.GetValue($group, "item1", "a", "item2")RETURN Утверждает()

      WHEN $value. AsString() == "a1"
      Использование того же примера полезных данных, что и выше

      Do SetVariables(Var=@@"group")
      LET $group = GetVariable("Var"). AsJsonObject()
      LET $arr = Array.GetValues($group. AsJsonArray(), "item1", "a")
      RETURN Утверждает()
      Внешний вызов

      Ответ внешнего вызова (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"

      Ответ внешнего вызова (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"

      Приведение типов для массивов и объектов JSON

      • Ниже приведено следующее . As<Type>() поддерживается из JsonObject:

        • AsString()
        • AsInt()
        • AsDouble()
        • AsDateTime()
        • AsBool()
        • AsJsonArray()
        • AsJsonObject()
      • При использовании одного из двух вспомогательных методов массива Массив.GetValue или Arrays.GetValues необходимо ввести приведение с помощью . As<Type>(). Пример:

        LET $arr = {myArr:[{item1: "red", number: 45}, {item1: "blue", number: 56}, {item1: "green", number: 33}]}
        LET $sample = Array.GetValues($arr.myArr.AsJsonArray(), "item1", "blue")
        
      • После явного преобразования данных в объект JSON или массив можно использовать . В качестве<типа>() для приведения к другому типу данных при необходимости. Пример:

        RETURN Approve()
        WHEN $sample[0].number.AsInt() == 56
        
      • При использовании @@данные неявно введите объект JSON. Если вы хотите преобразовать объект JSON в другой тип данных, необходимо использовать . As<Type>(). Пример:

        LET $sample = @@”user.addresses”.AsJsonArray()
        
      • Если вы хотите вывести выходные данные в определенном формате, необходимо использовать . As<Type>(). Пример:

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

      Примечание.

      Рекомендации по приведения типов:

      • Всегда введите приведение в конце цепочки .
      • Если вы не уверены, всегда явно введите приведение с помощью. As<Type>(). Пример:
      LET $sample = External.myCall().data[0].Item1[0].AsJsonArray()
      
      Or
      
      LET $sample = @@”accommodations[0].rooms”.AsJsonArray()
      

      Функции, доступные в рамках действий после принятия решений

      Следующие функции можно использовать только в действиях после принятия решений. Они недоступны в правилах принятия решений

      Синтаксис Description Пример
      SetResponse(String sectionName, k=v) Эту функцию можно использовать для передачи пар "ключ-значение" в раздел "CustomProperties " ответа API. Имя раздела является необязательным параметром, который можно пропустить. SetResponse("Scores", bot = Model.Bot(@deviceContextId), risk=Model.Risk())

      SetResponse(test="123")

      Response.Decision() Эта функция ссылается на решение для оценки текущей оценки. Response.Decision() == "Утвердить"