Dokumentacja języka oszustwa
Usługa Microsoft Dynamics 365 ma własny bogaty i ekspresyjny język, który ułatwia definiowanie i wyrażanie strategii oszustwa. Ten język ma wiele podobieństw do języków C# i SQL i ma na celu zapewnienie elastyczności, którą należy rozwiązać w przypadku unikatowych scenariuszy biznesowych.
Tego języka można używać dzisiaj do definiowania reguł i przydziałów. Aby uzyskać więcej informacji, zobacz Zarządzanie regułami i Przeprowadzanie kontroli prędkości.
Ten przewodnik referencyjny języka oszustwa zawiera pełną listę operatorów, funkcji i instrukcji, które składają się na język:
- Zestawienia
- Odwoływanie się do atrybutów i zmiennych
- Definiowanie własnych zmiennych
- Funkcje zmiennych globalnych
- Funkcje decyzyjne
- Funkcje obserwacji
- Funkcje agregacji
- Operatory logiczne
- Operatory porównania
- Funkcje matematyczne
- Funkcje DateTime
- Operatory rzutów typów
- Funkcje ciągów
- Funkcje wykrywania gibberish
- Funkcje wykrywania wzorców
- Funkcje modelu
- Funkcje geograficzne
- Funkcje atrybutów urządzenia
- Funkcje wyszukiwania BIN
- Funkcje listy
- Używanie list w regułach
- Używanie wywołań zewnętrznych, ocen zewnętrznych i możliwości
- Wnioskowanie typów atrybutów
- Tablice i obiekty JSON
- Funkcje dostępne w ramach akcji po podjęciu decyzji
Zestawienia
Składnia instrukcji | opis | Przykład |
---|---|---|
WYRAŻENIE LET <VariableName> = <> | Instrukcja LET służy do definiowania nowej zmiennej. Zakres zmiennej to reguła lub szybkość ustawiana przez zmienną. Nazwy zmiennych powinny być poprzedzone znakiem dolara ($). Aby uzyskać więcej informacji, zobacz Definiowanie własnych zmiennych. Dowolna liczba instrukcji LET może być używana w sekcji Warunek i klauzule wszystkich typów reguł i zestawów prędkości. |
LET $fullName = @"user.firstName" + @"user.lastName" |
OBSERWOWAĆ OBSERWUJFunction<>(<KeyValuePairs)> |
Instrukcja OBSERVE nie kończy wykonywania reguły z decyzją. Rejestruje tylko pary klucz-wartość do odpowiedzi interfejsu API lub dzienników śledzenia. Kolejne reguły i klauzule reguł są nadal uruchamiane do momentu osiągnięcia instrukcji RETURN . Instrukcja OBSERVE musi być zgodna z co najmniej jedną funkcją obserwacji. Jeśli klauzula WHEN jest obecna i jest obliczana na wartość False, instrukcja OBSERVE nie jest rejestrowana. Maksymalnie jeden można użyć dla każdej klauzuli w następujących regułach:
|
OBSERVE Output(reason="high score") OBSERWUJ TRACE(ip=@"device.ipAddress") WHEN Model.Risk(). Wynik > 400 |
Return <DecisionFunction> [ ,<ObservationFunction>(<KeyValuePairs>) ] [ KIEDY <Wartość logicznaExpression> ] |
Instrukcja RETURN kończy wykonywanie reguły z decyzją. Instrukcja musi określać prawidłową funkcję decyzyjną: Approve(), Reject(), Challenge()lub Review(). Instrukcja może również określać co najmniej jedną funkcję obserwacji: Output() lub Trace() Na koniec instrukcja może zawierać klauzulę WHEN , aby określić warunek, w którym powinien wykonać dowolną z powyższych czynności. Maksymalnie jeden można użyć na klauzulę w następujących regułach:
|
RETURN Review() RETURN Reject(), Trace(ip=@"device.ipAddress") WHEN Model.Risk(). Wynik > 400 |
ROUTETO QUEUEName <> [ KIEDY <Wartość logicznaExpression> ] |
Polecenie ROUTETO jest używane w regułach routingu w celu kierowania pasujących ocen do kolejek zarządzania przypadkami. Opcjonalna klauzula WHEN może służyć do opisywania warunków, w których polecenie powinno wykonać routing. Maksymalnie jeden można użyć na klauzulę w regułach routingu. |
ROUTETO Queue("Kolejka o wysokiej wartości") KIEDY @"purchase.request.totalAmount"> 500 |
SELECT <AgregacjaFunction> AS <VelocityName> FROM <AssesmentType> GROUPBY <GroupExpression> [ KIEDY <Wartość logicznaExpression> ] |
Instrukcja SELECT jest używana w zestawach prędkości w celu zdefiniowania szybkości. Musi określić funkcję agregacji. Wymagana klauzula AS służy do tworzenia aliasu prędkości. Następnie można odwoływać się do tego aliasu z reguł. Wymagana klauzula FROM służy do określania typu oceny w celu obserwowania prędkości. Prawidłowe wartości to Purchase, AccountLogin, AccountCreation, Chargeback, BankEvent i CustomAssessment. Wymagana klauzula GROUPBY określa właściwość lub wyrażenie. Wszystkie zdarzenia, które są oceniane na tę samą wartość w instrukcji GROUPBY , są łączone w celu obliczenia agregacji żądanej w instrukcji SELECT . Aby na przykład obliczyć agregację dla każdego użytkownika, użyj polecenia GROUPBY @"user.userId". Opcjonalna klauzula WHEN określa wyrażenie logiczne, które określa, czy ocena, która jest przetwarzana, powinna zostać uwzględniona w zdefiniowanej szybkości. Maksymalnie jeden można użyć na klauzulę w zestawach prędkości. |
SELECT Count() AS _Purchase_Rejections_Per_Email SELECT DistinctCount(@"purchaseId") |
WHEN <BooleanExpression> | Instrukcja WHEN jest podobna do klauzul WHEN w innych instrukcjach, ale jest sama w sekcji Warunek reguł i zestawów prędkości. Określa warunek logiczny, który określa, czy powinna zostać uruchomiona cała reguła, zestaw prędkości lub reguła routingu. Maksymalnie jeden można użyć w sekcji Warunek wszystkich typów reguł i zestawów prędkości. |
WHEN Model.Risk(). Wynik > 400 |
DO <, funkcja akcji> | Instrukcja DO służy do wykonywania pewnej akcji na końcu wykonywania reguły. Ta instrukcja może być używana tylko w akcjach po podjęciu decyzji | DO SetResponse(name = @"firstname" + @"lastname") |
Odwoływanie się do atrybutów i zmiennych
Możesz użyć operatora at sign (@), aby odwołać się do atrybutu z bieżącego zdarzenia.
Zmienna | opis | Przykład |
---|---|---|
@ | Znak at (@) służy do odwołowania się do atrybutu ze zdarzenia przychodzącego. Atrybut może zostać wysłany jako część ładunku żądania lub usługa Microsoft Dynamics 365 Fraud Protection może go wygenerować. Po znaku (@) określ pełną ścieżkę atrybutu, do którego chcesz się odwołać. Dołącz ścieżkę w cudzysłowach (na przykład @"address.city"). Jeśli przywoływane atrybut nie jest częścią ładunku zdarzenia, zwracana jest wartość domyślna tego typu: 0,0 dla podwojeń, pusty ciąg dla ciągów itd. Typ atrybutu jest wnioskowany z kontekstu, w ramach którego jest używany atrybut. Jeśli nie podano wystarczającego kontekstu, typ ciągu jest używany domyślnie. Aby uzyskać informacje na temat wnioskowania typów, zobacz Wnioskowanie typów atrybutów. |
@"address.city" |
$ | Znak dolara ($) służy do odwołowania się do zmiennej zdefiniowanej w instrukcji LET . Aby uzyskać więcej informacji, zobacz Definiowanie własnych zmiennych. | $fullName |
@a[x] | Ta zmienna jest używana do indeksowania zmiennych tablicowych. Jeśli ładunek żądania dla oceny zawiera tablicę elementów, można uzyskać dostęp do poszczególnych elementów tablicy przy użyciu następującej składni: @"productList[0]". Aby uzyskać dostęp do atrybutu tego elementu, użyj następującej składni: @"productList[0].productId" |
@"productList[0].productId" @"paymentInstrumentList[3].type" |
Exists | Ten operator sprawdza, czy zmienna istnieje w ładunku zdarzenia. Exists(Zmienna ciągu) |
Exists(@"user.email") |
Request.CorrelationId() | Ta funkcja odwołuje się do unikatowego identyfikatora korelacji ocenianego zdarzenia. Za pomocą tej funkcji można uzyskać dostęp do identyfikatora korelacji zdarzenia w środowisku reguł i przekazać je do wywołania zewnętrznego jako parametru lub nagłówka. | External.MyExternalCall(Request.CorrelationId()) |
. GetDiagnostics() | Ta funkcja może służyć do odnajdywania ważnych informacji diagnostycznych i debugowania z wywołania zewnętrznego lub zewnętrznej odpowiedzi na ocenę. W przypadku wywołania zewnętrznego obiekt Diagnostics zawiera ładunek żądania, punkt końcowy, kod HttpStatus, komunikat o błędzie i opóźnienie. Punkt końcowy nie jest dostępny w obiekcie diagnostycznym dla odpowiedzi na ocenę zewnętrzną. Dowolne z tych pól można używać w regułach po utworzeniu obiektu Diagnostyka przy użyciu odpowiedniej metody rozszerzenia". GetDiagnostics()" | LET $extResponse = zewnętrzne. myCall(@"device.ipAddress") LET $extResponseDiagnostics = $extResponse.GetDiagnostics() OBSERVE Output(Diagnostics = $extResponseDiagnostics) KIEDY $extResponseDiagnostics. HttpStatusCode != 200 |
Definiowanie własnych zmiennych
Aby zdefiniować zmienną, możesz użyć słowa kluczowego LET . Następnie można odwoływać się do tej zmiennej w innych miejscach w regule. Prefiksuj wszystkie zmienne za pomocą znaku dolara ($). Można na przykład zadeklarować następującą zmienną.
LET $fullName = @"user.firstName" + @"user.lastName"
Zmienne zadeklarowane w instrukcji LET mogą być używane tylko w zakresie reguły lub prędkości, w których zdefiniowano instrukcję .
Aby na przykład odwołać się do zmiennej z poprzedniego przykładu, możesz napisać następującą instrukcję.
WHEN $fullName == "Kayla Goderich"
Uwaga
Po zdefiniowaniu zmiennej nie można jej zaktualizować przy użyciu nowej wartości.
Funkcje zmiennych globalnych
Za pomocą funkcji Zmiennych globalnych można ustawiać i pobierać zmienne w ramach reguł. Po ustawieniu zmiennych globalnych można uzyskać do nich dostęp w ramach reguły decyzyjnej, szybkości, reguł routingu i akcji po podjęciu decyzji w tym samym środowisku lub środowiskach podrzędnych. W poniższej tabeli jest wyświetlana lista używaną przez hierarchię Fraud Protection. Jeśli na przykład ustawisz zmienne globalne w regule w środowisku głównym, usługa Fraud Protection może pobrać jej wartość w dowolnej innej regule w tej samej ocenie w tym samym środowisku lub w środowiskach podrzędnych.
Operator | opis | Przykład |
---|---|---|
SetVariables(k=v) | Ta funkcja może służyć do ustawiania par klucz-wartość, czyli ustawiania wartości na zmienne. | Do SetVariables(key= 123, email=@"user.email") |
GetVariable("k") | Ta funkcja może służyć do uzyskiwania dostępu do już ustawionych zmiennych. W przypadkach, gdy uzyskujemy dostęp do zmiennych, które nigdy nie są ustawione, zwracana jest wartość domyślna. | GetVariable("key"). AsInt() GetVariable("email"). AsString() GetVariable("key"). AsDouble() GetVariable("key"). AsBool() GetVariable("key"). AsDateTime() GetVariable("key"). AsJsonObject() GetVariable("key"). AsJsonArray() |
Uwaga
Zmienne globalne są specyficzne dla pojedynczej transakcji dla danej oceny. Nie można pobrać zmiennej w ramach jednej transakcji z innej transakcji ani z innej oceny.
Funkcje decyzyjne
Funkcje decyzyjne są używane w regułach w celu określenia decyzji.
Typ decyzji | opis | Przykład |
---|---|---|
Zatwierdź() | Ten typ określa decyzję o zatwierdzeniu. Może zawierać przyczynę zatwierdzenia i inny komunikat pomocniczy. Przeciążenia:
|
RETURN Approve() RETURN Zatwierdź("na bezpiecznej liście") RETURN Zatwierdź ("na bezpiecznej liście", "nie eskaluj") |
Odrzuć() | Ten typ określa decyzję o odrzuceniu. Może zawierać przyczynę odrzucenia i innego komunikatu pomocniczego. Przeciążenia:
|
RETURN Reject() RETURN Reject("kraj embargo") RETURN Reject("kraj embargo", "nie eskaluj") |
Review() | Ten typ określa decyzję przeglądu. Może zawierać przyczynę przeglądu i innego komunikatu pomocniczego. Przeciążenia:
|
RETURN Review() RETURN Review("user on watch list") RETURN Review("użytkownik na liście obserwowanych", "nie eskaluj") |
Challenge(String challengeType) | Ten typ określa decyzję o wyzwaniu i typie wyzwania. Może również zawierać przyczynę wyzwania i inny komunikat pomocniczy. Przeciążenia:
|
WYZWANIE RETURN ("SMS") RETURN Challenge ("SMS", "podejrzany bot") RETURN Challenge ("SMS", podejrzany bot", "nie eskaluj") |
Funkcje obserwacji
Funkcje obserwacji mogą służyć do podejmowania danych z bieżącego kontekstu i zapisywania ich w innym miejscu.
Typ zwracany | opis | Przykład |
---|---|---|
Output(k=v) | Ta funkcja może służyć do przekazywania par klucz-wartość do sekcji CustomProperties odpowiedzi interfejsu API. Para klucz-wartość zostanie zagnieżdżona w obiekcie, którego nazwa będzie taka sama jak nazwa klauzuli zawierającej instrukcję Output(). | Output(key="test", email=@"user.email", countryRegion=Geo.CountryRegion(@"device.ipAddress")) |
Trace(k=v) | Ta funkcja może służyć do wyzwalania zdarzenia śledzenia i wysyłania par klucz-wartość do przestrzeni nazw FraudProtection.Trace.Rule Event Tracing. | Trace(key="Manual Review", ip=@"device.ipAddress") |
SetResponse(String sectionName, k=v) | Ta funkcja może służyć do przekazywania par klucz-wartość do sekcji CustomProperties odpowiedzi interfejsu API. SectionName to opcjonalny parametr, który można pominąć. Tej funkcji można używać tylko w ramach akcji po podjęciu decyzji; nie jest ona dostępna w ramach reguły decyzyjnej | SetResponse("Scores", bot = Model.Bot(@deviceContextId), risk=Model.Risk()) SetResponse(test="123") |
Response.Decision() | Ta funkcja odwołuje się do decyzji o ocenie bieżącej oceny. | Response.Decision() == "Zatwierdź" |
Funkcje agregacji
Function | opis | Przykład |
---|---|---|
Count() | Ta funkcja zwraca liczbę przypadków wystąpienia zdarzenia. | SELECT Count() AS numPurchases |
DistinctCount(klucz ciągu) | Ta funkcja zwraca liczbę unikatowych wartości dla określonej właściwości. Jeśli określona właściwość ma wartość null lub jest pusta dla zdarzenia przychodzącego, zdarzenie nie przyczynia się do agregacji. | SELECT DistinctCount(@"device.ipAddress") AS distinctIPs |
Sum(Podwójna wartość) | Ta funkcja zwraca sumę wartości dla określonej właściwości liczbowej. | SELECT Sum(@"totalAmount") AS totalSpending |
Operatory logiczne
Operator | opis | Przykład |
---|---|---|
i (&&) | Wartość logiczna i | Model.Risk(). Wynik > 500 && Model.Risk(). Wynik < 800 Model.Risk(). Ocenianie > wartości 500 i Model.Risk(). Wynik < 800 |
lub (||) | Logiczne lub | @"email.isEmailUsername" == false || @"email.isEmailValidated" == false @"email.isEmailUsername" == false lub @"email.isEmailValidated" == false |
not | Logiczna negacja | @"email.isEmailUsername" not(!) @"email.isEmailUsername" |
Operatory porównania
Usługa Fraud Protection obsługuje wszystkie standardowe operacje porównywania i równości w języku C#. Ta tabela zawiera kilka przykładów operatorów, które mogą okazać się przydatne. W przypadku zastosowania tych operatorów do ciągów występują porównania leksykograficzne.
Operator | opis | Przykład |
---|---|---|
== | Ten operator sprawdza równość. | @"user.countryRegion" == @"shippingAddress.countryRegion" |
!= | Ten operator sprawdza nierówności. | @"user.countryRegion" != @"shippingAddress.countryRegion" |
> | Ten operator sprawdza, czy pierwsza wartość jest większa niż druga wartość. | Model.Risk(). Wynik > 500 |
< | Ten operator sprawdza, czy pierwsza wartość jest mniejsza niż druga wartość. | Model.Risk(). Wynik < 500 |
>= | Ten operator sprawdza, czy pierwsza wartość jest większa niż lub równa drugiej wartości. | Model.Risk(). Wynik >= 500 |
<= | Ten operator sprawdza, czy pierwsza wartość jest mniejsza niż lub równa drugiej wartości. | Model.Risk(). Wynik <= 500 |
X ? Y: Z | Ten operator sprawdza, czy warunek X jest spełniony, czy nie. Jeśli jest to prawda, instrukcja Y jest wykonywana i zwracany jest jego wynik. W przeciwnym razie instrukcja Z jest wykonywana i zwracany jest jego wynik. Wiele testów logicznych można również połączyć za pomocą nawiasów kwadratowych, aby zdefiniować zagnieżdżoną logikę IF <> THEN <> ELSE <> | LET $riskbucket = Model.Risk(). Wynik > 500 ? "Wysoki" : (Model.Risk(). Wynik > 300 ? "Średni" : "Niski") |
Funkcje matematyczne
Usługa Fraud Protection obsługuje wszystkie standardowe metody matematyczne języka C# i operatory arytmetyczne. Ta tabela zawiera kilka przykładów metod, które mogą okazać się przydatne.
Operator | opis | Przykład |
---|---|---|
Math.Min(Podwójna wartość1, Podwójna wartość2) | Ten operator oblicza co najmniej dwie wartości. | Math.Min(Model.Risk(). Score, Model.Bot(@"deviceFingerprinting.id"). Wynik) |
Math.Max(Podwójna wartość1, Podwójna wartość2) | Ten operator oblicza maksymalnie dwie wartości. | Math.Max(Model.Risk(). Score, Model.Bot(@"deviceFingerprinting.id"). Wynik) |
RandomInt(liczba całkowita minimalna, maksymalna liczba całkowita) | Ten operator zwraca losową liczbę całkowitą w podanym zakresie, w tym wartość minimalną i z wyłączeniem wartości maksymalnej. | RandomInt(0, 100) |
Operatory DateTime
Usługa Fraud Protection obsługuje standardowe właściwości, metody i operatory typu DateTime języka C#. Ta tabela zawiera kilka przykładów funkcji i właściwości, które mogą okazać się przydatne.
Operator | opis | Przykład |
---|---|---|
UtcNow | Ten operator pobiera obiekt DateTime ustawiony na bieżącą datę i godzinę na komputerze, wyrażony jako UTC. | DateTime.UtcNow |
Today | Ten operator pobiera obiekt ustawiony na bieżącą datę, w której składnik godziny jest ustawiony na 00:00:00. | DateTime.Today |
Subtract | Ten operator zwraca nową datę/godzinę, odejmując określoną datę i godzinę z wejściowej daty/godziny. | DateTime.UtcNow.Subtract(@var1. ToDateTime()) |
DaysSince(Data/ godzina) | Ten operator zwraca liczbę całkowitą reprezentującą liczbę dni przekazanych między określoną wartością DateTime a bieżącą datą (wyrażoną jako uniwersalny czas koordynowany [UTC]). | DaysSince(@"user. Data utworzenia") |
Year (Rok) | Ten operator pobiera składnik roku daty reprezentowanej przez to wystąpienie. | @"user.creationDate". Rok |
Data | Ten operator pobiera nowy obiekt o tej samej dacie co to wystąpienie, ale gdzie wartość godziny jest ustawiona na 00:00:00 (północ). | @"user.creationDate". Data |
Operatory rzutów typów
Aby uzyskać informacje na temat wnioskowania typów, zobacz sekcję Wnioskowanie typów atrybutów w dalszej części tego artykułu.
Operator | opis | Przykład |
---|---|---|
Convert.ToDateTime | Ten operator konwertuje ciąg na datetime i konwertuje datę/godzinę na ciąg przy użyciu danego formatu. |
Convert.ToDateTime(@"user.creationDate"). ToString("yyyy-MM-dd") |
Konwertuj.ToInt32 | Ten operator konwertuje określoną wartość na Int32. |
Convert.ToInt32(@var) |
Konwertuj.ToDouble | Ten operator konwertuje określoną wartość na Wartość podwójna. |
Convert.ToDouble(@var) |
Funkcje ciągów
Usługa Fraud Protection obsługuje standardową klasę ciągów języka C#. Ta tabela zawiera kilka przykładów funkcji i operatorów, które mogą okazać się przydatne.
Operator | opis | Przykład |
---|---|---|
StartsWith() | Ten operator sprawdza, czy ciąg zaczyna się od określonego prefiksu. | @"user.phoneNumber". StartsWith("1-") |
EndsWith() | Ten operator sprawdza, czy ciąg kończy się określonym sufiksem. | @"user.email". EndsWith("@contoso.com") |
IsNumeric() | Ten operator sprawdza, czy ciąg jest wartością liczbową. | @"user.email". IsNumeric() |
Długość | Ten operator zwraca liczbę znaków w ciągu. |
@"user.username". Długość |
ToDateTime() | Ten operator konwertuje ciąg na obiekt DateTime . | @"user.creationDate". ToDateTime() |
ToDouble() | Ten operator konwertuje ciąg na wartość Podwójna. | @"productList.purchasePrice". ToDouble() |
ToInt32() | Ten operator konwertuje ciąg na wartość Int32 . | @"zipcode". ToInt32() |
ToUpper() | Ten operator zwraca kopię tego ciągu przekonwertowaną na wielkie litery. | @"user.username". ToUpper() |
ToLower() | Ten operator zwraca kopię tego ciągu przekonwertowaną na małe litery. | @"user.username". ToLower() |
IndexOf() | Ten operator zgłasza indeks zerowy pierwszego wystąpienia danego podciągu w określonym ciągu. | @"user.username". IndexOf("@") |
LastIndexOf() | Ten operator zgłasza indeks zerowy ostatniego wystąpienia danego podciągu w określonym ciągu. | @"user.username". LastIndexOf("@") |
Podciąg () | Ten operator zwraca podciąg rozpoczynający się od indeksu opartego na zerze w ciągu z drugim opcjonalnym parametrem określającym długość żądanego podciągu | @"user.username". Podciąg (0,5) |
IsNullOrEmpty() | Ten operator zwraca wartość, jeśli określony ciąg ma wartość null lub jest pusty. W przeciwnym razie zwraca wartość false. | @"user.username". IsNullOrEmpty() |
IgnoreCaseEquals() | Ten operator zwraca wartość true, jeśli dwa ciągi są równe, niezależnie od różnic wielkości liter. W przeciwnym razie zwraca wartość false. | @"user.username". IgnoreCaseEquals(@"user.email") |
Contains() | Ten operator sprawdza, czy ciąg zawiera inny ciąg. | @"productList.productName". Contains("Xbox") |
ContainsOnly() | Ten operator sprawdza, czy ciąg zawiera tylko podane znaki. | @"zipcode". ContainsOnly(CharSet.Numeric) |
ContainsAll() | Ten operator sprawdza, czy ciąg zawiera wszystkie podane znaki. | @"zipcode". ContainsAll(CharSet.Numeric|CharSet.Hyphen) |
ContainsAny() | Ten operator sprawdza, czy ciąg zawiera dowolny z podanych zestawów znaków. | @"zipcode". ContainsAny(CharSet.Numeric|CharSet.Hyphen) |
Używanie elementu CharSet w funkcji ContainsOnly, ContainsAll i ContainsAny
Następujące typy znaków mogą być używane w funkcjach ContainsOnly, ContainsAll i ContainsAny.
Typ znaku | opis |
---|---|
Alfabetyczne | a-z, A-Z |
Apostrof | ' |
Asperand | @ |
Ukośnik odwrotny | \ |
Comma | , |
Hyphen | - |
Liczbowe | 0–9 |
Okres | . |
Ukośnik | / |
Podkreślenie | _ |
Odstępu | Pojedyncza spacja |
Funkcje wykrywania gibberish
Te funkcje pomagają zapobiegać oszustwom dzięki szybkiemu i wydajnemu wykrywaniu, czy kluczowe pola danych wejściowych użytkownika (takie jak nazwy i adresy) zawierają trzeźwość.
Function | opis | Przykład |
---|---|---|
GetPattern(String).maxConsonants | Maksymalna liczba ciągłych spółgłosek w ciągu, które nie są oddzielone przez samogłoski. Na przykład wartość maxConsonants dla ciągu "01gggyturah" to 5. | GetPattern(@"user.email").maxConsonants |
GetPattern(String).gibberScore | Wynik na podstawie uczenia maszynowego z zakresu od 0 do 1; 0 oznacza, że najprawdopodobniej będzie gibberish i 1 oznacza najmniej prawdopodobne, że będzie gibberish. | GetPattern(@"user.email").gibberScore |
Uwaga
Model wykrywania Gibberish jest oparty na częstotliwości dwóch kolejnych znaków alfanumerycznych w publicznie dostępnych dokumentach angielskich. Zakłada się, że częściej dwa kolejne znaki alfanumeryczne pojawiają się w dokumentach publicznych, co jest mniej prawdopodobne, że są one gibberish. Model powinien zapewniać rozsądne wyniki dla tekstów w języku angielskim i może służyć do wykrywania, czy nazwy lub adresy zawierają gibberish. Jednak model może nie być odpowiedni dla skrótów, takich jak krótki formularz dla stanów (AZ, TX itp.), a także nie może być używany do sprawdzania poprawności nazw lub adresów. Na koniec model nie został przetestowany pod kątem tekstów nieanglojęzycznych.
Funkcje wykrywania wzorców
Te funkcje pomagają zapobiegać oszustwom dzięki szybkiemu i wydajnemu wykrywaniu, czy kluczowe pola danych wejściowych użytkownika (takie jak nazwy i adresy) zawierają trzeźwość.
Function | opis | Przykład |
---|---|---|
Patterns.IsRegexMatch(wzorzec ciągu, źródło ciągu) | Wykonuje dopasowanie wyrażenia regularnego (regex) wzorca ciągu względem źródła ciągów. Wynik jest wartością logiczną, czyli true (wskazującą, że dany ciąg pasuje do wzorca) lub false (wskazujący brak dopasowania) | Patterns.IsRegexMatch("^.com$", @ "user.email") Patterns.IsRegexMatch( "^.[aAeEiIoOuU]+.*$", @ "user.firstname") |
Uwaga
- Wzorzec ciągu musi być stałym wejściem.
- Funkcja zwraca wartość false (wynik domyślny), jeśli czas oceny przekracza 10 milisekund.
- Wszystkie ograniczenia , które nie obsługują funkcji NonBacktracking, dotyczą również funkcji IsRegexMatch.
Funkcje modelu
Funkcje modelu uruchamiają różne modele oszustw i są przydatne, gdy ocena nie uruchamia automatycznie jednego lub większej liczby modeli oszustw. Po uruchomieniu funkcji modelu informacje o modelu uruchomionym podczas oceny reguły są danymi wyjściowymi wywołania interfejsu API oceny oszustw. Następnie reguła uzyskuje dostęp do wyniku modelu, w tym oceny, powodów i nie tylko, które mogą być używane do dalszego przetwarzania reguł i podejmowania decyzji.
Typ modelu | opis | Przykład |
---|---|---|
Ryzyko | Ocenia prawdopodobieństwo, że sesja jest ryzykowna. | Model.Risk() |
Bot | Ocenia prawdopodobieństwo zainicjowania bota sesji. Przekaż identyfikator kontekstu urządzenia, który został wysłany do rozwiązania do odcisku palca urządzenia usługi Fraud Protection. | Model.Bot(@deviceContextId) |
Funkcje geograficzne
Funkcje geograficzne zapewniają rozpoznawanie, konwertując adres IP na adres geograficzny. Funkcje geograficzne mogą być wywoływane w regułach tylko przy użyciu adresów IP, które są częścią ładunku transakcji lub zbierane przez ochronę przed oszustwami za pomocą odcisku palca urządzenia. Nie można wywołać funkcji geograficznych dla dowolnych wartości ip.
Operator | opis | Przykład |
---|---|---|
Geo.RegionCode (ciąg ip) | Ten operator konwertuje adres IPv4 na kod regionu USA (czyli skrót nazwy stanu lub terytorium USA). Na przykład w przypadku adresu IP w stanie Waszyngton zwracana jest wartość "WA". |
Geo.RegionCode(@"device.ipAddress") |
Geo.Region (ciąg ip) | Ten operator konwertuje adres IPv4 na swój region USA (czyli nazwę stanu lub terytorium USA). Na przykład w przypadku adresu IP w stanie Waszyngton zwracana jest wartość "Washington". |
Geo.Region(@"device.ipAddress") |
Geo.CountryCode(ciąg ip) | Ten operator konwertuje adres IPv4 na kod kraju/regionu. Na przykład w przypadku adresu IP w Australii zwracana jest wartość "AU". |
Geo.CountryCode(@"device.ipAddress") |
Geo.CountryRegion(ciąg ip) | Ten operator konwertuje adres IP na nazwę regionu. Na przykład dla adresu IP w Australii zwracana jest wartość "Australia". |
Geo.CountryRegion(@"device.ipAddress") |
Geo.City(ciąg ip) | Ten operator konwertuje adres IPv4 na nazwę miasta. Na przykład w przypadku adresu IP w Nowym Jorku zwracana jest wartość "Nowy Jork". |
Geo.City(@"device.ipAddress") |
Geo.MarketCode(ciąg ip) | Ten operator konwertuje adres IPv4 na kod rynku adresu IP. Na przykład dla adresu IP z Kanady zwracana jest wartość "NA" (Ameryka Północna). |
Geo.MarketCode(@"device.ipAddress") |
Funkcje atrybutów urządzenia
Operator | opis | Przykład |
---|---|---|
Device.GetFullAttributes(String sessionId) | Zwraca pełny zestaw atrybutów urządzenia dla określonej sesji odcisku palca urządzenia. Zobacz Konfigurowanie odcisku palca urządzenia, aby wyświetlić pełny zestaw atrybutów urządzenia | Device.GetFullAttributes(@"deviceFingerprinting.id") |
Device.GetAttributes(String sessionId) | Zwraca mniejszy podzbiór atrybutów urządzenia dla określonej sesji odcisku palca urządzenia. Podzestaw to lista wyselekcjonowana przez usługę Fraud Protection i zawiera najczęściej używane atrybuty. | Device.GetAttributes(@"deviceFingerprinting.id") |
Device.GetSelectedAttributes(String sessionId, String attributeName) | Zwraca maksymalnie 20 atrybutów urządzenia dla określonej sesji odcisku palca urządzenia. Lista żądanych atrybutów ma być określona jako parametry rozdzielane przecinkami | Device.GetSelectedAttributes(@"deviceFingerprinting.id", "deviceAsn","deviceCountryCode") |
Device.GetSpeedOfTravel(String sessionId) | Zwraca maksymalną prędkość podróży urządzenia w milach na godzinę. Ochrona przed oszustwami określa maksymalną szybkość, wykonując ostatnie pięć kolejnych sesji odcisków palców i obliczając szybkość urządzenia z sesji do sesji, zwracając maksymalną wartość. Urządzenie jest identyfikowane przez sesje przy użyciu identyfikatora pliku cookie. | Device.GetSpeedOfTravel(@"deviceFingerprinting.id") |
Funkcje wyszukiwania BIN
Funkcje wyszukiwania BIN zapewniają informacje o koncie karty płatniczej (na przykład karta sieciowa, typ karty, kod kraju karty, kategoria karty) na podstawie numeru identyfikacyjnego banku (BIN). Dane wyszukiwania BIN pochodzą od wiodących dostawców danych BIN innych firm, a następnie wyselekcjonowane przez usługę Fraud Protection.
Operator | opis | Przykład |
---|---|---|
BIN. Lookup(String BIN).cardNetwork | Ta funkcja wyszukuje bin i zwraca sieć kart (na przykład Visa, Polska). |
BIN. Lookup(@"card.bin").cardNetwork |
BIN. Lookup(String BIN).cardType | Ten operator wyszukuje bin i zwraca typ karty (na przykład Debetowy, Kredyt). |
BIN. Lookup(@"card.bin").cardType |
BIN. Lookup(String BIN).issuer | Ten operator wyszukuje bin i zwraca organizację wystawiającą. |
BIN. Lookup(@"card.bin").issuer |
BIN. Lookup(String BIN).countryCode | Ten operator wyszukuje bin i zwraca dwuliterowy kod kraju ISO karty. |
BIN. Lookup(@"card.bin").countryCode |
BIN. Lookup(String BIN).cardCategory | Ten operator wyszukuje bin i zwraca kategorię karty (na przykład Przedpłacone, Firmowe, Rewards). |
BIN. Lookup(@"card.bin").cardCategory |
BIN. Lookup(String BIN).error | Ten operator wyszukuje bin i zwraca komunikat o błędzie, jeśli nie można odnaleźć pliku BIN. |
BIN. Lookup(@"card.bin").error |
Lista funkcji
Usługa Fraud Protection umożliwia przekazywanie list niestandardowych i odwoływanie się do nich w języku. Aby uzyskać informacje na temat sposobu przekazywania tych list, zobacz Zarządzanie listami. Aby uzyskać więcej informacji na temat używania list w regułach, zobacz sekcję Używanie list w regułach w dalszej części tego artykułu.
Operator | opis | Przykład |
---|---|---|
ContainsKey( Ciąg listName, Nazwa kolumny ciągu, Klucz ciągu) |
Ten operator sprawdza, czy klucz znajduje się w określonej kolumnie na liście Ochrona przed oszustwami. Przykład w następnej kolumnie sprawdza, czy kolumna "Wiadomości e-mail" na liście "Lista pomocy technicznej poczty e-mail" zawiera zmienną @"user.email". |
ContainsKey("Lista pomocy technicznej poczty e-mail", "Wiadomości e-mail", @"user.email") |
Wyszukiwanie( Ciąg listName, KeyColName ciągu, Wartość ciąguColName) |
Ten operator wyszukuje wartość klucza na liście ochrona przed oszustwami. Należy określić zarówno nazwę kolumny zawierającej klucz, jak i nazwę kolumny zawierającej wartość. Wartość jest zawsze zwracana jako ciąg. Jeśli klucz nie zostanie znaleziony i jeśli parametr defaultValue nie zostanie określony, zostanie zwrócony komunikat "Nieznany". Przykład w następnej kolumnie wyszukuje wartość zmiennej @"user.email" w kolumnie Wiadomości e-mail listy pomocy technicznej. Jeśli zostanie znalezione dopasowanie, funkcja zwraca wartość kolumny Status z pasującego wiersza na liście. Jeśli dopasowanie nie zostanie znalezione, funkcja zwróci wartość 0. |
Lookup("Email Support List", "Email", @"user.email", "Status",0) |
W | Ten operator sprawdza, czy klucz znajduje się na rozdzielanej przecinkami liście wartości. | In(@"user.countryRegion", "US, MX, CA") |
InSupportList | Ten operator sprawdza, czy atrybut znajduje się na liście pomocy technicznej. | InSupportList('Lista pomocy technicznej poczty e-mail', @"user.email") |
IsSafe | Ten operator sprawdza, czy jednostka jest oznaczona jako Bezpieczna na liście pomocy technicznej. | IsSafe('Lista pomocy technicznej poczty e-mail', @"user.email") |
IsBlock | Ten operator sprawdza, czy jednostka jest oznaczona jako Blokuj na liście pomocy technicznej. | IsBlock('Lista pomocy technicznej poczty e-mail', @"user.email") |
IsWatch | Ten operator sprawdza, czy jednostka jest oznaczona jako Watch na liście pomocy technicznej. | IsWatch('Lista pomocy technicznej poczty e-mail', @"user.email") |
Używanie list w regułach
Operatory ContainsKey i Lookup umożliwiają odwoływanie się do list przekazanych do ochrony przed oszustwami. Aby uzyskać więcej informacji na temat list, zobacz Zarządzanie listami.
ContainsKey
Aby sprawdzić, czy jedna z list zawiera określoną wartość, użyj operatora ContainsKey . Określ nazwę listy, kolumnę i klucz, który chcesz sprawdzić.
Na przykład przekażesz listę ryzykownych adresów e-mail z jedną kolumną i nadaj jej nazwę Ryzykowna lista e-mail.
Kayla@contoso.com |
Jamie@bellowscollege.com |
Marie@atatum.com |
Następnie możesz użyć następującej składni, aby odrzucić wszystkie transakcje z ryzykownych adresów e-mail na tej liście.
RETURN Reject("risky email")
WHEN ContainsKey("Risky email list", "Email", @"user.email")
Ta klauzula sprawdza, czy kolumna "Email" na liście "Ryzykowna lista wiadomości e-mail" zawiera klucz @email . Jeśli tak, transakcja zostanie odrzucona.
Lookup
W przypadku list wielokolumnach można użyć operatora Odnośnik , aby sprawdzić wartość kolumny dla określonego klucza.
Można na przykład utworzyć listę zawierającą jedną kolumnę dla adresów e-mail i inną kolumnę, która wskazuje stan tych adresów e-mail. Nadasz tej liście nazwę Lista e-mail.
Stan | |
---|---|
Kayla@contoso.com |
Ryzykowny |
Jamie@bellowscollege.com |
Ryzykowny |
Marie@atatum.com |
Ryzykowny |
Camille@fabrikam.com |
Safe |
Miguel@proseware.com |
Safe |
Tyler@contoso.com |
Safe |
Następnie możesz użyć następującej składni, aby odrzucić wszystkie transakcje z adresów e-mail na tej liście, które mają stan Ryzykowne.
RETURN Reject("risky email")
WHEN Lookup("Email List", "Email", @"user.email", "Status") == "Risky"
Ta klauzula wyszukuje klucz @"user.email" w kolumnie "Email" na liście "Lista wiadomości e-mail" i sprawdza, czy wartość w kolumnie "Stan" jest ryzykowna. Jeśli tak jest, transakcja zostanie odrzucona.
Jeśli klucz @"user.email" nie zostanie znaleziony na liście, usługa Fraud Protection zwróci wartość "Unknown".
Możesz również określić własną wartość domyślną jako piąty parametr. Aby uzyskać więcej informacji, zobacz sekcję Operatory logiczne we wcześniejszej części tego artykułu.
Operator odnośnika zawsze zwraca wartość Ciągu. Aby przekonwertować tę wartość na wartość Int, Double lub DateTime , użyj operatora rzutowania typów.
Używanie wywołań zewnętrznych, ocen zewnętrznych i możliwości
- Aby odwołać się do wywołania zewnętrznego, wpisz External, a następnie wywołanie zewnętrzne, do którego chcesz się odwołać. Aby uzyskać więcej informacji, zobacz Używanie wywołania zewnętrznego w regułach.
- Aby odwołać się do oceny zewnętrznej, wpisz Oceny, a następnie ocenę zewnętrzną, do której chcesz się odwołać. Aby uzyskać więcej informacji, zobacz Używanie oceny zewnętrznej w regułach.
- Aby odwoływać się do prędkości, wpisz Prędkość, a następnie szybkość, do której chcesz się odwoływać. Aby uzyskać więcej informacji, zobacz Używanie prędkości w regułach.
Wnioskowanie typów atrybutów
Typy zmiennych są wnioskowane z kontekstu, w jaki są używane. Oto kilka przykładów:
- W wyrażeniu WHEN @isEmailValidated zmienna jest interpretowana jako wartość logiczna .
- W wyrażeniu Model.Risk(). Wynik > 500. Zmienna jest interpretowana jako wartość podwójna.
- W wyrażeniu @"user.creationDate". Year < DateTime.UtcNow.Year, zmienna jest interpretowana jako wartość DateTime .
Jeśli nie ma wystarczającego kontekstu, aby wywnioskować typ zmiennej, jest to uważane za wartość Ciąg . Na przykład w wyrażeniu Model.Risk(). Score < Model.Bot(@"deviceFingerprinting.id"). Wynik, obie zmienne są interpretowane jako ciągi.
Aby określić typ zmiennej nieciągowej, użyj operatora rzutowania typów.
Tablice i obiekty JSON
Język FQL obsługuje konstruowanie złożonych obiektów strukturalnych jako zmiennych lokalnych, które mogą być przekazywane do wywołania zewnętrznego lub oceny zewnętrznej w formularzu JSON. Podobnie jak w przypadku wszystkich innych ustawień lokalnych w języku FQL, tablice i obiekty są niezmienne po utworzeniu.
Tablice JSON
Tablice są tworzone przez ujęcie w nawiasy:
LET $arr1 = [ "hello", "world" ]
LET $arr2 = [
"this is also an array",
78.4,
$arr1,
@"user.email",
External.MyExtcall()
]
Obiekty JSON
Obiekty są tworzone przy użyciu nawiasów klamrowych:
LET $obj1 = { isObject: true }
LET $obj2 = {
numberField: 7,
fieldIs: "string",
internalObj: $obj1,
inline: {
innerInnerField: "hello"
}
}
Funkcje języka FQL dla tablic i obiektów JSON
Składnia | opis | Przykład |
---|---|---|
myArr[0] | Ta składnia służy do uzyskiwania dostępu do określonego elementu tablicy według jego indeksu. | myArr [0].property myArr [0][0] myArr [0][0].property myArr [0].property [0] myArr [0].property[0].property[0].property |
Gdzie myArr, w powyższych przykładach, jest tablicą. Źródłem tej tablicy może być @@payloadProperty, odpowiedź na ocenę zewnętrzną, odpowiedź wywołania zewnętrznego, zmienna lokalna lub zmienna globalna.
Poniżej przedstawiono przykłady używania składni opartej na różnych źródłach tablicy:
- Źródło tablicy: Ładunek
LET $sample = @@"myArr[0]".AsJsonArray()
RETURN Approve()
WHEN $sample[0].AsString() == "a"
- Źródło tablicy: zmienna lokalna
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"
Składnia | opis | Przykład |
---|---|---|
Array.GetValue (TargetArray . AsJsonArray(), matchKey, matchValue, lookupKey) | Za pomocą tej funkcji można uzyskać dostęp do pierwszego elementu tablicy zgodnego z warunkiem. Zwraca wartość |
Array.GetValue(@@"payloadProperty". AsJsonArray(), matchKey, matchValue, lookupKey) |
Array.GetValues(TargetArray . AsJsonArray(), matchKey, matchValue) | Za pomocą tej funkcji można uzyskać dostęp do zestawu elementów tablicy, które pasują do warunku. Zwraca tablicę |
Array.GetValues(@@"payloadProperty". AsJsonArray(), matchKey, matchValue) |
Poniżej przedstawiono bardziej szczegółowe przykłady używania powyższej składni na podstawie różnych źródeł tablicy:
Źródło tablicy | Array.GetValue | Array.GetValues |
---|---|---|
Oceny zewnętrzne | 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" |
Ładunek | Przykład ładunku: {"group":[{"item1": "a", "item2": "a1"}, {"item1": "b", "item2": "b1"}]} LET $sample = Array.GetValue(@@"group". AsJsonArray(), "item1", "a", "item2") RETURN Approve()WHEN $sample. AsString() == "a1" |
Przykład ładunku: { "group":[{"item1": "a", "item2": "a1"}, {"item1": "b", "item2": "b1"}]} LET $sample = Array.GetValues(@@"group". AsJsonArray(), "item1", "a") RETURN Approve() KIEDY $sample[0].item2. AsString() == "a1" |
Zmienne globalne | Używanie tego samego przykładu ładunku co powyżej Do SetVariables(Var=@"group") LET $group = GetVariable("Var"). AsJsonObject() LET $value = Array.GetValue($group, "item1", "a", "item2") RETURN Approve() WHEN $value. AsString() == "a1" |
Używanie tego samego przykładu ładunku co powyżej Do SetVariables(Var=@"group") LET $group = GetVariable("Var"). AsJsonObject() LET $arr = Array.GetValues($group. AsJsonArray(), "item1", "a") RETURN Approve() |
Wywołanie zewnętrzne | Odpowiedź wywołania zewnętrznego (myCall): {"group":[{"item1": "a", "item2": "a1"}, {"item1": "b", "item2": "b1"}]} |
Odpowiedź wywołania zewnętrznego (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" |
Rzutowanie typów dla tablic i obiektów JSON
Poniżej przedstawiono następujący element . Jako<typ>() są obsługiwane z obiektu JsonObject:
- AsString()
- AsInt()
- AsDouble()
- AsDateTime()
- AsBool()
- AsJsonArray()
- AsJsonObject()
W przypadku używania jednej z dwóch metod pomocnika tablicy Array.GetValue lub Arrays.GetValues należy wpisać rzutowanie przy użyciu metody . Jako<typ>(). Przykład:
LET $arr = {myArr:[{item1: "red", number: 45}, {item1: "blue", number: 56}, {item1: "green", number: 33}]} LET $sample = Array.GetValues($arr.myArr.AsJsonArray(), "item1", "blue")
Po jawnym przekonwertowaniu danych na obiekt JSON lub tablicę można użyć polecenia . Jako<type>() do rzutowania na inny typ danych, jeśli jest to konieczne. Przykład:
RETURN Approve() WHEN $sample[0].number.AsInt() == 56
Gdy używasz @@, dane są niejawnie rzutowe do obiektu JSON. Jeśli chcesz przekonwertować obiekt JSON na inny typ danych, należy użyć polecenia . Jako<typ>(). Przykład:
LET $sample = @@”user.addresses”.AsJsonArray()
Jeśli chcesz wyświetlić dane wyjściowe w określonym formacie, musisz użyć polecenia . Jako<typ>(). Przykład:
LET $sample = @@”user.addresses” Output(abc = $sample.AsJsonArray())
Uwaga
Najlepsze rozwiązania dotyczące rzutów typów:
- Zawsze wpisz rzutowanie na końcu łańcucha .
- Jeśli nie masz pewności, zawsze jawnie wpisz rzutowanie przy użyciu metody . Jako<typ>(). Przykład:
LET $sample = External.myCall().data[0].Item1[0].AsJsonArray()
Or
LET $sample = @@”accommodations[0].rooms”.AsJsonArray()
Funkcje dostępne w ramach akcji po podjęciu decyzji
Poniższe funkcje mogą być używane tylko w ramach akcji post decision. Nie są one dostępne w ramach reguł podejmowania decyzji
Składnia | opis | Przykład |
---|---|---|
SetResponse(String sectionName, k=v) | Ta funkcja może służyć do przekazywania par klucz-wartość do sekcji CustomProperties odpowiedzi interfejsu API. SectionName to opcjonalny parametr, który można pominąć. | SetResponse("Scores", bot = Model.Bot(@deviceContextId), risk=Model.Risk()) SetResponse(test="123") |
Response.Decision() | Ta funkcja odwołuje się do decyzji o ocenie bieżącej oceny. | Response.Decision() == "Zatwierdź" |