Pular para o conteúdo principal

Compliance SMS: LGPD & Boas Práticas

⚖️ Compliance: Configure regras de envio para estar em conformidade com a LGPD e regulamentações brasileiras de telecomunicações.

Este guia mostra como configurar regras de compliance para SMS no Brasil, incluindo horários de silêncio, limites de envio, gestão de consentimentos e opt-out automático.


Regulamentação brasileira de SMS

Leis aplicáveis

  • LGPD (Lei 13.709/18): Proteção de dados e consentimento
  • Lei 9.296/96: Telemarketing e horários permitidos
  • Resolução Anatel 612/13: Proteção ao consumidor
  • MP 2.200-2/01: Marco Civil da Internet

O que é proibido

❌ Enviar SMS sem consentimento prévio
❌ Enviar durante horários de silêncio (22h–08h)
❌ Não oferecer opção de cancelamento (opt-out)
❌ Enviar mensagens excessivas (spam)
❌ Usar remetente falso ou enganoso


Obrigações LGPD para SMS

1. Consentimento (opt-in)

Antes de enviar SMS marketing, você deve:

  • Obter consentimento explícito do titular
  • Informar finalidade do uso do telefone
  • Registrar data e hora do consentimento
  • Permitir revogação a qualquer momento
Tipo de mensagemBase legalConsentimento necessário?
TransacionalExecução de contratoNão (mas informar)
MarketingConsentimentoSim, obrigatório
SegurançaLegítimo interesseNão (OTP, alertas)
CobrançaExecução de contratoNão (mas limitado)

3. Retenção de dados

  • Mantenha logs de envio por 5 anos (obrigação fiscal)
  • Consentimentos devem ser mantidos enquanto válidos
  • Após opt-out, mantenha apenas registro da revogação

Configurar horários de silêncio

Por padrão, a Notifica bloqueia envios entre 22:00 e 08:00 (horário de Brasília).

Via Dashboard

  1. Acesse Canais → SMS → Compliance
  2. Configure:
Horários de Silêncio: ✅ Ativado
Início: 22:00
Fim: 08:00
Fuso horário: America/Sao_Paulo

Via API

curl -X PATCH https://app.usenotifica.com.br/v1/channels/sms/compliance \
-H "Authorization: Bearer nk_live_sua_chave" \
-H "Content-Type: application/json" \
-d '{
"quiet_hours_enabled": true,
"quiet_hours_start": "22:00",
"quiet_hours_end": "08:00",
"timezone": "America/Sao_Paulo"
}'

Resposta:

{
"quiet_hours_enabled": true,
"quiet_hours_start": "22:00",
"quiet_hours_end": "08:00",
"timezone": "America/Sao_Paulo",
"updated_at": "2024-01-15T10:00:00Z"
}

Mensagens isentas de horário

SMS transacionais (OTP, alertas de segurança) podem ignorar horários de silêncio:

curl -X POST https://app.usenotifica.com.br/v1/notifications \
-H "Authorization: Bearer nk_live_sua_chave" \
-H "Content-Type: application/json" \
-d '{
"to": { "phone": "+5511987654321" },
"channel": "sms",
"content": "Seu código OTP: 584321",
"bypass_quiet_hours": true
}'

Limites diários por destinatário

Evite spam configurando limites de frequência:

Via Dashboard

Canais → SMS → Compliance → Limites

Limite diário por número: 5
Limite por hora: 2

Via API

curl -X PATCH https://app.usenotifica.com.br/v1/channels/sms/compliance \
-H "Authorization: Bearer nk_live_sua_chave" \
-H "Content-Type: application/json" \
-d '{
"daily_limit_per_recipient": 5,
"hourly_limit_per_recipient": 2
}'

Requerer opt-in

Exija confirmação de consentimento antes de enviar:

curl -X PATCH https://app.usenotifica.com.br/v1/channels/sms/compliance \
-H "Authorization: Bearer nk_live_sua_chave" \
-H "Content-Type: application/json" \
-d '{
"require_opt_in": true,
"opt_in_confirmation_required": true
}'

Gerenciamento de consentimentos

Criar registro de consentimento

curl -X POST https://app.usenotifica.com.br/v1/channels/sms/consents \
-H "Authorization: Bearer nk_live_sua_chave" \
-H "Content-Type: application/json" \
-d '{
"phone": "+5511987654321",
"consent_type": "marketing",
"source": "website_form",
"source_detail": "Landing page Black Friday",
"metadata": {
"ip_address": "189.12.34.56",
"user_agent": "Mozilla/5.0...",
"form_id": "newsletter_001"
}
}'

Resposta:

{
"id": "consent_abc123",
"phone": "+5511987654321",
"consent_type": "marketing",
"status": "active",
"created_at": "2024-01-15T10:00:00Z",
"source": "website_form"
}

