Configuração WhatsApp Cloud API (Meta - Oficial)¶
Guia completo para integrar o WhatsApp oficial do Meta ao ifriend-agents usando WhatsApp Cloud API.
📋 Visão Geral¶
WhatsApp Cloud API é a solução oficial do Meta/Facebook para empresas se comunicarem com clientes via WhatsApp de forma programática.
Vantagens: - ✅ API oficial com SLA e suporte - ✅ Estabilidade garantida - ✅ Features oficiais primeiro - ✅ Conformidade regulatória
Desvantagens: - ❌ Requer aprovação do Meta - ❌ Custos após limite gratuito - ❌ Setup mais complexo - ❌ Requer Meta Business Account
🎯 Pré-requisitos¶
- Meta Business Account
- Facebook App configurada
- Número de telefone para WhatsApp Business
- Cartão de crédito (para verificação, tier gratuito disponível)
🚀 Setup Passo a Passo¶
1. Criar Meta Business Account¶
- Acesse Meta Business Suite
- Clique em Create Account
- Preencha informações da empresa
- Verifique email
2. Criar App WhatsApp Business¶
- Acesse Meta for Developers
- Vá em My Apps → Create App
- Escolha Business como tipo
- Preencha:
- App name: ifriend-whatsapp
- Contact email: seu-email@empresa.com
- Business Account: Selecione a conta criada
- Clique em Create App
3. Adicionar WhatsApp Product¶
- No dashboard da app, encontre WhatsApp
- Clique em Set up
- Selecione sua Business Account
- Clique em Continue
4. Configurar Phone Number¶
Opção A: Usar número de teste (desenvolvimento)¶
O Meta fornece um número de teste: - Já está configurado automaticamente - Pode enviar para até 5 números cadastrados - Limite de 250 mensagens/dia
Adicionar números de teste: 1. No painel WhatsApp → API Setup 2. Em To, clique em Manage phone number list 3. Adicione números (formato: +5511999999999) 4. Cada número receberá código de verificação no WhatsApp
Opção B: Usar seu próprio número (produção)¶
- No painel WhatsApp → Phone Numbers
- Clique em Add phone number
- Selecione Own number
- Siga processo de verificação:
- SMS ou chamada de voz
- Insira código recebido
- Aguarde aprovação (geralmente algumas horas)
5. Gerar Access Token Permanente¶
⚠️ Importante: Token temporário expira em 24h. Gere um permanente!
Gerar token permanente:
- No painel WhatsApp → API Setup
- Em Temporary access token, clique no token para copiar (use apenas para testes)
- Para token permanente:
- Vá em Tools → Graph API Explorer
- Selecione sua app
- Em User or Page, selecione WhatsApp Business Account
- Permissions:
whatsapp_business_messaging,whatsapp_business_management - Clique em Generate Access Token
- IMPORTANTE: Salve em lugar seguro!
Alternativa via System User:
- Business Settings → System Users
- Crie um System User
- Adicione Assets → Selecione sua WhatsApp Business Account
- Gere token com validade longa (60 dias ou sem expiração)
6. Obter Phone Number ID¶
No painel WhatsApp → API Setup:
- Copie o Phone number ID (não é o número de telefone!)
- Formato: 123456789012345
7. Configurar Webhook¶
Gerar Verify Token¶
Crie um token secreto qualquer:
# Exemplo de geração
openssl rand -base64 32
# Resultado: abc123def456xyz789
Configurar no Meta¶
- No painel WhatsApp → Configuration → Webhook
- Clique em Edit
- Preencha:
- Callback URL:
https://seu-dominio.com/webhook/whatsapp/official/webhook - Verify token: (o token que você gerou acima)
- Clique em Verify and save
⚠️ O Meta fará uma request GET com:
GET /webhook/whatsapp/official/webhook?hub.mode=subscribe&hub.verify_token=SEU_TOKEN&hub.challenge=12345
Seu servidor deve retornar 12345 (o challenge) em texto plano.
Subscrever a Eventos¶
Após verificar o webhook: 1. Em Webhook fields, selecione: - ✅ messages (obrigatório) 2. Salve
8. Obter App Secret (Opcional mas Recomendado)¶
Para validar assinatura dos webhooks:
- Settings → Basic
- Copie App Secret
- Configure em
WHATSAPP_OFFICIAL_APP_SECRET
⚙️ Configuração ifriend-agents¶
Adicione ao seu .env:
# WhatsApp Official (Meta Cloud API)
WHATSAPP_OFFICIAL_ACCESS_TOKEN=EAAxxxxxxxxxxxxxxxx
WHATSAPP_OFFICIAL_PHONE_ID=123456789012345
WHATSAPP_OFFICIAL_VERIFY_TOKEN=abc123def456xyz789
WHATSAPP_OFFICIAL_API_VERSION=v19.0
WHATSAPP_OFFICIAL_APP_SECRET=xxxxxxxxxxxxx # Opcional
# Habilitar WhatsApp Official
MESSAGING_PLATFORMS=telegram,whatsapp_official
🧪 Testar Integração¶
1. Verificar Conexão¶
python tests/test_whatsapp_official.py
2. Enviar Mensagem de Teste¶
Com número de teste configurado:
export WHATSAPP_TEST_NUMBER=5511999999999
python tests/test_whatsapp_official.py
3. Testar Webhook¶
Envie mensagem do WhatsApp para o número configurado e verifique logs:
# Nos logs do servidor
📨 Mensagem recebida de whatsapp_official: user=5511999999999, text='Teste'...
📡 Formato do Webhook¶
GET - Verificação Inicial¶
GET /webhook/whatsapp/official/webhook?hub.mode=subscribe&hub.verify_token=SEU_TOKEN&hub.challenge=1234567890
Resposta esperada: 1234567890 (texto plano)
POST - Mensagem Recebida¶
{
"object": "whatsapp_business_account",
"entry": [{
"id": "BUSINESS_ACCOUNT_ID",
"changes": [{
"value": {
"messaging_product": "whatsapp",
"metadata": {
"display_phone_number": "5511999999999",
"phone_number_id": "PHONE_NUMBER_ID"
},
"contacts": [{
"profile": {"name": "João Silva"},
"wa_id": "5511999999999"
}],
"messages": [{
"from": "5511999999999",
"id": "wamid.HBgNNTUxMTk5OTk5OTk5ORUCABIYIDNFQjBBQkMxMjM0NTY3ODk",
"timestamp": "1706545234",
"type": "text",
"text": {
"body": "Olá, preciso de ajuda!"
}
}]
},
"field": "messages"
}]
}]
}
🎨 Tipos de Mensagens Suportadas¶
Texto Simples¶
await adapter.send_message(OutgoingMessage(
text="Olá! Como posso ajudar?",
channel_id="5511999999999"
))
Texto com Formatação¶
text = """
*Negrito*
_Itálico_
~Riscado~
```Código```
Funciona igual ao WhatsApp!
"""
Indicador de Digitação¶
await adapter.send_typing_indicator("5511999999999")
Marcar como Lido¶
await adapter.mark_message_as_read("wamid.xxx")
💰 Custos e Limites¶
Tier Gratuito¶
- 1000 conversas por mês (gratuito)
- Conversa = janela de 24h com o usuário
Após Limite Gratuito¶
Preços variam por região (valores aproximados em 2024):
| Região | Preço por Conversa |
|---|---|
| Brasil | $0.05 - $0.10 |
| EUA | $0.03 - $0.08 |
| Europa | $0.04 - $0.09 |
Tipos de conversa: - Marketing: Você inicia (mais caro) - Utility: Notificações transacionais - Service: Cliente inicia (mais barato) - Authentication: Códigos de verificação
Limites de Taxa¶
- Novos números: 250 conversas/dia
- Após aprovação: Aumenta gradualmente
- Limite máximo: Ilimitado (com aprovação)
🔐 Segurança¶
Validar Assinatura do Webhook¶
Configure WHATSAPP_OFFICIAL_APP_SECRET para validar que webhooks vêm do Meta:
# O adapter valida automaticamente se app_secret estiver configurado
signature = request.headers.get("X-Hub-Signature-256")
# Validação HMAC SHA256
Proteger Access Token¶
- ✅ Nunca commite no código
- ✅ Use variáveis de ambiente
- ✅ Rotacione periodicamente
- ✅ Use System User para tokens permanentes
📊 Monitoramento¶
Via Meta Business Manager¶
- WhatsApp Manager → Insights
- Visualize:
- Mensagens enviadas/recebidas
- Taxa de entrega
- Conversas ativas
Via API¶
curl -X GET "https://graph.facebook.com/v19.0/${PHONE_ID}/analytics" \
-H "Authorization: Bearer ${ACCESS_TOKEN}"
🚨 Troubleshooting¶
Erro 401 Unauthorized¶
- ✅ Verifique se Access Token é válido
- ✅ Confirme que token tem permissões corretas
- ✅ Teste token:
curl -H "Authorization: Bearer TOKEN" https://graph.facebook.com/v19.0/me
Webhook não Verifica¶
- ✅ Confirme que endpoint GET retorna challenge
- ✅ Verifique verify_token está correto
- ✅ URL deve ser HTTPS (exceto localhost para testes)
Mensagens não Chegam¶
- ✅ Número está na lista de permitidos (para número de teste)?
- ✅ Webhook subscrito ao campo "messages"?
- ✅ Verifique logs do servidor para webhooks recebidos
Erro 133: Número não está registrado¶
- Usuário precisa ter WhatsApp instalado
- Para número de teste: adicione na lista permitida
📚 Recursos Adicionais¶
🎓 Próximos Passos¶
- Desenvolvimento: Use número de teste
- Templates: Configure templates de mensagem no Business Manager
- Aprovação: Solicite aumento de limites
- Produção: Adicione número verificado
- Monitoring: Configure alertas de quota
💡 Dicas¶
- Use número de teste para desenvolvimento (gratuito, sem aprovação)
- System User tokens são mais seguros que User tokens
- Valide assinatura do webhook em produção
- Configure billing limits no Business Manager
- Templates são obrigatórios para mensagens iniciadas pela empresa (após 24h)
Pronto para começar! 🚀
Para dúvidas, consulte a documentação oficial do Meta ou abra uma issue no repositório.