Bagikan melalui


Referensi bahasa penipuan

Microsoft Dynamics 365 memiliki bahasa yang kaya dan ekspresif sendiri untuk membantu Anda menentukan dan mengekspresikan strategi penipuan Anda. Bahasa ini memiliki banyak kesamaan dengan C# dan SQL, dan dirancang untuk memberi Anda fleksibilitas yang Anda butuhkan untuk mengatasi penipuan untuk skenario bisnis unik Anda.

Anda dapat menggunakan bahasa ini hari ini untuk menentukan aturan dan kecepatan. Untuk informasi selengkapnya, lihat Mengelola aturan dan Melakukan pemeriksaan kecepatan.

Panduan referensi bahasa penipuan ini mencakup daftar lengkap operator, fungsi, dan pernyataan yang membentuk bahasa:

Pernyataan

Sintaks pernyataan Deskripsi Contoh
LET VariableName> = <Expression<>

Pernyataan LET digunakan untuk menentukan variabel baru. Cakupan variabel adalah aturan atau kecepatan yang ditetapkan variabel didefinisikan. Nama variabel harus diawali dengan tanda dolar ($).

Untuk informasi selengkapnya, lihat Menentukan variabel Anda sendiri.

Sejumlah pernyataan LET dapat digunakan di bagian Kondisi dan klausa semua jenis aturan dan set kecepatan.

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

MENONTON

OBSERVE <ObservationFunction>(<KeyValuePairs>)
[ KETIKA <BooleanExpression>

]

Pernyataan OBSERVE tidak mengakhiri eksekusi aturan dengan keputusan. Ini hanya mencatat pasangan kunci-nilai ke respons API atau log pelacakan. Aturan dan klausa aturan berikutnya terus berjalan hingga pernyataan RETURN tercapai.

Pernyataan OBSERVE harus diikuti oleh satu atau beberapa fungsi pengamatan.

Jika klausa WHEN ada dan dievaluasi ke False, pernyataan OBSERVE tidak dicatat.