Listar consentimentos

curl https://app.usenotifica.com.br/v1/channels/sms/consents \
-H "Authorization: Bearer nk_live_sua_chave"

Resposta:

{
"data": [
{
"id": "consent_abc123",
"phone": "+5511987654321",
"status": "active",
"consent_type": "marketing",
"created_at": "2024-01-15T10:00:00Z"
}
],
"total": 150,
"page": 1
}

Resumo de consentimentos

curl https://app.usenotifica.com.br/v1/channels/sms/consents/summary \
-H "Authorization: Bearer nk_live_sua_chave"

Resposta:

{
"total_active": 15234,
"total_opted_out": 345,
"by_type": {
"marketing": 12000,
"transactional": 15234,
"all": 15234
},
"recent_opt_ins": 156,
"recent_opt_outs": 12
}

Verificar consentimento de um número

curl https://app.usenotifica.com.br/v1/channels/sms/consents/+5511987654321 \
-H "Authorization: Bearer nk_live_sua_chave"

Importar consentimentos em massa

Para migrar uma lista existente:

curl -X POST https://app.usenotifica.com.br/v1/channels/sms/consents/import \
-H "Authorization: Bearer nk_live_sua_chave" \
-H "Content-Type: application/json" \
-d '{
"consents": [
{
"phone": "+5511987654321",
"consent_type": "marketing",
"source": "migration",
"consented_at": "2024-01-01T00:00:00Z"
},
{
"phone": "+5511998765432",
"consent_type": "marketing",
"source": "migration",
"consented_at": "2024-01-01T00:00:00Z"
}
]
}'

Resposta:

{
"imported": 2,
"skipped": 0,
"errors": []
}

Opt-out (cancelamento)

Palavras-chave automáticas

A Notifica detecta automaticamente:

PalavraAção
SAIRRemove da lista de marketing
PARARRemove da lista de marketing
STOPRemove da lista de marketing
CANCELARRemove da lista de marketing
DESCADASTRARRemove da lista de marketing

Processo automático

  1. Cliente responde "SAIR" ao seu SMS
  2. Sistema identifica a palavra-chave
  3. Consentimento é revogado automaticamente
  4. Confirmação é enviada ao cliente

Remover manualmente (opt-out)

curl -X DELETE https://app.usenotifica.com.br/v1/channels/sms/consents/+5511987654321 \
-H "Authorization: Bearer nk_live_sua_chave" \
-H "Content-Type: application/json" \
-d '{
"reason": "user_request",
"source": "support_dashboard"
}'

Resposta:

{
"success": true,
"phone": "+5511987654321",
"previous_status": "active",
"new_status": "opted_out",
"opted_out_at": "2024-01-15T10:00:00Z"
}

Mensagem de confirmação de opt-out

Configure a mensagem automática:

curl -X PATCH https://app.usenotifica.com.br/v1/channels/sms/compliance \
-H "Authorization: Bearer nk_live_sua_chave" \
-H "Content-Type: application/json" \
-d '{
"opt_out_confirmation_message": "Você foi removido da nossa lista. Para voltar a receber mensagens, responda SIM."
}'

Analytics de compliance

Estatísticas de bloqueios

curl https://app.usenotifica.com.br/v1/channels/sms/compliance/analytics \
-H "Authorization: Bearer nk_live_sua_chave" \
-G -d "period=7d"

Resposta:

{
"period": "7d",
"blocked_by_quiet_hours": 45,
"blocked_by_daily_limit": 12,
"blocked_by_consent": 8,
"total_blocked": 65,
"total_attempted": 15234
}

Logs de eventos

curl https://app.usenotifica.com.br/v1/channels/sms/compliance/logs \
-H "Authorization: Bearer nk_live_sua_chave" \
-G -d "phone=+5511987654321" -d "limit=50"

Resposta:

{
"data": [
{
"id": "log_001",
"event": "consent_granted",
"phone": "+5511987654321",
"timestamp": "2024-01-10T14:30:00Z",
"source": "website_form"
},
{
"id": "log_002",
"event": "message_blocked",
"phone": "+5511987654321",
"timestamp": "2024-01-15T23:45:00Z",
"reason": "quiet_hours",
"scheduled_for": "2024-01-16T08:00:00Z"
}
]
}

Eventos disponíveis

EventoDescrição
consent_grantedConsentimento concedido
consent_revokedConsentimento revogado
message_blockedMensagem bloqueada por regra
opt_out_detectedPalavra-chave de opt-out detectada
limit_exceededLimite diário excedido

Node.js

