Usługa Voice jest właśnie ulepszana

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

Voice for developers: 140+ countries with voice coverage, 1,500+ phone-number prefixes, masked calls, virtual numbers. Same API surface as Email and SMS: calls are just another resource.

place-call.ts
201 · 0.4s
import { BirdClient } from "@messagebird/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 "@messagebird/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();

Dziesięć elementów głosu, których wolisz nie pisać samodzielnie.

Carrier routing, call control, and observability primitives, named and audit-able.

  1. 01

    Połączenia wychodzące i przychodzące

    Place and receive calls over REST or SIP: same auth model, same idempotency contract.

  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

    First-byte audio over HTTP chunked transfer or WebSocket, billed by character.

  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

    Caller and callee numbers are never exposed to each other: privacy by 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 and friends: HMAC-signed, replay-protected.

  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 "@messagebird/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.

HMAC-signed payloads, replay-protected, idempotent. The same envelope on every Bird channel: learn one, you've learned them all.

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.ringingThe receiving line is ringing: pre-answer state.
  • call.answeredRozmówca odebrał; naliczanie zaczyna się od tego zdarzenia.
  • call.completedThe call ended normally: duration and price in the payload.
  • 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.

Place a custom call or hand the verification off to the runtime. Same auth, same idempotency, same error envelope: the channel field is the only thing that moves.

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.

Używasz Claude Code, Cursor lub Codex? Skopiuj prompt konfiguracyjny, a Twój agent zainstaluje za Ciebie Bird CLI i umiejętności. Wybierz swój:

Cursor