Voice wordt geüpgraded

Programmeerbare spraak in JSON. Gesprekken, IVR, opname, 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 minuten van installatie tot eerste gesprek

Start een gesprek vanuit de taal die je al gebruikt.

SDK's in elke gangbare runtime. Het eerste gesprek gaat naar een goedgekeurd testnummer (+15005550010), zodat je een CI-check kunt uitvoeren voordat je een echt nummer inricht.

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();

Tien onderdelen van voice die u liever niet zelf schrijft.

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

  1. 01

    Uitgaande en inkomende gesprekken

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

  2. 02

    Declaratieve gespreksflows in JSON

    Combineer say, play, gather, record, transfer en dial als een platte JSON-array.

  3. 03

    Opname met transcriptie

    Optionele opname op elk gespreksonderdeel; transcripties worden automatisch gegenereerd in 40+ talen.

  4. 04

    Streaming TTS, sub-250ms

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

  5. 05

    Voice OTP via verificaties

    Dezelfde bird.verifications-resource als SMS OTP; wissel het channel-veld.

  6. 06

    Virtuele nummers in 100+ landen

    Richt long codes in vanuit het dashboard of de numbers API in seconden.

  7. 07

    Gemaskeerde gesprekken

    Caller and callee numbers are never exposed to each other: privacy by routing.

  8. 08

    SmartRouting per gesprek

    Goedkoopste carrier in real time geselecteerd voor elk onderdeel, met route-herselectie bij falen.

  9. 09

    Webhook-events per gesprek

    call.ringing, call.answered, call.completed and friends: HMAC-signed, replay-protected.

  10. 10

    WebRTC client SDK

    Browser-naar-PSTN-bridges vanuit één npm-pakket; werkt in elke moderne runtime.

Waarom we Voice bouwen

Voice is het kanaal dat iedereen als bijzaak behandelt. Wij niet.

Voice is lastig — sub-seconde latentie, echte carrier-routing, opname-compliance — en daarom geven de meeste aanbieders het een eigen auth, eigen SDK, eigen webhook-contract. Wij hebben de tijd genomen om het dezelfde vorm te geven als elk ander Bird-endpoint: dezelfde auth, dezelfde idempotency, dezelfde error-envelope. Gespreksbesturing is gewoon 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..."

Elke statuswijziging is een 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" }
  }
}

Retry-schema: 5s, 30s, 5m, 30m, 2u, 6u, 12u. Dead-letter na de laatste poging; elk dead-lettered event is opnieuw afspeelbaar vanuit het dashboard of de API.

  • call.queuedGeaccepteerd door de API en in de wachtrij voor uitbellen.
  • call.ringingThe receiving line is ringing: pre-answer state.
  • call.answeredDe gebelde heeft opgenomen; facturering start bij dit event.
  • call.completedThe call ended normally: duration and price in the payload.
  • call.failedPermanente fout (bezet, geen antwoord, carrier-weigering) met een getypeerde reden.
  • call.recording.readyOpname is gecodeerd en beschikbaar via de gesigneerde URL in de payload.
  • call.transcript.readyTranscriptie voltooid; payload bevat taal en segmenten.

Voice OTP is dezelfde resource als 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.

Aangepast gesprek.

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

Stel elke flow samen — say, gather, transfer — voor de gevallen waarin je het script in je code wilt.

Verificaties.

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

Eén regel. Bird kiest de route, voert de fraudecontrole uit en verstuurt de audioprompt. Dezelfde code op elk kanaal.

Per minuut, landafhankelijk.

Streaming TTS gefactureerd per karakter. Volumekortingen worden automatisch toegepast bij gangbare drempels. Geen stoelkosten, geen functies achter een jaarcontract.

Begin met één kanaal.
Voeg de rest toe wanneer je er klaar voor bent.

Een test-API-key is direct beschikbaar. Productietoegang wordt ontgrendeld zodra je een betaalmethode toevoegt en een afzender verifieert.

Gebruik je Claude Code, Cursor of Codex? Kopieer een setup-prompt en je agent installeert de Bird CLI en skills voor je. Kies de jouwe:

Cursor