BIRD Realtime

Realtime API para as suas apps. Subscreva, publique, escale.

Configure em:
Cursor

Chat ao vivo, presença, notificações in-app e dashboards em tempo real, sem gerir a infraestrutura 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 de npm install ao primeiro evento

Publique o seu primeiro evento na linguagem que já utiliza.

SDK de servidor para TypeScript, Python, Go e PHP, clientes de navegador, Swift e Kotlin para o lado de subscrição, e HTTP simples quando preferir não adicionar uma dependência. Um canal não precisa de provisionamento: ele existe assim que algo se inscreve nele.

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

O que pode construir com Realtime

Leve atualizações ao vivo a cada canto do seu produto, de chat e dashboards a rastreamento e jogos, tudo através de uma API simples.

  1. 01

    Resultados e pontuações ao vivo

    Atualizações de partidas, resultados de sondagens, noites eleitorais: uma chamada de publicação distribui o novo valor para todos os ecrãs subscritos ao mesmo tempo.

  2. 02

    Chat in-app

    Um canal por sala, presença para quem está online e eventos de cliente para indicadores de digitação, sem ida e volta ao servidor.

  3. 03

    Colaboração online

    Eventos de cliente distribuem posições de cursor, seleções e sinais de coedição entre pares através do canal, sem passagem pelo backend.

  4. 04

    Jogos multijogador

    A presença preenche o lobby, eventos de cliente transportam as jogadas e um canal por partida mantém o estado visível para cada jogador.

  5. 05

    Gráficos e dashboards ao vivo

    Publique métricas à medida que mudam. Um canal com cache entrega o valor atual a cada participante tardio, para que os gráficos nunca apareçam vazios.

  6. 06

    Indicadores de presença

    Canais de presença rastreiam membros à medida que entram e saem; webhooks mantêm o registo do seu backend sincronizado.

  7. 07

    Rastreamento de localização ao vivo

    Um estafeta no mapa do cliente, amigos a partilhar uma rota, uma frota no ecrã de despacho: publique coordenadas e cada observador acompanha, com a última posição conhecida em cache para participantes tardios.

  8. 08

    Estado de encomenda e entrega

    Um canal com cache por encomenda mantém o estado atual, de modo que a subscrição funciona também como consulta do estado inicial.

  9. 09

    Leilões e licitações

    Cada lance chega a todos os ecrãs dos licitantes ao mesmo tempo, e um canal com cache entrega a licitação mais alta a quem entra a meio do leilão.

  10. 10

    Feeds de notificação por utilizador

    Um canal privado por utilizador, subscrições assinadas pelo seu backend, para que apenas o cliente certo possa ouvir.

Porquê Realtime

A UX ao vivo é a primeira coisa que falha quando escala. Nós gerimos isto há mais de uma década.

Estado de conexão, presença, fan-out, backoff de reconexão e a capacidade de absorver picos de tráfego são as partes de uma funcionalidade ao vivo que são fáceis de prototipar e difíceis de operar. O Realtime executa-as como um serviço gerido dentro da Bird API, para que um canal ao vivo partilhe a autenticação, a observabilidade e os webhooks que já usa para email e SMS.

presence.ts
18 members
import type { Member } from "@messagebird/realtime";

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

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

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

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

Cada mudança de estado é um webhook.

Clientes entram e saem sem nunca tocar no seu backend. É assim que ele fica a saber: inicie o trabalho pesado quando o primeiro subscritor chega, pare quando o último sai e mantenha a sua própria visão de quem está numa 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_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.connection_countA contagem de conexões de um canal foi alterada.

Se você já integrou e-mail, já integrou o Realtime.

Mesma autenticação, mesmo contrato de idempotência, mesmo envelope de erros, mesmo formato de webhooks. A diferença está no transporte: uma conexão WebSocket persistente em vez de um envio REST pontual.

Realtime.

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

Alcança a pessoa onde quer que esteja conectada, em cada aba e dispositivo ao mesmo tempo. Sem canal para nomear, sem conexão para rastrear.

SMS.

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

A mesma chamada, um canal acima. Para quando a atualização precisa chegar a um telefone em vez de um cliente conectado.

Put it into practice.

Continue with the documentation, guides and examples for this topic. Resources are in English.

Try the practice and get an implementation brief

Comece com um canal.
Adicione os outros quando estiver pronto.

Uma chave API de teste é sua imediatamente. A produção é desbloqueada quando você adiciona um método de pagamento e verifica um remetente.

Usa Claude Code, Cursor ou Codex? Copie um prompt de configuração e o seu agente instala o Bird CLI e as skills por si. Escolha o seu:

Cursor