次の方法で共有


言語リファレンス ガイド

Microsoft Dynamics 365 には、不正行為戦略の定義と表現に役立つ、独自の豊富で表現力豊かな言語があります。 この言語は C# と SQL と多くの類似点を持ち、独自のビジネス シナリオで不正行為に対処するために必要な柔軟性を提供するように設計されています。

現在、この言語を使用して、ルールと速度を定義できます。 詳細については、「ルールの管理」および「速度チェックの実行」を参照してください。

この言語リファレンス ガイドには、言語を構成する演算子、関数、ステートメントの完全な一覧が含まれています。

ステートメント

ステートメントの構文 説明
LET VariableName> = <式<>

LET ステートメントは、新しい変数を定義するために使用されます。 変数のスコープは、変数が定義されているルールまたは速度セットです。 変数名には、先頭にドル記号 ($) を付ける必要があります。

詳細については、独自の変数の定義を参照してください

[条件] セクションには、任意の数の LET ステートメントを使用でき、すべてのルールの種類と速度セットの句を使用できます。

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

観察

OBSERVATION <ObservationFunction>(<KeyValuePairs>)
[ WHEN <BooleanExpression>

]

OBSERVE ステートメントは、ルールの実行を決定で終了しません。 キーと値のペアを API 応答またはトレース ログに記録するだけです。 それ以降の規則および規則句は、RETURN ステートメントに達するまで引き続き実行されます。

OBSERVE ステートメントの後には、1 つ以上の観測関数が続く必要があります。

WHEN 句が存在し、False評価された場合、OBSERVE ステートメントはログに記録されません。

