BIRD Realtime

Realtime API para tus apps. Suscríbete, publica, escala.

Configúralo en:
Cursor

Chat en vivo, presencia, notificaciones in-app y dashboards en tiempo real, sin gestionar tú mismo la infraestructura WebSocket.

app.ts
connected
import { BirdRealtime } from "@messagebird/realtime";

const bird = new BirdRealtime({
  appKey: APP_KEY,
  region: "us1",
});

const channel = bird.subscribe("orders-42");

channel.bind("order-shipped", (data) => {
  render(data);
});
Order BRD-49217Placed
ETAThursday, May 22

5 minutos desde npm install hasta el primer evento

Publica tu primer evento desde el lenguaje que ya usas.

SDK de servidor para Node, Python y Go, un cliente de navegador para el lado de suscripción, y HTTP simple cuando prefieras no añadir una dependencia. Un canal no necesita aprovisionamiento: existe en cuanto algo se suscribe a él.

1
2
3
4
5
6
const result = await bird.realtime.publish("rap_01krdgeqcxet5s7t44vh8rt9mg", {
  event: "order.updated",
  channels: ["orders", "presence-lobby"],
  data: { order_id: "ord_123", status: "shipped" },
});
console.log(result.data?.length); // one entry per channel

Qué puedes construir con Realtime

Lleva actualizaciones en vivo a cada rincón de tu producto, desde chat y dashboards hasta seguimiento y juegos, todo a través de una sola API.

  1. 01

    Resultados y marcadores en vivo

    Actualizaciones de partidos, resultados de encuestas, noches electorales: una sola llamada de publicación envía el nuevo dato a cada pantalla suscrita a la vez.

  2. 02

    Chat in-app

    Un canal por sala, presencia para saber quién está en línea y eventos de cliente para indicadores de escritura, sin ida y vuelta al servidor.

  3. 03

    Colaboración en línea

    Los eventos de cliente distribuyen posiciones de cursor, selecciones y señales de coedición entre pares a través del canal, sin pasar por el backend.

  4. 04

    Juegos multijugador

    La presencia llena el lobby, los eventos de cliente transmiten los movimientos y un canal por partida mantiene el estado visible para cada jugador.

  5. 05

    Gráficos y dashboards en vivo

    Publica métricas a medida que cambian. Un canal con caché entrega el valor actual a cada usuario que se une tarde, para que los gráficos nunca se muestren vacíos.

  6. 06

    Indicadores de presencia

    Los canales de presencia rastrean a los miembros cuando se unen y se van; los webhooks mantienen el registro de tu backend sincronizado.

  7. 07

    Seguimiento de ubicación en vivo

    Un repartidor en el mapa del cliente, amigos compartiendo una ruta, una flota en la pantalla de despacho: publica coordenadas y cada observador las sigue, con la última posición conocida en caché para quienes se unan tarde.

  8. 08

    Estado de pedidos y entregas

    Un canal con caché por pedido almacena el estado actual, de modo que la suscripción funciona también como la carga del estado inicial.

  9. 09

    Subastas y pujas

    Cada puja llega a la pantalla de todos los postores a la vez, y un canal con caché entrega la puja más alta actual a quien se una a mitad de subasta.

  10. 10

    Feeds de notificaciones por usuario

    Un canal privado por usuario, suscripciones firmadas por tu backend, para que solo el cliente correcto pueda escuchar.

Por qué Realtime

La experiencia en vivo es lo primero que falla cuando escalas. Nosotros la gestionamos desde hace más de una década.

El estado de conexión, la presencia, la distribución fan-out, el backoff de reconexión y la capacidad de absorber picos de tráfico son las partes de una funcionalidad en vivo que son fáciles de prototipar y difíciles de operar. Realtime las ejecuta como un servicio gestionado dentro de la API de Bird, de modo que un canal en vivo comparte la autenticación, la observabilidad y los webhooks que ya usas para email y SMS.

presence.ts
18 members
const room = bird.subscribe("presence-room-42");

room.bind("bird:subscription_succeeded", () => {
  const members = [...room.members.values()];
  render({ me: room.myId, members });
});

room.bind("bird:member_added", (member) => {
  addToRoster(member.member_id);
});

room.bind("bird:member_removed", (member) => {
  removeFromRoster(member.member_id);
});

Cada cambio de estado es un webhook.

Los clientes van y vienen sin tocar nunca tu backend. Así es como se entera: inicia el trabajo costoso cuando llega el primer suscriptor, detenlo cuando se va el último, y mantén tu propia vista de quién está en una sala.

POST /webhooks/bird
signed
{
  "type": "realtime.member_added",
  "timestamp": "2026-05-19T15:42:01.221Z",
  "data": {
    "channel": "presence-room-42",
    "member_id": "usr_4hQ2m"
  }
}
  • realtime.channel_occupiedEl primer suscriptor se unió a un canal previamente vacío.
  • realtime.channel_vacatedEl último suscriptor se fue; el canal ahora está vacío.
  • realtime.member_addedUn miembro se unió a un canal de presencia.
  • realtime.member_removedUn miembro abandonó un canal de presencia.
  • realtime.connection_countEl recuento de conexiones de un canal ha cambiado.

Si ya integraste el email, ya integraste Realtime.

Misma autenticación, mismo contrato de idempotencia, mismo sobre de errores, misma estructura de webhooks. La diferencia es el transporte: una conexión WebSocket persistente en lugar de un envío REST de una sola vez.

Realtime.

realtime
await bird.realtime.members.send(APP_ID, "usr_4hQ2m", {
  event: "order-shipped",
  data:  { status: "shipped" },
});

Llega a la persona dondequiera que esté conectada, en cada pestaña y dispositivo a la vez. Sin canal que nombrar, sin conexión que rastrear.

SMS.

sms
await bird.sms.send({
  from:     "Bird",
  to:       "+15005550006",
  text:     `Your order has shipped.`,
  category: "transactional",
});

La misma llamada, un canal más allá. Para cuando la actualización necesita llegar a un teléfono en lugar de a un cliente conectado.

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