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.
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.
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.
- 01
Połączenia wychodzące i przychodzące
Place and receive calls over REST or SIP: same auth model, same idempotency contract.
- 02
Deklaratywne przepływy połączeń w JSON
Komponuj say, play, gather, record, transfer i dial jako płaską tablicę JSON.
- 03
Nagrywanie z transkrypcją
Opcjonalne nagrywanie na dowolnym odcinku; transkrypcje generowane automatycznie w ponad 40 językach.
- 04
Strumieniowe TTS, poniżej 250 ms
First-byte audio over HTTP chunked transfer or WebSocket, billed by character.
- 05
Głosowe OTP przez weryfikacje
Ten sam zasób bird.verifications co SMS OTP; wystarczy zmienić pole channel.
- 06
Numery wirtualne w ponad 100 krajach
Udostępniaj numery stacjonarne z panelu lub przez API numerów w kilka sekund.
- 07
Połączenia maskowane
Caller and callee numbers are never exposed to each other: privacy by routing.
- 08
SmartRouting na połączenie
Najtańszy operator wybierany w czasie rzeczywistym dla każdego odcinka, z automatycznym przełączaniem trasy w przypadku awarii.
- 09
Zdarzenia webhook na połączenie
call.ringing, call.answered, call.completed and friends: HMAC-signed, replay-protected.
- 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.
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.
{
"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.
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.
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.