Voice is being upgraded

Voz programável em JSON. Chamadas, IVR, gravação, TTS.

Voz para programadores — mais de 140 países com cobertura de voz, mais de 1.500 prefixos de números de telefone, chamadas mascaradas, números virtuais. A mesma superfície de API que Email e SMS — chamadas são apenas mais um recurso.

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 minutos da instalação à primeira chamada

Faça uma chamada na linguagem que já utiliza.

SDKs em todos os principais runtimes. A primeira chamada vai para um número de teste autorizado (+15005550010) para que possa incluir uma verificação de CI antes de provisionar um número real.

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

Ten parts of voice you'd rather not write yourself.

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

  1. 01

    Chamadas de saída e de entrada

    Faça e receba chamadas via REST ou SIP — mesmo modelo de autenticação, mesmo contrato de idempotência.

  2. 02

    Fluxos de chamada declarativos em JSON

    Componha say, play, gather, record, transfer e dial como um array JSON plano.

  3. 03

    Gravação com transcrição

    Gravação opcional em qualquer perna da chamada; transcrições geradas automaticamente em mais de 40 idiomas.

  4. 04

    TTS em streaming, menos de 250 ms

    Primeiro byte de áudio via HTTP chunked transfer ou WebSocket — faturado por carácter.

  5. 05

    OTP por voz via verificações

    O mesmo recurso bird.verifications do SMS OTP; basta alterar o campo channel.

  6. 06

    Números virtuais em mais de 100 países

    Provisione números longos a partir do painel ou da API de números em segundos.

  7. 07

    Chamadas mascaradas

    Os números de quem liga e de quem recebe nunca são expostos um ao outro — privacidade por encaminhamento.

  8. 08

    SmartRouting por chamada

    Operadora de menor custo selecionada em tempo real para cada perna, com reseleção de rota em caso de falha.

  9. 09

    Eventos de webhook por chamada

    call.ringing, call.answered, call.completed e outros — assinados com HMAC, protegidos contra replay.

  10. 10

    SDK de cliente WebRTC

    Pontes browser-para-PSTN num único pacote npm; funciona em qualquer runtime moderno.

Por que criamos o Voice

A voz é o canal que todos tratam como secundário. Nós não.

A voz é difícil — latência inferior a um segundo, encaminhamento real de operadora, conformidade de gravação — e é por isso que a maioria dos fornecedores lhe dá a sua própria autenticação, o seu próprio SDK, o seu próprio contrato de webhook. Dedicámos o tempo necessário para que funcione como qualquer outro endpoint Bird: mesma autenticação, mesma idempotência, mesmo envelope de erro. O controlo de chamadas é apenas 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..."

Cada mudança de estado é um webhook.

Payloads assinados com HMAC, protegidos contra replay, idempotentes. O mesmo envelope em todos os canais Bird — aprenda um e aprendeu todos.

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

Agenda de reenvio: 5s, 30s, 5m, 30m, 2h, 6h, 12h. Dead-letter após a última tentativa; cada evento em dead-letter pode ser reenviado a partir do painel ou da API.

  • call.queuedAceite pela API e em fila para discagem.
  • call.ringingO número de destino está a tocar — estado pré-atendimento.
  • call.answeredO destinatário atendeu; a faturação começa neste evento.
  • call.completedA chamada terminou normalmente — duração e preço no payload.
  • call.failedFalha permanente (ocupado, sem resposta, rejeição da operadora) com motivo tipado.
  • call.recording.readyA gravação está codificada e disponível no URL assinado no payload.
  • call.transcript.readyTranscrição concluída; o payload inclui idioma e segmentos.

OTP por voz é o mesmo recurso que OTP por SMS.

Faça uma chamada personalizada ou delegue a verificação ao runtime. Mesma autenticação, mesma idempotência, mesmo envelope de erro — o campo channel é a única coisa que muda.

Chamada personalizada.

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

Componha qualquer fluxo — say, gather, transfer — para os casos em que quer o script no seu código.

Verificações.

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

Uma linha. O Bird escolhe a rota, executa a verificação de fraude e envia o prompt de áudio. O mesmo código em todos os canais.

Por minuto, dependente do país.

TTS em streaming faturado por carácter. Descontos por volume aplicados automaticamente nos limites habituais. Sem taxa por utilizador, sem funcionalidades bloqueadas por contratos anuais.

Comece com um canal.
Adicione os outros quando estiver pronto.

Uma chave API de teste é sua imediatamente. A produção é desbloqueada quando você adiciona um método de pagamento e verifica um remetente.

Using Claude Code, Cursor, or Codex? Copy a setup prompt and your agent installs the Bird CLI and skills for you. Pick yours: