Voice yang dapat diprogram dalam JSON. Panggilan, IVR, rekaman, TTS.
Voice untuk developer — 140+ negara dengan jangkauan suara, 1.500+ prefiks nomor telepon, panggilan tersamar, nomor virtual. Surface API yang sama seperti Email dan SMS — panggilan hanyalah resource lain.
import { BirdClient } from "@bird/sdk";
const bird = new BirdClient({ apiKey: process.env.BIRD_API_KEY! });
const { data, error } = await bird.voice.calls.create({
to: "+15005550010",
from: "+14155550199",
flow: [
{ say: "Your verification code is..." },
{ say: "4. 2. 9. 1. 7." },
{ gather: { digits: 1, timeout: 5 } },
{ record: { transcribe: true } },
],
}).safe();
if (error) throw error;
console.log(data.id);
// → "call_7tQ04Lp2n..."5 menit dari instalasi ke panggilan pertama
Lakukan panggilan dari bahasa pemrograman yang sudah Anda gunakan.
SDK di setiap runtime utama. Panggilan pertama menuju nomor uji coba yang diotorisasi (+15005550010) sehingga Anda bisa menjalankan CI check sebelum menyediakan nomor asli.
import { BirdClient } from "@bird/sdk";
const bird = new BirdClient({ apiKey: process.env.BIRD_API_KEY! });
const { data, error } = await bird.voice.calls.create({
to: "+15005550010",
from: "+14155550199",
flow: [{ say: "Hello from Node." }],
}).safe();Ten parts of voice you'd rather not write yourself.
Carrier routing, call control, and observability primitives — named and audit-able.
- 01
Panggilan keluar dan masuk
Lakukan dan terima panggilan melalui REST atau SIP — model autentikasi sama, kontrak idempotensi sama.
- 02
Alur panggilan deklaratif dalam JSON
Susun say, play, gather, record, transfer, dan dial sebagai array JSON datar.
- 03
Rekaman dengan transkripsi
Rekaman opsional di setiap leg; transkrip dibuat otomatis dalam 40+ bahasa.
- 04
Streaming TTS, di bawah 250 md
Audio byte pertama melalui HTTP chunked transfer atau WebSocket — ditagih per karakter.
- 05
Voice OTP melalui verifikasi
Resource bird.verifications yang sama seperti SMS OTP; cukup ganti field channel.
- 06
Nomor virtual di 100+ negara
Sediakan long code dari dashboard atau API numbers dalam hitungan detik.
- 07
Panggilan tersamar
Nomor penelepon dan penerima tidak pernah terekspos satu sama lain — privasi melalui routing.
- 08
SmartRouting per panggilan
Operator berbiaya terendah dipilih secara real time untuk setiap leg, dengan pemilihan ulang rute saat gagal.
- 09
Event webhook per panggilan
call.ringing, call.answered, call.completed dan lainnya — ditandatangani HMAC, dilindungi dari replay.
- 10
WebRTC client SDK
Bridge browser-ke-PSTN dari satu paket npm; berfungsi di runtime modern mana pun.
Why we build Voice
Voice adalah kanal yang selalu dianggap remeh. Kami tidak.
Voice itu sulit — latensi di bawah satu detik, routing operator sungguhan, kepatuhan rekaman — dan itulah mengapa kebanyakan vendor memberikannya autentikasi sendiri, SDK sendiri, kontrak webhook sendiri. Kami meluangkan waktu untuk membuatnya sama seperti setiap endpoint Bird lainnya: autentikasi sama, idempotensi sama, envelope error sama. Kontrol panggilan hanyalah JSON.
import { BirdClient } from "@bird/sdk";
const bird = new BirdClient({ apiKey: process.env.BIRD_API_KEY! });
const { data, error } = await bird.voice.calls.create({
to: "+15005550010",
from: "+14155550199",
flow: [
{ say: "Your verification code is..." },
{ say: "4. 2. 9. 1. 7." },
{ gather: { digits: 1, timeout: 5 } },
{ record: { transcribe: true } },
],
}).safe();
if (error) throw error;
console.log(data.id);
// → "call_7tQ04Lp2n..."Setiap perubahan status adalah webhook.
Payload bertanda tangan HMAC, dilindungi dari replay, idempoten. Envelope yang sama di setiap kanal Bird — pelajari satu, Anda sudah memahami semuanya.
{
"type": "call.completed",
"id": "evt_8qC42v...",
"created_at": "2026-05-19T15:42:01.221Z",
"data": {
"call_id": "call_7tQ04Lp2n",
"from": "+14155550199",
"to": "+15005550010",
"direction": "outbound",
"status": "completed",
"duration_s": 42,
"answered_at": "2026-05-19T15:41:18.402Z",
"ended_at": "2026-05-19T15:42:00.117Z",
"price": { "amount": 0.014, "currency": "USD" }
}
}Jadwal percobaan ulang: 5d, 30d, 5m, 30m, 2j, 6j, 12j. Dead-letter setelah percobaan terakhir; setiap event dead-letter dapat diputar ulang dari dashboard atau API.
call.queuedDiterima oleh API dan diantrekan untuk dial-out.call.ringingSaluran penerima berdering — status sebelum dijawab.call.answeredPenerima mengangkat; tagihan dimulai dari event ini.call.completedPanggilan berakhir normal — durasi dan harga ada di payload.call.failedKegagalan permanen (sibuk, tidak dijawab, ditolak operator) dengan alasan yang diketik.call.recording.readyRekaman telah dienkode dan tersedia di URL bertanda tangan dalam payload.call.transcript.readyTranskripsi selesai; payload mencakup bahasa dan segmen.
Voice OTP adalah resource yang sama dengan SMS OTP.
Lakukan panggilan kustom atau serahkan verifikasi ke runtime. Autentikasi sama, idempotensi sama, envelope error sama — field channel adalah satu-satunya yang berubah.
Panggilan kustom.
await bird.voice.calls.create({
to: "+15005550010",
flow: [
{ say: `Your code is ${code}.` },
],
});Susun alur apa pun — say, gather, transfer — untuk kasus di mana Anda ingin skrip ada di kode Anda.
Verifikasi.
await bird.verifications.start({
to: "+15005550010",
channel: "voice",
});Satu baris. Bird memilih rute, menjalankan pemeriksaan penipuan, mengirimkan prompt audio. Kode yang sama di setiap kanal.