Udostępnij za pośrednictwem


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

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)>
[ KIEDY <Wartość logicznaExpression>

]

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:

  • Reguły zakupu
  • Niestandardowe reguły oceny
  • Reguły ochrony konta

    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:

    • Reguły zakupu
    • Niestandardowe reguły oceny
    • Reguły ochrony konta

      RETURN Review()
      WHEN IsWatch("Lista obsługi urządzeń", @"deviceAttributes.deviceId") ||
      IsWatch("Lista pomocy technicznej płatności", @"paymentInstrumentList.merchantPaymentInstrumentId")

      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
      OD zakupu
      WHEN @"ruleEvaluation.decision" == "Odrzuć"
      GROUPBY @"user.email"

      SELECT DistinctCount(@"purchaseId")
      _BANKDECLINES_PER_DEVICE AS
      FROM BankEvent
      WHEN @"status" == "ODRZUCONE"
      GROUPBY @"purchase.deviceContext.externalDeviceId"

      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:

      • Zatwierdź(przyczyna ciągu)
      • Approve(Przyczyna ciągu, Obsługa ciągówMessage)

      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:

      • Reject(Przyczyna ciągu)
      • Reject(Przyczyna ciągu, Obsługa ciąguMessage)

      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:

      • Review(Przyczyna ciągu)
      • Review(Przyczyna ciągu, Obsługa ciąguMessage)

      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:

      • Challenge(Ciąg challengeType, przyczyna ciągu)
      • Challenge(String challengeType, String reason, String supportMessage)

      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.

      Email
      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.

      Email 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"}]}

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

      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ź"