Trocar graph.facebook.com pela WAME: checklist de migração em 30 minutos
Checklist prático para trocar a WhatsApp Cloud API (graph.facebook.com) pela WAME: variáveis de ambiente, onde procurar no código, ajustes e plano de teste.
Trocar o graph.facebook.com pela WAME (api-wa.me) é, na maior parte, uma troca de configuração: a WAME aceita o mesmo corpo de envio da WhatsApp Cloud API e entrega o webhook no mesmo formato da Meta. Com a integração bem isolada, o código muda em cerca de 30 minutos — URL, autenticação e cinco ajustes pontuais. Este checklist percorre cada item na ordem em que você vai encontrá-los.
A camada não oficial da WAME não é afiliada, endossada ou suportada pelo WhatsApp ou pela Meta. O uso é de responsabilidade de quem envia.
Em resumo
- 5 min: criar a instância, conectar um número de teste e anotar a key.
- 10 min: trocar variáveis de ambiente e a função de envio.
- 10 min: ajustar o webhook (object, roteamento e mídia).
- 5 min: trocar templates por texto e mídia por id por link.
- Depois: rodar o plano de teste e só então virar produção.
Por que fazer isso agora?
A partir de 1º de outubro de 2026, a Meta passa a cobrar por mensagem toda mensagem de serviço e toda Utility de resposta dentro da janela de 24h, desde a primeira. Atendimento que era de graça vira custo. A instância não oficial da WAME cobra um plano fixo por instância, sem cobrança por mensagem. Veja o contexto em alternativa à API oficial depois de outubro.
Checklist 1: preparar o terreno (5 minutos)
- Crie uma instância no painel da WAME.
- Conecte um número de teste por QR Code ou código de pareamento. Não comece pelo número de produção.
- Anote a key da instância. Ela identifica e autentica a instância na URL.
- Se quiser uma camada extra, ative o token de acesso no painel.
- Tenha uma URL pública para o webhook de teste, com um segredo no caminho.
Checklist 2: onde procurar no código
Antes de trocar, descubra onde a Cloud API aparece. Um grep resolve:
grep -rn "graph.facebook.com" src/
grep -rn "whatsapp_business_account" src/
grep -rn "phone_number_id" src/
grep -rn "\"template\"\|type: 'template'" src/
grep -rn "X-Hub-Signature" src/Cada resultado cai em um dos itens abaixo. Se aparecer em muitos arquivos, vale primeiro centralizar numa função enviarWhatsApp() e num parseWebhook() — isso já reduz a migração a dois arquivos.
Checklist 3: variáveis de ambiente (5 minutos)
Troque as variáveis por outras que descrevam o destino, não o fornecedor:
# Antes
META_API_VERSION=v21.0
META_PHONE_NUMBER_ID=123456789012345
META_ACCESS_TOKEN=EAAG...
# Depois
WHATSAPP_MESSAGES_URL=https://us.api-wa.me/SUA_KEY/message
WHATSAPP_AUTH_HEADER=Com a URL completa numa variável, você volta para a Cloud API trocando um valor, se precisar.
Checklist 4: função de envio (5 minutos)
async function enviarWhatsApp(corpo) {
const headers = { 'Content-Type': 'application/json' };
if (process.env.WHATSAPP_AUTH_HEADER) {
headers.Authorization = process.env.WHATSAPP_AUTH_HEADER; // Cloud API: "Bearer ..."
}
const res = await fetch(process.env.WHATSAPP_MESSAGES_URL, {
method: 'POST',
headers,
body: JSON.stringify(corpo),
});
const json = await res.json();
if (json.error) throw new Error(`${json.error.code}: ${json.error.message}`);
return json.messages?.[0]?.id; // mesmo formato na Cloud API e na WAME
}O corpo (messaging_product, to, type, text, image, interactive...) não muda. A resposta também não: contacts[].wa_id e messages[].id. O envelope de erro segue o mesmo error.message, error.code e error_data.
Checklist 5: webhook (10 minutos)
Configure a instância para o formato da Meta:
curl -X PUT "https://us.api-wa.me/SUA_KEY/instance" \
-H "Content-Type: application/json" \
-d '{
"allowWebhook": true,
"allowNumber": "all",
"webhookMessage": "https://seu-sistema.com.br/webhook/SEGREDO",
"webhookFormat": "both"
}'Use both durante o teste para comparar os dois formatos e troque para meta depois. No código:
- Object: aceite
wamealém dewhatsapp_business_account. - Roteamento:
metadata.phone_number_idé a key da instância. Se você mapeia cliente por esse campo, cadastre a key. A key também vem eminstance, no topo do envelope. - Assinatura: não há
X-Hub-Signature-256na instância não oficial. Valide o segredo do caminho e desligue a checagem de assinatura para essa origem. - Mídia recebida: leia a
urlque vem emimage,audio,video,documentoustickerem vez de resolver o id na Graph API. - Status:
statuses[]continua igual, comsent,delivered,readefailed— eplayedpara áudio.conversationepricingchegam comnull.
O campo a campo está em webhook compatível com a Cloud API.
Checklist 6: mídia enviada e templates (5 minutos)
- Mídia por id: a instância não oficial só aceita
link. Onde o sistema faz upload na Meta e mandaimage.id, sirva o arquivo por uma URL pública e mandeimage.link. - Templates:
type: "template"só funciona em instância oficial. Na não oficial não há template nem janela de 24h — troque portype: "text"com as variáveis já preenchidas. - Tipos aceitos no
/message:text,image,audio,video,document,sticker,location,reaction,interactiveecontacts. Outro tipo retorna erro.
Detalhes com antes e depois em migrar da API oficial para a não oficial sem reescrever.
Checklist 7: plano de teste
Rode esta lista contra o número de teste antes de mexer em produção:
| Teste | Como validar |
|---|---|
| Enviar texto | Resposta com messages[0].id e mensagem no celular |
| Enviar imagem por link | Imagem com legenda no celular |
| Enviar botões ou lista | Menu aparece (abra a conversa com um texto antes, se o contato nunca falou com o número) |
| Receber texto | Webhook com value.messages[0].text.body |
| Receber imagem | Download pela url do evento |
| Status de entrega | statuses[] com delivered e read casando com o id enviado |
| Resposta a botão | interactive.button_reply.id no webhook |
| Erro proposital | Corpo sem text.body retorna error.code |
| Segredo do webhook | Requisição sem o segredo é recusada |
Se todos passarem, a sua camada de mensagens está pronta.
Checklist 8: virar produção
- Decida o que fica na oficial (templates de marketing em volume, por exemplo) e o que vai para a não oficial (atendimento). O desenho está em estratégia híbrida.
- Planeje o número: um número registrado na Cloud API não fica ativo no app ao mesmo tempo, e a conexão não oficial usa o app. Veja usar o mesmo número ao sair da Cloud API.
- Vire o tráfego aos poucos, como em migrar em paralelo sem risco.
- Ligue o webhook de conexão para receber o evento de saúde do número e pausar envios quando ele recomendar.
Quais erros mais aparecem na primeira tentativa?
Os mesmos cinco, em quase toda migração:
| Sintoma | Causa | Correção |
|---|---|---|
| Webhook chega, mas o sistema ignora | Filtro por object aceita só whatsapp_business_account | Aceitar também wame |
| Mensagem cai no cliente errado | Roteamento pelo ID da Meta em phone_number_id | Mapear pela key da instância |
| Imagem recebida não baixa | Código ainda chama a Graph API com o media id | Ler a url do evento |
| Envio de mídia retorna erro | Corpo com image.id de upload prévio | Trocar por image.link |
| Envio de template retorna erro | type: "template" em instância não oficial | Trocar por texto preenchido |
Um sexto aparece depois, em produção: o sistema que disparava templates em lote passa a disparar texto livre no mesmo ritmo. Na não oficial, isso bate no freio da API (429) quando são muitos números novos por minuto ou o mesmo texto para muita gente. Espalhe os envios com fila, como em fila, rate limit e retry.
O que o checklist não resolve?
Duas coisas dependem de você, não do código:
- Comportamento de envio. Na não oficial, a responsabilidade é de quem envia. A WAME não apoia spam e a API recusa com
429padrões de disparo em massa. Para quem fala com quem pediu, a taxa de bloqueio é muito baixa. - Exigências formais. Se o seu cliente exige a API oficial por contrato, mantenha essa parte na oficial — a WAME oferece as duas no mesmo formato.
Conclusão
Sair do graph.facebook.com para a WAME (api-wa.me) não é reescrever a integração: é trocar a URL, a autenticação e cinco detalhes — object do webhook, roteamento, mídia recebida, mídia enviada e templates. Com o checklist acima e um número de teste, você valida tudo antes de 1º de outubro de 2026 e decide com calma o que migrar. A referência dos endpoints está na documentação, e o formato completo do envio em um código só para a API oficial e a não oficial.
Pronto para automatizar seu WhatsApp?
Crie sua conta gratuita e comece a enviar mensagens pela API em minutos.
Começar grátisPerguntas frequentes
Quanto tempo leva para trocar a WhatsApp Cloud API pela WAME?+
Para um sistema que já usa a Cloud API com a chamada de envio e o webhook isolados em poucos arquivos, a troca técnica para a WAME (api-wa.me) costuma caber em cerca de 30 minutos de código, porque o corpo de envio e o webhook no formato meta são os mesmos da Meta. O teste e a virada do número levam mais tempo que o código.
O que preciso trocar no código ao sair do graph.facebook.com?+
Na migração para a WAME (api-wa.me): a URL de envio (de graph.facebook.com/{versão}/{phone_number_id}/messages para https://us.api-wa.me/{key}/message), a autenticação (Bearer token vira a key na URL), a validação do campo object do webhook, o download de mídia recebida, o envio de mídia por id e as chamadas de template.
Como testo a migração sem afetar clientes reais?+
Crie uma instância na WAME (api-wa.me) com um número de teste, ligue o webhook com webhookFormat both para ver o formato nativo e o da Meta lado a lado, rode a sua suíte de envio e recebimento contra essa instância e só depois troque as variáveis de ambiente de produção.
Os endpoints de template funcionam na API não oficial?+
Não. Na WAME, templates e a gestão de templates existem só em instâncias oficiais (Cloud API). Na instância não oficial não há template nem janela de 24h, e a mensagem que era um template vira texto comum com as variáveis já preenchidas.
Preciso mudar o parser do webhook ao trocar para a WAME?+
Pouco. Com webhookFormat meta, a WAME (api-wa.me) entrega entry[].changes[].value com messages[] e statuses[] como a Cloud API. É preciso aceitar object igual a wame, rotear por metadata.phone_number_id (que é a key da instância) e baixar a mídia pela url que vem no evento.
Continue lendo
Alternativa à API oficial do WhatsApp depois do aumento de outubro de 2026
A partir de 1º de outubro de 2026 a Meta cobra toda mensagem de serviço. Veja as alternativas à API oficial e por que a WAME migra sem reescrever o sistema.
API de WhatsApp mais barata em 2026: comparando os modelos de cobrança
Cobrança por mensagem, plano fixo por instância ou self-host: qual API de WhatsApp sai mais barata em 2026, com a fórmula para calcular o seu caso.
Migrar da API oficial para a não oficial do WhatsApp sem reescrever o sistema
Passo a passo para sair da WhatsApp Cloud API e ir para a API não oficial da WAME mantendo o mesmo corpo de envio e o mesmo parser de webhook.