Pub/sub alojado sobre WebSocket. Suscríbete, publica, escala.
Chat en vivo, presencia, notificaciones in-app, dashboards en tiempo real — sin gestionar la infraestructura WebSocket tú mismo. Construido sobre la misma tecnología que impulsó Pusher Channels durante una década. Misma autenticación, misma idempotencia, mismo contrato de webhooks que cualquier otro canal de Bird.
import { BirdClient } from "@messagebird/sdk";
const bird = new BirdClient({ apiKey: process.env.BIRD_API_KEY! });
// On your server: publish an event to a channel.
const { data, error } = await bird.realtime.publish({
channel: "orders:BRD-49217",
event: "order.shipped",
data: { status: "shipped", eta: "Thursday, May 22" },
}).safe();
// In your client: subscribe and receive it live.
const channel = bird.realtime.subscribe("orders:BRD-49217");
channel.on("order.shipped", (event) => render(event.data));
if (error) throw error;
console.log(data.id);
// → "evt_2nQ81oP3..."
5 minutos desde npm install hasta el primer evento
Publica tu primer evento desde el lenguaje que ya usas.
SDK en todos los runtimes principales. El primer publish aterriza en un canal de prueba autorizado (bird-test:realtime) para que puedas incluir una verificación en CI antes de aprovisionar un canal de producción.
import { BirdClient } from "@messagebird/sdk";
const bird = new BirdClient({ apiKey: process.env.BIRD_API_KEY! });
const { data, error } = await bird.realtime.publish({
channel: "bird-test:realtime",
event: "ping",
data: { hello: "world" },
}).safe();Diez pasos entre "tu servidor publica" y "tu cliente recibe el evento."
Primitivas pub/sub alojadas, con nombre y auditables. Sin infraestructura WebSocket que gestionar.
- 01
Suscríbete a canales con nombre
Los clientes abren una conexión, se suscriben a uno o más canales y reciben eventos a medida que se publican.
- 02
Publica desde cualquier lugar
Desde tu backend, tu CLI, tu CI o un agente compatible con MCP — la misma llamada bird.realtime.publish.
- 03
Canales de presencia
Sabe quién está en un canal, quién se unió, quién se fue. Eventos webhook en cada cambio.
- 04
Canales privados con autenticación
Handshake de autenticación en el cliente; tu backend firma la solicitud de suscripción.
- 05
Canales cifrados
Cifrado de extremo a extremo para canales que transportan datos sensibles.
- 06
Recuperación del estado de conexión
Los clientes se reconectan y reproducen los eventos perdidos durante la desconexión, hasta una ventana configurable.
- 07
Límites de tasa a nivel de canal
Límites de publicación configurables por canal. El dashboard muestra el límite y la tasa actual.
- 08
Enrutamiento entre regiones
Las conexiones se enrutan automáticamente al nodo edge más cercano. Las latencias se mantienen bajas en cualquier región.
- 09
Webhooks sobre el estado del canal
realtime.channel.occupied, realtime.channel.vacated, realtime.member.added, realtime.member.removed. Mismo sobre HMAC que cualquier otro canal de Bird.
- 10
Misma autenticación, mismo formato de errores
Una API key para Realtime, SMS, Email, WhatsApp, Voice. Un único registro de tipos de error para todos.
Por qué construimos Realtime
La experiencia en vivo es lo primero que falla cuando escalas. Llevamos una década gestionándola.
Bird Realtime es la infraestructura WebSocket que impulsó Pusher Channels — el servicio contra el que muchos de ustedes han desarrollado durante años. Lo estamos integrando en la nueva API de Bird para que comparta autenticación, observabilidad y facturación con todo lo demás que haces en Bird. Si ya usas Pusher hoy, tu servicio sigue funcionando sobre los mismos cables; el nuevo SDK es el cambio de cara al desarrollador.
import { BirdClient } from "@messagebird/sdk";
const bird = new BirdClient({ apiKey: process.env.BIRD_API_KEY! });
// On your server: publish an event to a channel.
const { data, error } = await bird.realtime.publish({
channel: "orders:BRD-49217",
event: "order.shipped",
data: { status: "shipped", eta: "Thursday, May 22" },
}).safe();
// In your client: subscribe and receive it live.
const channel = bird.realtime.subscribe("orders:BRD-49217");
channel.on("order.shipped", (event) => render(event.data));
if (error) throw error;
console.log(data.id);
// → "evt_2nQ81oP3..."
Cada cambio de estado es un webhook.
Payloads firmados con HMAC, protegidos contra replay, idempotentes. El mismo sobre en cada canal de Bird — aprende uno y los conoces todos.
{
"type": "realtime.member.added",
"id": "evt_3pX1g7t...",
"created_at": "2026-05-19T15:42:01.221Z",
"data": {
"channel": "presence:room-42",
"member_id": "usr_4hQ2m",
"members": 18,
"region": "us-east"
}
}
Programa 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.
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.message.publishedUn evento fue publicado en un canal.
Si ya integraste el email, ya integraste Realtime.
Misma autenticación, mismo contrato de idempotencia, mismo formato de error, misma estructura de webhook. La diferencia es el transporte: una conexión WebSocket persistente en lugar de un envío REST puntual.
Realtime.
const channel = bird.realtime.subscribe("orders:BRD-49217");
channel.on("order.shipped", (event) => {
render(event.data);
});
Abre una conexión, suscríbete a un canal y recibe eventos en tiempo real. Misma autenticación que tus envíos transaccionales.
SMS.
await bird.sms.send({
from: "Bird",
to: "+15005550006",
text: `Your order has shipped.`,
category: "transactional",
});
Mismo formato, misma idempotencia. Para cuando el evento necesita llegar a un teléfono, no a un cliente conectado.
Precios disponibles próximamente.
Los precios de Realtime se están finalizando. Si ya eres cliente de Pusher Channels, tu servicio continúa en su plan actual. Para una cotización del nuevo Bird Realtime SDK, escríbenos.