Voz programable en JSON. Llamadas, IVR, grabación, TTS.
Voz para desarrolladores — más de 140 países con cobertura de voz, más de 1500 prefijos de números telefónicos, llamadas enmascaradas, números virtuales. La misma superficie de API que Email y SMS — las llamadas son simplemente otro recurso.
import { BirdClient } from "@bird/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 desde la instalación hasta la primera llamada
Realiza una llamada desde el lenguaje que ya usas.
SDK en todos los runtimes principales. La primera llamada va a un número de prueba autorizado (+15005550010) para que puedas incluir una verificación de CI antes de aprovisionar un número real.
import { BirdClient } from "@bird/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
Llamadas salientes y entrantes
Realiza y recibe llamadas vía REST o SIP — mismo modelo de autenticación, mismo contrato de idempotencia.
- 02
Flujos de llamada declarativos en JSON
Compón say, play, gather, record, transfer y dial como un array JSON plano.
- 03
Grabación con transcripción
Grabación opcional en cualquier tramo; transcripciones autogeneradas en más de 40 idiomas.
- 04
TTS en streaming, menos de 250 ms
Audio del primer byte vía HTTP chunked transfer o WebSocket — facturado por carácter.
- 05
OTP de voz a través de verificaciones
El mismo recurso bird.verifications que para SMS OTP; solo cambia el campo channel.
- 06
Números virtuales en más de 100 países
Aprovisiona números largos desde el panel o la API de números en segundos.
- 07
Llamadas enmascaradas
Los números del llamante y del destinatario nunca se exponen entre sí — privacidad por enrutamiento.
- 08
SmartRouting por llamada
Operador de menor coste seleccionado en tiempo real para cada tramo, con reselección de ruta en caso de fallo.
- 09
Eventos webhook por llamada
call.ringing, call.answered, call.completed y similares — firmados con HMAC, protegidos contra repetición.
- 10
SDK de cliente WebRTC
Puentes de navegador a PSTN desde un único paquete npm; funciona en cualquier runtime moderno.
Why we build Voice
La voz es el canal que todos tratan como algo secundario. Nosotros no.
La voz es difícil — latencia inferior al segundo, enrutamiento real de operador, cumplimiento en grabaciones — y por eso la mayoría de proveedores le dan su propia autenticación, su propio SDK, su propio contrato de webhooks. Nos tomamos el tiempo de darle la misma forma que cualquier otro endpoint de Bird: misma autenticación, misma idempotencia, mismo formato de error. El control de llamadas es solo JSON.
import { BirdClient } from "@bird/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 cambio de estado es un webhook.
Payloads firmados con HMAC, protegidos contra repetición, idempotentes. El mismo formato en cada canal de Bird — aprende uno y los conoces 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" }
}
}Programación de reintentos: 5s, 30s, 5m, 30m, 2h, 6h, 12h. Dead-letter tras el último intento; cada evento en dead-letter se puede reproducir desde el panel o la API.
call.queuedAceptada por la API y en cola para marcación.call.ringingLa línea receptora está sonando — estado previo a la respuesta.call.answeredEl destinatario contestó; la facturación comienza con este evento.call.completedLa llamada finalizó normalmente — duración y precio en el payload.call.failedFallo permanente (ocupado, sin respuesta, rechazo del operador) con un motivo tipificado.call.recording.readyLa grabación está codificada y disponible en la URL firmada del payload.call.transcript.readyTranscripción completada; el payload incluye idioma y segmentos.
OTP de voz es el mismo recurso que OTP por SMS.
Realiza una llamada personalizada o delega la verificación al runtime. Misma autenticación, misma idempotencia, mismo formato de error — el campo channel es lo único que cambia.
Llamada personalizada.
await bird.voice.calls.create({
to: "+15005550010",
flow: [
{ say: `Your code is ${code}.` },
],
});Compón cualquier flujo — say, gather, transfer — para los casos en que quieras el script en tu código.
Verificaciones.
await bird.verifications.start({
to: "+15005550010",
channel: "voice",
});Una línea. Bird elige la ruta, ejecuta la comprobación antifraude y envía el audio. Mismo código en todos los canales.