Bird vs Prelude
Bird vs Prelude untuk Verify
Prelude dibangun di sekitar keputusan risiko yang bisa Anda gunakan sebagai percabangan, dan Bird tidak memiliki padanannya. Kedua API cukup mirip sehingga migrasi sebagian besar hanya penggantian nama. Halaman ini membahas mana dari dua fakta tersebut yang lebih penting untuk apa yang sedang Anda bangun.
Keunggulan Prelude.
Perbedaan Bird.
Keunggulan Prelude
Keputusan yang bisa Anda gunakan sebagai percabangan. Panggilan create menerima sinyal IP, perangkat, dan sidik jari lalu menjawab dengan keputusan routing berupa success, retry, challenged, blocked, atau shadow_blocked, disertai alasan saat menolak. Respons create Bird hanya berisi verifikasi itu sendiri: tidak ada keputusan, tidak ada objek sinyal, dan tidak ada shadow block. Proses pendaftaran yang bergantung pada keputusan tersebut harus membuatnya sebelum memanggil Bird.
Channel yang tidak dijangkau Bird. Panggilan suara, RCS, Viber, Zalo, dan autentikasi jaringan senyap, di 230+ negara. Kedua platform mendukung SMS, WhatsApp, dan Telegram, jadi kesenjangannya ada pada lima channel tersebut, bukan keseluruhan: nomor yang dijangkau Prelude melalui Viber atau Zalo akan fallback ke SMS di sini, yang merupakan pertanyaan tingkat pengiriman yang layak diukur dalam uji coba daripada baru ditemukan saat volume penuh.
Pesan dan fallback bisa Anda atur sendiri. Template dengan variabel, locale, sender ID Anda sendiri, dan kode kustom semuanya per-request, serta max_auto_fallbacks dan force_challenge mengatur eskalasi per panggilan. Di Bird, teks kode sandi milik Bird dan fallback mengikuti rencana channel negara; pengirim dikonfigurasi per channel, bukan per request, dan hanya email yang bisa menggunakan alamat Anda sendiri.
Perbedaan Bird
Pemeriksaan gagal menunjukkan jenis kegagalannya. Prelude menggabungkan kode salah dan percobaan habis ke dalam satu status gagal. Bird menjawab dengan alasan berupa incorrect_code, expired, atau attempts_exhausted, dan menyertakan attempts_remaining di sampingnya, sehingga layar bisa memberi tahu pengguna berapa percobaan tersisa tanpa perlu menghitungnya sendiri.
Event pengiriman adalah langganan workspace, bertanda tangan. Prelude mengirim ke callback_url yang Anda atur per verifikasi. Endpoint Bird didaftarkan sekali, masing-masing berlangganan ke tipe event yang diinginkan, dan setiap pengiriman ditandatangani sesuai Standard Webhooks, sehingga URL keluar dari body request dan penerima memiliki sesuatu untuk diverifikasi.
Agen bisa menjalankan alurnya. Server MCP ter-host Bird memberikan agen tiga alat verifikasi terhadap workspace nyata: memulai verifikasi, memeriksa kode, dan melanjutkan ke channel berikutnya. Server ini tidak bisa mengonfigurasi ulang kebijakan di baliknya, yang memang disengaja, bukan kelalaian.
Matriks
Perbandingan per kapabilitas.
Kedua API memiliki bentuk serupa, sehingga sebagian besar baris setara dan perbedaannya tipis. Baca baris safe-retries dibandingkan halaman Twilio Verify: ini keunggulan Bird di keduanya, karena tidak ada create yang mendokumentasikan idempotency key. Lapisan risiko Prelude adalah pengakuan di atas, bukan sebuah baris, karena Bird tidak memiliki apa pun untuk dibandingkan.
| Capability | Bird | Prelude | Who wins? |
|---|---|---|---|
| Request create | JSON ke /v1/verify/verifications dengan bearer key. Penerima adalah to.phone_number atau to.email, dan memanggil create lagi untuk penerima yang aktif akan mengulang, bukan memulai verifikasi baru. | JSON ke endpoint verifikasi v2 dengan bearer key. Penerima adalah target.type dan target.value, dan memanggil create lagi untuk penerima yang aktif akan mengulang dengan cara yang sama. | |
| Pengulangan aman | Header Idempotency-Key pada create membuat pengulangan menjadi aman. | Referensi create mereka tidak mendokumentasikan idempotency key maupun header khusus, sehingga pengulangan setelah timeout bisa mengeluarkan kode sandi kedua. dispatch_id bukan salah satunya: Prelude mendefinisikannya sebagai identifier dari dispatch yang berasal dari SDK front-end, yang memungkinkan lapisan fraud mereka mencocokkan sinyal yang ditangkap dengan verifikasi ini. | |
| Apa yang ditunjukkan pemeriksaan gagal | success bernilai false dengan alasan incorrect_code, expired, atau attempts_exhausted, dan attempts_remaining di sampingnya. | Status failure mencakup kode salah dan percobaan habis, dengan expired_or_not_found sebagai nilai terpisah. Kedua jenis kegagalan tidak dibedakan. | |
| Channel tempat kode sandi bisa diterima | Email, SMS, WhatsApp, dan Telegram. Voice diberi label Sedang diluncurkan, bukan sudah tersedia. | Campuran channel yang dipublikasikan meliputi SMS, voice, RCS, WhatsApp, Telegram, Viber, Zalo, dan autentikasi jaringan senyap, di 230+ negara, dengan fallback otomatis di antaranya. | |
| Event pengiriman | Webhook workspace yang berlangganan tipe event verify yang Anda tentukan, seperti verify.verification.verified dan verify.attempt.delivered, ditandatangani sesuai Standard Webhooks. | callback_url yang diatur per verifikasi pada request create, sehingga tujuan ikut serta di setiap panggilan. | |
| Kontrol fallback | Rencana channel negara menentukan urutan dan dijalankan secara otomatis, dengan timer pengiriman per-percobaan yang melanjutkannya saat tidak ada status pengiriman yang masuk. Panggilan next-channel juga bisa memajukan satu verifikasi sesuai permintaan. | max_auto_fallbacks dan force_challenge mengatur eskalasi pada request create itu sendiri. | |
| Server MCP ter-host | Tiga alat verifikasi di server ter-host di mcp.bird.com: memulai verifikasi, memeriksa kode, dan melanjutkan ke channel berikutnya. Konfigurasi tidak termasuk di dalamnya. | Prelude menerbitkan SDK backend untuk Node.js, Python, Go, Kotlin/Java, Ruby, PHP, dan C#, serta SDK frontend untuk Web, Android, iOS, React Native, dan Flutter, sehingga cerita agennya adalah pustaka yang dipanggil oleh runtime Anda sendiri. | |
| Panjang kode | options.code_length pada create, atau default workspace. | options.code_size pada create. |
Verifikasi yang sama
Memulai satu verifikasi.
Strukturnya cukup mirip sehingga ini sebagian besar hanya penggantian nama: target menjadi to dan code_size menjadi code_length. Yang tidak memiliki padanan di Bird adalah objek signals, dispatch_id di antara hal-hal yang mengisinya, dan tidak ada verdict pada respons untuk dijadikan percabangan. Yang hanya ada di sisi Bird adalah header Idempotency-Key.
Prelude
const signupId = crypto.randomUUID();
const response = await fetch("https://api.prelude.dev/v2/verification", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.PRELUDE_API_TOKEN}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
target: { type: "phone_number", value: "+15551234567" },
dispatch_id: signupId,
options: { code_size: 6 },
}),
});
const verification = await response.json();
console.log(verification.id, verification.status);
Bird
import { BirdClient } from "@messagebird/sdk";
const bird = new BirdClient({ apiKey: process.env.BIRD_API_KEY! });
const signupId = crypto.randomUUID();
const { data, error } = await bird.verify.verifications
.create(
{
to: { phone_number: "+15551234567" },
options: { code_length: 6 },
},
{ idempotencyKey: signupId },
)
.safe();
if (error) console.error(error.message);
else console.log(data.id, data.status);
Biaya peralihan
Rendah, kecuali Anda menggunakan lapisan risiko.
Kedua API menggunakan penerima sebagai kunci, bukan ID verifikasi, sehingga panggilan dapat dipindahkan hampir apa adanya: target.value menjadi to.phone_number atau to.email, code_size menjadi code_length, dan callback_url per verifikasi menjadi webhook workspace yang berlangganan tipe event verify yang Anda tentukan. dispatch_id tidak memiliki tempat tujuan, karena ia milik lapisan risiko di bawah, bukan mekanika panggilan create, dan create Bird menggunakan header Idempotency-Key yang tidak didokumentasikan oleh Prelude.
Lapisan risiko adalah bagian yang sama sekali bukan sekadar pemindahan. Jika Anda bercabang berdasarkan verdict Prelude, mengirim signals dengan create, atau mengandalkan shadow block, tidak ada sisi Bird yang bisa menampung logika itu dan keputusan harus dibuat sebelum panggilan. Ukur celah itu terlebih dahulu, karena semua hal lain di sini bisa diselesaikan dalam satu sore.
Pertanyaan yang benar-benar ditanyakan orang
Apakah Bird alternatif Prelude yang bagus?
Apa yang terjadi pada signals dan verdict Prelude?
Apakah saya kehilangan percobaan ulang yang aman dengan berpindah?
Kanal mana yang hilang?
Langkah selanjutnya
Panduan migrasi adalah yang harus dimulai lebih dulu: panduan ini memetakan API field per field.