Conectar número WhatsApp na EvolutionAPI
Passo a passo para conectar um número WhatsApp na EvolutionAPI — do primeiro QR Code à mensagem de teste e webhook recebendo evento.
Este guia leva você do servidor com EvolutionAPI já rodando até a primeira mensagem entregando webhook na sua API. Tempo total: ~10 minutos.
Pré-requisitos
- EvolutionAPI rodando em domínio HTTPS público (ex:
https://evo.sua-empresa.com.br) AUTHENTICATION_API_KEYdefinido no.envda EvolutionAPI- Número WhatsApp dedicado (não use seu pessoal)
- Acesso ao celular para escanear o QR Code
Passo 1 — criar a instância
curl -X POST https://evo.sua-empresa.com.br/instance/create \
-H "Content-Type: application/json" \
-H "apikey: SEU_API_KEY" \
-d '{
"instanceName": "atendimento",
"qrcode": true,
"integration": "WHATSAPP-BAILEYS"
}'
A resposta é algo como:
{
"instance": {
"instanceName": "atendimento",
"instanceId": "abc-123",
"status": "created"
},
"hash": { "apikey": "..." },
"qrcode": {
"code": "2@...",
"base64": "data:image/png;base64,iVBORw0KGgo..."
}
}
Passo 2 — abrir o QR Code
Cole o valor de qrcode.base64 (incluindo o prefixo data:image/png;base64,) na barra de endereço do navegador. O QR aparece direto.
echo "iVBORw0KGgo..." | base64 -d > qr.pngBaixe qr.png e abra com qualquer visualizador de imagem.
A EvolutionAPI também expõe:
https://evo.sua-empresa.com.br/instance/connect/atendimentoQue retorna o QR Code em JSON. Útil para integrar em painel próprio.
Passo 3 — escanear no WhatsApp
-
No celular com o número que será conectado, abra o WhatsApp
-
Toque nos três pontinhos → Aparelhos conectados (Android) ou Configurações → Aparelhos conectados (iOS)
-
Toque em Conectar um aparelho
-
Aponte para o QR Code
-
Aguarde 2-5 segundos. A EvolutionAPI registra a sessão automaticamente.
Passo 4 — confirmar conexão
curl https://evo.sua-empresa.com.br/instance/connectionState/atendimento \
-H "apikey: SEU_API_KEY"
Resposta esperada:
{
"instance": {
"instanceName": "atendimento",
"state": "open"
}
}
Estados possíveis:
open— conectado e prontoconnecting— pareando (aguarde)close— desconectado (precisa novo QR)
Passo 5 — enviar mensagem de teste
curl -X POST https://evo.sua-empresa.com.br/message/sendText/atendimento \
-H "Content-Type: application/json" \
-H "apikey: SEU_API_KEY" \
-d '{
"number": "5511999999999",
"text": "Olá! Sou o agente automatizado da Rollin Host. Como posso ajudar?"
}'
Passo 6 — configurar webhook
Para receber eventos (mensagens chegando), aponte um webhook:
curl -X POST https://evo.sua-empresa.com.br/webhook/set/atendimento \
-H "Content-Type: application/json" \
-H "apikey: SEU_API_KEY" \
-d '{
"webhook": {
"enabled": true,
"url": "https://sua-api.exemplo.com/whats-in",
"events": ["MESSAGES_UPSERT", "CONNECTION_UPDATE"],
"webhookByEvents": false
}
}'
Veja Webhooks na EvolutionAPI para detalhes do payload e melhores práticas.
Passo 7 — testar webhook
Mande uma mensagem para o número conectado (de outro celular). Em ~1s, sua URL recebe um POST com:
{
"event": "messages.upsert",
"instance": "atendimento",
"data": {
"key": {
"remoteJid": "5511999999999@s.whatsapp.net",
"fromMe": false,
"id": "..."
},
"pushName": "João Silva",
"message": {
"conversation": "Oi, gostaria de informações"
},
"messageTimestamp": 1735689600
}
}
Solução de problemas
| Problema | Causa provável | Como resolver |
|---|---|---|
| QR Code não aparece | AUTHENTICATION_API_KEY errado | Confira o header apikey |
Estado fica em connecting para sempre | QR expirou antes de escanear | Gere novo: /instance/connect/atendimento |
| Mensagem enviada retorna 400 | Número fora do formato 5511... | Sem +, sem espaço, sem - |
| Webhook nunca chega | URL não é HTTPS | Webhooks só funcionam em HTTPS válido |
| Webhook chega mas com 401/403 | Sua API exige auth | Use webhook_by_events + URL secreta no path |
Manter conexão estável
A sessão WhatsApp Web cai eventualmente (quedas de rede, atualização do app). A EvolutionAPI reconecta sozinha se o número não foi banido. Se cair com frequência:
- Confirme que o celular está online (chip ativo, internet)
- Não abra WhatsApp Web no PC com o mesmo número
- Não tente parear em 2 instâncias EvolutionAPI ao mesmo tempo
- Servidor com swap configurado (sem swap, OOM derruba a sessão)
Próximos passos
Última atualização: