BIRD Realtime
Realtime API para tus apps. Suscríbete, publica, escala.
Chat en vivo, presencia, notificaciones in-app y dashboards en tiempo real, sin gestionar tú mismo la infraestructura WebSocket.
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);
});
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.
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 channelQué 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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
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.
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.
{
"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.
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.
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.