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.
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.
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.
- 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.
- 02
Fluxos de chamada declarativos em JSON
Componha say, play, gather, record, transfer e dial como um array JSON plano.
- 03
Gravação com transcrição
Gravação opcional em qualquer perna da chamada; transcrições geradas automaticamente em mais de 40 idiomas.
- 04
TTS em streaming, menos de 250 ms
Primeiro byte de áudio via HTTP chunked transfer ou WebSocket — faturado por carácter.
- 05
OTP por voz via verificações
O mesmo recurso bird.verifications do SMS OTP; basta alterar o campo channel.
- 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.
- 07
Chamadas mascaradas
Os números de quem liga e de quem recebe nunca são expostos um ao outro — privacidade por encaminhamento.
- 08
SmartRouting por chamada
Operadora de menor custo selecionada em tempo real para cada perna, com reseleção de rota em caso de falha.
- 09
Eventos de webhook por chamada
call.ringing, call.answered, call.completed e outros — assinados com HMAC, protegidos contra replay.
- 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.
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.
{
"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.
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.
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.