Pular para o conteúdo principal
Use vzaps.events para receber eventos da instância em tempo real, sem expor URL pública. Para callbacks HTTP, veja Webhooks.

Eventos comuns

EventoDescrição
MessageNova mensagem recebida ou evento de mensagem.
ReadReceiptAtualização de leitura/entrega.
PresencePresença do usuário.
ChatPresencePresença em chat.
HistorySyncSincronização de histórico.
ConnectedInstância conectada ao WhatsApp.
DisconnectedInstância desconectada.
GroupParticipantsAddParticipantes adicionados em grupo.
GroupParticipantsRemoveParticipantes removidos de grupo.
AllTodos os eventos assinados.

Assinar realtime

const subscription = await vzaps.events.subscribe({
  instanceId: 'VZ...',
  instanceToken: 'instance-token',
  events: ['Message', 'ReadReceipt', 'Connected', 'Disconnected'],
  reconnect: true,
  maxRetries: 10,
  retryDelayMs: 1000,
});
Retorno: EventSubscription — objeto com on(), close() e reconexao automatica quando configurada. Opções:
CampoTipoObrigatórioDescrição
instanceIdstringSimInstância que será acompanhada.
instanceTokenstringSimToken da instância.
eventsVZapsEventType[]NãoLista de eventos. Se omitido, usa eventos assinados na instância.
reconnectbooleanNãoReconectar automáticamente. Padrão: true.
maxRetriesnumberNãoMáximo de tentativas.
retryDelayMsnumberNãoDelay entre tentativas.
lastEventIdstringNãoCursor para retomada.
signalAbortSignalNãoFechar assinatura quando abortar.

Registrar handlers

subscription.on('open', () => {
  console.log('Realtime conectado');
});

subscription.on('Message', (event) => {
  console.log(event.id);
  console.log(event.instance_id);
  console.dir(event.data, { depth: null });
});

subscription.on('All', (event) => {
  console.log('Evento recebido:', event.type);
});

subscription.on('error', (error) => {
  console.error('Erro realtime:', error);
});

Fechar assinatura

await subscription.close();
Retorno: Promise<void> apos fechar o WebSocket. Em processos Node.js:
process.on('SIGINT', async () => {
  await subscription.close();
  process.exit(0);
});

Envelope do evento

Cada evento recebido pelo SDK tem este formato:
{
  "id": "evt_01J...",
  "type": "Message",
  "instance_id": "VZ...",
  "created_at": "2026-06-23T22:57:17.000Z",
  "data": {
    "type": "Message",
    "media_url": "https://cdn.example.com/media/image.jpg"
  }
}
Campos:
CampoDescrição
idIdentificador do evento. Use para deduplicação.
typeTipo do evento.
instance_idInstância origem.
created_atData de criação do evento.
dataPayload do evento.
data.media_urlURL de mídia quando o evento recebido contém mídia e a plataforma disponibiliza o arquivo.

Entrega e ack

A entrega é at-least-once. Seu app deve tratar eventos de forma idempotente. Depois que o handler termina, o SDK envia ack automáticamente. Recomendações:
  • salve event.id se sua automação executa efeitos externos;
  • ignore eventos já processados;
  • use lastEventId ao reconectar se quiser reduzir lacunas;
  • mantenha handlers rápidos e mova trabalhos longos para sua própria fila.

Realtime ou webhook?

CenárioRecomendação
Bot, dashboard ou app com consumo imediatoRealtime
Backend com URL pública e pipeline HTTPWebhook
Não quer expor URL públicaRealtime
Quer reprocessar entregas via logsWebhook