Skip to main content

Troubleshooting

Guia para resolver os problemas mais comuns ao usar a Wapizap API.

Problemas de Conexão

Instância não conecta

1

Verifique o status da instância

curl -X GET "https://api.wapizap.com/api/v2/instances/{id}/status" \
  -H "Authorization: Bearer SEU_TOKEN"
2

Se desconectada, gere novo QR code

curl -X POST "https://api.wapizap.com/api/v2/instances/{id}/connect" \
  -H "Authorization: Bearer SEU_TOKEN"
3

Verifique dispositivos conectados no celular

No WhatsApp: Configurações → Aparelhos conectadosSe houver 4 dispositivos, remova um antes de conectar.
4

Tente desconectar e reconectar

# Desconectar
curl -X POST "https://api.wapizap.com/api/v2/instances/{id}/disconnect" \
  -H "Authorization: Bearer SEU_TOKEN"

# Aguardar 5 segundos e reconectar
curl -X POST "https://api.wapizap.com/api/v2/instances/{id}/connect" \
  -H "Authorization: Bearer SEU_TOKEN"

QR code expira antes de escanear

Causa: QR codes expiram em 60 segundos. Solução:
  1. Deixe o WhatsApp aberto na tela de escanear código ANTES de gerar o QR
  2. Gere o QR code
  3. Escaneie imediatamente

Instância desconecta frequentemente

Possíveis causas:
  • Muitos dispositivos conectados (máximo 4)
  • Atividade suspeita detectada pelo WhatsApp
  • Problemas de rede
Soluções:
  1. Remova dispositivos não utilizados no WhatsApp
  2. Reduza a frequência de mensagens
  3. Verifique logs de erro para padrões

Problemas com Mensagens

Mensagem não enviada

Use o endpoint de verificação:
curl -X POST "https://api.wapizap.com/api/v2/contacts/check" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer SEU_TOKEN" \
  -d '{
    "instanceId": "sua-instancia",
    "numbers": ["5511999999999"]
  }'
Se exists: false, o número não está no WhatsApp.

Erro “Invalid number”

Causa: O número não está registrado no WhatsApp ou está em formato incorreto. Solução:
  1. Verifique o formato (deve ser 5511999999999)
  2. Use /contacts/check para validar
  3. Confirme que o número tem WhatsApp ativo

Mídia não enviada

Verificações:
  1. URL da mídia é acessível publicamente?
  2. Formato é suportado?
  3. Tamanho está dentro do limite?
TipoFormatosTamanho Máximo
ImagemJPG, PNG, WEBP16 MB
VídeoMP4, 3GP64 MB
ÁudioMP3, OGG, M4A16 MB
DocumentoPDF, DOC, etc100 MB
Teste a URL:
curl -I "https://sua-url.com/imagem.jpg"
# Deve retornar HTTP 200

Problemas com Webhooks

Webhook não recebe dados

1

Verifique se o webhook existe

curl -X GET "https://api.wapizap.com/api/v2/webhooks?instanceId=sua-instancia" \
  -H "Authorization: Bearer SEU_TOKEN"
2

Verifique se a URL é acessível

curl -X POST "https://seu-servidor.com/webhook" \
  -H "Content-Type: application/json" \
  -d '{"test": true}'
Deve retornar HTTP 200.
3

Teste o webhook via API

curl -X POST "https://api.wapizap.com/api/v2/webhooks/{id}/test" \
  -H "Authorization: Bearer SEU_TOKEN" \
  -d '{"instanceId": "sua-instancia"}'
4

Verifique os eventos configurados

Certifique-se de que os eventos desejados estão na lista do webhook.

Webhook recebe duplicatas

Causa: Seu servidor pode estar demorando para responder, causando retry. Solução:
  1. Responda com HTTP 200 em menos de 5 segundos
  2. Processe dados de forma assíncrona
  3. Use messageId para deduplicação:
const processedMessages = new Set();

app.post('/webhook', (req, res) => {
  const messageId = req.body.data?.key?.id;

  if (processedMessages.has(messageId)) {
    return res.status(200).json({ duplicate: true });
  }

  processedMessages.add(messageId);

  // Processar de forma assíncrona
  processMessageAsync(req.body);

  res.status(200).json({ received: true });
});

Webhook localhost não funciona

Causa: Webhooks precisam de URLs públicas. Solução: Use um serviço de túnel:
# ngrok
npx ngrok http 3000
# Copie a URL https://xxxx.ngrok.io

# ou Cloudflare Tunnel
cloudflared tunnel --url http://localhost:3000

Problemas de Autenticação

Erro 401 Unauthorized

Verificações:
  1. O token está no formato correto?
    Authorization: Bearer sk_live_xxxxx
    
  2. O token é válido e não expirou?
  3. Está usando o ambiente correto (live vs test)?
Teste:
curl -X GET "https://api.wapizap.com/api/v2/instances" \
  -H "Authorization: Bearer SEU_TOKEN"

Erro 403 Forbidden

Causa: Sua API key não tem permissão para esta operação. Solução:
  1. Verifique as permissões da API key no dashboard
  2. Gere uma nova key com as permissões necessárias

Rate Limiting

Erro 429 Too Many Requests

Solução imediata:
if (response.status === 429) {
  const retryAfter = response.headers.get('Retry-After') || 60;
  await sleep(retryAfter * 1000);
  // Retry
}
Solução a longo prazo:
  1. Implemente queue de mensagens
  2. Distribua envios ao longo do tempo
  3. Use múltiplas instâncias para volume alto

Ferramentas de Diagnóstico

Verificar status geral

# Status de todas as instâncias
curl -X GET "https://api.wapizap.com/api/v2/instances" \
  -H "Authorization: Bearer SEU_TOKEN"

# Status de instância específica
curl -X GET "https://api.wapizap.com/api/v2/instances/{id}/status" \
  -H "Authorization: Bearer SEU_TOKEN"

Logs de webhook

No dashboard, vá em Webhooks → Logs para ver:
  • Requisições enviadas
  • Respostas recebidas
  • Erros e retries

Testar conectividade

# Ping na API
curl -w "\nTempo: %{time_total}s\n" \
  -X GET "https://api.wapizap.com/health"

Checklist de Diagnóstico

Antes de contatar o suporte, verifique:
  • API key está correta e válida?
  • Instância está conectada?
  • Número está no formato internacional?
  • URL do webhook é pública e acessível?
  • Não excedeu rate limits?
  • Mídia está dentro dos limites de tamanho?

Contatar Suporte

Se o problema persistir: Inclua na sua mensagem:
  • ID da instância
  • Endpoint usado
  • Código de erro
  • Request/Response de exemplo
  • Timestamp do problema