async function checkCompliance(phone) {
const response = await fetch(
`https://app.usenotifica.com.br/v1/channels/sms/consents/${phone}`,
{
headers: { 'Authorization': `Bearer ${process.env.NOTIFICA_API_KEY}` }
}
);
return response.json();
}

async function registerConsent(phone, source) {
const response = await fetch(
'https://app.usenotifica.com.br/v1/channels/sms/consents',
{
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.NOTIFICA_API_KEY}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
phone,
consent_type: 'marketing',
source,
metadata: { ip_address: req.ip }
})
}
);
return response.json();
}

async function optOutUser(phone) {
const response = await fetch(
`https://app.usenotifica.com.br/v1/channels/sms/consents/${phone}`,
{
method: 'DELETE',
headers: { 'Authorization': `Bearer ${process.env.NOTIFICA_API_KEY}` }
}
);
return response.json();
}

// Uso
const canSend = await checkCompliance('+5511987654321');
if (canSend.status === 'active') {
await sendMarketingSMS('+5511987654321', 'Promoção especial!');
}

Python

import requests

API_KEY = "nk_live_sua_chave"
BASE_URL = "https://app.usenotifica.com.br/v1"

def check_compliance(phone: str):
"""Verifica se pode enviar SMS para um número."""
response = requests.get(
f"{BASE_URL}/channels/sms/consents/{phone}",
headers={'Authorization': f'Bearer {API_KEY}'}
)
return response.json()

def register_consent(phone: str, source: str, **metadata):
"""Registra consentimento de um usuário."""
response = requests.post(
f"{BASE_URL}/channels/sms/consents",
headers={'Authorization': f'Bearer {API_KEY}'},
json={
'phone': phone,
'consent_type': 'marketing',
'source': source,
'metadata': metadata
}
)
return response.json()

def opt_out_user(phone: str, reason: str = "user_request"):
"""Remove consentimento (opt-out)."""
response = requests.delete(
f"{BASE_URL}/channels/sms/consents/{phone}",
headers={'Authorization': f'Bearer {API_KEY}'},
json={'reason': reason}
)
return response.json()

def get_compliance_stats(days: int = 7):
"""Obtém estatísticas de compliance."""
response = requests.get(
f"{BASE_URL}/channels/sms/compliance/analytics",
headers={'Authorization': f'Bearer {API_KEY}'},
params={'period': f'{days}d'}
)
return response.json()

# Uso
stats = get_compliance_stats()
print(f"Bloqueados por horário: {stats['blocked_by_quiet_hours']}")

Checklist de boas práticas

✅ Antes de enviar

  • Obtenha consentimento explícito para marketing
  • Registre a fonte e data do consentimento
  • Configure horários de silêncio (22h–08h)
  • Defina limites diários por número
  • Inclua identificação do remetente
  • Ofereça instruções de opt-out na mensagem

✅ Na mensagem

  • Seja claro sobre quem está enviando
  • Mantenha mensagens curtas e relevantes
  • Inclua valor real para o destinatário
  • Use linguagem respeitosa
  • Evite CAPS LOCK excessivo (parece spam)

✅ Gerenciamento

  • Monitore taxas de opt-out (meta: <1%)
  • Respeite imediatamente solicitações de cancelamento
  • Mantenha lista de números limpa (remove inativos)
  • Documente base legal de cada envio
  • Faça backup de consentimentos

❌ Não faça

  • Compre listas de números sem consentimento
  • Envie mensagens fora do horário permitido
  • Oculte a identidade do remetente
  • Envie mensagens excessivas ao mesmo número
  • Ignore pedidos de cancelamento

Template de mensagem de opt-in

Solicite consentimento de forma clara:

SuaEmpresa: Deseja receber promoções exclusivas por SMS? 
Responda SIM para confirmar.
Para cancelar a qualquer momento, responda SAIR.
Custos conforme plano da operadora.

Perguntas frequentes

Q: Preciso de consentimento para enviar cobrança?
A: Não, pois é necessário para execução do contrato. Mas respeite horários e opt-out.

Q: E se o cliente pedir para parar de receber?
A: Remova imediatamente. Atraso pode gerar multa da Anatel (até R$ 50 mil).

Q: Posso usar números de clientes cadastrados para marketing?
A: Apenas se eles consentiram especificamente. Separar bases transacional e marketing.

Q: Qual o prazo para responder um opt-out?
A: Imediato. A Notifica processa automaticamente em segundos.

Q: Posso enviar SMS no sábado e domingo?
A: Sim, desde que respeite o horário de silêncio (22h–08h).

Q: E feriados?
A: A Lei 9.296/96 não menciona feriados, mas evite envios em feriados nacionais como boa prática.


Próximo passo

Explore outros recursos de SMS:

Ou configure outros canais de notificação na documentação principal.