Error txn_id duplikat
Gejala. Saat mengirim transaksi, respons berisi 400 dengan A transaction with this transaction_id already exists. pada kolom transaction_id, atau 409 ketika dua permintaan identik terjadi bersamaan.
Penyebab. txn_id (transaction_id yang Anda kirim) bersifat unik per aplikasi.
Didit menolak transaksi kedua dengan transaction_id yang sama dan tidak mengembalikan catatan yang sudah ada.
Solusi.
- Hasilkan
txn_idsecara deterministik di sisi Anda (misalnya, gunakan ID database transaksi Anda sendiri). - Jika menerima
400atau409untuktransaction_idduplikat saat mencoba lagi, cari transaksi yang sudah ada alih-alih mengirim ulang: baca denganGET /v3/transactions/{uuid}/menggunakanuuiddari respons pertama, atau gunakantransaction_id(uuid Didit) yang dibawa oleh webhooktransaction.createddi sampingtxn_idAnda. - Jika permintaan bukan percobaan ulang, berikan transaksi baru
transaction_id-nya sendiri.
Aturan tidak terpicu
Gejala. Anda membuat aturan yang seharusnya cocok, tetapi tidak ada transaksi yang menampilkannya dirule_runs[] dengan matched: true.
Penyebab dan solusi.
- Aplikasi berada dalam mode sandbox: aplikasi sandbox melewati evaluasi aturan, skrining AML, penagihan, serta webhook
transaction.createddantransaction.status.updated. Pertukaran Travel Rule tetap berjalan saat diaktifkan, terhadap Didit Test VASP, dan mengirimkan webhooktravel_rule.status.updatedyang ditandaienvironment: sandbox.rule_runsdikembalikan kosong dan skor tetap0, apa pun mode aturan Anda, dan transaksi tetapAPPROVEDkecuali transfer Travel Rule yang kedaluwarsa menerapkantimeout_outcomeAnda. Periksaenvironmentpada respons transaksi:"sandbox"berarti transaksi tidak pernah dievaluasi. Lihat Pemantauan Transaksi di sandbox untuk cara memvalidasi aturan sebelum digunakan di lingkungan produksi. - Mode aturan adalah
DISABLEDatauTEST: periksa Rules → [rule] → Mode. Hanya aturanACTIVEyang berkontribusi pada penilaian. AturanTESTtetap dievaluasi tetapi tidak memengaruhi status. - Filter scope mengecualikan transaksi: misalnya, scope yang diatur ke
transaction_type = financetidak akan cocok dengan transaksitravelRule. - Jendela agregasi lebih pendek dari yang diperlukan: aturan “20 transaksi dalam 30 hari” tidak akan cocok setelah hanya 15 transaksi.
- Kolom kondisi bernilai null: misalnya, aturan Anda memeriksa
counterparty.country_code, tetapi Anda tidak mengirim pihak lawan. - Konversi mata uang: ambang batas aturan diterapkan pada
amount_in_default_currency. Jika mata uang default aplikasi Anda berbeda dengan mata uang transaksi, jumlah yang dikonversi mungkin berada di bawah ambang batas.
Aturan terpicu pada semua transaksi
Gejala. Sebuah aturan terpicu pada 90%+ transaksi, dan antrean peninjauan Anda membludak. Penyebab. Kondisinya terlalu luas, atau ambang batasnya terlalu rendah. Solusi.- Tambahkan filter
scopeuntuk mempersempit cakupan (misalnya, hanya transaksi keluar, atau hanya jenis transaksi tertentu). - Naikkan ambang batas (jumlah dan frekuensi transaksi).
- Atur aturan ke mode
TESTselama seminggu, lalu analisisrule_runsuntuk melihat tingkat kecocokan dan perketat kondisi sebelum mengaktifkannya kembali.
Skrining kripto melewati batas waktu
Gejala. Transaksi selesai denganstatus: APPROVED, tetapi larik provider_results[] menampilkan status: FAILED untuk sebuah dompet, hash transaksi, atau penyedia skrining kripto.
Penyebab.
- API penyedia sempat tidak tersedia.
- Waktu kueri habis (biasanya sekitar 10 detik).
- Transaksi tidak pernah gagal karena masalah penyedia. Pengayaan dilakukan dengan upaya terbaik.
- Jika penyedia tertentu terus gagal, periksa halaman statusnya atau buka tiket dukungan.
- Pertimbangkan mengonfigurasi preferensi penyedia di Settings → Transaction Monitoring → Providers untuk mengarahkan permintaan ke penyedia alternatif.
Pengayaan IP tidak ada
Gejala.applicant.ip_enrichment pada transaksi tidak ada atau tidak lengkap.
Penyebab.
- Tidak ada
applicant.device.ipdalam permintaan. - IP bersifat privat atau dicadangkan (tidak dapat dirutekan).
- Semua penyedia pengayaan sementara tidak tersedia.
- Ambil IP pengirim di klien atau server Anda, dan sertakan pada setiap transaksi.
- Gunakan hanya IP yang dapat dirutekan. Didit melewati rentang privat tanpa pemberitahuan.
- Periksa Settings → Status di konsol untuk melihat status kesehatan penyedia.
Tanda tangan webhook tidak cocok
Gejala. Endpoint Anda menolak event karena tanda tangannya tidak cocok. Penyebab.- Body mentah permintaan telah diubah (JSON di-stringify ulang dengan spasi yang berbeda).
- Rahasia yang salah.
- Beberapa tujuan dengan URL yang sama. Tanda tangan berbeda untuk setiap tujuan.
- Tanda tangani body permintaan mentah, bukan JSON yang sudah diurai. Banyak kerangka kerja menyediakan middleware raw-body.
- Rotasi rahasia jika bocor: Webhook destinations → [destination] → Rotate secret.
- Gunakan satu tujuan per URL untuk menghindari kebingungan rahasia.
Webhook tidak diterima
Gejala. Transaksi dibuat, tetapi webhook tidak pernah sampai. Penyebab.enabledpada tujuan bernilaifalse.- URL tidak dapat dijangkau secara publik.
- Tujuan dinonaktifkan otomatis setelah kegagalan berulang.
- Event tidak ada di
subscribed_events.
- Kirim event uji: Webhook destinations → [destination] → Send test.
- Periksa pengiriman terbaru: Webhooks → [destination] → Deliveries. Lihat respons 4xx/5xx beserta body dan header-nya.
- Aktifkan kembali tujuan yang dinonaktifkan.
Konversi mata uang tampak salah
Gejala.amount_in_default_currency tidak sesuai dengan kurs yang Anda harapkan.
Penyebab.
- Kurs FX adalah kurs pasar tengah pada
txn_date. - Transaksi dengan tanggal mundur menggunakan kurs historis pada tanggal tersebut.
- Beberapa mata uang (FX eksotis) memiliki interval pembaruan yang lebih jarang.
- Gunakan
amountdancurrency(asli) untuk tampilan. - Gunakan
amount_in_default_currencyhanya untuk penerapan ambang batas aturan internal. - Untuk audit, catatan transaksi mencatat kurs konversi yang digunakan pada saat evaluasi.
Counterparty tidak cocok dengan daftar blokir saya
Gejala. Anda sudah memasukkan bisnis ke daftar blokir menggunakanvendor_data, tetapi transaksi dengan pihak lawan tersebut tetap berhasil.
Penyebab.
- Pihak lawan dalam payload transaksi tidak memiliki
vendor_data, sehingga data disimpan sebagai snapshot eksternal. - Penulisan huruf besar dan kecil pada
vendor_databerbeda.
- Selalu kirimkan
counterparty.vendor_datajika pihak lawan adalah entitas di platform Anda. - Gunakan penulisan huruf yang sama di semua tempat.
vendor_databersifat peka huruf besar-kecil.
Transaksi AWAITING_USER tertahan
Gejala. Transaksi tertahan diAWAITING_USER karena pengguna tidak pernah menyelesaikan sesi remediasi.
Penyebab.
- Pengguna tidak membuka URL sesi remediasi.
- Sesi remediasi sudah kedaluwarsa.
- Transaksi merupakan transfer Travel Rule yang dipindahkan ke
AWAITING_USERoleh aturan library, sepertitravel-rule-pending-action. Didit tidak membuat sesi remediasi default untuk transaksi Travel Rule, sehingga kecuali aturan tersebut menentukan alur kerja remediasinya sendiri, tidak ada tautan yang bisa dikirimkan.
remediation_session_urlpada respons transaksi adalah tautan yang harus dikirimkan. Kirim ulang tautan tersebut kepada pengguna.- Untuk transaksi Travel Rule, selesaikan transfer dari tab Travel Rule, lalu ubah status transaksi secara manual. Menyelesaikan transfer saja tidak otomatis memindahkan transaksi keluar dari
AWAITING_USER. - Sesi remediasi mengikuti pola yang sama dengan panduan mulai cepat KYC. Berlangganan webhook penyelesaian.
- Atur batas waktu di sistem Anda sendiri agar transaksi yang tidak lagi aktif kedaluwarsa jika remediasi tidak pernah selesai.
Batas laju saat membuat transaksi
Gejala.429 Too Many Requests muncul saat lonjakan trafik yang besar.
Solusi.
- Patuhi header
Retry-After. - Batasi laju permintaan di sisi klien saat terjadi lonjakan trafik.
- Hubungi dukungan untuk meminta batas yang lebih tinggi berdasarkan volume produksi yang sudah terbukti.
Langkah berikutnya
Panduan integrasi
Pola integrasi lengkap.
Aturan
Cara kerja evaluasi aturan.
Webhook
Mekanisme webhook.