Pular para o conteúdo principal
Use client.Events.SubscribeAsync para receber eventos realtime da instância.

Eventos comuns

EventoQuando ocorre
MessageNova mensagem recebida ou enviada.
ReadReceiptAtualização de leitura.
PresencePresença de usuário.
HistorySyncSincronização de histórico.
ChatPresencePresença em conversa.
ConnectedInstância conectada.
DisconnectedInstância desconectada.
GroupParticipantsAddParticipante adicionado a grupo.
GroupParticipantsRemoveParticipante removido de grupo.
AllHandler para todos os eventos.

Assinar realtime

await using var subscription = await client.Events.SubscribeAsync(
    new VZapsEventSubscribeRequest
    {
        InstanceId = "VZ...",
        InstanceToken = "instance-token",
        Events = new[] { VZapsEventType.Message, VZapsEventType.Connected },
        Reconnect = true,
        MaxRetries = 10,
        LastEventId = "evt_123",
    },
    cancellationToken);
Retorno: EventSubscription — objeto com on(), close() e reconexao automatica quando configurada.

Registrar handlers

subscription.On(VZapsEventType.Message, async evt =>
{
    Console.WriteLine(evt.Id);
    await Task.CompletedTask;
});

subscription.On(VZapsEventType.All, evt =>
{
    Console.WriteLine(evt.Type);
});

Fechar assinatura

await subscription.WaitForCloseAsync(cancellationToken);
Retorno: Promise<void> apos fechar o WebSocket. Use await using para garantir fechamento limpo quando o escopo terminar.

Envelope do evento

public sealed class VZapsEvent
{
    public string Id { get; set; }
    public string Type { get; set; }
    public string InstanceId { get; set; }
    public DateTimeOffset? CreatedAt { get; set; }
    public JsonElement Data { get; set; }
}

Entrega e ack

O SDK envia ack depois que os handlers terminam. A entrega é at-least-once; deduplique pelo evt.Id quando o handler tiver efeitos colaterais.

Realtime ou webhook?

Use realtime para workers, CLIs, dashboards e processos que podem manter conexão WebSocket ativa. Use webhooks para integrações server-to-server persistentes.