Pular para o conteúdo principal
Use client.events() para receber eventos da instancia em tempo real, sem expor URL publica. Para callbacks HTTP, veja Webhooks.

Eventos comuns

EventoDescricao
MessageNova mensagem recebida ou evento de mensagem.
ReadReceiptAtualizacao de leitura/entrega.
PresencePresenca do usuario.
ChatPresencePresenca em chat.
HistorySyncSincronizacao de historico.
ConnectedInstancia conectada ao WhatsApp.
DisconnectedInstancia desconectada.
GroupParticipantsAddParticipantes adicionados em grupo.
GroupParticipantsRemoveParticipantes removidos de grupo.
AllTodos os eventos assinados.

Assinar realtime

try (var subscription = client.events().subscribe(EventSubscribeRequest.builder()
    .instanceId(instanceId)
    .instanceToken(instanceToken)
    .event(VZapsEventType.MESSAGE)
    .event(VZapsEventType.CONNECTED)
    .reconnect(true)
    .build())) {

  subscription.on(VZapsEventType.MESSAGE, event -> {
    System.out.println(event.id());
    System.out.println(event.instanceId());
  });

  subscription.awaitClose();
}
Retorno: EventSubscription — objeto com on(), close() e reconexao automatica quando configurada. Opcoes principais em EventSubscribeRequest: instanceId, instanceToken, event(...), reconnect, maxRetries, retryDelayMs, lastEventId.

Registrar handlers

subscription.on(VZapsEventType.MESSAGE, event -> {
  System.out.println(event.id());
});

Fechar assinatura

subscription.close();
Retorno: Promise<void> apos fechar o WebSocket.

Envelope do evento

Cada evento recebido tem este formato JSON:
{
  "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"
  }
}

Entrega e ack

A entrega e at-least-once. Deduplique por event.id() quando handlers tiverem efeitos colaterais. Use lastEventId(...) ao reconectar para reduzir lacunas.