Voice se está actualizando

Voz programable en JSON. Llamadas, IVR, grabación, 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 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.

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

Diez componentes de voz que preferirías no programar tú mismo.

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

  1. 01

    Llamadas salientes y entrantes

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

  2. 02

    Flujos de llamada declarativos en JSON

    Compón say, play, gather, record, transfer y dial como un array JSON plano.

  3. 03

    Grabación con transcripción

    Grabación opcional en cualquier tramo; transcripciones autogeneradas en más de 40 idiomas.

  4. 04

    TTS en streaming, menos de 250 ms

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

  5. 05

    OTP de voz a través de verificaciones

    El mismo recurso bird.verifications que para SMS OTP; solo cambia el campo channel.

  6. 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.

  7. 07

    Llamadas enmascaradas

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

  8. 08

    SmartRouting por llamada

    Operador de menor coste seleccionado en tiempo real para cada tramo, con reselección de ruta en caso de fallo.

  9. 09

    Eventos webhook por llamada

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

  10. 10

    SDK de cliente WebRTC

    Puentes de navegador a PSTN desde un único paquete npm; funciona en cualquier runtime moderno.

Por qué creamos 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.

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 cambio de estado es 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" }
  }
}

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.ringingThe receiving line is ringing: pre-answer state.
  • call.answeredEl destinatario contestó; la facturación comienza con este evento.
  • call.completedThe call ended normally: duration and price in the 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.

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.

Llamada personalizada.

voice.calls.create
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.

verifications.start
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.

Por minuto, según el país.

TTS en streaming facturado por carácter. Los descuentos por volumen se aplican automáticamente en los umbrales habituales. Sin tarifa por puesto, sin funciones bloqueadas detrás de compromisos anuales.

Empieza con un canal.
Añade los demás cuando estés listo.

Una clave API de prueba es tuya de inmediato. El acceso a producción se desbloquea cuando añades un método de pago y verificas un remitente.

¿Usas Claude Code, Cursor o Codex? Copia un prompt de configuración y tu agente instalará el Bird CLI y las habilidades por ti. Elige el tuyo:

Cursor