Compliance

Como Funciona o Audit Logging no Notifica: Rastreabilidade Total para LGPD

Diego Santos6 min read
Compartilhar:

Como Funciona o Audit Logging no Notifica: Rastreabilidade Total

Se existe uma feature que define o DNA do Notifica, é o audit logging. Não porque é sexy. Porque é essencial.

Quando um auditor da ANPD bate na sua porta (ou, mais provavelmente, manda um email formal), ele vai perguntar:

  1. "Quando o usuário X deu consentimento para receber SMS?"
  2. "Quantas mensagens foram enviadas para este CPF nos últimos 6 meses?"
  3. "Quando e como foi processado o pedido de descadastro?"

Se você não conseguir responder em horas (não dias), tem um problema.

Por Que Audit Logging Importa (Além da LGPD)

Para Compliance

  • Prova de consentimento para a ANPD
  • Rastreabilidade de opt-in e opt-out
  • Histórico completo de comunicações por titular

Para Debugging

  • "Por que o João não recebeu o email?"
  • "Qual provedor entregou este SMS?"
  • "Em que momento o WhatsApp falhou e ativou o fallback?"

Para Negócios

  • Métricas reais de entrega por canal
  • Identificação de padrões de falha
  • Base para decisões de troca de provedor

O Que Logamos (Tudo)

Cada evento no ciclo de vida de uma notificação é registrado com timestamp, contexto e metadados.

1. Eventos de Consentimento

{
  "type": "consent.granted",
  "timestamp": "2026-02-26T14:30:00.000Z",
  "subscriberId": "usr_123",
  "data": {
    "channel": "sms",
    "topic": "marketing",
    "method": "double_opt_in",
    "formVersion": "v2.3",
    "ipAddress": "189.xxx.xxx.xxx",
    "userAgent": "Mozilla/5.0...",
    "source": "signup_form"
  }
}

2. Eventos de Envio

{
  "type": "notification.sent",
  "timestamp": "2026-02-26T14:31:05.123Z",
  "notificationId": "notif_abc123",
  "subscriberId": "usr_123",
  "data": {
    "channel": "whatsapp",
    "template": "order-confirmation",
    "provider": "waba-primary",
    "payload": {
      "numeroPedido": "#12345",
      "valor": "R$ 299,90"
    },
    "workflowId": "wf_purchase_flow",
    "stepIndex": 2
  }
}

3. Eventos de Entrega

{
  "type": "notification.delivered",
  "timestamp": "2026-02-26T14:31:07.456Z",
  "notificationId": "notif_abc123",
  "data": {
    "channel": "whatsapp",
    "provider": "waba-primary",
    "providerMessageId": "wamid.abc123...",
    "deliveredAt": "2026-02-26T14:31:07.200Z",
    "latencyMs": 2077
  }
}

4. Eventos de Falha

{
  "type": "notification.failed",
  "timestamp": "2026-02-26T14:31:08.789Z",
  "notificationId": "notif_def456",
  "data": {
    "channel": "sms",
    "provider": "zenvia-primary",
    "error": {
      "code": "INVALID_PHONE",
      "message": "Phone number not in E.164 format",
      "providerCode": "ERR_422"
    },
    "retryAttempt": 1,
    "maxRetries": 3,
    "nextRetryAt": "2026-02-26T14:32:08.789Z"
  }
}

5. Eventos de Opt-out

{
  "type": "consent.revoked",
  "timestamp": "2026-02-26T15:00:00.000Z",
  "subscriberId": "usr_123",
  "data": {
    "channel": "email",
    "topic": "all",
    "method": "unsubscribe_link",
    "processedAt": "2026-02-26T15:00:00.200Z",
    "suppressionListUpdated": true
  }
}

6. Eventos de Fallback

{
  "type": "workflow.fallback_triggered",
  "timestamp": "2026-02-26T14:32:10.000Z",
  "workflowId": "wf_fraud_alert",
  "data": {
    "originalChannel": "whatsapp",
    "fallbackChannel": "sms",
    "reason": "delivery_timeout",
    "timeoutMs": 30000,
    "subscriberId": "usr_789"
  }
}

Consultando Logs via API

Buscar por Subscriber

// Todos os eventos de um usuário específico
const logs = await notifica.auditLogs.list({
  subscriberId: 'usr_123',
  from: '2026-01-01',
  to: '2026-02-28',
  limit: 100,
});

console.log(`Total de eventos: ${logs.totalCount}`);
logs.data.forEach((event) => {
  console.log(`${event.timestamp} | ${event.type} | ${event.data.channel}`);
});

Buscar por Notificação

// Ciclo de vida completo de uma notificação específica
const timeline = await notifica.auditLogs.getTimeline('notif_abc123');

// Retorna algo como:
// 14:31:05 → notification.created
// 14:31:05 → notification.sent (whatsapp, waba-primary)
// 14:31:07 → notification.delivered (latência: 2077ms)
// 14:31:10 → notification.opened

