사기 언어 참조
Microsoft Dynamics 365에는 사기 전략을 정의하고 표현하는 데 도움이 되는 풍부한 표현 언어가 있습니다. 이 언어는 C# 및 SQL과 많은 유사점이 있으며 고유한 비즈니스 시나리오에 대한 사기 문제를 해결하는 데 필요한 유연성을 제공하도록 설계되었습니다.
현재 이 언어를 사용하여 규칙 및 속도를 정의할 수 있습니다. 자세한 내용은 규칙 관리 및 속도 검사 수행을 참조하세요.
이 사기 행위 언어 참조 가이드에는 언어를 구성하는 연산자, 함수 및 문의 전체 목록이 포함되어 있습니다.
- 문
- 특성 및 변수 참조
- 고유한 변수 정의
- 전역 변수 함수
- 의사 결정 함수
- 관찰 함수
- 집계 함수
- 논리 연산자
- 비교 연산자
- 수식 함수
- DateTime 함수
- 형식 캐스팅 연산자
- 문자열 함수
- 횡설수설 검색 함수
- 패턴 검색 함수
- 모델 함수
- 지역 함수
- 디바이스 특성 함수
- BIN 조회 함수
- 함수 나열
- 규칙에서 목록 사용
- 외부 호출, 외부 평가 및 속도 사용
- 특성의 형식 유추
- JSON 배열 및 개체
- 사후 결정 작업 내에서 사용할 수 있는 함수
문
문 구문 | 설명 | 예시 |
---|---|---|
LET VariableName> = <식<> | LET 문은 새 변수를 정의하는 데 사용됩니다. 변수의 범위는 변수가 정의된 규칙 또는 속도 집합입니다. 변수 이름 앞에 달러 기호($) 접두사를 지정해야 합니다. 자세한 내용은 고유한 변수 정의를 참조 하세요. 조건 섹션과 모든 규칙 형식 및 속도 집합의 절에서 다양한 LET 문을 사용할 수 있습니다. |
LET $fullName = @"user.firstName" + @"user.lastName" |
관찰하다 OBSERVE <ObservationFunction>(<KeyValuePairs>) |
OBSERVE 문은 결정과 함께 규칙 실행을 종료하지 않습니다. 키-값 쌍을 API 응답 또는 추적 로그에 기록하기만 하면 됩니다. RETURN 문에 도달할 때까지 후속 규칙 및 규칙 절은 계속 실행됩니다. OBSERVE 문 뒤에 하나 이상의 관찰 함수가 있어야 합니다. WHEN 절이 있고 False로 평가되면 OBSERVE 문이 기록되지 않습니다. 다음 규칙의 각 절에 최대 1개를 사용할 수 있습니다.
|
OBSERVE 출력(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()를 지정할 수도 있습니다. 마지막으로 문에는 이전 중 하나 라도 수행해야 하는 조건을 지정하는 WHEN 절이 포함될 수 있습니다. 다음 규칙에서 절당 최대 1개를 사용할 수 있습니다.
|
RETURN Review() RETURN Reject(), Trace(ip=@"device.ipAddress") WHEN Model.Risk(). 점수 > 400 |
ROUTETO QUEUE <QueueName> [ WHEN <BooleanExpression> ] |
ROUTETO 명령은 라우팅 규칙에 사용되어 일치 평가를 사례 관리 큐로 전달합니다. 선택적 WHEN 절을 사용하여 명령이 라우팅을 수행해야 하는 조건을 설명할 수 있습니다. 라우팅 규칙에서 절당 최대 1개를 사용할 수 있습니다. |
ROUTETO 큐("높은 값 큐") WHEN @"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 절은 처리 중인 평가를 정의되는 속도에 포함할지 여부를 결정하는 부울 식을 지정합니다. 절당 최대 1개는 속도 집합에서 사용할 수 있습니다. |
SELECT Count() AS _Purchase_Rejections_Per_Email SELECT DistinctCount(@"purchaseId") |
WHEN <BooleanExpression> | WHEN 문은 다른 문의 WHEN 절과 비슷하지만 규칙 및 속도 집합의 조건 섹션에만 있습니다. 전체 규칙, 속도 집합 또는 라우팅 규칙을 실행할지 여부를 결정하는 부울 조건을 지정합니다. 모든 규칙 형식 및 속도 집합의 조건 섹션에서 최대 1개를 사용할 수 있습니다. |
WHEN Model.Risk(). 점수 > 400 |
DO <작업 함수> | DO 문은 규칙 실행이 끝날 때 일부 작업을 수행하는 데 사용됩니다. 이 문은 사후 결정 작업에서만 사용할 수 있습니다. | DO SetResponse(name = @"firstname" + @"lastname") |
특성 및 변수 참조
at sign(@) 연산자를 사용하여 현재 이벤트의 특성을 참조할 수 있습니다.
변수 | 설명 | 예시 |
---|---|---|
@ | at sign(@)은 들어오는 이벤트의 특성을 참조하는 데 사용됩니다. 요청 페이로드의 일부로 특성이 전송되거나 Microsoft Dynamics 365 Fraud Protection에서 해당 특성을 생성할 수 있습니다. at 기호(@) 후에 참조할 특성의 전체 경로를 지정합니다. 경로를 따옴표로 묶습니다(예: @"address.city"). 참조된 특성이 이벤트 페이로드의 일부가 아닌 경우 해당 형식의 기본값인 doubles의 경우 0.0, 문자열의 빈 문자열 등이 반환됩니다. 특성의 형식은 특성이 사용되는 컨텍스트에서 유추됩니다. 컨텍스트가 충분하지 않으면 문자열 형식이 기본적으로 사용됩니다. 형식 유추에 대한 자세한 내용은 특성의 형식 유추를 참조 하세요. |
@"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) 때 $extResponseDiagnostics. HttpStatusCode != 200 |
고유한 변수 정의
LET 키워드를 사용하여 변수를 정의할 수 있습니다. 그런 다음 해당 변수를 규칙의 다른 위치에서 참조할 수 있습니다. 모든 변수를 달러 기호($)로 접두사로 지정합니다. 예를 들어 다음 변수를 선언합니다.
LET $fullName = @"user.firstName" + @"user.lastName"
LET 문에 선언된 변수는 문이 정의된 규칙 또는 속도 집합의 범위 내에서만 사용할 수 있습니다.
예를 들어 이전 예제의 변수를 참조하려면 다음 문을 작성할 수 있습니다.
WHEN $fullName == "Kayla Goderich"
참고 항목
변수가 정의되면 새 값으로 업데이트할 수 없습니다.
전역 변수 함수
전역 변수 함수를 사용하여 규칙 내에서 변수를 설정하고 가져올 수 있습니다. 전역 변수가 설정되면 동일한 환경 또는 자식 환경 내에서 의사 결정 규칙, 속도, 라우팅 규칙 및 사후 결정 작업 내에서 액세스할 수 있습니다. 다음 표에는 Fraud Protection에서 사용하는 계층 구조가 나와 있습니다. 예를 들어 루트 환경 내의 규칙에서 전역 변수를 설정하는 경우 Fraud Protection은 동일한 환경 또는 모든 자식 환경에서 동일한 평가의 다른 규칙 내에서 해당 값을 검색할 수 있습니다.
Operator | 설명 | 예시 |
---|---|---|
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() |
참고 항목
전역 변수는 지정된 평가에 대한 단일 트랜잭션과 관련이 있습니다. 한 트랜잭션 내의 변수 집합은 다른 트랜잭션 또는 다른 평가에서 검색할 수 없습니다.
의사 결정 함수
의사 결정 함수는 규칙에 따라 결정을 지정하는 데 사용됩니다.
의사 결정 유형 | 설명 | 예시 |
---|---|---|
승인() | 이 형식은 승인 결정을 지정합니다. 여기에는 승인 이유와 다른 지원 메시지가 포함될 수 있습니다. 오버 로드:
|
RETURN Approve() RETURN Approve("on safe list") RETURN 승인("안전 목록에", "에스컬레이션 안 함") |
Reject() | 이 형식은 거부 결정을 지정합니다. 여기에는 거부 이유와 다른 지원 메시지가 포함될 수 있습니다. 오버 로드:
|
RETURN Reject() RETURN Reject("엠바고 국가") RETURN Reject("엠바고 국가", "에스컬레이션 안 함") |
Review() | 이 형식은 검토 결정을 지정합니다. 여기에는 검토 이유와 다른 지원 메시지가 포함될 수 있습니다. 오버 로드:
|
RETURN Review() RETURN Review("사용자 감시 목록") RETURN Review("감시 목록의 사용자", "에스컬레이션 안 함") |
Challenge(String challengeType) | 이 형식은 챌린지의 결정과 챌린지 유형을 지정합니다. 또한 이 문제에 대한 이유와 다른 지원 메시지를 포함할 수 있습니다. 오버 로드:
|
RETURN Challenge("SMS") RETURN Challenge("SMS", "의심되는 봇") RETURN Challenge("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() == "승인" |
집계 함수
함수 | Description | 예시 |
---|---|---|
Count() | 이 함수는 이벤트가 발생한 횟수를 반환합니다. | SELECT Count() AS numPurchases |
DistinctCount(문자열 키) | 이 함수는 지정된 속성에 대한 고유 값의 수를 반환합니다. 들어오는 이벤트에 대해 지정된 속성이 null이거나 비어 있는 경우 이벤트는 집계에 영향을 주지 않습니다. | SELECT DistinctCount(@"device.ipAddress") AS distinctIPs |
Sum(Double value) | 이 함수는 지정된 숫자 속성에 대한 값의 합계를 반환합니다. | SELECT Sum(@"totalAmount") AS totalSpending |
논리 연산자
Operator | 설명 | 예시 |
---|---|---|
및(&>) | 논리 및 | 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 | 설명 | 예시 |
---|---|---|
== | 이 연산자는 같음을 확인합니다. | @"user.countryRegion" == @"shippingAddress.countryRegion" |
!= | 이 연산자는 같지 않음을 확인합니다. | @"user.countryRegion" != @"shippingAddress.countryRegion" |
> | 이 연산자는 첫 번째 값이 두 번째 값보다 큰지 확인합니다. | Model.Risk(). 점수 > 500 |
< | 이 연산자는 첫 번째 값이 두 번째 값보다 작은지 확인합니다. | Model.Risk(). 점수 < 500 |
>= | 이 연산자는 첫 번째 값이 두 번째 값보다 크거나 같은지 확인합니다. | Model.Risk(). 점수 >= 500 |
<= | 이 연산자는 첫 번째 값이 두 번째 값보다 작거나 같은지 확인합니다. | Model.Risk(). 점수 <= 500 |
X ? Y: Z | 이 연산자는 조건 X가 true인지 여부를 확인합니다. true이면 Y 문이 실행되고 결과가 반환됩니다. 그렇지 않으면 명령문 Z가 실행되고 결과가 반환됩니다. 중첩된 IF <> THEN <> ELSE <> 논리를 정의하기 위해 대괄호를 사용하여 여러 논리 검사를 함께 결합할 수도 있습니다. | LET $riskbucket = Model.Risk(). 점수 > 500? "높음": (Model.Risk(). 점수 > 300? "보통": "낮음") |
수식 함수
Fraud Protection은 모든 표준 C# 수학 메서드 및 산술 연산자를 지원합니다. 이 표에는 유용할 수 있는 몇 가지 메서드 예제가 포함되어 있습니다.
Operator | 설명 | 예시 |
---|---|---|
Math.Min(Double value1, Double value2) | 이 연산자는 최소 두 값을 계산합니다. | Math.Min(Model.Risk(). Score, Model.Bot(@"deviceFingerprinting.id"). 점수) |
Math.Max(Double value1, Double value2) | 이 연산자는 최대 두 값을 계산합니다. | Math.Max(Model.Risk(). Score, Model.Bot(@"deviceFingerprinting.id"). 점수) |
RandomInt(Integer min, Integer max) | 이 연산자는 최소값 및 최대값 제외를 포함하여 제공된 범위에서 임의의 정수를 반환합니다. | RandomInt(0, 100) |
DateTime 연산자
Fraud Protection은 표준 C# DateTime 속성, 메서드 및 연산자를 지원합니다. 이 표에는 유용할 수 있는 함수 및 속성의 몇 가지 예가 포함되어 있습니다.
Operator | 설명 | 예시 |
---|---|---|
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") |
Year | 이 연산자는 이 인스턴스가 나타내는 날짜의 연도 구성 요소를 가져옵니다. | @"user.creationDate". 년 |
날짜 | 이 연산자는 이 인스턴스와 날짜가 같지만 시간 값이 00:00:00(자정)으로 설정된 새 개체를 가져옵니다. | @"user.creationDate". 날짜 |
형식 캐스팅 연산자
형식 추론에 대한 자세한 내용은 이 문서의 뒷부분에 있는 특성 의 형식 유추 섹션을 참조하세요.
Operator | 설명 | 예시 |
---|---|---|
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 | 설명 | 예시 |
---|---|---|
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() | 이 연산자는 지정된 문자열 내에서 지정된 부분 문자열이 처음 나타나는 인덱스(0부터 시작)를 보고합니다. | @"user.username". IndexOf("@") |
LastIndexOf() | 이 연산자는 지정된 문자열 내에서 지정된 부분 문자열이 마지막으로 발생한 인덱스(0부터 시작하는 인덱스)를 보고합니다. | @"user.username". LastIndexOf("@") |
Substring() | 이 연산자는 원하는 부분 문자열의 길이를 지정하는 두 번째 선택적 매개 변수를 사용하여 문자열 내의 인덱스(0부터 시작)에서 시작하는 부분 문자열을 반환합니다. | @"user.username". 부분 문자열(0,5) |
IsNullOrEmpty() | 이 연산자는 지정된 문자열이 null이거나 비어 있으면 반환합니다. 그렇지 않은 경우 false를 반환합니다. | @"user.username". IsNullOrEmpty() |
IgnoreCaseEquals() | 이 연산자는 대/소문자 차이에 관계없이 두 문자열이 같으면 true를 반환합니다. 그렇지 않은 경우 false를 반환합니다. | @"user.username". IgnoreCaseEquals(@"user.email") |
Contains() | 이 연산자는 문자열에 다른 문자열이 포함되어 있는지 여부를 확인합니다. | @"productList.productName". Contains("Xbox") |
ContainsOnly() | 이 연산자는 문자열에 제공된 문자 집합만 포함되는지 여부를 확인합니다. | @"zipcode". ContainsOnly(CharSet.Numeric) |
ContainsAll() | 이 연산자는 문자열에 제공된 모든 문자 집합이 포함되어 있는지 여부를 확인합니다. | @"zipcode". ContainsAll(CharSet.Numeric|CharSet.Hyphen) |
ContainsAny() | 이 연산자는 문자열에 제공된 문자 집합이 포함되어 있는지 여부를 확인합니다. | @"zipcode". ContainsAny(CharSet.Numeric|CharSet.Hyphen) |
ContainsOnly, ContainsAll 및 ContainsAny에서 CharSet 사용
ContainsOnly, ContainsAll 및 ContainsAny에서 다음 문자 형식을 사용할 수 있습니다.
문자 형식 | 설명 |
---|---|
사전순 | a-z, A-Z |
아포스트로피 | ' |
Asperand | @ |
백슬래시 | \ |
Comma | , |
Hyphen | - |
숫자 | 0-9 |
Period | . |
슬래시 | / |
밑줄 | _ |
공백 | 단일 공간 |
횡설수설 검색 함수
이러한 함수는 주요 사용자 입력 필드(예: 이름 및 주소)가 횡설수설을 포함하는지 여부를 빠르고 효율적으로 감지하여 사기를 방지하는 데 도움이 됩니다.
함수 | Description | 예시 |
---|---|---|
GetPattern(String).maxConsonants | 모음으로 구분되지 않은 문자열의 연속 자음의 최대 수입니다. 예를 들어 문자열 "01gggyturah"의 maxConsonants는 5입니다. | GetPattern(@"user.email").maxConsonants |
GetPattern(String).gibberScore | 0에서 1 사이의 ML 기반 점수; 0은 횡설수설 할 가능성이 가장 높다는 것을 의미하고 1은 횡설수설 할 가능성이 가장 적다는 것을 의미합니다. | GetPattern(@"user.email").gibberScore |
참고 항목
횡설수설 검색 모델은 공개적으로 사용할 수 있는 영어 문서에서 두 개의 연속 영숫자 문자의 빈도를 기반으로 합니다. 두 개의 연속 영숫자 문자가 공용 문서에 더 자주 나타나고 횡설수설할 가능성이 적다고 가정합니다. 모델은 영어 텍스트에 적절한 점수를 제공해야 하며 이름이나 주소에 횡설수설이 포함되어 있는지 감지하는 데 사용할 수 있습니다. 그러나 모델은 상태(AZ, TX 등)에 대한 짧은 형식과 같은 약어에 적합하지 않을 수 있으며 이름이나 주소의 유효성을 검사하는 데도 사용할 수 없습니다. 마지막으로, 모델이 영어가 아닌 텍스트에 대해 테스트되지 않았습니다.
패턴 검색 함수
이러한 함수는 주요 사용자 입력 필드(예: 이름 및 주소)가 횡설수설을 포함하는지 여부를 빠르고 효율적으로 감지하여 사기를 방지하는 데 도움이 됩니다.
함수 | Description | 예시 |
---|---|---|
Patterns.IsRegexMatch(string pattern, string source) | 문자열 소스에 대한 문자열 패턴의 정규식(정규식) 일치를 수행합니다. 결과는 부울입니다. 즉, true(지정된 문자열이 패턴과 일치함을 나타낸 경우) 또는 false(일치하지 않음)입니다. | Patterns.IsRegexMatch("^.com$", @ "user.email") Patterns.IsRegexMatch( "^.[aAeEiIoOuU]+.*$", @ "user.firstname") |
참고 항목
- 문자열 패턴은 상수 입력이어야 합니다.
- 평가 시간이 10밀리초를 초과하면 함수는 false(기본 결과)를 반환합니다.
- NonBacktracking을 지원하지 않는 모든 제한 사항은 IsRegexMatch 함수에도 적용됩니다.
모델 함수
모델 함수는 다양한 사기 모델을 실행하며 평가에서 하나 이상의 사기 모델을 자동으로 실행하지 않는 경우에 유용합니다. 모델 함수가 실행되면 규칙 평가 중에 실행되는 모델에 대한 정보가 사기 평가 API 호출에 출력됩니다. 그런 다음, 규칙은 추가 규칙 처리 및 의사 결정에 사용할 수 있는 점수, 이유 등을 포함하여 모델 결과에 액세스합니다.
모델 유형 | 설명 | 예시 |
---|---|---|
위험 | 세션이 위험할 가능성을 평가합니다. | Model.Risk() |
봇 | 세션이 봇에서 시작될 가능성을 평가합니다. Fraud Protection의 디바이스 지문 솔루션으로 전송된 디바이스 컨텍스트 ID를 전달합니다. | Model.Bot(@deviceContextId) |
지역 함수
지역 함수는 IP 주소를 지리적 주소로 변환하여 해결 방법을 제공합니다. 지리적 함수는 트랜잭션 페이로드의 일부이거나 디바이스 지문을 사용하여 사기 방지에 의해 수집된 IP를 사용하여 규칙에서만 호출할 수 있습니다. 임의의 IP 값에 대해 지역 함수를 호출할 수 없습니다.
Operator | 설명 | 예시 |
---|---|---|
Geo.RegionCode(문자열 ip) | 이 연산자는 IPv4 주소를 해당 미국 지역 코드(즉, 미국 주 또는 지역 이름의 약어)로 변환합니다. 예를 들어 워싱턴 주의 IP 주소에 대해 "WA"가 반환됩니다. |
Geo.RegionCode(@"device.ipAddress") |
Geo.Region(String ip) | 이 연산자는 IPv4 주소를 해당 미국 지역(즉, 미국 주 또는 지역의 이름)으로 변환합니다. 예를 들어 워싱턴 주의 IP 주소에 대해 "Washington"이 반환됩니다. |
Geo.Region(@"device.ipAddress") |
Geo.CountryCode(문자열 ip) | 이 연산자는 IPv4 주소를 해당 국가/지역 코드로 변환합니다. 예를 들어 오스트레일리아의 IP 주소에 대해 "AU"가 반환됩니다. |
Geo.CountryCode(@"device.ipAddress") |
Geo.CountryRegion(문자열 ip) | 이 연산자는 IP 주소를 지역 이름으로 변환합니다. 예를 들어 오스트레일리아의 IP 주소에 대해 "오스트레일리아"가 반환됩니다. |
Geo.CountryRegion(@"device.ipAddress") |
Geo.City(문자열 ip) | 이 연산자는 IPv4 주소를 도시 이름으로 변환합니다. 예를 들어 뉴욕시의 IP 주소에 대해 "뉴욕시"가 반환됩니다. |
Geo.City(@"device.ipAddress") |
Geo.MarketCode(문자열 ip) | 이 연산자는 IPv4 주소를 IP 주소의 시장 코드로 변환합니다. 예를 들어 캐나다의 IP 주소에 대해 "NA"(북아메리카)가 반환됩니다. |
Geo.MarketCode(@"device.ipAddress") |
디바이스 특성 함수
Operator | 설명 | 예시 |
---|---|---|
Device.GetFullAttributes(String sessionId) | 지정된 디바이스 지문 세션에 대한 전체 디바이스 특성 집합을 반환합니다. 디바이스 특성의 전체 집합을 보려면 디바이스 지문 설정을 참조하세요. | Device.GetFullAttributes(@"deviceFingerprinting.id") |
Device.GetAttributes(String sessionId) | 지정된 디바이스 지문 세션에 대한 디바이스 특성의 작은 하위 집합을 반환합니다. 하위 집합은 Fraud Protection에서 큐레이팅한 목록이며 가장 일반적으로 사용되는 특성을 포함합니다. | Device.GetAttributes(@"deviceFingerprinting.id") |
Device.GetSelectedAttributes(String sessionId, String attributeName) | 지정된 디바이스 지문 세션에 대해 최대 20개 디바이스 특성을 반환합니다. 원하는 특성 목록은 쉼표로 구분된 매개 변수로 지정해야 합니다. | Device.GetSelectedAttributes(@"deviceFingerprinting.id", "deviceAsn","deviceCountryCode") |
Device.GetSpeedOfTravel(String sessionId) | 디바이스의 최대 이동 속도를 시간당 마일 단위로 반환합니다. Fraud Protection은 마지막 5회 연속 지문 세션을 수행하고 세션 간 디바이스 속도를 계산하여 최대 속도를 반환하여 최대 속도를 결정합니다. 디바이스는 쿠키 ID를 사용하여 세션을 통해 식별됩니다. | Device.GetSpeedOfTravel(@"deviceFingerprinting.id") |
BIN 조회 함수
BIN 조회 함수는 BIN(은행 ID 번호)을 기반으로 결제 카드 계정 정보(예: 카드 네트워크, 카드 유형, 카드 국가 코드, 카드 범주)를 제공합니다. BIN 조회에 대한 데이터는 주요 타사 BIN 데이터 공급자로부터 제공된 다음, Fraud Protection에 의해 큐레이팅됩니다.
Operator | 설명 | 예시 |
---|---|---|
빈. 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 두 글자 국가 코드를 반환합니다. |
빈. Lookup(@"card.bin").countryCode |
빈. Lookup(String BIN).cardCategory | 이 운영자는 BIN을 조회하고 카드 범주(예: 선불, 회사, 보상)를 반환합니다. |
빈. Lookup(@"card.bin").cardCategory |
빈. Lookup(String BIN).error | 이 연산자는 BIN을 조회하고 BIN을 찾을 수 없는 경우 오류 메시지를 반환합니다. |
빈. Lookup(@"card.bin").error |
목록 함수
Fraud Protection을 사용하면 사용자 지정 목록을 업로드하고 언어로 참조할 수 있습니다. 이러한 목록을 업로드하는 방법에 대한 자세한 내용은 목록 관리를 참조 하세요. 규칙에서 목록을 사용하는 방법에 대한 자세한 내용은 이 문서의 뒷부분에 있는 규칙 의 목록 사용 섹션을 참조하세요.
Operator | 설명 | 예시 |
---|---|---|
ContainsKey( String listName, String columnName, 문자열 키) |
이 연산자는 키가 Fraud Protection 목록의 지정된 열에 포함되어 있는지 여부를 확인합니다. 다음 열의 예제에서는 "전자 메일 지원 목록" 목록의 "전자 메일" 열에 @"user.email" 변수가 포함되어 있는지 확인합니다. |
ContainsKey("전자 메일 지원 목록", "전자 메일", @"user.email") |
Lookup( String listName, String keyColName, String valueColName) |
이 운영자는 사기 방지 목록에서 키 값을 조회합니다. 키를 포함하는 열의 이름과 값을 포함하는 열의 이름을 모두 지정해야 합니다. 값은 항상 문자열로 반환됩니다. 키를 찾을 수 없고 defaultValue 매개 변수가 지정되지 않은 경우 "알 수 없음"이 반환됩니다. 다음 열의 예제에서는 전자 메일 지원 목록 목록의 전자 메일 열에서 @"user.email" 변수 값을 찾습니다. 일치 항목이 발견되면 함수는 목록의 일치하는 행에서 상태 열의 값을 반환합니다. 일치 항목을 찾을 수 없으면 함수는 0을 반환합니다. |
조회("전자 메일 지원 목록", "전자 메일", @"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 및 조회 연산자를 사용하여 사기 방지에 업로드한 목록을 참조할 수 있습니다. 목록에 대한 자세한 내용은 목록 관리를 참조 하세요.
ContainsKey
목록 중 하나에 특정 값이 포함되어 있는지 확인하려면 ContainsKey 연산자를 사용합니다. 확인하려는 목록 이름, 열 및 키를 지정합니다.
예를 들어 위험한 전자 메일 주소의 단일 열 목록을 업로드하고 위험한 전자 메일 목록의 이름을 지정합니다.
전자 메일 |
---|
Kayla@contoso.com |
Jamie@bellowscollege.com |
Marie@atatum.com |
그런 다음 다음 구문을 사용하여 이 목록의 위험한 전자 메일 주소에서 모든 트랜잭션을 거부할 수 있습니다.
RETURN Reject("risky email")
WHEN ContainsKey("Risky email list", "Email", @"user.email")
이 절은 "위험한 전자 메일 목록" 목록의 "이메일" 열에 @email 키가 포함되어 있는지 여부를 확인합니다. 이 경우 트랜잭션이 거부됩니다.
조회
다중 열 목록의 경우 조회 연산자를 사용하여 특정 키에 대한 열 값을 확인할 수 있습니다.
예를 들어 전자 메일 주소에 대한 하나의 열과 해당 전자 메일 주소의 상태를 나타내는 다른 열이 있는 목록을 만듭니다. 이 목록의 이름을 전자 메일 목록 으로 지정합니다.
전자 메일 | 상태 |
---|---|
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" 키가 목록에 없으면 사기 방지는 "알 수 없음"을 반환합니다.
고유한 기본값을 다섯 번째 매개 변수로 지정할 수도 있습니다. 자세한 내용은 이 문서의 앞부분에 있는 논리 연산자 섹션을 참조하세요.
Lookup 연산자는 항상 String 값을 반환합니다. 이 값을 Int, Double 또는 DateTime 값으로 변환하려면 형식 캐스팅 연산자를 사용합니다.
외부 호출, 외부 평가 및 속도 사용
- 외부 호출을 참조하려면 외부 호출을 입력한 다음 참조하려는 외부 호출을 입력합니다. 자세한 내용은 규칙에서 외부 호출 사용을 참조 하세요.
- 외부 평가를 참조하려면 평가를 입력한 다음 참조하려는 외부 평가를 입력 합니다. 자세한 내용은 규칙에서 외부 평가 사용을 참조 하세요.
- 속도를 참조하려면 속도와 참조할 속도를 입력합니다. 자세한 내용은 규칙에서 속도 사용을 참조 하세요.
특성의 형식 유추
변수 형식은 사용되는 컨텍스트에서 유추됩니다. 다음 몇 가지 예를 참조하세요.
- 식 WHEN @isEmailValidated 변수는 부울 값으로 해석됩니다.
- Model.Risk()식에서 점수 > 500, 변수는 Double 값으로 해석됩니다.
- @"user.creationDate" 식에서 Year < 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 |
위의 예제에서 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" |
페이로드 | 페이로드 샘플: {"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"}]} |
외부 호출(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()
두 배열 도우미 메서드인 Array.GetValue 또는 Arrays.GetValues 중 하나를 사용하는 경우 를 사용하여 캐스트를 입력해야 합니다. 형식>()입니다.< 예시:
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 개체를 다른 데이터 형식으로 변환하려면 . 형식>()입니다.< 예시:
LET $sample = @@”user.addresses”.AsJsonArray()
특정 형식으로 출력하려면 .를 사용해야 합니다. 형식>()입니다.< 예제:
LET $sample = @@”user.addresses” Output(abc = $sample.AsJsonArray())
참고 항목
형식 캐스팅 모범 사례:
- 항상 . 체인의 끝에 캐스트를 입력합니다.
- 확실하지 않은 경우 항상 .를 사용하여 캐스트를 명시적으로 입력합니다. 형식>()입니다<. 예시:
LET $sample = External.myCall().data[0].Item1[0].AsJsonArray()
Or
LET $sample = @@”accommodations[0].rooms”.AsJsonArray()
사후 결정 작업 내에서 사용할 수 있는 함수
다음 함수는 사후 결정 작업 내에서만 사용할 수 있습니다. 의사 결정 규칙 내에서 사용할 수 없습니다.
구문 | 설명 | 예시 |
---|---|---|
SetResponse(String sectionName, k=v) | 이 함수는 키-값 쌍을 API 응답의 CustomProperties 섹션에 전달하는 데 사용할 수 있습니다. sectionName은 건너뛸 수 있는 선택적 매개 변수입니다. | SetResponse("Scores", bot = Model.Bot(@deviceContextId), risk=Model.Risk()) SetResponse(test="123") |
Response.Decision() | 이 함수는 평가 중인 현재 평가에 대한 결정을 참조합니다. | Response.Decision() == "승인" |