Migrar do WAHA para a ZapZap: guia de migração (inclui n8n)
Migrar do WAHA para a ZapZap troca um contêiner que você mantém por um serviço gerenciado. No código, muda o endereço de envio (de /api/sendText para /api/v1/{instanceId}/send/text), a autenticação (de X-Api-Key para x-api-key e x-api-secret) e o formato do webhook. Os fatos sobre o WAHA vêm da documentação oficial, lida em 27/10/2026.
Publicado em · 4 min de leitura
O que muda ao sair do WAHA
O WAHA é uma API HTTP não oficial que você roda em Docker; o site do projeto o descreve como gratuito e de código aberto. Você escolhe o motor de conexão (WEBJS, NOWEB, GOWS), o servidor e a hora de atualizar. A documentação do próprio WAHA avisa que o WhatsApp não permite bots ou clientes não oficiais e que isso pode levar a bloqueio.
Na ZapZap, hospedagem, atualização e monitoramento ficam conosco, a cobrança é de R$15 por número ativo ao mês e o risco do número continua existindo, porque também é uma solução não oficial. Em troca, você perde o controle do servidor e do motor.
Mapa de endpoints: WAHA para ZapZap
A coluna do WAHA vem da documentação oficial (waha.devlike.pro, 27/10/2026). O WAHA usa session e chatId com sufixo (@c.us); a ZapZap usa o ID da instância na URL e o número só com dígitos.
| Ação | WAHA | ZapZap |
|---|---|---|
| Autenticação | cabeçalho X-Api-Key | x-api-key e x-api-secret |
| Enviar texto | POST /api/sendText com session, chatId (por exemplo 5511999999999@c.us) e text | POST /api/v1/{instanceId}/send/text com number (5511999999999) e text |
| Enviar arquivo | endpoints por tipo de mídia | POST /api/v1/{instanceId}/send/media com type, file, text e docName |
| Sessão | session (por exemplo default) | instância, com ID próprio |
| Receber mensagem | evento message com payload.from, payload.body, payload.fromMe | evento messages com data.message.chatid, data.message.text, data.message.fromMe |
| Conectar | QR code da sessão | QR code em QR da instância |
Como trocar o nó do WAHA no n8n
Se o seu fluxo usa o nó do WAHA ou um HTTP Request apontando para o WAHA, a troca é direta. Instale o nó da comunidade n8n-nodes-zapzap em Settings, Community Nodes (nós da comunidade não verificados só funcionam no n8n self-hosted, segundo a documentação do n8n) ou use um HTTP Request com os cabeçalhos x-api-key e x-api-secret. Passo a passo na integração com n8n.
No gatilho de recebimento, troque o Webhook do WAHA pelo Webhook do n8n com a URL de produção (não a de teste) e configure essa URL em configurar webhook. Nos nós seguintes, ajuste as expressões: onde havia payload.from e payload.body, passe a usar data.message.chatid e data.message.text. Os 12 templates de n8n já vêm no formato da ZapZap.
n8n: Code node para normalizar o evento
// Entrada: evento da ZapZap. Saída: o formato que seus nós já esperavam do WAHA.
const e = $input.first().json.body ?? $input.first().json;
const m = e?.data?.message;
if (e?.event !== "messages" || !m || m.fromMe) return [];
return [{
json: {
payload: {
from: String(m.chatid || "").replace(/\D/g, "") + "@c.us",
body: m.text || "",
fromMe: false,
},
},
}];Como mudar o envio no código
O envio é uma troca de URL, cabeçalhos e campos: session e chatId com @c.us viram o ID da instância na URL e number só com dígitos. Isole o envio numa função e troque o conteúdo dela.
Node.js
// ANTES: WAHA
// POST {WAHA_URL}/api/sendText header: X-Api-Key
// body: { session: "default", chatId: "5511999999999@c.us", text: "Olá!" }
// DEPOIS: ZapZap
export async function enviarWhatsApp(numero, texto) {
const r = await fetch(
"https://api.zapzapapi.com/api/v1/" + process.env.ZAPZAP_INSTANCE_ID + "/send/text",
{
method: "POST",
headers: {
"Content-Type": "application/json",
"x-api-key": process.env.ZAPZAP_API_KEY,
"x-api-secret": process.env.ZAPZAP_API_SECRET,
},
body: JSON.stringify({ number: numero.replace(/@.*/, ""), text: texto }),
signal: AbortSignal.timeout(15000),
}
);
if (!r.ok) throw new Error("ZapZap " + r.status + " " + (await r.text()));
return r.json();
}Checklist de virada e quando continuar no WAHA
Checklist: 1) criar a conta e testar com um número seu; 2) trocar a função de envio ou o nó do n8n; 3) apontar o webhook e validar a assinatura (guia); 4) exportar o que quiser guardar do WAHA; 5) conectar o número de produção por QR code na hora da virada, sem mantê-lo ativo nos dois; 6) desligar o contêiner antigo depois de alguns dias estáveis.
Continue no WAHA se você tem DevOps, quer o código e os dados no seu ambiente e prefere escolher o motor de conexão. Veja o comparativo WAHA x ZapZap e a conta de custo em Evolution e WAHA hospedados x gerenciada. Se você precisa de canal homologado pela Meta, a opção é a API oficial.
Resumo rápido
- No código muda a URL, a autenticação e o formato do webhook; session e chatId viram instância e número.
- No n8n, troque o nó e ajuste as expressões de payload.from e payload.body para data.message.
- Os dois são não oficiais: o risco de bloqueio do número existe nos dois lados.
- Use a URL de produção do webhook do n8n, não a de teste.
Continue lendo
Perguntas frequentes
Meus templates de n8n do WAHA funcionam na ZapZap?
Com ajustes. Troque o nó de envio e as expressões do evento recebido (payload.from e payload.body viram data.message.chatid e data.message.text). Os templates da ZapZap já vêm prontos.
O WAHA Plus muda alguma coisa?
Segundo a documentação do WAHA lida em 27/10/2026, recursos que eram do WAHA Plus passaram a fazer parte do Core desde a versão 2026.6.1. Reconfira na documentação, porque isso pode mudar.
Preciso manter o servidor do WAHA?
Só durante a transição. Depois de alguns dias estáveis na ZapZap, você pode desligar o contêiner. Exporte antes o que quiser guardar.
A ZapZap garante que o número não será bloqueado?
Não. Nenhuma API não oficial pode garantir isso. Atraso e digitando automáticos reduzem o risco, mas opt-in, ritmo e lista limpa continuam sendo seus.
Teste a ZapZap com o seu fluxo
Crie a conta, conecte um número de teste e troque o nó. R$15 por número ativo ao mês, sem cobrança por mensagem.
