Status: Interface pronta | Schema pendente no Supabase
┌─────────────────────────────────────┐
│ @username │
│ 1.2k seguidores • 150 posts │
│ │
│ 📱 Vincular WhatsApp ← BOTÃO NOVO │
└─────────────────────────────────────┘
┌─────────────────────────────────────┐
│ @username │
│ 1.2k seguidores • 150 posts │
│ │
│ ✅ WhatsApp: 66632607531 editar │
└─────────────────────────────────────┘
┌─────────────────────────────────────────────┐
│ 🟢 Vincular WhatsApp ✕ │
│ @username │
├─────────────────────────────────────────────┤
│ │
│ 👤 Seu Nome │
│ ┌─────────────────────────────────┐ │
│ │ Ex: João Silva │ │
│ └─────────────────────────────────┘ │
│ │
│ 📱 Número do WhatsApp │
│ ┌─────────────────────────────────┐ │
│ │ Ex: 66632607531 │ │
│ └─────────────────────────────────┘ │
│ Use apenas números (10-15 dígitos) │
│ │
│ ┌─────────────────────────────────┐ │
│ │ ✓ Com WhatsApp vinculado: │ │
│ │ • Criar conteúdo via WhatsApp │ │
│ │ • Aprovar carrosséis pelo 📱 │ │
│ │ • Receber slides prontos │ │
│ │ • Solicitar auditorias │ │
│ └─────────────────────────────────┘ │
│ │
│ [ Cancelar ] [ Vincular WhatsApp ] │
└─────────────────────────────────────────────┘
app/api/profiles/[id]/whatsapp/route.ts
├─ POST /api/profiles/[id]/whatsapp → Vincular/atualizar
└─ DELETE /api/profiles/[id]/whatsapp → Desvincular
Validações implementadas:
- ✅ Telefone obrigatório (10-15 dígitos)
- ✅ Nome obrigatório
- ✅ Apenas números aceitos
- ✅ Verifica se telefone já está vinculado em outro perfil
- ✅ Cria registro em
whatsapp_usersautomaticamente - ✅ Atualiza
active_profile_idpara o perfil atual
components/molecules/link-whatsapp-modal.tsx
├─ LinkWhatsAppModal
│ ├─ Formulário (nome + telefone)
│ ├─ Validações client-side
│ ├─ Estados de loading
│ ├─ Mensagens de erro
│ └─ Botão de desvincular
scripts/verificar-whatsapp-schema.cjs
├─ Verifica se tabela whatsapp_users existe
├─ Verifica se coluna whatsapp_phone existe
├─ Lista usuários cadastrados
└─ Lista perfis com WhatsApp vinculado
Arquivo: database/whatsapp-users-schema.sql
O que ele faz:
- Cria tabela
whatsapp_users - Adiciona coluna
whatsapp_phoneemprofiles - Cria foreign keys entre as tabelas
- Configura RLS (Row Level Security)
- Cria índices para performance
- Insere primeiro usuário (Felipe Ricardo - 66632607531)
Como aplicar:
- Abra: https://supabase.com/dashboard → seu projeto → SQL Editor
- Copie:
database/whatsapp-users-schema.sql - Cole no editor
- Clique em Run (ou
Ctrl + Enter) - Verifique:
node scripts/verificar-whatsapp-schema.cjs
┌──────────────────┬──────────────┬────────────────────────┐
│ Coluna │ Tipo │ Descrição │
├──────────────────┼──────────────┼────────────────────────┤
│ id │ UUID │ PK │
│ phone │ TEXT │ UNIQUE (ex: 66632...) │
│ name │ TEXT │ Nome do usuário │
│ active_profile_id│ UUID │ FK → profiles.id │
│ authorized │ BOOLEAN │ Se pode usar o bot │
│ created_at │ TIMESTAMP │ Data de cadastro │
│ updated_at │ TIMESTAMP │ Última atualização │
└──────────────────┴──────────────┴────────────────────────┘┌──────────────────┬──────────────┬────────────────────────┐
│ whatsapp_phone │ TEXT │ FK → whatsapp_users │
└──────────────────┴──────────────┴────────────────────────┘# 1. Iniciar dev server
npm run dev
# 2. Abrir perfil
http://localhost:3000/dashboard/profiles/[id]
# 3. Clicar em "Vincular WhatsApp"
# 4. Preencher:
Nome: Seu Nome
WhatsApp: 66632607531
# 5. Clicar em "Vincular"
# 6. Verificar: aparece "✅ WhatsApp: 66632607531"# Vincular WhatsApp ao perfil
node scripts/vincular-whatsapp.js @username 66632607531
# Verificar vínculos
node scripts/verificar-whatsapp-schema.cjs-- Ver todos os usuários WhatsApp
SELECT * FROM whatsapp_users;
-- Ver perfis com WhatsApp
SELECT username, whatsapp_phone
FROM profiles
WHERE whatsapp_phone IS NOT NULL;-
Criar conteúdo via WhatsApp
- Enviar: "criar carrossel sobre liderança"
- Sistema gera + envia para aprovação
-
Aprovar conteúdo via WhatsApp
- Receber proposta
- Responder:
/aprovar - Receber slides prontos
-
Solicitar auditoria
- Enviar:
@concorrente - Receber análise completa
- Enviar:
-
Consultar histórico
- Enviar:
/historico - Ver últimos 5 conteúdos
- Enviar:
-
Verificar status
- Enviar:
/status - Ver criações em andamento
- Enviar:
// /api/whatsapp/webhook
const { data: whatsappUser } = await supabase
.from('whatsapp_users')
.select('*, active_profile_id')
.eq('phone', phone)
.single()
if (whatsappUser?.active_profile_id) {
// Usuário identificado → processar comando
// Gerar conteúdo para o perfil vinculado
}// Buscar WhatsApp do perfil
const { data: profile } = await supabase
.from('profiles')
.select('whatsapp_phone')
.eq('id', profileId)
.single()
if (profile.whatsapp_phone) {
// Enviar mensagem via UAZapi
await fetch('/api/whatsapp/send', {
method: 'POST',
body: JSON.stringify({
phone: profile.whatsapp_phone,
message: 'Seu conteúdo está pronto!'
})
})
}- API route POST
/api/profiles/[id]/whatsapp - API route DELETE
/api/profiles/[id]/whatsapp - Validações de telefone (formato, duplicação)
- Criação automática em
whatsapp_users - Atualização de
active_profile_id - Schema aplicado no Supabase ⬅️ PENDENTE
- Modal
LinkWhatsAppModal - Integração na página de perfil
- Exibição do WhatsApp vinculado
- Botão de editar
- Botão de desvincular
- Estados de loading
- Tratamento de erros
- Validações client-side
-
vincular-whatsapp.js(CLI) -
verificar-whatsapp-schema.cjs(verificação) -
VERIFICAR-WHATSAPP-SCHEMA.md(guia) -
IMPLEMENTACAO-WHATSAPP-PERFIL.md(este arquivo)
- Teste de vinculação via interface
- Teste de desvinculação
- Teste de duplicação (deve falhar)
- Teste de formato inválido (deve falhar)
- Teste de integração com webhook
- Teste de envio de mensagem
- Aplicar schema no Supabase ⬅️ FAZER AGORA
- Testar vinculação via interface
- Enviar mensagem de boas-vindas ao vincular
- Criar dashboard de usuários WhatsApp (admin)
- Implementar notificações push via WhatsApp
- Métricas de engajamento via WhatsApp
CLAUDE.md→ Integração WhatsApp UAZapidatabase/whatsapp-users-schema.sql→ Schema completoscripts/vincular-whatsapp.js→ CLI de vinculaçãoapp/api/whatsapp/webhook/route.ts→ Webhook UAZapiapp/api/whatsapp/send/route.ts→ Envio de mensagens
Implementado em: 2026-02-24 Status: Interface ✅ | Schema ⏳ Tempo estimado para completar: 1 minuto (aplicar SQL)