playbook/antigravity-awesome-skills/skills/whatsapp-cloud-api/references/compliance.md

405 lines
13 KiB
Markdown

# Compliance e Boas Praticas - WhatsApp Cloud API
Guia completo de compliance para integracoes WhatsApp Business, cobrindo LGPD, GDPR, politicas do WhatsApp, opt-in/opt-out, quality rating e tier system.
---
## Indice
1. [LGPD - Brasil](#lgpd---brasil)
2. [GDPR - Uniao Europeia](#gdpr---uniao-europeia)
3. [Politicas do WhatsApp](#politicas-do-whatsapp)
4. [Opt-in e Opt-out](#opt-in-e-opt-out)
5. [Quality Rating Dashboard](#quality-rating-dashboard)
6. [Tier System - Limites de Mensagem](#tier-system---limites-de-mensagem)
7. [Retencao e Exclusao de Dados](#retencao-e-exclusao-de-dados)
8. [Checklist de Compliance Pre-Lancamento](#checklist-de-compliance-pre-lancamento)
---
## LGPD - Brasil
A Lei Geral de Protecao de Dados (Lei 13.709/2018) se aplica a qualquer tratamento de dados pessoais realizado no Brasil.
### Base Legal para Mensagens WhatsApp
| Base Legal | Quando Usar | Exemplo |
|----------------------|------------------------------------------------|----------------------------------|
| Consentimento | Marketing, promocoes, newsletters | Campanha de Black Friday |
| Execucao de contrato | Notificacoes de pedido, entrega, pagamento | Confirmacao de compra |
| Interesse legitimo | Atendimento ao cliente, suporte | Resposta a duvida do cliente |
| Obrigacao legal | Notificacoes regulatorias | Aviso de recall de produto |
### Direitos do Titular (LGPD Art. 18)
Sua integracao deve suportar:
1. **Confirmacao de tratamento** - Informar quais dados sao processados
2. **Acesso aos dados** - Fornecer copia dos dados armazenados
3. **Correcao** - Permitir atualizacao de dados incorretos
4. **Anonimizacao/exclusao** - Apagar dados quando solicitado
5. **Portabilidade** - Exportar dados em formato legivel
6. **Revogacao do consentimento** - Opt-out a qualquer momento
### Implementacao Tecnica
```typescript
// Registrar consentimento com detalhes completos
interface ConsentRecord {
phone: string;
consentType: 'marketing' | 'transactional' | 'support';
method: 'whatsapp_optin' | 'website_form' | 'sms' | 'verbal';
timestamp: Date;
ipAddress?: string;
message?: string; // texto exato do consentimento
legalBasis: 'consent' | 'contract' | 'legitimate_interest';
}
async function recordConsent(record: ConsentRecord): Promise<void> {
await db.consents.create({
...record,
timestamp: new Date(),
active: true
});
}
// Revogar consentimento
async function revokeConsent(phone: string, type: string): Promise<void> {
await db.consents.update(
{ phone, consentType: type },
{ active: false, revokedAt: new Date() }
);
}
```
---
## GDPR - Uniao Europeia
Se voce atende clientes na UE, o GDPR (Regulamento 2016/679) se aplica.
### Requisitos Especificos
1. **Opt-in Duplo (Double Opt-in)**
- Primeiro opt-in: cliente fornece numero (site, formulario, QR code)
- Segundo opt-in: enviar mensagem de confirmacao via WhatsApp
- Cliente responde com keyword (ex: "SIM") para confirmar
2. **BSP Certificado EU**
- Use apenas Business Solution Providers com servidores na EU
- A WhatsApp Cloud API da Meta e hospedada nos EUA — verifique se ha adequacao para seu caso
3. **DPA (Data Processing Agreement)**
- Contrato formal com a Meta sobre processamento de dados
- Disponivel em Meta Business Settings
4. **Informacao Clara ao Usuario**
- Antes do opt-in, informar: quais dados, para que finalidade, por quanto tempo
- Link para politica de privacidade
### Implementacao de Double Opt-in
```python
async def handle_optin_flow(phone: str, stage: str) -> None:
if stage == "initial":
# Primeiro contato - enviar template de confirmacao
await send_template(
to=phone,
template_name="optin_confirmation",
language="pt_BR",
components=[{
"type": "body",
"parameters": [{"type": "text", "text": "mensagens promocionais"}]
}]
)
await save_optin_stage(phone, "awaiting_confirmation")
elif stage == "awaiting_confirmation":
# Cliente respondeu - verificar keyword
# (chamado pelo webhook handler)
pass
async def process_optin_response(phone: str, message: str) -> None:
keyword = message.strip().upper()
if keyword in ["SIM", "YES", "ACEITO", "CONFIRMO"]:
await record_consent(ConsentRecord(
phone=phone,
consent_type="marketing",
method="whatsapp_double_optin",
timestamp=datetime.now(),
message=f"Usuario respondeu: {message}"
))
await send_text(phone, "Obrigado! Voce foi inscrito com sucesso. Envie SAIR a qualquer momento para cancelar.")
else:
await send_text(phone, "Opt-in nao confirmado. Voce nao recebera mensagens promocionais.")
```
---
## Politicas do WhatsApp
### Conteudo Proibido
O WhatsApp proibe mensagens contendo:
- Produtos ilegais (drogas, armas, documentos falsos)
- Conteudo adulto explicito
- Jogos de azar nao regulamentados
- Esquemas de piramide ou fraude
- Conteudo que incite violencia ou odio
- Venda de dados pessoais
- Medicamentos controlados sem prescricao
### Regras de Frequencia
- Nao envie mais de 1 mensagem de marketing por semana para o mesmo usuario
- Respeite preferencias de frequencia do usuario
- Mensagens transacionais podem ser mais frequentes (conforme necessidade)
- Nunca envie mensagens em massa sem segmentacao
### Spam Signals
O WhatsApp monitora estes sinais para detectar spam:
- Taxa alta de bloqueios por usuarios
- Envio em massa para numeros que nunca interagiram
- Mensagens identicas para muitos destinatarios
- Baixa taxa de resposta/engajamento
- Reports de spam por usuarios
---
## Opt-in e Opt-out
### Metodos Validos de Opt-in
1. **Website/Landing Page** - Formulario com checkbox explicito
2. **QR Code** - Link wa.me que inicia conversa
3. **SMS** - Enviar keyword para numero curto
4. **Presencial** - Consentimento verbal registrado
5. **WhatsApp** - Double opt-in via mensagem
### Implementacao de Opt-out
```typescript
const OPTOUT_KEYWORDS = ['sair', 'stop', 'cancelar', 'parar', 'descadastrar', 'unsubscribe'];
function isOptOutRequest(message: string): boolean {
return OPTOUT_KEYWORDS.includes(message.trim().toLowerCase());
}
async function handleOptOut(phone: string): Promise<void> {
// 1. Revogar consentimento
await revokeConsent(phone, 'marketing');
// 2. Confirmar ao usuario
await sendText(phone,
'Voce foi descadastrado com sucesso e nao recebera mais mensagens promocionais. ' +
'Mensagens transacionais (pedidos, entregas) continuarao sendo enviadas conforme necessario. ' +
'Para se inscrever novamente, envie ATIVAR.'
);
// 3. Registrar evento
await logEvent('optout', { phone, timestamp: new Date() });
}
```
### Registro de Comprovacao
Para cada opt-in, registre:
- **Telefone** do usuario
- **Timestamp** exato (com timezone)
- **Metodo** usado (website, QR, SMS, WhatsApp)
- **Texto exato** do consentimento apresentado
- **IP** (se via web)
- **Finalidade** especifica (marketing, transacional, suporte)
---
## Quality Rating Dashboard
### Como Acessar
WhatsApp Manager → Overview → Insights tab
### Sistema de Cores
| Cor | Significado | Impacto |
|-----------|--------------------------------------|------------------------------------------|
| Verde | Alta qualidade | Elegivel para upgrade de tier |
| Amarelo | Qualidade media, atencao necessaria | Nao perde tier, mas nao avanca |
| Vermelho | Qualidade baixa | Risco de restricao, nao avanca de tier |
### Sinais Monitorados (ultimos 7 dias)
**Positivos:**
- Alta taxa de resposta dos clientes
- Engajamento com botoes/listas
- Conversas longas (multiplas mensagens)
- Baixa taxa de bloqueio
**Negativos:**
- Bloqueios frequentes
- Reports de spam
- Baixo engajamento
- Mensagens nao lidas
### Acoes por Rating
**Verde:** Continue como esta. Foque em manter a qualidade.
**Amarelo:**
- Revise o conteudo das mensagens de marketing
- Reduza a frequencia de envio
- Melhore a segmentacao (envie apenas para quem tem interesse)
- Verifique se o opt-out esta funcionando
**Vermelho:**
- Pare imediatamente de enviar marketing
- Revise toda a base de contatos (remova inativos)
- Verifique se ha problemas tecnicos (mensagens duplicadas)
- Foque apenas em mensagens transacionais ate recuperar
---
## Tier System - Limites de Mensagem
### Estrutura de Tiers (Atualizado Outubro 2025)
Desde outubro 2025, os limites sao por **Business Portfolio**, nao por numero individual.
| Tier | Conversas/24h | Throughput |
|--------------|---------------|-----------------|
| Inicial | 250 | 80 msg/s |
| Tier 1 | 1,000 | 80 msg/s |
| Tier 2 | 10,000 | 80 msg/s |
| Tier 3 | 100,000 | 80 msg/s |
| Unlimited | Ilimitado | 1,000 msg/s |
### Auto-Upgrade
O WhatsApp faz upgrade automatico quando:
1. Quality rating e verde ou amarelo
2. Voce envia para 50%+ do limite atual por 7 dias consecutivos
3. Tempo de upgrade: 6 horas (antes era 24h)
**Exemplo:** Se seu limite e 1,000, envie para 500+ clientes unicos por 7 dias para subir para 10,000.
### Mudancas 2026
- **Q1 2026:** Tiers 2K e 10K serao removidos para parceiros selecionados
- **Q2 2026:** Remocao completa — apos verificacao de negocio, limite imediato de 100K
- **Business Portfolio Pacing:** Novo recurso para campanhas em massa com pausa automatica baseada em feedback
### Regra Importante
Uma vez que voce alcanca um tier, **nao perde** mesmo se a qualidade cair. O rating afeta apenas a capacidade de subir para tiers maiores.
Se um numero no Business Portfolio ja esta em Unlimited, **todos** os novos numeros adicionados iniciam em Unlimited.
---
## Retencao e Exclusao de Dados
### Politica Recomendada
| Tipo de Dado | Retencao Recomendada | Justificativa |
|------------------------|----------------------|----------------------------------|
| Mensagens de conversa | 90 dias | Suporte e auditoria |
| Dados de consentimento | Enquanto ativo + 5 anos | Comprovacao legal |
| Dados de opt-out | 5 anos | Evitar reenvio + comprovacao |
| Logs de webhook | 30 dias | Debug e monitoramento |
| Metricas agregadas | 2 anos | Analytics e melhoria |
### Exclusao Automatica
```typescript
// Cron job diario para limpar dados antigos
async function cleanupOldData(): Promise<void> {
const now = new Date();
// Mensagens > 90 dias
await db.messages.deleteMany({
createdAt: { $lt: new Date(now.getTime() - 90 * 24 * 60 * 60 * 1000) }
});
// Logs > 30 dias
await db.webhookLogs.deleteMany({
createdAt: { $lt: new Date(now.getTime() - 30 * 24 * 60 * 60 * 1000) }
});
// Sessoes expiradas
await db.sessions.deleteMany({
lastActivity: { $lt: new Date(now.getTime() - 24 * 60 * 60 * 1000) }
});
}
```
### Atender Pedido de Exclusao (LGPD/GDPR)
```typescript
async function handleDataDeletionRequest(phone: string): Promise<void> {
// 1. Anonimizar mensagens (manter para analytics, sem PII)
await db.messages.updateMany(
{ phone },
{ $set: { phone: 'ANONIMIZADO', content: '[REMOVIDO]' } }
);
// 2. Deletar dados pessoais
await db.customers.deleteOne({ phone });
await db.sessions.deleteOne({ phone });
// 3. Manter registro de opt-out (para nao enviar novamente)
await db.optouts.create({ phone, deletedAt: new Date() });
// 4. Confirmar ao usuario
await sendText(phone,
'Seus dados pessoais foram removidos conforme solicitado. ' +
'Seu número será mantido apenas em nossa lista de exclusão para garantir que não enviaremos mais mensagens.'
);
// 5. Log de auditoria
await logEvent('data_deletion', { phone, timestamp: new Date() });
}
```
---
## Checklist de Compliance Pre-Lancamento
Use esta checklist antes de colocar sua integracao em producao:
### Consentimento
- [ ] Mecanismo de opt-in implementado e testado
- [ ] Double opt-in para EU/GDPR (se aplicavel)
- [ ] Registro de consentimento com timestamp, metodo e finalidade
- [ ] Consentimento especifico para cada tipo (marketing, transacional)
### Opt-out
- [ ] Keywords de opt-out reconhecidas (SAIR, STOP, CANCELAR, etc.)
- [ ] Confirmacao enviada apos opt-out
- [ ] Opt-out processado em tempo real (nao no dia seguinte)
- [ ] Base atualizada imediatamente apos opt-out
### Dados
- [ ] Politica de retencao definida e implementada
- [ ] Rotina de exclusao automatica funcionando
- [ ] Processo para atender pedidos de exclusao (LGPD Art. 18)
- [ ] Dados armazenados com seguranca (encriptacao em repouso)
### WhatsApp
- [ ] Templates aprovados antes do primeiro envio
- [ ] Verificacao de negocio completa (para limites maiores)
- [ ] Quality rating monitorado semanalmente
- [ ] Conteudo dentro das politicas do WhatsApp
- [ ] Frequencia de marketing adequada (max 1x/semana)
### Seguranca
- [ ] HMAC-SHA256 validation no webhook (OBRIGATORIO)
- [ ] Tokens armazenados em variaveis de ambiente (nunca no codigo)
- [ ] HTTPS com certificado SSL valido
- [ ] Access control: apenas pessoal autorizado acessa dados
### Documentacao
- [ ] Politica de privacidade atualizada mencionando WhatsApp
- [ ] Termos de uso incluem uso do canal WhatsApp
- [ ] DPA assinado com a Meta (para GDPR)