Raphael Serafim· Publicado em 28 de setembro de 2026· 8 min de leitura

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.

Ver como Markdown

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:

bash
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:

bash
# 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)

javascript
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:

bash
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 wame além de whatsapp_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 em instance, no topo do envelope.
  • Assinatura: não há X-Hub-Signature-256 na instância não oficial. Valide o segredo do caminho e desligue a checagem de assinatura para essa origem.
  • Mídia recebida: leia a url que vem em image, audio, video, document ou sticker em vez de resolver o id na Graph API.
  • Status: statuses[] continua igual, com sent, delivered, read e failed — e played para áudio. conversation e pricing chegam com null.

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 manda image.id, sirva o arquivo por uma URL pública e mande image.link.
  • Templates: type: "template" só funciona em instância oficial. Na não oficial não há template nem janela de 24h — troque por type: "text" com as variáveis já preenchidas.
  • Tipos aceitos no /message: text, image, audio, video, document, sticker, location, reaction, interactive e contacts. 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:

TesteComo validar
Enviar textoResposta com messages[0].id e mensagem no celular
Enviar imagem por linkImagem com legenda no celular
Enviar botões ou listaMenu aparece (abra a conversa com um texto antes, se o contato nunca falou com o número)
Receber textoWebhook com value.messages[0].text.body
Receber imagemDownload pela url do evento
Status de entregastatuses[] com delivered e read casando com o id enviado
Resposta a botãointeractive.button_reply.id no webhook
Erro propositalCorpo sem text.body retorna error.code
Segredo do webhookRequisiçã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:

SintomaCausaCorreção
Webhook chega, mas o sistema ignoraFiltro por object aceita só whatsapp_business_accountAceitar também wame
Mensagem cai no cliente erradoRoteamento pelo ID da Meta em phone_number_idMapear pela key da instância
Imagem recebida não baixaCódigo ainda chama a Graph API com o media idLer a url do evento
Envio de mídia retorna erroCorpo com image.id de upload prévioTrocar por image.link
Envio de template retorna errotype: "template" em instância não oficialTrocar 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 429 padrõ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átis

Perguntas 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