Voice is being upgraded

Programowalny głos w JSON. Połączenia, IVR, nagrywanie, TTS.

Głos dla programistów — ponad 140 krajów z zasięgiem głosowym, ponad 1500 prefiksów numerów telefonicznych, połączenia maskowane, numery wirtualne. Ta sama powierzchnia API co Email i SMS — połączenia to po prostu kolejny zasób.

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 minut od instalacji do pierwszego połączenia

Wykonaj połączenie w języku, którego już używasz.

SDK w każdym głównym środowisku uruchomieniowym. Pierwsze połączenie trafia na autoryzowany numer testowy (+15005550010), więc możesz uruchomić test CI, zanim udostępnisz prawdziwy numer.

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

    Połączenia wychodzące i przychodzące

    Wykonuj i odbieraj połączenia przez REST lub SIP — ten sam model uwierzytelniania, ten sam kontrakt idempotentności.

  2. 02

    Deklaratywne przepływy połączeń w JSON

    Komponuj say, play, gather, record, transfer i dial jako płaską tablicę JSON.

  3. 03

    Nagrywanie z transkrypcją

    Opcjonalne nagrywanie na dowolnym odcinku; transkrypcje generowane automatycznie w ponad 40 językach.

  4. 04

    Strumieniowe TTS, poniżej 250 ms

    Pierwszy bajt audio przez HTTP chunked transfer lub WebSocket — rozliczanie za znak.

  5. 05

    Głosowe OTP przez weryfikacje

    Ten sam zasób bird.verifications co SMS OTP; wystarczy zmienić pole channel.

  6. 06

    Numery wirtualne w ponad 100 krajach

    Udostępniaj numery stacjonarne z panelu lub przez API numerów w kilka sekund.

  7. 07

    Połączenia maskowane

    Numery dzwoniącego i odbierającego nigdy nie są sobie nawzajem ujawniane — prywatność przez routing.

  8. 08

    SmartRouting na połączenie

    Najtańszy operator wybierany w czasie rzeczywistym dla każdego odcinka, z automatycznym przełączaniem trasy w przypadku awarii.

  9. 09

    Zdarzenia webhook na połączenie

    call.ringing, call.answered, call.completed i inne — podpisane HMAC, zabezpieczone przed powtórzeniem.

  10. 10

    SDK klienta WebRTC

    Mosty przeglądarka-PSTN z jednego pakietu npm; działa w każdym nowoczesnym środowisku uruchomieniowym.

Dlaczego tworzymy Voice

Głos to kanał, który wszyscy traktują po macoszemu. My tego nie zrobiliśmy.

Głos jest trudny — opóźnienie poniżej sekundy, prawdziwy routing operatorski, zgodność nagrywania — i dlatego większość dostawców daje mu osobne uwierzytelnianie, osobne SDK, osobny kontrakt webhooków. Poświęciliśmy czas, aby uczynić go takim samym jak każdy inny endpoint Bird: to samo uwierzytelnianie, ta sama idempotentność, ta sama koperta błędów. Sterowanie połączeniami to po prostu 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..."

Każda zmiana stanu to webhook.

Ładunki podpisane HMAC, zabezpieczone przed powtórzeniem, idempotentne. Ta sama koperta na każdym kanale Bird — naucz się jednego, znasz je wszystkie.

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" }
  }
}

Harmonogram ponowień: 5s, 30s, 5m, 30m, 2h, 6h, 12h. Dead-letter po ostatniej próbie; każde zdarzenie dead-letter można odtworzyć z panelu lub API.

  • call.queuedZaakceptowane przez API i umieszczone w kolejce do wydzwonienia.
  • call.ringingLinia odbierającego dzwoni — stan przed odebraniem.
  • call.answeredRozmówca odebrał; naliczanie zaczyna się od tego zdarzenia.
  • call.completedPołączenie zakończyło się normalnie — czas trwania i cena w ładunku.
  • call.failedTrwała awaria (zajęte, brak odpowiedzi, odrzucenie operatora) z typowanym powodem.
  • call.recording.readyNagranie jest zakodowane i dostępne pod podpisanym URL w ładunku.
  • call.transcript.readyTranskrypcja zakończona; ładunek zawiera język i segmenty.

Głosowe OTP to ten sam zasób co SMS OTP.

Wykonaj niestandardowe połączenie lub przekaż weryfikację do środowiska uruchomieniowego. To samo uwierzytelnianie, ta sama idempotentność, ta sama koperta błędów — pole channel to jedyna rzecz, która się zmienia.

Niestandardowe połączenie.

voice.calls.create
await bird.voice.calls.create({
  to:   "+15005550010",
  flow: [
    { say: `Your code is ${code}.` },
  ],
});

Komponuj dowolny przepływ — say, gather, transfer — w przypadkach, gdy chcesz mieć skrypt w swoim kodzie.

Weryfikacje.

verifications.start
await bird.verifications.start({
  to:      "+15005550010",
  channel: "voice",
});

Jedna linia. Bird wybiera trasę, przeprowadza kontrolę oszustw, wysyła komunikat audio. Ten sam kod na każdym kanale.

Za minutę, zależnie od kraju.

Strumieniowe TTS rozliczane za znak. Rabaty ilościowe stosowane automatycznie przy typowych progach. Brak opłaty za stanowisko, brak funkcji ukrytych za rocznymi zobowiązaniami.

Zacznij od jednego kanału.
Dodaj kolejne, gdy będziesz gotowy.

Testowy klucz API otrzymasz od razu. Dostęp produkcyjny odblokujesz po dodaniu metody płatności i weryfikacji nadawcy.

RozpocznijPrzeczytaj dokumentacjęlub

Using Claude Code, Cursor, or Codex? Point it at our hosted MCP server: curated Bird tools, a browser sign-in, and no API key. Or install the bird-ai plugin.

Cursor