WhatsApp Cloud API (oficial) — implantação técnica
Caminho oficial para automatizar lembretes e campanhas.
Venda / call desta semana: comece por 06 — Venda + implantação.
Também no painel: WhatsApp → Conexão (wizard) e espelho emodonto/docs/admin/02-meta-whatsapp.md.
Quem paga o quê
| Item | Quem paga |
|---|---|
| SaaS eDevs Odonto | Clínica → eDevs |
| Mensagens WhatsApp | Clínica → Meta (cartão na WABA) |
| Setup / implantação | Clínica → eDevs (one-shot; ver 05) |
Não somos BSP. A WABA é da clínica; o app usa o token dela.
Checklist técnico (1ª clínica com automático)
1. Meta Business + WhatsApp (clínica)
- business.facebook.com — portfólio
- Contas → WhatsApp → criar / adicionar número
- Método de pagamento na WhatsApp Business Platform
- (Opcional) verificação do negócio
2. Credenciais (App / System User)
- developers.facebook.com/apps — app Business (eDevs ou da clínica, conforme modelo)
- Produto WhatsApp
- API Setup: Phone number ID (+ WABA ID)
- Token produção: System User com
whatsapp_business_messaging+whatsapp_business_management
3. Webhook (ambiente eDevs)
- URL:
https://<dominio>/api/whatsapp/webhook - Verify token =
META_VERIFY_TOKEN(ouMETA_WEBHOOK_VERIFY_TOKEN) - Eventos:
messages - HTTPS obrigatório
- Base URL:
NEXT_PUBLIC_APP_URL
4. Templates (pt_BR — nomes do seed)
| Uso | Categoria | metaName no sistema | Variáveis |
|---|---|---|---|
| Lembrete / confirmação | UTILITY | lembrete_consulta |
nome, procedimento, data |
| Aniversário | MARKETING | aniversario_paciente |
nome, clinica |
| Natal | MARKETING | feliz_natal |
nome, clinica |
Enquanto aprova: teste com hello_world no wizard (checkbox no passo Teste).
5. No eDevs Odonto (wizard)
- Login no tenant
- WhatsApp → Conexão: Pré-requisitos → Credenciais (colar ou Conectar com Meta) → Verificar → Teste → Ativar
- Ativar só libera após verificação OK
- Mensagens → Fila → Disparar canal ativo
Variáveis de ambiente
| Var | Uso |
|---|---|
NEXT_PUBLIC_APP_URL |
Base da URL do webhook |
META_VERIFY_TOKEN |
Verify token (META_WEBHOOK_VERIFY_TOKEN também aceito) |
NEXT_PUBLIC_FACEBOOK_APP_ID / FACEBOOK_APP_ID |
Embedded Signup |
FACEBOOK_APP_SECRET |
Troca do código OAuth |
FACEBOOK_CONFIG_ID |
Config ID do Embedded Signup no Meta App |
FACEBOOK_API_VERSION |
Opcional (padrão v21.0) |
Sem App ID/Secret/Config ID, o botão Conectar com Meta fica desabilitado — fluxo de colar token continua válido.
O que ainda é manual (sem Tech Provider)
- Criar/aprovar WABA e cartão na clínica
- Templates pt_BR na Meta
- System User permanente ou Embedded Signup com env eDevs
- Escala multi-clínica sem colar token → Tech Provider + Embedded Signup em produção
Cron:
curl -H "x-cron-secret: $CRON_SECRET" https://DOMINIO/api/cron/reminders
6. Opt-in
| Campo | Uso |
|---|---|
reminderOptIn |
Confirmação / lembrete 24h |
marketingOptIn |
Aniversário, Natal, campanhas |
Erros comuns
| Sintoma | Causa |
|---|---|
| Template name / #100 | Nome ou idioma ≠ aprovado |
| 24h / #131047 | Texto livre fora da janela |
| #131026 | Telefone sem DDI / inválido |
| Webhook 403 | Verify token diferente |
| Token expira | Usar System User permanente |
Escala (depois)
Tech Provider + Embedded Signup em produção — várias clínicas sem colar token. O painel já tem Conectar com Meta e troca OAuth; falta App Meta eDevs completo (IDs no .env) e status Tech Provider para escala.
Não bloqueia o 1º cliente: use o assistente com System User permanente.