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
2. Base legal para envio
| Tipo de mensagem | Base legal | Consentimento necessário? |
|---|---|---|
| Transacional | Execução de contrato | Não (mas informar) |
| Marketing | Consentimento | Sim, obrigatório |
| Segurança | Legítimo interesse | Não (OTP, alertas) |
| Cobrança | Execução de contrato | Nã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
- Acesse Canais → SMS → Compliance
- 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:
| Palavra | Ação |
|---|---|
SAIR | Remove da lista de marketing |
PARAR | Remove da lista de marketing |
STOP | Remove da lista de marketing |
CANCELAR | Remove da lista de marketing |
DESCADASTRAR | Remove da lista de marketing |
Processo automático
- Cliente responde "SAIR" ao seu SMS
- Sistema identifica a palavra-chave
- Consentimento é revogado automaticamente
- 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
| Evento | Descrição |
|---|---|
consent_granted | Consentimento concedido |
consent_revoked | Consentimento revogado |
message_blocked | Mensagem bloqueada por regra |
opt_out_detected | Palavra-chave de opt-out detectada |
limit_exceeded | Limite 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.