Exportar para Auditoria

// Gerar relatório LGPD para um titular
const relatorio = await notifica.auditLogs.exportReport({
  subscriberId: 'usr_123',
  format: 'csv', // ou 'json', 'pdf'
  includeConsent: true,
  includeNotifications: true,
  includeOptOuts: true,
  dateRange: {
    from: '2025-01-01',
    to: '2026-02-28',
  },
});

// Download URL válida por 24h
console.log(relatorio.downloadUrl);

Dashboard de Audit Logs

Além da API, o Dashboard oferece uma interface visual para explorar logs:

Funcionalidades do Dashboard

  • Busca full-text — encontre qualquer evento por subscriber, template, canal ou erro
  • Filtros avançados — por tipo, canal, status, período
  • Timeline visual — veja o ciclo de vida de cada notificação
  • Exportação em 1 clique — CSV, JSON ou PDF
  • Alertas — notifique seu time quando falhas ultrapassarem threshold

Caso de Uso: Auditoria da ANPD

Imagine que a ANPD solicita:

"Apresente todos os registros de comunicação com o titular CPF xxx.xxx.xxx-xx nos últimos 12 meses, incluindo bases legais e registros de consentimento."

Com Notifica (tempo: ~5 minutos):

  1. Buscar subscriber por CPF no Dashboard
  2. Clicar em "Exportar Relatório LGPD"
  3. Selecionar período e formato PDF
  4. Download e envio ao auditor

Sem Notifica (tempo: ~3 dias):

  1. Consultar banco de dados de emails (SendGrid? CSV?)
  2. Consultar banco de dados de SMS (Twilio? Outro?)
  3. Consultar sistema interno de consentimento (se existir)
  4. Cruzar dados manualmente
  5. Formatar em relatório apresentável
  6. Torcer para não ter esquecido nenhum canal

Retenção e Armazenamento

Política de Retenção Padrão

Tipo de LogRetençãoConfigurável?
Consentimento (opt-in/opt-out)5 anosSim (mínimo 5 anos)
Envio de notificação2 anosSim
Entrega/falha2 anosSim
Dados de payload90 diasSim
Audit de acesso (quem viu)1 anoSim

Armazenamento Seguro

  • Criptografia em repouso — AES-256
  • Data residency Brasil — AWS São Paulo (sa-east-1)
  • Imutabilidade — logs não podem ser alterados após criação
  • Backup automático — redundância em 3 zonas de disponibilidade

Integrações com Ferramentas Externas

Enviar logs para seu Data Lake

// Configurar webhook de audit logs
await notifica.webhooks.create({
  url: 'https://meuapp.com.br/webhooks/audit',
  events: [
    'notification.sent',
    'notification.delivered',
    'notification.failed',
    'consent.granted',
    'consent.revoked',
  ],
  // Enviar em batch a cada 60 segundos
  batchSize: 100,
  batchIntervalMs: 60000,
});

Compatível com:

  • AWS S3 — export direto para bucket
  • BigQuery — via webhook + Cloud Functions
  • Datadog — integração nativa de logs
  • Elasticsearch — indexação automática

Boas Práticas

1. Não Logue Dados Sensíveis no Payload

// ❌ Errado: CPF completo no payload
payload: { cpf: '123.456.789-00', saldo: 'R$ 50.000' }

// ✅ Correto: Dados mascarados
payload: { cpf: '***.***.789-00', saldo: 'R$ **.***' }

A Notifica oferece mascaramento automático para campos sensíveis. Configure no Dashboard quais campos devem ser mascarados nos logs.

2. Defina Alertas

Configure alertas para:

  • Taxa de falha > 5% em qualquer canal
  • Opt-outs acima do normal (possível spam ou problema de conteúdo)
  • Latência de entrega > 10 segundos (problema de provedor)

3. Revise Logs Periodicamente

Uma vez por mês, faça uma revisão:

  • Quais templates têm mais falhas?
  • Qual provedor está com pior performance?
  • Existem subscribers recebendo mensagens sem consentimento válido?

Conclusão

Audit logging não é glamuroso. Ninguém posta no LinkedIn "Implementei logs de auditoria incríveis hoje!".

Mas quando chega uma solicitação da ANPD, ou quando seu CEO pergunta "por que 500 clientes reclamaram que não receberam o email?", ter logs completos e acessíveis é a diferença entre resolver em 5 minutos e entrar em pânico por 3 dias.

No Notifica, audit logging não é add-on. É fundação.


Quer ver o audit logging em ação? Crie uma conta gratuita, envie uma notificação de teste e veja cada etapa registrada em tempo real no Dashboard. Documentação completa de Audit Logs.

DS

Diego Santos

Growth Lead @ Notifica

Especialista em infraestrutura de notificações para o mercado brasileiro. Focado em ajudar desenvolvedores a escalar comunicação com clientes.

💡

Gostou deste guia?

Receba novos posts técnicos diretamente no seu email

Enviado via Notifica 🚀