Maksimal satu dapat digunakan untuk setiap klausa dalam aturan berikut:

  • Aturan pembelian
  • Aturan Penilaian Kustom
  • Aturan Perlindungan Akun

    OBSERVE Output(reason="high score")

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

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

    Pernyataan RETURN mengakhiri eksekusi aturan dengan keputusan.

    Pernyataan harus menentukan fungsi keputusan yang valid: Setujui(), Tolak(), Tantangan(), atau Ulasan().

    Pernyataan ini juga dapat menentukan satu atau beberapa fungsi pengamatan: Output() atau Trace()

    Terakhir, pernyataan dapat menyertakan klausul WHEN untuk menentukan kondisi di mana ia harus melakukan salah satu sebelumnya.

    Maksimal satu dapat digunakan per klausul dalam aturan berikut:

    • Aturan pembelian
    • Aturan Penilaian Kustom
    • Aturan Perlindungan Akun

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

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

      ROUTETO QUEUE <QueueName>
      [ KETIKA <BooleanExpression> ]

      Perintah ROUTETO digunakan dalam aturan perutean untuk mengarahkan penilaian pencocokan ke antrean manajemen kasus.

      Klausa WHEN opsional dapat digunakan untuk menjelaskan kondisi di mana perintah harus melakukan perutean.

      Maksimal satu dapat digunakan per klausul dalam aturan perutean.

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

      Pernyataan SELECT digunakan dalam set kecepatan untuk menentukan kecepatan. Ini harus menentukan fungsi agregasi.

      Klausa AS yang diperlukan digunakan untuk membuat alias untuk kecepatan Anda. Alias ini kemudian dapat dirujuk dari aturan.

      Klausa FROM yang diperlukan digunakan untuk menentukan jenis penilaian untuk mengamati kecepatan. Nilai yang valid adalah Pembelian, AccountLogin, AccountCreation, Chargeback, BankEvent, dan CustomAssessment.

      Klausa GROUPBY yang diperlukan menentukan properti atau ekspresi. Semua peristiwa yang dievaluasi ke nilai yang sama dalam pernyataan GROUPBY digabungkan untuk menghitung agregasi yang diminta dalam pernyataan SELECT.

      Misalnya, untuk menghitung agregasi untuk setiap pengguna, gunakan GROUPBY @"user.userId".

      Klausa WHEN opsional menentukan ekspresi Boolean yang menentukan apakah penilaian yang sedang diproses harus disertakan dalam kecepatan yang sedang ditentukan.

      Maksimal satu dapat digunakan per klausul dalam set kecepatan.

      SELECT Count() AS _Purchase_Rejections_Per_Email
      DARI Pembelian
      KAPAN @"ruleEvaluation.decision" == "Tolak"
      GROUPBY @"user.email"

      SELECT DistinctCount(@"purchaseId")
      _BANKDECLINES_PER_DEVICE AS
      DARI BankEvent
      KETIKA @"status" == "DITOLAK"
      GROUPBY @"purchase.deviceContext.externalDeviceId"

      KAPAN <BooleanExpression>

      Pernyataan WHEN seperti klausul WHEN pada pernyataan lain, tetapi berdiri sendiri di bagian Kondisi aturan dan set kecepatan. Ini menentukan kondisi Boolean yang menentukan apakah seluruh aturan, set kecepatan, atau aturan perutean harus berjalan.

      Maksimum satu dapat digunakan di bagian Kondisi dari semua jenis aturan dan set kecepatan.

      WHEN Model.Risk(). Skor > 400
      Fungsi Tindakan DO <> Pernyataan DO digunakan untuk melakukan beberapa tindakan di akhir eksekusi aturan. Pernyataan ini hanya dapat digunakan dalam tindakan Pasca-keputusan DO SetResponse(name = @"firstname" + @"lastname")

      Mereferensikan atribut dan variabel

      Anda dapat menggunakan operator at sign (@) untuk mereferensikan atribut dari peristiwa saat ini.

      Variabel Deskripsi Contoh
      @

      Tanda di (@) digunakan untuk mereferensikan atribut dari peristiwa masuk. Atribut mungkin dikirim sebagai bagian dari payload permintaan, atau Microsoft Dynamics 365 Fraud Protection mungkin menghasilkannya.

      Setelah tanda at (@), tentukan jalur lengkap atribut yang ingin Anda referensikan. Sertakan jalur dalam tanda kutip (misalnya, @"address.city").

      Jika atribut yang direferensikan bukan bagian dari payload peristiwa, nilai default untuk jenis tersebut dikembalikan: 0,0 untuk ganda, string kosong untuk string, dan sebagainya.

      Jenis atribut disimpulkan dari konteks atribut digunakan. Jika konteks tidak cukup disediakan, jenis String digunakan secara default.

      Untuk informasi tentang inferensi jenis, lihat Mengetik inferensi atribut.

      @"address.city"

      $ Tanda dolar ($) digunakan untuk mereferensikan variabel yang ditentukan dalam pernyataan LET . Untuk informasi selengkapnya, lihat Menentukan variabel Anda sendiri. $fullName
      @a[x]

      Variabel ini digunakan untuk mengindeks variabel array.

      Jika payload permintaan untuk penilaian berisi array item, Anda dapat mengakses elemen individual array dengan menggunakan sintaks berikut: @"productList[0]".

      Untuk mengakses atribut elemen tersebut, gunakan sintaks berikut: @"productList[0].productId"

      @"productList[0].productId"

      @"paymentInstrumentList[3].type"

      Ada

      Operator ini memeriksa apakah ada variabel dalam payload peristiwa.

      Exists(Variabel string)

      Ada(@"user.email")
      Request.CorrelationId() Fungsi ini mereferensikan ID Korelasi unik dari peristiwa yang dievaluasi. Anda dapat menggunakan fungsi ini untuk mengakses ID Korelasi peristiwa dalam pengalaman aturan dan meneruskannya ke panggilan eksternal sebagai parameter atau header. External.MyExternalCall(Request.CorrelationId())
      . GetDiagnostics() Fungsi ini dapat digunakan untuk menemukan informasi diagnostik dan debug penting dari panggilan eksternal atau respons penilaian eksternal. Untuk panggilan eksternal, objek Diagnostik berisi payload Permintaan, Titik Akhir, kode HttpStatus, pesan Kesalahan, dan Latensi. Titik akhir tidak tersedia di objek Diagnostik untuk respons penilaian eksternal. Salah satu bidang ini dapat digunakan dalam aturan setelah objek Diagnostik dibuat menggunakan metode ekstensi yang sesuai". GetDiagnostics()"

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

      LET $extResponseDiagnostics = $extResponse.GetDiagnostics()

      OUTPUT OBSERVE(Diagnostik = $extResponseDiagnostics)

      SAAT $extResponseDiagnostics. HttpStatusCode != 200

      Menentukan variabel Anda sendiri

      Anda dapat menggunakan kata kunci LET untuk menentukan variabel. Variabel tersebut kemudian dapat dirujuk di tempat lain dalam aturan. Awali semua variabel dengan tanda dolar ($). Misalnya, Anda mendeklarasikan variabel berikut.

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

      Variabel yang dideklarasikan dalam pernyataan LET hanya dapat digunakan dalam cakupan aturan atau set kecepatan tempat pernyataan didefinisikan.

      Misalnya, untuk mereferensikan variabel dari contoh sebelumnya, Anda dapat menulis pernyataan berikut.

      WHEN $fullName == "Kayla Goderich"
      

      Catatan

      Setelah variabel ditentukan, variabel tidak dapat diperbarui dengan nilai baru.

      Fungsi Variabel Global

      Anda dapat menggunakan fungsi Variabel Global untuk mengatur dan mendapatkan variabel dalam aturan. Setelah variabel global ditetapkan, variabel dapat diakses dalam aturan keputusan, kecepatan, aturan perutean, dan tindakan pasca-keputusan dalam lingkungan atau lingkungan anak yang sama. Perlindungan Penipuan hierarki yang digunakan tercantum dalam tabel berikut. Misalnya, jika Anda menetapkan variabel global dalam aturan dalam lingkungan akar, Perlindungan Penipuan dapat mengambil nilainya dalam aturan lain dalam penilaian yang sama di lingkungan yang sama, atau lingkungan turunan apa pun.

      Operator Deskripsi Contoh
      SetVariables(k=v) Fungsi ini dapat digunakan untuk mengatur pasangan kunci-nilai, yaitu, mengatur nilai ke variabel. Do SetVariables(key= 123, email=@"user.email")
      GetVariable("k") Fungsi ini dapat digunakan untuk mengakses variabel yang sudah diatur. Dalam kasus di mana kita mengakses variabel yang tidak pernah diatur, nilai default dikembalikan.

      GetVariable("key"). AsInt()

      GetVariable("email"). AsString()

      GetVariable("key"). AsDouble()

      GetVariable("key"). AsBool()

      GetVariable("key"). AsDateTime()

      GetVariable("key"). AsJsonObject()

      GetVariable("key"). AsJsonArray()

      Catatan

      Variabel global khusus untuk satu transaksi untuk penilaian tertentu. Variabel yang diatur dalam satu transaksi tidak dapat diambil dari transaksi lain atau penilaian lain.

      Fungsi keputusan

      Fungsi keputusan digunakan dalam aturan untuk menentukan keputusan.

      Jenis keputusan Deskripsi Contoh
      Setujui()

      Jenis ini menentukan keputusan Setujui. Ini dapat mencakup alasan persetujuan dan pesan pendukung lainnya.

      Kelebihan beban:

      • Setujui(Alasan string)
      • Setujui(Alasan string, dukungan StringMessage)

      RETURN Approve()

      RETURN Approve("on safe list")

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

      Tolak()

      Jenis ini menentukan keputusan Tolak. Ini dapat mencakup alasan penolakan dan pesan pendukung lainnya.

      Kelebihan beban:

      • Tolak(Alasan string)
      • Reject(Alasan string, String supportMessage)

      RETURN Reject()

      RETURN Reject("embargo country")

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

      Ulasan()

      Jenis ini menentukan keputusan Peninjauan. Ini dapat mencakup alasan peninjauan dan pesan pendukung lainnya.

      Kelebihan beban:

      • Ulasan(Alasan string)
      • Review(Alasan string, String supportMessage)

      RETURN Review()

      RETURN Review("pengguna pada daftar tonton")

      RETURN Review("user on watch list", "do not escalate")

      Tantangan(String challengeType)

      Jenis ini menentukan keputusan Tantangan dan jenis tantangan. Ini juga dapat mencakup alasan tantangan dan pesan pendukung lainnya.

      Kelebihan beban:

      • Tantangan(String challengeType, Alasan string)
      • Challenge(String challengeType, Alasan string, String supportMessage)

      Return Challenge ("SMS")

      RETURN Challenge ("SMS", "suspected bot")

      RETURN Challenge ("SMS", bot yang dicurigai", "jangan mengeskalasi")

      Fungsi pengamatan

      Fungsi pengamatan dapat digunakan untuk mengambil data dari konteks saat ini dan menulisnya di tempat lain.

      Tipe hasil Deskripsi Contoh
      Output(k=v) Fungsi ini dapat digunakan untuk meneruskan pasangan kunci-nilai ke bagian CustomProperties dari respons API. Pasangan kunci-nilai akan disarangkan dalam objek yang namanya akan sama dengan nama klausul yang berisi pernyataan Output(). Output(key="test", email=@"user.email", countryRegion=Geo.CountryRegion(@"device.ipAddress"))
      Trace(k=v) Fungsi ini dapat digunakan untuk memicu peristiwa Pelacakan dan mengirim pasangan kunci-nilai ke namespace Layanan Pelacakan Peristiwa FraudProtection.Trace.Rule. Trace(key="Manual Review", ip=@"device.ipAddress")
      SetResponse(String sectionName, k=v) Fungsi ini dapat digunakan untuk meneruskan pasangan kunci-nilai ke bagian CustomProperties dari respons API. sectionName adalah parameter opsional yang dapat dilewati. Fungsi ini hanya dapat digunakan dalam Tindakan Pasca Keputusan; tidak tersedia dalam Aturan Keputusan

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

      SetResponse(test="123")

      Response.Decision() Fungsi ini mereferensikan keputusan untuk penilaian saat ini yang sedang dievaluasi. Response.Decision() == "Setujui"

      Fungsi agregasi

      Fungsi Deskripsi Contoh
      Count() Fungsi ini mengembalikan berapa kali peristiwa terjadi. SELECT Count() AS numPurchases
      DistinctCount(Kunci string) Fungsi ini mengembalikan jumlah nilai yang berbeda untuk properti yang ditentukan. Jika properti yang ditentukan null atau kosong untuk peristiwa masuk, peristiwa tidak berkontribusi pada agregasi. SELECT DistinctCount(@"device.ipAddress") AS distinctIPs
      Jumlah(Nilai ganda) Fungsi ini mengembalikan jumlah nilai untuk properti numerik tertentu. SELECT Sum(@"totalAmount") AS totalSpending

      Operator logis

      Operator Deskripsi Contoh
      dan (&&) Logika Dan

      Model.Risk(). Skor > 500 && Model.Risk(). Skor < 800

      Model.Risk(). Skor > 500 dan Model.Risk(). Skor < 800

      atau (||) Logika atau

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

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

      not Negasi logis @"email.isEmailUsername" not(!) @"email.isEmailUsername"

      Operator perbandingan

      Perlindungan Penipuan mendukung semua perbandingan C# standar dan operasi kesetaraan. Tabel ini mencakup beberapa contoh operator yang mungkin berguna bagi Anda. Jika Anda menerapkan operator ini ke string, perbandingan leksikografis terjadi.

      Operator Deskripsi Contoh
      == Operator ini memeriksa kesetaraan. @"user.countryRegion" == @"shippingAddress.countryRegion"
      != Operator ini memeriksa ketidaksamaan. @"user.countryRegion" != @"shippingAddress.countryRegion"
      > Operator ini memeriksa apakah nilai pertama lebih besar dari nilai kedua. Model.Risk(). Skor > 500
      < Operator ini memeriksa apakah nilai pertama kurang dari nilai kedua. Model.Risk(). Skor < 500
      >= Operator ini memeriksa apakah nilai pertama lebih besar dari atau sama dengan nilai kedua. Model.Risk(). Skor >= 500
      <= Operator ini memeriksa apakah nilai pertama kurang dari atau sama dengan nilai kedua. Model.Risk(). Skor <= 500
      X ? Y : Z Operator ini memeriksa apakah kondisi X benar atau tidak. Jika benar, pernyataan Y dijalankan dan hasilnya dikembalikan. Jika tidak, pernyataan Z dijalankan dan hasilnya dikembalikan. Beberapa pemeriksaan logis juga dapat digabungkan bersama-sama menggunakan tanda kurung siku, untuk menentukan logika IF <> THEN <> ELSE <> berlapis LET $riskbucket = Model.Risk(). Skor > 500? "Tinggi" : (Model.Risk(). Skor > 300? "Sedang" : "Rendah")

      Fungsi matematika

      Perlindungan Penipuan mendukung semua metode matematika C# standar dan operator aritmatika. Tabel ini mencakup beberapa contoh metode yang mungkin berguna bagi Anda.

      Operator Deskripsi Contoh
      Math.Min(Nilai ganda1, Nilaiganda 2) Operator ini menghitung minimal dua nilai. Math.Min(Model.Risk(). Skor, Model.Bot(@"deviceFingerprinting.id"). Skor)
      Math.Max(Nilai ganda1, Nilaiganda 2) Operator ini menghitung maksimum dua nilai. Math.Max(Model.Risk(). Skor, Model.Bot(@"deviceFingerprinting.id"). Skor)
      RandomInt(Integer min, Integer max) Operator ini mengembalikan bilangan bulat acak dalam rentang yang disediakan, termasuk nilai minimum dan tidak termasuk nilai maksimum. RandomInt(0, 100)

      Operator DateTime

      Perlindungan Penipuan mendukung properti, metode, dan operator DateTime C# standar. Tabel ini mencakup beberapa contoh fungsi dan properti yang mungkin berguna bagi Anda.

      Operator Deskripsi Contoh
      UtcNow Operator ini mendapatkan objek DateTime yang diatur ke tanggal dan waktu saat ini pada komputer, yang dinyatakan sebagai UTC. DateTime.UtcNow
      Hari Ini Operator ini mendapatkan objek yang diatur ke tanggal saat ini, di mana komponen waktu diatur ke 00:00:00. DateTime.Today
      Pengurangan Operator ini mengembalikan DateTime baru dengan mengurangi tanggal dan waktu tertentu dari DateTime input. DateTime.UtcNow.Subtract(@var1. ToDateTime())
      DaysSince(TanggalWaktu) Operator ini mengembalikan bilangan bulat yang menunjukkan jumlah hari yang diteruskan antara nilai DateTime yang ditentukan dan tanggal saat ini (dinyatakan sebagai Waktu Universal Terkoordinasi [UTC]). DaysSince(@"user. CreationDate")
      Tahun Operator ini mendapatkan komponen tahun dari tanggal yang diwakili oleh instans ini. @"user.creationDate". Tahun
      Tanggal Operator ini mendapatkan objek baru yang memiliki tanggal yang sama dengan instans ini, tetapi di mana nilai waktu diatur ke 00:00:00 (tengah malam). @"user.creationDate". Tanggal

      Mengetik operator pengecoran

      Untuk informasi tentang inferensi jenis, lihat bagian Jenis inferensi atribut nanti di artikel ini.

      Operator Deskripsi Contoh
      Convert.ToDateTime

      Operator ini mengonversi string menjadi datetime dan mengonversi datetime menjadi string menggunakan format yang diberikan.

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

      Operator ini mengonversi nilai yang ditentukan menjadi Int32.

      Convert.ToInt32(@var)
      Convert.ToDouble

      Operator ini mengonversi nilai yang ditentukan menjadi Ganda.

      Convert.ToDouble(@var)

      Fungsi string

      Perlindungan Penipuan mendukung kelas string C# standar. Tabel ini mencakup beberapa contoh fungsi dan operator yang mungkin berguna bagi Anda.

      Operator Deskripsi Contoh
      StartsWith() Operator ini memeriksa apakah string dimulai dengan awalan yang ditentukan. @"user.phoneNumber". StartsWith("1-")
      EndsWith() Operator ini memeriksa apakah string diakhiri dengan akhiran tertentu. @"user.email". EndsWith("@contoso.com")
      IsNumeric() Operator ini memeriksa apakah string adalah nilai numerik. @"user.email". IsNumeric()
      Panjang

      Operator ini mengembalikan jumlah karakter dalam string.

      @"user.username". Panjangnya
      ToDateTime() Operator ini mengonversi string menjadi objek DateTime . @"user.creationDate". ToDateTime()
      ToDouble() Operator ini mengonversi string menjadi nilai Ganda . @"productList.purchasePrice". ToDouble()
      ToInt32() Operator ini mengonversi string menjadi nilai Int32 . @"zipcode". ToInt32()
      ToUpper() Operator ini mengembalikan salinan string ini yang dikonversi ke huruf besar. @"user.username". ToUpper()
      ToLower() Operator ini mengembalikan salinan string ini yang dikonversi ke huruf kecil. @"user.username". ToLower()
      IndexOf() Operator ini melaporkan indeks berbasis nol dari kemunculan pertama substring tertentu dalam string yang ditentukan. @"user.username". IndexOf("@")
      LastIndexOf() Operator ini melaporkan indeks berbasis nol dari kemunculan terakhir substring tertentu dalam string yang ditentukan. @"user.username". LastIndexOf("@")
      Substring() Operator ini mengembalikan substring yang dimulai dari indeks berbasis nol dalam string, dengan parameter opsional kedua yang menentukan panjang substring yang diinginkan @"user.username". Substring(0,5)
      IsNullOrEmpty() Operator ini mengembalikan jika string yang ditentukan null atau kosong. Mengembalikan false jika tidak. @"user.username". IsNullOrEmpty()
      IgnoreCaseEquals() Operator ini mengembalikan true jika kedua string sama, terlepas dari perbedaan casing. Mengembalikan false jika tidak. @"user.username". IgnoreCaseEquals(@"user.email")
      Contains() Operator ini memeriksa apakah string berisi string lain. @"productList.productName". Contains("Xbox")
      ContainsOnly() Operator ini memeriksa apakah string hanya berisi charset yang disediakan. @"zipcode". ContainsOnly(CharSet.Numeric)
      ContainsAll() Operator ini memeriksa apakah string berisi semua charset yang disediakan. @"zipcode". ContainsAll(CharSet.Numeric|CharSet.Hyphen)
      ContainsAny() Operator ini memeriksa apakah string berisi salah satu charset yang disediakan. @"zipcode". ContainsAny(CharSet.Numeric|CharSet.Hyphen)

      Menggunakan CharSet di ContainsOnly, ContainsAll, dan ContainsAny

      Tipe karakter berikut dapat digunakan dalam ContainsOnly, ContainsAll, dan ContainsAny.

      Tipe Karakter Deskripsi
      Abjad a-z, A-Z
      Apostrof '
      Asperand @
      Garis miring terbalik \
      Koma ,
      Tanda hubung -
      Numerik 0-9
      Periode .
      Garis miring /
      Garis bawah _
      Spasi Spasi tunggal

      Fungsi deteksi gibberish

      Fungsi-fungsi ini membantu mencegah penipuan dengan mendeteksi dengan cepat dan efisien apakah bidang input pengguna utama (seperti nama dan alamat) berisi gibberish.

      Fungsi Deskripsi Contoh
      GetPattern(String).maxConsonants Jumlah maksimum konsonan bersebelahan dalam string yang tidak dipisahkan oleh vokal. Misalnya, maxConsonants untuk string "01gggyturah" adalah 5. GetPattern(@"user.email").maxConsonants
      GetPattern(String).gibberScore Skor berbasis ML antara 0 dan 1; 0 berarti kemungkinan besar menjadi omong kosong dan 1 berarti kemungkinan besar menjadi omong kosong. GetPattern(@"user.email").gibberScore

      Catatan

      Model deteksi Gibberish didasarkan pada frekuensi dua karakter alfanumerik berturut-turut dalam dokumen bahasa Inggris yang tersedia untuk umum. Diasumsikan bahwa dua karakter alfanumerik yang lebih sering berturut-turut muncul di dokumen publik, lebih kecil kemungkinannya adalah omong kosong. Model harus memberikan skor yang wajar untuk teks bahasa Inggris, dan dapat digunakan untuk mendeteksi apakah nama atau alamat berisi gibberish. Namun, model mungkin tidak cocok untuk singkatan, seperti bentuk pendek untuk status (AZ, TX, dll.) dan juga tidak dapat digunakan untuk memvalidasi nama atau alamat. Terakhir, model belum diuji untuk teks non-bahasa Inggris.

      Fungsi deteksi pola

      Fungsi-fungsi ini membantu mencegah penipuan dengan mendeteksi dengan cepat dan efisien apakah bidang input pengguna utama (seperti nama dan alamat) berisi gibberish.

      Fungsi Deskripsi Contoh
      Patterns.IsRegexMatch(pola string, sumber string) Melakukan kecocokan Ekspresi Reguler (regex) pola string terhadap sumber String. Hasilnya adalah boolean, yaitu benar (menunjukkan string yang diberikan cocok dengan pola) atau salah (menunjukkan tidak ada kecocokan) Patterns.IsRegexMatch("^.com$", @ "user.email") Patterns.IsRegexMatch( "^.[aAeEiIoOuU]+.*$", @ "user.firstname")

      Catatan

      • Pola string harus berupa input konstanta.
      • Fungsi mengembalikan false (hasil default) jika waktu evaluasi melebihi 10 milidetik.
      • Semua batasan yang tidak mendukung NonBacktracking juga berlaku untuk Fungsi IsRegexMatch.

      Fungsi model

      Fungsi model menjalankan berbagai model penipuan dan berguna ketika penilaian Anda tidak secara otomatis menjalankan satu atau beberapa model penipuan. Saat fungsi model berjalan, informasi tentang model yang berjalan selama evaluasi aturan adalah output dalam panggilan API penilaian penipuan. Kemudian, aturan mendapatkan akses ke hasil model, termasuk skor, alasan, dan banyak lagi, yang dapat digunakan untuk pemrosesan aturan lebih lanjut dan pengambilan keputusan.

      Jenis model Deskripsi Contoh
      Risiko Menilai kemungkinan sesi berisiko. Model.Risk()
      Bot Menilai kemungkinan sesi diinisiasi bot. Berikan ID konteks perangkat yang dikirim ke solusi sidik jari perangkat Perlindungan Penipuan. Model.Bot(@deviceContextId)

      Fungsi geografis

      Fungsi geografis memberikan resolusi dengan mengonversi alamat IP ke alamat geografis. Fungsi geo dapat dipanggil dalam aturan hanya dengan menggunakan IP yang merupakan bagian dari payload transaksi atau dikumpulkan oleh Perlindungan Penipuan dengan menggunakan Sidik Jari Perangkat. Fungsi geografis tidak dapat dipanggil untuk nilai IP arbitrer.

      Operator Deskripsi Contoh
      Geo.RegionCode(String ip)

      Operator ini mengonversi alamat IPv4 ke kode wilayah AS-nya (yaitu singkatan untuk nama negara bagian atau wilayah AS).

      Misalnya, untuk alamat IP di negara bagian Washington, "WA" dikembalikan.

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

      Operator ini mengonversi alamat IPv4 ke wilayah AS-nya (yaitu, nama negara bagian atau wilayah AS).

      Misalnya, untuk alamat IP di negara bagian Washington, "Washington" dikembalikan.

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

      Operator ini mengonversi alamat IPv4 ke kode negara/wilayahnya.

      Misalnya, untuk alamat IP di Australia, "AU" dikembalikan.

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

      Operator ini mengonversi alamat IP menjadi nama wilayah.

      Misalnya, untuk alamat IP di Australia, "Australia" dikembalikan.

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

      Operator ini mengonversi alamat IPv4 menjadi nama kota.

      Misalnya, untuk alamat IP di New York City, "New York City" dikembalikan.

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

      Operator ini mengonversi alamat IPv4 ke kode pasar alamat IP.

      Misalnya, untuk alamat IP dari Kanada, "NA" (Amerika Utara) dikembalikan.

      Geo.MarketCode(@"device.ipAddress")

      Fungsi atribut perangkat

      Operator Deskripsi Contoh
      Device.GetFullAttributes(String sessionId) Mengembalikan sekumpulan atribut perangkat lengkap untuk sesi sidik jari perangkat yang ditentukan. Lihat Menyiapkan sidik jari perangkat untuk melihat set lengkap atribut perangkat Device.GetFullAttributes(@"deviceFingerprinting.id")
      Device.GetAttributes(String sessionId) Mengembalikan subset atribut perangkat yang lebih kecil untuk sesi sidik jari perangkat yang ditentukan. Subset adalah daftar yang dikumpulkan oleh Perlindungan Penipuan dan berisi atribut yang paling umum digunakan. Device.GetAttributes(@"deviceFingerprinting.id")
      Device.GetSelectedAttributes(String sessionId, String attributeName) Mengembalikan hingga 20 atribut perangkat untuk sesi sidik jari perangkat yang ditentukan. Daftar atribut yang diinginkan akan ditentukan sebagai parameter yang dipisahkan koma Device.GetSelectedAttributes(@"deviceFingerprinting.id", "deviceAsn","deviceCountryCode")
      Device.GetSpeedOfTravel(String sessionId) Mengembalikan kecepatan perjalanan maksimum perangkat dalam mil per jam. Perlindungan Penipuan menentukan kecepatan maksimum dengan mengambil lima sesi sidik jari berturut-turut terakhir dan menghitung kecepatan perangkat dari sesi ke sesi, mengembalikan maksimum. Perangkat diidentifikasi melalui sesi menggunakan ID cookie. Device.GetSpeedOfTravel(@"deviceFingerprinting.id")

      Fungsi Pencarian BIN

      Fungsi Pencarian BIN menyediakan informasi akun kartu pembayaran (misalnya, jaringan kartu, jenis kartu, kode negara kartu, kategori kartu) berdasarkan nomor identifikasi bank (BIN). Data untuk Pencarian BIN bersumber dari penyedia data BIN pihak ketiga terkemuka lalu dikurasi oleh Perlindungan Penipuan.

      Operator Deskripsi Contoh
      BIN. Pencarian(String BIN).cardNetwork

      Fungsi ini mencari BIN dan mengembalikan jaringan kartu (misalnya, Visa, Mastercard).

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

      Operator ini mencari BIN dan mengembalikan jenis kartu (misalnya, Debit, Kredit).

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

      Operator ini mencari BIN dan mengembalikan organisasi penerbit.

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

      Operator ini mencari BIN dan mengembalikan kode negara dua huruf ISO dari kartu.

      BIN. Lookup(@"card.bin").countryCode
      BIN. Pencarian(String BIN).cardCategory

      Operator ini mencari BIN dan mengembalikan kategori kartu (misalnya, Prabayar, Perusahaan, Hadiah).

      BIN. Pencarian(@"card.bin").cardCategory
      BIN. Pencarian(STRING BIN).error

      Operator ini mencari BIN dan mengembalikan pesan kesalahan jika BIN tidak dapat ditemukan.

      BIN. Pencarian(@"card.bin").error

      Fungsi daftar

      Perlindungan Penipuan memungkinkan Anda mengunggah daftar kustom dan mereferensikannya dalam bahasa tersebut. Untuk informasi tentang cara mengunggah daftar ini, lihat Mengelola daftar. Untuk informasi selengkapnya tentang cara menggunakan daftar dalam aturan, lihat bagian Menggunakan daftar di aturan nanti di artikel ini.

      Operator Deskripsi Contoh
      ContainsKey(
      String listName,
      String columnName,
      Kunci string)
      Operator ini memeriksa apakah kunci terkandung dalam kolom yang ditentukan dalam daftar Perlindungan Penipuan.

      Contoh di kolom berikutnya memeriksa apakah kolom "Email" di daftar "Daftar Dukungan Email" berisi variabel @"user.email ".

      ContainsKey("Daftar Dukungan Email", "Email", @"user.email")
      Pencarian(
      String listName,
      String keyColName,
      String valueColName)
      Operator ini mencari nilai kunci dalam daftar Perlindungan Penipuan. Nama kolom yang berisi kunci dan nama kolom yang berisi nilai harus ditentukan.

      Nilai selalu dikembalikan sebagai string. Jika kunci tidak ditemukan, dan jika parameter defaultValue tidak ditentukan, "Tidak diketahui" dikembalikan.

      Contoh di kolom berikutnya mencari nilai variabel @"user.email" di kolom Email daftar Daftar Dukungan Email. Jika kecocokan ditemukan, fungsi mengembalikan nilai kolom Status dari baris yang cocok dalam daftar. Jika kecocokan tidak ditemukan, fungsi mengembalikan 0.

      Pencarian("Daftar Dukungan Email", "Email", @"user.email", "Status",0)
      Dalam Operator ini memeriksa apakah kunci terkandung dalam daftar nilai yang dipisahkan koma. In(@"user.countryRegion", "US, MX, CA")
      InSupportList Operator ini memeriksa apakah atribut ada di Daftar Dukungan. InSupportList('Daftar Dukungan Email', @"user.email")
      IsSafe Operator ini memeriksa apakah entitas ditandai sebagai Aman pada Daftar Dukungan. IsSafe('Daftar Dukungan Email', @"user.email")
      IsBlock Operator ini memeriksa apakah entitas ditandai sebagai Blokir pada Daftar Dukungan. IsBlock('Daftar Dukungan Email', @"user.email")
      IsWatch Operator ini memeriksa apakah entitas ditandai sebagai Tonton di Daftar Dukungan. IsWatch('Daftar Dukungan Email', @"user.email")

      Menggunakan daftar dalam aturan

      Anda dapat menggunakan operator ContainsKey dan Lookup untuk mereferensikan daftar yang Anda unggah ke Perlindungan Penipuan. Untuk informasi selengkapnya tentang daftar, lihat Mengelola daftar.

      ContainsKey

      Untuk memeriksa apakah salah satu daftar Anda berisi nilai tertentu, gunakan operator ContainsKey . Tentukan nama daftar, kolom, dan kunci yang ingin Anda periksa.

      Misalnya, Anda mengunggah daftar kolom tunggal alamat email berisiko dan menamainya daftar email Riskan.

      Email
      Kayla@contoso.com
      Jamie@bellowscollege.com
      Marie@atatum.com

      Anda kemudian dapat menggunakan sintaks berikut untuk menolak semua transaksi dari alamat email berisiko dalam daftar ini.

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

      Klausa ini memeriksa apakah kolom "Email" di daftar "Daftar email berisiko" berisi kunci @email . Jika ya, transaksi ditolak.

      Pencarian

      Untuk daftar multi-kolom, Anda dapat menggunakan operator Pencarian untuk memeriksa nilai kolom untuk kunci tertentu.

      Misalnya, Anda membuat daftar yang memiliki satu kolom untuk alamat email dan kolom lain yang menunjukkan status alamat email tersebut. Anda menamai daftar ini Daftar Email.

      Email Status
      Kayla@contoso.com Riskan
      Jamie@bellowscollege.com Riskan
      Marie@atatum.com Riskan
      Camille@fabrikam.com Aman
      Miguel@proseware.com Aman
      Tyler@contoso.com Aman

      Anda kemudian dapat menggunakan sintaks berikut untuk menolak semua transaksi dari alamat email dalam daftar ini yang memiliki status Berisiko.

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

      Klausa ini mencari kunci @"user.email" di kolom "Email" di daftar "Daftar Email" dan memeriksa apakah nilai di kolom "Status" berisiko. Jika ya, transaksi ditolak.

      Jika kunci @"user.email" tidak ditemukan dalam daftar, Perlindungan Penipuan mengembalikan "Tidak Diketahui."

      Anda juga dapat menentukan nilai default Anda sendiri sebagai parameter kelima. Untuk informasi selengkapnya, lihat bagian Operator logis sebelumnya di artikel ini.

      Operator Pencarian selalu mengembalikan nilai String . Untuk mengonversi nilai ini menjadi nilai Int, Double, atau DateTime , gunakan operator transmisi jenis.

      Menggunakan panggilan eksternal, penilaian eksternal, dan kecepatan

      Ketik inferensi atribut

      Jenis variabel disimpulkan dari konteks tempat mereka digunakan. Berikut adalah beberapa contoh:

      • Dalam ekspresi WHEN @isEmailValidated, variabel ditafsirkan sebagai nilai Boolean .
      • Dalam ekspresi Model.Risk(). Skor > 500, variabel ditafsirkan sebagai nilai Ganda .
      • Dalam ekspresi @"user.creationDate". Tahun < DateTime.UtcNow.Year, variabel ditafsirkan sebagai nilai DateTime .

      Jika tidak ada konteks yang cukup untuk menyimpulkan jenis variabel, itu dianggap sebagai nilai String . Misalnya, dalam ekspresi Model.Risk(). Menilai < Model.Bot(@"deviceFingerprinting.id"). Skor, kedua variabel ditafsirkan sebagai string.

      Untuk menentukan jenis variabel nonstring, gunakan operator pengecoran jenis.

      Array dan objek JSON

      FQL memiliki dukungan untuk pembangunan objek terstruktur kompleks sebagai variabel lokal, yang dapat diteruskan ke panggilan eksternal atau penilaian eksternal dalam bentuk JSON. Seperti halnya semua lokal lain di FQL, array dan objek tidak dapat diubah setelah dibuat.

      Array JSON

      Array dibuat dengan mengapit ekspresi dalam sepasang tanda kurung:

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

      Objek JSON

      Objek dibuat dengan kurung kurawal:

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

      Fungsi FQL untuk array dan objek JSON

      Sintaks Deskripsi Contoh
      myArr[0] Anda dapat menggunakan sintaks ini untuk mengakses elemen array tertentu dengan indeksnya. myArr [0].property
      myArr [0][0]
      myArr [0][0].property
      myArr [0].property[0]
      myArr [0].property[0].property

      Di mana myArr, dalam contoh di atas, adalah array. Sumber array ini dapat berupa @@payloadProperty, respons penilaian eksternal, respons panggilan eksternal, variabel lokal, atau variabel global.

      Berikut ini adalah contoh cara menggunakan sintaks berdasarkan sumber array yang berbeda:

      • Sumber array: Payload
      LET $sample = @@"myArr[0]".AsJsonArray()   
      RETURN Approve()   
      WHEN $sample[0].AsString() == "a"
      
      • Sumber array: Variabel lokal
        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" 
        
      Sintaks Deskripsi Contoh
      Array.GetValue (TargetArray . AsJsonArray(), matchKey, matchValue, lookupKey) Dengan fungsi ini, Anda dapat mengakses elemen array pertama yang cocok dengan kondisi.

      Mengembalikan nilai

      Array.GetValue(@@"payloadProperty". AsJsonArray(), matchKey, matchValue, lookupKey)
      Array.GetValues(TargetArray . AsJsonArray(), matchKey, matchValue) Dengan fungsi ini, Anda dapat mengakses sekumpulan elemen array yang cocok dengan kondisi.

      Mengembalikan array

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

      Berikut ini adalah beberapa contoh yang lebih rinci tentang cara menggunakan sintaks di atas berdasarkan sumber array yang berbeda:

      Sumber Array Array.GetValue Array.GetValues
      Penilaian eksternal LET $a = Assessments.myAssessment.evaluate()
      LET $sample = Array.GetValue($a.ruleEvaluations.AsJsonArray(), "rule", "Sample Payload Generation", "clauseNames")
      RETURN Approve()
      WHEN $sample[0]. AsString() == "TestData"
      LET $a = Assessments.myAssessment.evaluate()
      LET $sample = Array.GetValues($a.ruleEvaluations.AsJsonArray(), "rule", "Sample Payload Generation")
      RETURN Approve()
      WHEN $sample[0].clauseNames[0]. AsString() == "TestData"
      Payload Sampel payload: {"group":[{"item1": "a", "item2": "a1"}, {"item1": "b", "item2": "b1"}]}

      LET $sample = Array.GetValue(@@"group". AsJsonArray(), "item1", "a", "item2")
      RETURN Approve()WHEN $sample. AsString() == "a1"
      Sampel payload: { "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"

      Variabel global Menggunakan sampel payload yang sama seperti di atas

      Do SetVariables(Var=@@"group")
      LET $group = GetVariable("Var"). AsJsonObject()
      LET $value = Array.GetValue($group, "item1", "a", "item2")
      RETURN Approve()
      WHEN $value. AsString() == "a1"
      Menggunakan sampel payload yang sama seperti di atas

      Do SetVariables(Var=@@"group")
      LET $group = GetVariable("Var"). AsJsonObject()
      LET $arr = Array.GetValues($group. AsJsonArray(), "item1", "a")
      RETURN Approve()
      Panggilan eksternal

      Respons panggilan eksternal (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"

      Respons panggilan eksternal (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"

      Pengecoran jenis untuk array dan objek JSON

      • Berikut ini . Sebagai<Type>() didukung dari JsonObject:

        • AsString()
        • AsInt()
        • AsDouble()
        • AsDateTime()
        • AsBool()
        • AsJsonArray()
        • AsJsonObject()
      • Saat Anda menggunakan salah satu dari dua metode pembantu array, Array.GetValue atau Arrays.GetValues, Anda perlu mengetik cast menggunakan . Sebagai<Type>(). Contoh:

        LET $arr = {myArr:[{item1: "red", number: 45}, {item1: "blue", number: 56}, {item1: "green", number: 33}]}
        LET $sample = Array.GetValues($arr.myArr.AsJsonArray(), "item1", "blue")
        
      • Setelah mengonversi data ke objek atau array JSON secara eksplisit, Anda dapat menggunakan . Sebagai<Type>() untuk dilemparkan ke jenis data yang berbeda, jika diperlukan. Contoh:

        RETURN Approve()
        WHEN $sample[0].number.AsInt() == 56
        
      • Saat Anda menggunakan @@, data secara implisit mengetik cast ke objek JSON. Jika Anda kemudian ingin mengonversi objek JSON ke jenis data yang berbeda, Anda harus menggunakan . Sebagai<Type>(). Contoh:

        LET $sample = @@”user.addresses”.AsJsonArray()
        
      • Ketika Anda ingin menghasilkan dalam format tertentu, Anda harus menggunakan . Sebagai<Type>(). Contoh:

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

      Catatan

      Praktik terbaik pengecoran jenis:

      • Selalu ketik cast di akhir rantai .
      • Ketika Anda tidak yakin, selalu ketik cast secara eksplisit menggunakan . Sebagai<Type>(). Contoh:
      LET $sample = External.myCall().data[0].Item1[0].AsJsonArray()
      
      Or
      
      LET $sample = @@”accommodations[0].rooms”.AsJsonArray()
      

      Fungsi yang tersedia dalam Tindakan Pasca Keputusan

      Fungsi berikut hanya dapat digunakan dalam Tindakan Pasca Keputusan. Mereka tidak tersedia dalam Aturan Keputusan

      Sintaks Deskripsi Contoh
      SetResponse(String sectionName, k=v) Fungsi ini dapat digunakan untuk meneruskan pasangan kunci-nilai ke bagian CustomProperties dari respons API. sectionName adalah parameter opsional yang dapat dilewati. SetResponse("Scores", bot = Model.Bot(@deviceContextId), risk=Model.Risk())

      SetResponse(test="123")

      Response.Decision() Fungsi ini mereferensikan keputusan untuk penilaian saat ini yang sedang dievaluasi. Response.Decision() == "Setujui"