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
- Mereferensikan atribut dan variabel
- Menentukan variabel Anda sendiri
- Fungsi Variabel Global
- Fungsi keputusan
- Fungsi pengamatan
- Fungsi agregasi
- Operator logis
- Operator perbandingan
- Fungsi matematika
- Fungsi DateTime
- Mengetik operator pengecoran
- Fungsi string
- Fungsi deteksi gibberish
- Fungsi deteksi pola
- Fungsi model
- Fungsi geografis
- Fungsi atribut perangkat
- Fungsi Pencarian BIN
- Mencantumkan fungsi
- Menggunakan daftar dalam aturan
- Menggunakan panggilan eksternal, penilaian eksternal, dan kecepatan
- Ketik inferensi atribut
- Array dan objek JSON
- Fungsi yang tersedia dalam Tindakan Pasca Keputusan
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>) |
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:
|
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:
|
RETURN Review() 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 SELECT DistinctCount(@"purchaseId") |
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:
|
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:
|
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:
|
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:
|
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.
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.
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
- Untuk mereferensikan panggilan eksternal, ketik Eksternal, diikuti dengan panggilan eksternal yang ingin Anda referensikan. Untuk informasi selengkapnya, lihat Menggunakan panggilan eksternal dalam aturan.
- Untuk mereferensikan penilaian eksternal, ketik Penilaian, diikuti dengan penilaian eksternal yang ingin Anda referensikan. Untuk informasi selengkapnya, lihat Menggunakan penilaian eksternal dalam aturan.
- Untuk mereferensikan kecepatan, ketik Kecepatan, diikuti dengan kecepatan yang ingin Anda referensikan. Untuk informasi selengkapnya, lihat Menggunakan kecepatan dalam aturan.
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"}]} |
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" |