Voice è in fase di aggiornamento

Voce programmabile in JSON. Chiamate, IVR, registrazione, 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 minuti dall'installazione alla prima chiamata

Effettua una chiamata dal linguaggio che già utilizzi.

SDK per ogni runtime principale. La prima chiamata va a un numero di test autorizzato (+15005550010) così puoi integrare un controllo CI prima di configurare un numero reale.

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

Dieci componenti vocali che preferiresti non scrivere da solo.

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

  1. 01

    Chiamate in uscita e in entrata

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

  2. 02

    Flussi di chiamata dichiarativi in JSON

    Componi say, play, gather, record, transfer e dial come un array JSON piatto.

  3. 03

    Registrazione con trascrizione

    Registrazione opzionale su qualsiasi tratta; trascrizioni generate automaticamente in oltre 40 lingue.

  4. 04

    TTS in streaming, sotto i 250 ms

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

  5. 05

    OTP vocale tramite verifiche

    Stessa risorsa bird.verifications dell'OTP via SMS; cambia il campo channel.

  6. 06

    Numeri virtuali in oltre 100 paesi

    Configura numeri long code dalla dashboard o dall'API numbers in pochi secondi.

  7. 07

    Chiamate mascherate

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

  8. 08

    SmartRouting per chiamata

    Operatore a costo minimo selezionato in tempo reale per ogni tratta, con riselezione del percorso in caso di errore.

  9. 09

    Eventi webhook per chiamata

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

  10. 10

    SDK client WebRTC

    Bridge browser-PSTN da un singolo pacchetto npm; funziona in qualsiasi runtime moderno.

Perché abbiamo creato Voice

La voce è il canale che tutti trattano come un ripensamento. Noi no.

La voce è complessa — latenza sotto il secondo, routing reale su operatore, conformità delle registrazioni — ed è per questo che la maggior parte dei fornitori le assegna un'autenticazione propria, un SDK proprio, un contratto webhook proprio. Noi ci siamo presi il tempo di modellarla come ogni altro endpoint Bird: stessa autenticazione, stessa idempotenza, stesso formato errori. Il controllo chiamate è solo 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..."

Ogni cambio di stato è un 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" }
  }
}

Pianificazione dei tentativi: 5s, 30s, 5m, 30m, 2h, 6h, 12h. Dead-letter dopo l'ultimo tentativo; ogni evento in dead-letter è riproducibile dalla dashboard o dall'API.

  • call.queuedAccettata dall'API e accodata per la chiamata in uscita.
  • call.ringingThe receiving line is ringing: pre-answer state.
  • call.answeredIl destinatario ha risposto; la fatturazione inizia con questo evento.
  • call.completedThe call ended normally: duration and price in the payload.
  • call.failedErrore permanente (occupato, nessuna risposta, rifiuto operatore) con motivazione tipizzata.
  • call.recording.readyLa registrazione è codificata e disponibile all'URL firmato nel payload.
  • call.transcript.readyTrascrizione completata; il payload include lingua e segmenti.

L'OTP vocale è la stessa risorsa dell'OTP via SMS.

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.

Chiamata personalizzata.

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

Componi qualsiasi flusso — say, gather, transfer — per i casi in cui vuoi lo script nel tuo codice.

Verifiche.

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

Una riga. Bird sceglie il percorso, esegue il controllo antifrode, invia il prompt audio. Stesso codice su ogni canale.

Al minuto, in base al paese.

TTS in streaming fatturato per carattere. Sconti volume applicati automaticamente alle soglie comuni. Nessun costo per utente, nessuna funzionalità bloccata dietro impegni annuali.

Inizia con un canale.
Aggiungi gli altri quando sei pronto.

Una chiave API di test è subito tua. La produzione si sblocca quando aggiungi un metodo di pagamento e verifichi un mittente.

Usi Claude Code, Cursor o Codex? Copia un prompt di configurazione e il tuo agente installerà la CLI e le skill di Bird per te. Scegli il tuo:

Cursor