次の規則では、各句に最大 1 つを使用できます。

  • 購入ルール
  • カスタム評価ルール
  • アカウント保護ルール

    OBSERVE Output(reason="high score")

    OBSERVE TRACE(ip=@"device.ipAddress") WHEN Model.Risk().スコア > 400

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

    RETURN ステートメントは、ルールの実行を決定で終了します。

    ステートメントでは、有効な意思決定関数 (Approve()、Reject()Challenge()、Review()) を指定する必要があります。

    ステートメントでは、Output() または Trace() の 1 つ以上の観測関数を指定することもできます。

    最後に、ステートメントに WHEN 句を含め、上記のいずれかを実行する条件を指定できます。

    次の規則では、句ごとに最大 1 つを使用できます。

    • 購入ルール
    • カスタム評価ルール
    • アカウント保護ルール

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

      RETURN Reject(), Trace(ip=@"device.ipAddress") WHEN Model.Risk().スコア > 400

      ROUTETO QUEUE <QueueName>
      [ WHEN <BooleanExpression> ]

      ROUTETO コマンドは、照合評価をケース管理キューに転送するルーティング 規則で使用されます

      オプション の WHEN 句を使用して、コマンドがルーティングを実行する条件を記述できます。

      ルーティング規則では、句ごとに最大 1 つを使用できます。

      ROUTETO Queue("High Value Queue")
      WHEN @"purchase.request.totalAmount"> 500
      SELECT <AggregationFunction>
      AS <VelocityName>
      FROM <AssesmentType>
      GROUPBY <GroupExpression>
      [ WHEN <BooleanExpression> ]

      速度を定義するために、速度セットで SELECT ステートメントが使用されます。 集計関数を指定する必要があります。

      必要な AS 句は、ベロシティのエイリアスを作成するために使用されます。 その後、このエイリアスをルールから参照できます。

      必要な FROM 句は、速度を観察する評価の種類を指定するために使用されます。 有効な値は、PurchaseAccountLoginAccountCreationChargebackBankEvent、CustomAssessment です。

      必要な GROUPBY 句は、プロパティまたは式を指定します。 GROUPBY ステートメントで同じ値に評価されるすべてのイベントが結合され、SELECT ステートメントで要求された集計が計算されます。

      たとえば、各ユーザーの集計を計算するには、GROUPBY @"user.userId"を使用します。

      オプション の WHEN 句は、処理中の評価を定義されている速度に含める必要があるかどうかを決定するブール式を指定します。

      ベロシティ セットでは、句ごとに最大 1 つを使用できます。

      SELECT Count() AS _Purchase_Rejections_Per_Email
      FROM 購入
      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>

      WHEN ステートメントは他のステートメントの WHEN 句に似ていますが、ルールとベロシティ セットの Condition セクションに単独で表示されます。 ルール全体、速度セット、またはルーティング ルールを実行するかどうかを決定するブール条件を指定します。

      最大 1 つは、すべてのルールの種類と速度セットの [条件] セクションで使用できます。

      WHEN Model.Risk()。スコア > 400
      DO <アクション関数> DO ステートメントは、ルールの実行の最後に何らかのアクションを実行するために使用されます。 このステートメントは、事後決定アクションでのみ使用できます DO SetResponse(name = @"firstname" + @"lastname")

      属性と変数の参照

      at sign (@) 演算子を使用して、現在のイベントから属性を参照できます。

      変数 説明
      @

      アットマーク (@) は、受信イベントから属性を参照するために使用されます。 属性は要求ペイロードの一部として送信されるか、Microsoft Dynamics 365 Fraud Protection によって生成される可能性があります。

      アットマーク (@) の後に、参照する属性の完全なパスを指定します。 パスを引用符 (@"address.city" など) で囲みます。

      参照される属性がイベント ペイロードの一部でない場合は、その型の既定値 (doubles の場合は 0.0、文字列の場合は空の文字列など) が返されます。

      属性の型は、属性が使用されているコンテキストから推論されます。 十分なコンテキストが指定されていない場合は、 既定で String 型が使用されます。

      型推論の詳細については、「属性の型推論」を参照してください

      @"address.city"

      $ LET ステートメントで定義されている変数を参照するには、ドル記号 ($) を使用します。 詳細については、独自の変数の定義を参照してください $fullName
      @a[x]

      この変数は、配列変数のインデックスを作成するために使用されます。

      評価の要求ペイロードに項目の配列が含まれている場合は、@"productList[0]" という構文を使用して、配列の個々の要素にアクセスできます。

      その要素の属性にアクセスするには、次の構文を使用します: @"productList[0].productId"

      @"productList[0].productId"

      @"paymentInstrumentList[3].type"

      Exists

      この演算子は、イベント ペイロードに変数が存在するかどうかを確認します。

      Exists(String 変数)

      Exists(@"user.email")
      Request.CorrelationId() この関数は、評価されるイベントの一意の関連付け ID を参照します。 この関数を使用すると、ルール エクスペリエンス内のイベントの関連付け ID にアクセスし、パラメーターまたはヘッダーとして外部呼び出しに渡すことができます。 External.MyExternalCall(Request.CorrelationId())
      .GetDiagnostics() この関数を使用すると、外部呼び出しまたは外部評価応答から重要な診断およびデバッグ情報を検出できます。 外部呼び出しの場合、Diagnostics オブジェクトには、要求ペイロード、エンドポイント、HttpStatus コード、エラー メッセージ、待機時間が含まれます。 エンドポイントは、外部評価応答の診断オブジェクトでは使用できません。 これらのフィールドは、対応する拡張メソッドを使用して診断オブジェクトを作成した後、ルールで使用できます。GetDiagnostics()"

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

      LET $extResponseDiagnostics = $extResponse.GetDiagnostics()

      OBSERVE Output(Diagnostics = $extResponseDiagnostics )

      when $extResponseDiagnostics。 HttpStatusCode != 200

      独自の変数の定義

      LET キーワードを使用して変数を定義できます。 その変数は、ルール内の他の場所で参照できます。 すべての変数にドル記号 ($) を付けます。 たとえば、次の変数を宣言します。

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

      LET ステートメントで宣言された変数は、ステートメントが定義されている規則または速度セットのスコープ内でのみ使用できます。

      たとえば、前の例の変数を参照するには、次のステートメントを記述します。

      WHEN $fullName == "Kayla Goderich"
      

      Note

      変数を定義した後は、新しい値で更新することはできません。

      グローバル変数関数

      グローバル変数関数を使用して、ルール内で変数を設定および取得できます。 グローバル変数は、設定が完了すると、次の表の階層内の同じ環境内または子環境内の意思決定規則、速度、ルーティング規則、および決定後アクション内でアクセスできます。 たとえば、ルート環境内のルールでグローバル変数を設定した場合、その値は、同じ環境内の同じ評価内の他のルール内、または任意の子環境で取得できます。

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

      Note

      グローバル変数は、特定の評価の 1 つのトランザクションに固有です。 あるトランザクション内で設定された変数は、別のトランザクションまたは別の評価から取得できません。

      決定関数

      デシジョン関数は、決定を指定するルールで使用されます。

      決定の種類 説明
      Approve()

      この型では、承認の決定を 指定します。 これには、承認の理由と、別のサポート メッセージを含めることができます。

      オーバー ロード:

      • Approve(文字列 の理由)
      • Approve(String reason, String supportMessage)

      RETURN Approve()

      RETURN Approve("on safe list")

      RETURN Approve ("on safe list", "do not escalate")

      Reject()

      この型は、拒否の 決定を指定します。 拒否の理由と、別のサポート メッセージを含めることができます。

      オーバー ロード:

      • Reject(文字列 の理由)
      • Reject(String reason, String supportMessage)

      RETURN Reject()

      RETURN Reject("embargo country")

      RETURN Reject("embargo country", "do not escalate")

      Review()

      この型は、レビュー決定を指定します。 レビューの理由と、別のサポート メッセージを含めることができます。

      オーバー ロード:

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

      この型は、チャレンジの決定とチャレンジ種類を指定します。 また、チャレンジの理由や別のサポート メッセージを含めることもできます。

      オーバー ロード:

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

      RETURN Challenge ("SMS")

      RETURN チャレンジ ("SMS"、"suspected bot")

      RETURN チャレンジ ("SMS"、疑わしいボット"、"エスカレートしない")

      観測関数

      監視関数を使用して、現在のコンテキストからデータを取得し、別の場所に書き込むことができます。

      返り値の種類 説明
      Output(k=v) この関数を使用して、API 応答の CustomProperties セクションにキーと値のペアを渡すことができます。 キーと値のペアは、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) この関数を使用して、API 応答の CustomProperties セクションにキーと値のペアを渡すことができます。 sectionName は省略可能なパラメーターで、スキップできます。 この関数は、事後決定アクション内でのみ使用できます。決定ルール内では使用できません

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

      SetResponse(test="123")

      Response.Decision() この関数は、評価中の現在の評価の決定を参照します。 Response.Decision() == "Approve"

      集計関数

      関数 説明
      Count() この関数は、イベントが発生した回数を返します。 SELECT Count() AS numPurchases
      DistinctCount(String キー) この関数は、指定したプロパティの個別の値の数を返します。 指定したプロパティが受信イベントに対して null または空の場合、イベントは集計に影響しません。 SELECT DistinctCount(@"device.ipAddress") AS distinctIPs
      Sum(Double ) この関数は、指定された数値プロパティの値の合計を返します。 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"

      比較演算子

      Fraud Protection では、すべての標準的な C# 比較操作と等価操作がサポートされます。 この表には、便利な演算子の例がいくつか含まれています。 これらの演算子を文字列に適用すると、辞書式比較が行われます。

      Operator Description
      == この演算子は、等しいかどうかを確認します。 @"user.countryRegion" == @"shippingAddress.countryRegion"
      != この演算子は、不等値をチェックします。 @"user.countryRegion" != @"shippingAddress.countryRegion"
      > この演算子は、最初の値が 2 番目の値より大きいかどうかを確認します。 Model.Risk()。スコア > 500
      < この演算子は、最初の値が 2 番目の値より小さいかどうかを確認します。 Model.Risk()。スコア < 500
      >= この演算子は、最初の値が 2 番目の値以上かどうかを確認します。 Model.Risk()。スコア >= 500
      <= この演算子は、最初の値が 2 番目の値以下かどうかを確認します。 Model.Risk()。スコア <= 500
      X。 Y : Z この演算子は、条件 X が true かどうかを確認します。 true の場合、ステートメント Y が実行され、その結果が返されます。 それ以外の場合は、ステートメント Z が実行され、その結果が返されます。 かっこを使用して複数の論理チェックを組み合わせて、入れ子になった IF <> THEN <> ELSE <> ロジックを定義することもできます LET $riskbucket = Model.Risk()。スコア > 500 ? "High" : (Model.Risk()。スコア > 300 ? "Medium" : "Low")

      数学関数

      Fraud Protection では、すべての標準的な C# 算術メソッドと算術演算子がサポートされています。 この表には、役に立つメソッドの例がいくつか含まれています。

      Operator Description
      Math.Min(Double value1, Double value2) この演算子は、2 つの値の最小値を計算します。 Math.Min(Model.Risk().Score,Model.Bot(@"deviceFingerprinting.id")。スコア)
      Math.Max(Double 値 1, Double 2) この演算子は、最大 2 つの値を計算します。 Math.Max(Model.Risk().Score,Model.Bot(@"deviceFingerprinting.id")。スコア)
      RandomInt(Integer min, Integer max) この演算子は、最小値と最大値を除く、指定された範囲内のランダムな整数を返します。 RandomInt(0, 100)

      DateTime 演算子

      Fraud Protection では、標準の C# DateTime プロパティ、メソッド、および演算子がサポートされています。 この表には、便利な関数とプロパティの例がいくつか含まれています。

      Operator Description
      UtcNow この演算子は、コンピューター上の現在の日付と時刻 (UTC) に設定された DateTime オブジェクトを取得します。 DateTime.UtcNow
      今日 この演算子は、時刻コンポーネントが 00:00:00 に設定されている現在の日付に設定されているオブジェクトを取得します。 DateTime.Today
      減算 この演算子は、入力 DateTime から指定した日付と時刻を減算することによって、新しい DateTime を返します。 DateTime.UtcNow.Subtract(@var1.ToDateTime())
      DaysSince(DateTime date) この演算子は、指定した DateTime 値と現在の日付の間に渡された日数を表す整数を返します (世界協定時刻 (UTC) として表されます)。 DaysSince(@"user.CreationDate")
      Year この演算子は、このインスタンスによって表される日付の年のコンポーネントを取得します。 @"user.creationDate".年
      この演算子は、このインスタンスと同じ日付を持ち、時刻の値が 00:00:00 (午前 0 時) に設定されている新しいオブジェクトを取得します。 @"user.creationDate".日付

      型キャスト演算子

      型推論の詳細については、この記事で後述する 「属性 の型推論」セクションを参照してください。

      Operator Description
      Convert.ToDateTime

      この演算子は、文字列を datetime に変換し、指定された形式を使用して datetime を文字列に変換します。

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

      この演算子は、指定した値を Int32 に変換します。

      Convert.ToInt32(@var)
      Convert.ToDouble

      この演算子は、指定した値を Double に変換します。

      Convert.ToDouble(@var)

      文字列関数

      Fraud Protection では、標準の C# 文字列クラスがサポートされています。 この表には、便利な関数と演算子の例がいくつか含まれています。

      Operator Description
      StartsWith() この演算子は、文字列が指定したプレフィックスで始まるかどうかを確認します。 @"user.phoneNumber".StartsWith("1-")
      EndsWith() この演算子は、文字列が指定したサフィックスで終わるかどうかを確認します。 @"user.email".EndsWith("@contoso.com")
      IsNumeric() この演算子は、文字列が数値であるかどうかを確認します。 @"user.email".IsNumeric()
      長さ

      この演算子は、文字列内の文字数を返します。

      @"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() この演算子は、指定した文字列内で指定された部分文字列が最初に出現した位置の 0 から始まるインデックスを報告します。 @"user.username".IndexOf("@")
      LastIndexOf() この演算子は、指定した文字列内で特定の部分文字列が最後に出現した位置の 0 から始まるインデックスを報告します。 @"user.username".LastIndexOf("@")
      Substring() この演算子は、文字列内の 0 から始まるインデックスから始まる部分文字列を返します。2 番目の省略可能なパラメーターは、目的の部分文字列の長さを指定します @"user.username".Substring(0,5)
      IsNullOrEmpty() この演算子は、指定した文字列が null または空の場合に返します。 それ以外の場合は、false を返します。 @"user.username".IsNullOrEmpty()
      IgnoreCaseEquals() 大文字と小文字の違いに関係なく、2 つの文字列が等しい場合、この演算子は true を返します。 それ以外の場合は、false を返します。 @"user.username".IgnoreCaseEquals(@"user.email")
      Contains() この演算子は、文字列に別の文字列が含まれているかどうかを確認します。 @"productList.productName".Contains("Xbox")
      ContainsOnly() この演算子は、指定された文字セットのみが文字列に含まれているかどうかを確認します。 @"zipcode"。ContainsOnly(CharSet.Numeric)
      ContainsAll() この演算子は、指定されたすべての文字セットが文字列に含まれているかどうかを確認します。 @"zipcode"。ContainsAll(CharSet.Numeric|CharSet.Hypen)
      ContainsAny() この演算子は、指定された文字セットが文字列に含まれているかどうかを確認します。 @"zipcode"。ContainsAny(CharSet.Numeric|CharSet.Hypen)

      ContainsOnly、ContainsAll、ContainsAny で CharSet を使用する

      ContainsOnly、ContainsAll、ContainsAny では、次の文字型を使用できます。

      Character Type 説明
      アルファベット順 a~z、A~Z
      アポストロフィ '
      Asperand @
      円記号 \
      コンマ ,
      Hypen -
      数値 0-9
      Period .
      スラッシュ /
      アンダースコア _
      空白 1 つのスペース

      ジベリッシュ検出機能

      これらの関数は、主要なユーザー入力フィールド (名前や住所など) にギバーシが含まれているかどうかを迅速かつ効率的に検出することで、不正行為を防ぐのに役立ちます。

      関数 説明
      GetPattern(String).maxConsonants 母音で区切られていない文字列内の連続する子音の最大数。 たとえば、文字列 "01gggyturah" の maxConsonants は 5 です。 GetPattern(@"user.email").maxConsonants
      GetPattern(String).gibberScore 0 から 1 の ML ベースのスコア。0 はちんぷんかんぷんになる可能性が最も高く、1 はちんぷんちんになる可能性が最も低いということです。 GetPattern(@"user.email").gibberScore

      Note

      Gibberish 検出モデルは、一般に公開されている英語ドキュメントの 2 つの連続する英数字の頻度に基づいています。 2 つの連続する英数字がパブリック ドキュメントに出現する頻度が高いほど、ギバーシシである可能性が低いと想定されます。 このモデルでは、英語のテキストに適切なスコアを提供する必要があり、名前またはアドレスにギバーシが含まれているかどうかを検出するために使用できます。 ただし、モデルは、州の短い形式 (AZ、TX など) などの省略形には適していない場合があり、名前やアドレスの検証にも使用できません。 最後に、モデルは英語以外のテキストについてテストされていません。

      モデル関数

      モデル関数はさまざまな不正行為モデルを実行し、評価で 1 つ以上の不正行為モデルが自動的に実行されない場合に役立ちます。 モデル関数を実行すると、ルールの評価中に実行されているモデルに関する情報が不正評価 API 呼び出しに出力されます。 次に、ルールは、スコア、理由などを含むモデルの結果にアクセスし、さらにルールの処理と意思決定に使用できます。

      モデルの種類 説明
      リスク セッションが危険である可能性を評価します。 Model.Risk()
      ボット セッションがボットによって開始される可能性を評価します。 Fraud Protection のデバイス フィンガープリント ソリューションに送信されたデバイス コンテキスト ID を渡します。 Model.Bot(@deviceContextId)

      geo 関数

      geo 関数は、IP アドレスを地理的アドレスに変換することで解決を提供します。 geo 関数は、トランザクション ペイロードの一部である IP を使用するか、デバイスフィンガープリントを使用して不正防止によって収集された IP を使用してのみルールで呼び出すことができます。 任意の IP 値に対して geo 関数を呼び出すことはできません。

      Operator Description
      Geo.RegionCode(String ip)

      このオペレーターは、IPv4 アドレスを米国のリージョン コード (つまり、米国の州または地域の名前の省略形) に変換します。

      たとえば、ワシントン州の IP アドレスの場合、"WA" が返されます。

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

      このオペレーターは、IPv4 アドレスを米国リージョン (つまり、米国の州または地域の名前) に変換します。

      たとえば、ワシントン州の IP アドレスの場合、"Washington" が返されます。

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

      この演算子は、IPv4 アドレスを国/地域コードに変換します。

      たとえば、オーストラリアの IP アドレスの場合、"AU" が返されます。

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

      この演算子は、IP アドレスをリージョン名に変換します。

      たとえば、オーストラリアの IP アドレスの場合、"Australia" が返されます。

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

      この演算子は、IPv4 アドレスを市区町村名に変換します。

      たとえば、ニューヨーク市の IP アドレスの場合、"New York City" が返されます。

      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) 指定したデバイスフィンガープリント セッションのデバイス属性の小さなサブセットを返します。 サブセットは、Fraud Protection によってキュレーションされたリストであり、最も一般的に使用される属性が含まれています。 Device.GetAttributes(@"deviceFingerprinting.id")
      Device.GetSelectedAttributes(String sessionId) 指定されたデバイス フィンガープリント セッションの最大 20 個のデバイス属性を返します。 必要な属性のリストは、コンマ区切りパラメーターとして指定する必要があります Device.GetSelectedAttributes(@"deviceFingerprinting.id", "deviceAsn","deviceCountryCode")

      BIN 参照関数

      BIN 参照機能では、銀行識別番号 (BIN) に基づいて、支払カード アカウント情報 (カード ネットワーク、カードの種類、カードの国コード、カード カテゴリなど) が提供されます。 BIN 参照のデータは、第三者の主要な BIN データ プロバイダーから取得され、不正アクセス防止によってキュレーションされます。

      Operator Description
      箱。Lookup(String BIN).cardNetwork

      この関数は BIN を検索し、カード ネットワーク (Visa、Mastercard など) を返します。

      箱。Lookup(@"card.bin").cardNetwork
      箱。Lookup(String BIN).cardType

      このオペレーターは BIN を検索し、カードの種類 (デビット、クレジットなど) を返します。

      箱。Lookup(@"card.bin").cardType
      箱。Lookup(String BIN).issuer

      このオペレーターは BIN を検索し、発行組織を返します。

      箱。Lookup(@"card.bin").issuer
      箱。Lookup(String BIN).countryCode

      この演算子は BIN を検索し、カードの ISO 2 文字の国コードを返します。

      箱。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,
      文字列 キー)
      この演算子は、不正アクセス防止 リストの指定された列にキーが含まれているかどうかを確認します

      次の列の例では、"Email Support List" リストの "Emails" 列に @"user.email" 変数が含まれているかどうかを確認します。

      ContainsKey("Email Support List", "Emails", @"user.email")
      Lookup(
      String listName,
      String keyColName,
      文字列 値ColName)
      このオペレーターは、不正アクセス防止リスト内のキーの値を検索します。 キーを含む列の名前と、値を含む列の名前の両方を指定する必要があります。

      値は常に文字列として返されます。キーが見つからない場合、および defaultValue パラメーターが指定されていない場合は、"Unknown" が返されます。

      次の列の例では、"Email Support List" リストの "Emails" 列で @"user.email" 変数の値を検索します。 一致が見つかった場合、関数はリスト内の一致する行から "Status" 列の値を返します。 一致するものが見つからない場合、関数は 0 を返します。

      Lookup("Email Support List", "Emails", @"user.email""Status",0)
      In この演算子は、キーが値のコンマ区切りのリストに含まれているかどうかを確認します。 In(@"user.countryRegion", "US, MX, CA")
      InSupportList この演算子は、属性がサポート リストにあるかどうかを確認します。 InSupportList('Email Support List', @"user.email")
      IsSafe この演算子は、エンティティがサポート リストで安全としてマークされているかどうかを確認します。 IsSafe('Email Support List', @"user.email")
      IsBlock この演算子は、エンティティがサポート リストでブロックとしてマークされているかどうかを確認します。 IsBlock('Email Support List', @"user.email")
      IsWatch この演算子は、エンティティがサポート リストで Watch としてマークされているかどうかを確認します。 IsWatch('Email Support List', @"user.email")

      ルールでのリストの使用

      ContainsKey 演算子と Lookup 演算子を使用して、不正アクセス防止にアップロードしたリストを参照できます。 リストの詳細については、「リストの管理」を参照してください

      ContainsKey

      リストの 1 つに特定の値が含まれているかどうかを確認するには、ContainsKey 演算子を使用します。 リスト名、列、およびチェック対象のキーを指定します。

      たとえば、危険なメール アドレスの単一列リストをアップロードし、危険なメール リストという 名前を付けます

      メール
      Kayla@contoso.com
      Jamie@bellowscollege.com
      Marie@atatum.com

      その後、次の構文を使用して、この一覧の危険なメール アドレスからすべてのトランザクションを拒否できます。

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

      この句は、"危険な電子メール リスト" リストの "Email" 列に@email キーが含まれているかどうかを確認します。 その場合、トランザクションは拒否されます。

      参照

      複数列リストの場合は、Lookup 演算子を使用して、特定のキーの列の値を確認できます。

      たとえば、メール アドレス用の 1 つの列と、それらのメール アドレスの状態を示す別の列を含むリストを作成します。 このリストに電子メール リスト という名前を付けます

      メール 状態
      Kayla@contoso.com 危険を伴う
      Jamie@bellowscollege.com 危険を伴う
      Marie@atatum.com 危険を伴う
      Camille@fabrikam.com Safe
      Miguel@proseware.com Safe
      Tyler@contoso.com Safe

      その後、次の構文を使用して、この一覧の状態 が Risky であるメール アドレスからのすべてのトランザクションを拒否できます。

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

      この句は、[電子メールリスト] リストの [電子メール] 列で @"user.email" キーを探し、[状態] 列の値が危険かどうかを確認します。 その場合、トランザクションは拒否されます。

      @"user.email" キーが一覧に見つからない場合、Fraud Protection は "Unknown" を返します。

      5 番目のパラメーターとして独自の既定値を指定することもできます。 詳細については、この記事の「論理演算子セクションを参照してください。

      Lookup 演算子は常に文字列値をします。 この値を Int、Doubleまたは DateTime 値に変換するには、型キャスト演算子を使用します

      外部呼び出し、外部評価、速度の使用

      属性の型推論

      変数型は、使用されているコンテキストから推論されます。 次に例をいくつか示します。

      • WHEN @isEmailValidatedでは、変数はブール値として解釈されます。
      • Model.Risk()。スコア > 500、変数は Double 値として解釈されます。
      • @"user.creationDate" で指定します。年 < DateTime.UtcNow.Year では、変数は DateTime 値として解釈されます。

      変数の型を推論するのに十分なコンテキストがない場合は、文字列値と見なされます。 たとえば、Model.Risk() という式 の場合です。Model.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"
        }
      }
      

      JSON 配列とオブジェクトの FQL 関数

      構文 説明
      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" 
        
      構文 説明
      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"
      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"
      ペイロードサンプル: { "group":[{"item1": "a", "item2": "a1"}, {"item1": "b", "item2": "b1"}]}

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

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

      グローバル変数 上記と同じペイロード サンプルを使用する

      Do SetVariables(Var=@@"group")
      LET $group = GetVariable("Var")。AsJsonObject()
      LET $value = Array.GetValue($group, "item1", "a", "item2")
      RETURN Approve()
      WHEN $value。AsString() == "a1"
      上記と同じペイロード サンプルを使用する

      Do SetVariables(Var=@@"group")
      LET $group = GetVariable("Var")。AsJsonObject()
      LET $arr = Array.GetValues($group.AsJsonArray()、"item1"、"a")
      RETURN Approve()
      外部呼び出し

      外部呼び出し (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 配列とオブジェクトの型キャスト

      • 次の例を示します <Type>() は JsonObject からサポートされます。

        • AsString()
        • AsInt()
        • AsDouble()
        • AsDateTime()
        • AsBool()
        • AsJsonArray()
        • AsJsonObject()
      • 2 つの配列ヘルパー メソッドのいずれかを使用する場合、GetValue または .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 オブジェクトまたは配列に明示的に変換したら、次を使用できます。必要に応じて、別のデータ型にキャストする Type>() として。< 例:

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

      Note

      型キャストのベスト プラクティス:

      • 常に . チェーンの末尾にキャストを入力します。
      • わからない場合は、常に明示的に型キャストを使用します。As<Type>(). 例:
      LET $sample = External.myCall().data[0].Item1[0].AsJsonArray()
      
      Or
      
      LET $sample = @@”accommodations[0].rooms”.AsJsonArray()
      

      Post Decision Actions 内で使用できる関数

      次の関数は、Post Decision Actions 内でのみ使用できます。 これらは、意思決定ルール内では使用できません

      構文 説明
      SetResponse(String sectionName, k=v) この関数を使用して、API 応答の CustomProperties セクションにキーと値のペアを渡すことができます。 sectionName は省略可能なパラメーターで、スキップできます。 SetResponse("Scores", bot = Model.Bot(@deviceContextId), risk=Model.Risk())

      SetResponse(test="123")

      Response.Decision() この関数は、評価中の現在の評価の決定を参照します。 Response.Decision() == "Approve"