Voice is being upgraded

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.

place-call.ts
201 · 0.4s
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.

1
2
3
4
5
6
7
8
9
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.

  1. 01

    Panggilan keluar dan masuk

    Lakukan dan terima panggilan melalui REST atau SIP — model autentikasi sama, kontrak idempotensi sama.

  2. 02

    Alur panggilan deklaratif dalam JSON

    Susun say, play, gather, record, transfer, dan dial sebagai array JSON datar.

  3. 03

    Rekaman dengan transkripsi

    Rekaman opsional di setiap leg; transkrip dibuat otomatis dalam 40+ bahasa.

  4. 04

    Streaming TTS, di bawah 250 md

    Audio byte pertama melalui HTTP chunked transfer atau WebSocket — ditagih per karakter.

  5. 05

    Voice OTP melalui verifikasi

    Resource bird.verifications yang sama seperti SMS OTP; cukup ganti field channel.

  6. 06

    Nomor virtual di 100+ negara

    Sediakan long code dari dashboard atau API numbers dalam hitungan detik.

  7. 07

    Panggilan tersamar

    Nomor penelepon dan penerima tidak pernah terekspos satu sama lain — privasi melalui routing.

  8. 08

    SmartRouting per panggilan

    Operator berbiaya terendah dipilih secara real time untuk setiap leg, dengan pemilihan ulang rute saat gagal.

  9. 09

    Event webhook per panggilan

    call.ringing, call.answered, call.completed dan lainnya — ditandatangani HMAC, dilindungi dari replay.

  10. 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.

place-call.ts
201 · 0.4s
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.

POST /webhooks/bird
signed
{
  "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.

voice.calls.create
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.

verifications.start
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.

Per menit, tergantung negara.

Streaming TTS ditagih per karakter. Diskon volume otomatis berlaku di ambang batas umum. Tanpa biaya per seat, tanpa fitur tier yang dikunci di balik komitmen tahunan.

Mulai dengan satu channel.
Tambahkan yang lain saat Anda siap.

API key uji coba langsung tersedia untuk Anda. Akses produksi terbuka setelah Anda menambahkan metode pembayaran dan memverifikasi pengirim.

Mulai sekarangBaca dokumentasiatau

Using Claude Code, Cursor, or Codex? Point it at our MCP server — tools for every channel we expose, with scoped agent keys.

Cursor