Pub/sub hospedado sobre WebSocket. Subscreva, publique, escale.
Chat ao vivo, presença, notificações in-app, dashboards em tempo real — sem gerir a infraestrutura WebSocket. Construído com a mesma tecnologia que sustentou o Pusher Channels durante uma década. A mesma autenticação, a mesma idempotência, o mesmo contrato de webhooks de qualquer outro canal 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 do npm install ao primeiro evento
Publique o seu primeiro evento na linguagem que já utiliza.
SDKs em todos os principais runtimes. O primeiro publish chega a um canal de teste autorizado (bird-test:realtime) para que possa validar num CI check antes de provisionar um canal de produção.
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();Dez passos entre "o seu servidor publica" e "o seu cliente recebe o evento."
Primitivas pub/sub hospedadas, nomeadas e auditáveis. Sem infraestrutura WebSocket para gerir.
- 01
Subscreva canais nomeados
Os clientes abrem uma conexão, subscrevem um ou mais canais e recebem eventos à medida que são publicados.
- 02
Publique de qualquer lugar
Do seu backend, da sua CLI, do seu CI ou de um agente compatível com MCP — a mesma chamada bird.realtime.publish.
- 03
Canais de presença
Saiba quem está num canal, quem entrou, quem saiu. Eventos de webhook em cada alteração.
- 04
Canais privados com autenticação
Handshake de autenticação no cliente; o seu backend assina o pedido de subscrição.
- 05
Canais encriptados
Encriptação ponta a ponta para canais que transportam dados sensíveis.
- 06
Recuperação de estado da conexão
Os clientes reconectam e reproduzem eventos perdidos durante a desconexão, até uma janela configurável.
- 07
Rate limits ao nível do canal
Limites de publicação configuráveis por canal. O dashboard mostra o limite e a taxa atual.
- 08
Encaminhamento entre regiões
As conexões são encaminhadas automaticamente para o nó edge mais próximo. As latências mantêm-se baixas em qualquer região.
- 09
Webhooks sobre o estado do canal
realtime.channel.occupied, realtime.channel.vacated, realtime.member.added, realtime.member.removed. O mesmo envelope HMAC de qualquer outro canal Bird.
- 10
A mesma autenticação, o mesmo envelope de erro
Uma API key para Realtime, SMS, Email, WhatsApp, Voice. Um único registo de tipos de erro para todos.
Porque construímos o Realtime
A UX em tempo real é a primeira coisa que falha quando se escala. Gerimo-la há uma década.
Bird Realtime é a infraestrutura WebSocket que sustentou o Pusher Channels — o serviço com o qual muitos de vocês já trabalham há anos. Estamos a integrá-lo na nova API Bird para que partilhe autenticação, observabilidade e faturação com tudo o resto que fazem no Bird. Se já utilizam o Pusher, o vosso serviço continua a correr nos mesmos canais; o novo SDK é a mudança visível para o programador.
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 mudança de estado é um webhook.
Payloads assinados com HMAC, protegidos contra replay, idempotentes. O mesmo envelope em todos os canais Bird — aprenda um, aprendeu 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"
}
}
Agenda de retentativas: 5s, 30s, 5m, 30m, 2h, 6h, 12h. Dead-letter após a tentativa final; cada evento em dead-letter pode ser reenviado pelo painel ou API.
realtime.channel.occupiedO primeiro subscritor juntou-se a um canal anteriormente vazio.realtime.channel.vacatedO último subscritor saiu; o canal está agora vazio.realtime.member.addedUm membro juntou-se a um canal de presença.realtime.member.removedUm membro saiu de um canal de presença.realtime.message.publishedUm evento foi publicado num canal.
Se você já integrou e-mail, já integrou o Realtime.
Mesma autenticação, mesmo contrato de idempotência, mesmo envelope de erro, mesmo formato de webhook. A diferença é o transporte — uma conexão WebSocket persistente em vez de um envio REST pontual.
Realtime.
const channel = bird.realtime.subscribe("orders:BRD-49217");
channel.on("order.shipped", (event) => {
render(event.data);
});
Abra uma conexão, inscreva-se em um canal e receba eventos em tempo real. Mesma autenticação dos seus envios transacionais.
SMS.
await bird.sms.send({
from: "Bird",
to: "+15005550006",
text: `Your order has shipped.`,
category: "transactional",
});
Mesmo envelope, mesma idempotência. Para quando o evento precisa chegar a um telefone, não a um cliente conectado.
Preços em breve.
Os preços do Realtime estão sendo finalizados. Se você já é cliente do Pusher Channels, seu serviço permanece no plano atual. Para um orçamento do novo Bird Realtime SDK, entre em contato.