HookCloud FlowCentral de ajuda
SuporteAbrir painel
HookCloud Flow · documentação oficial do produto

Templates: sincronize, armazene e envie com segurança

Listagem oficial, cache, atualização de status, rate limit e diagnóstico de erros de entrega.

Versão 4.4.0Atualizada em 30 de agosto de 2026 · inclui CláudIA no suporte privado, memória isolada, revisão humana, limite de equipe, diagnóstico Meta, qualidade e risco reconciliados e orientação correta para status de mensagens.
Responsabilidades separadas
A HookCloud administra o App, subscriptions e eventos de status. O assinante não precisa do App Secret. A agência administra templates e o armazenamento no próprio sistema com o token e as permissões disponíveis.

O que é um template

Templates são modelos de mensagem aprovados pela Meta. Eles são usados para iniciar ou retomar conversas fora da janela de atendimento, além de casos de autenticação, utilidade e marketing. O template pertence à WABA, tem nome, idioma, categoria, componentes e status próprios.

U

Utility

Atualizações transacionais esperadas, como pedido, entrega, agendamento ou conta.

M

Marketing

Promoções, campanhas, novidades e mensagens que estimulam compra ou engajamento.

A

Authentication

Códigos de autenticação e verificação conforme o formato definido pela Meta.

Categoria não é uma escolha apenas técnica
Não classifique uma campanha promocional como Utility para tentar contornar limites. A Meta pode recategorizar, pausar ou rejeitar o template.

O que a HookCloud já administra — e o que fica com você

Você não precisa do App Secret da HookCloud
A HookCloud administra o App da Meta, as permissões do Embedded Signup, os campos de webhook do App e a assinatura técnica de eventos. O assinante não deve solicitar, armazenar ou configurar o App Secret, nem entrar no App Dashboard para marcar campos.
ResponsabilidadeHookCloudAssinante/agência
App da MetaConfigura App ID, App Secret, Embedded Signup e campos de eventos.Não precisa acessar o App Dashboard da HookCloud.
Permissões do tokenSolicita as permissões necessárias durante o Embedded Signup.Se aparecer “permissão ausente”, refaça a conexão pelo Flow; não tente solicitar escopos manualmente.
Credenciais de usoExibe o Meta Access Token, WABA ID e demais IDs para owner/admin autorizado.Usa essas credenciais somente no backend do próprio sistema.
Status de templatesO campo message_template_status_update já é administrado no App da HookCloud.Não precisa assinar esse campo. Para o seu banco local, combine os status refletidos pelo Flow com uma sincronização GET moderada.
Catálogo localFornece a integração e as credenciais do ativo conectado.Cria o banco/cache dos templates no próprio sistema e controla quando sincronizar.

Para consultar templates, você usa o WABA ID e o Meta Access Token correspondentes ao número conectado. O token deve ficar no servidor. O navegador, o chat da comunidade e o código público do site não são locais seguros para armazená-lo.

GET oficial para listar templates

A listagem é feita na Graph API com o WABA ID. Use uma versão configurável da API; o exemplo abaixo usa a versão adotada atualmente pelo projeto.

curl -G \
  "https://graph.facebook.com/v25.0/WABA_ID/message_templates" \
  -H "Authorization: Bearer META_ACCESS_TOKEN" \
  --data-urlencode "fields=id,name,language,status,category,components,quality_score,rejected_reason,last_updated_time" \
  --data-urlencode "limit=100"
Faça essa chamada no servidor
O Meta Access Token não deve ser enviado ao front-end. O painel deve chamar o seu backend; o backend consulta a Meta, salva o resultado e devolve apenas os dados necessários.

Resposta e paginação

A resposta contém data e, quando houver mais resultados, um objeto paging com cursores e uma URL next. Continue apenas enquanto paging.next existir.

{
  "data": [
    {
      "id": "1234567890",
      "name": "confirmacao_agendamento",
      "language": "pt_BR",
      "status": "APPROVED",
      "category": "UTILITY",
      "components": []
    }
  ],
  "paging": {
    "cursors": { "before": "...", "after": "..." },
    "next": "https://graph.facebook.com/..."
  }
}

Uma página adicional é uma nova chamada. Por isso, uma tela que repete a sincronização completa a cada abertura multiplica rapidamente o consumo da WABA.

Como armazenar os templates no seu sistema

Use uma tabela local por workspace/WABA. Um modelo mínimo:

create table whatsapp_message_templates (
  id uuid primary key default gen_random_uuid(),
  workspace_id uuid not null,
  waba_id text not null,
  meta_template_id text,
  name text not null,
  language text not null,
  category text,
  status text not null,
  quality_score text,
  rejected_reason text,
  components jsonb not null default '[]'::jsonb,
  meta_last_updated_at timestamptz,
  last_synced_at timestamptz not null default now(),
  deleted_at timestamptz,
  unique (waba_id, name, language)
);
  • Use meta_template_id como referência externa quando disponível.
  • Mantenha unicidade por WABA + nome + idioma.
  • Guarde components como JSON para reconstruir parâmetros de header, body e botões.
  • Nunca salve o access token na mesma tabela de uso comum dos templates.
  • Marque como ausente/deletado somente depois de uma sincronização completa e bem-sucedida; uma página incompleta não prova exclusão.

Fluxo recomendado de sincronização

1. Importação inicialFaça um GET paginado quando a WABA for conectada ou quando o usuário clicar em “Sincronizar templates”.
2. Upsert idempotenteAtualize ou crie pela chave WABA + nome + idioma; não duplique registros a cada sincronização.
3. Cache de telaA interface lê o banco local. O carregamento da tela não deve disparar uma listagem completa na Meta.
4. Status administrado pela HookCloudA HookCloud já mantém o App inscrito no campo de atualização de templates. Você não configura App Secret nem marca message_template_status_update. Use os status disponibilizados no ecossistema HookCloud e reconcilie seu catálogo por GET quando necessário.
5. Reconciliação moderadaExecute uma sincronização de segurança em agenda moderada — por exemplo, algumas vezes ao dia ou sob demanda — conforme o volume da operação. Evite loop contínuo.
6. Revalidação antes de campanhasAntes de uma campanha importante, revalide os templates selecionados ou com status incerto. Não baixe a lista inteira antes de cada mensagem.
Uma sincronização por WABA de cada vez
Se dez usuários abrirem a mesma tela, execute uma única sincronização e compartilhe o resultado. Use lock, fila ou chave de deduplicação por WABA.

Exemplo de sincronização no backend

Exemplo simplificado em TypeScript. O método upsertTemplate representa a gravação no seu banco.

type MetaTemplatePage = {
  data: Array<{
    id: string;
    name: string;
    language: string;
    status: string;
    category?: string;
    components?: unknown[];
    quality_score?: unknown;
    rejected_reason?: string;
    last_updated_time?: string;
  }>;
  paging?: { next?: string };
};

async function syncTemplates(wabaId: string, accessToken: string) {
  const fields = [
    'id','name','language','status','category','components',
    'quality_score','rejected_reason','last_updated_time'
  ].join(',');

  let next: string | undefined =
    `https://graph.facebook.com/v25.0/${wabaId}/message_templates` +
    `?fields=${encodeURIComponent(fields)}&limit=100`;

  while (next) {
    const response = await fetch(next, {
      headers: { Authorization: `Bearer ${accessToken}` }
    });

    const body = await response.json();
    if (!response.ok) {
      const code = body?.error?.code;
      // 4 e 80007: reagende com backoff; não faça retry imediato em loop.
      throw new Error(`Meta template sync failed: ${code ?? response.status}`);
    }

    const page = body as MetaTemplatePage;
    for (const template of page.data ?? []) {
      await upsertTemplate({
        wabaId,
        metaTemplateId: template.id,
        name: template.name,
        language: template.language,
        status: template.status,
        category: template.category,
        components: template.components ?? [],
        qualityScore: template.quality_score ?? null,
        rejectedReason: template.rejected_reason ?? null,
        metaLastUpdatedAt: template.last_updated_time ?? null,
        lastSyncedAt: new Date().toISOString()
      });
    }

    next = page.paging?.next;
  }
}

Atualizações de status já administradas pela HookCloud

O campo técnico message_template_status_update já está habilitado no App da HookCloud. Isso significa que o assinante não precisa configurar o campo, informar App Secret ou manter uma assinatura de App por conta própria.

Não procure o App Secret no painel
O App Secret é uma credencial exclusiva da infraestrutura da HookCloud. Ele não é necessário para fazer GET de templates, montar mensagens ou armazenar o catálogo no seu sistema.
Status da MetaO que significaAção no seu sistema
PENDINGTemplate enviado para análise.Não liberar campanhas até a aprovação.
APPROVEDTemplate aprovado para o idioma e categoria informados.Liberar o uso e atualizar a data de sincronização.
REJECTEDA Meta rejeitou o conteúdo ou a classificação.Salvar o motivo, revisar o modelo e reenviar uma versão corrigida.
PAUSEDTemplate temporariamente pausado, geralmente por qualidade.Parar automações que dependem dele e revisar público/conteúdo.
DISABLEDTemplate desabilitado.Não tentar enviar; criar estratégia e modelo substitutos.

Para manter sua própria base atualizada, trate o GET de templates como reconciliação da fonte de verdade. Uma estratégia segura é sincronizar quando o usuário solicitar, após uma alteração conhecida ou em uma agenda moderada. O objetivo é evitar polling agressivo sem perder a capacidade de confirmar o estado atual.

Notificações no Flow
Eventos como message_template_status_update, message_template_quality_update, message_template_components_update e template_category_update podem gerar alertas administrativos. O Flow registra somente informações necessárias para status e diagnóstico, sem transformar a plataforma em um editor completo de templates.

GET excessivo, rate limit e erros de requisição

Chamadas à Graph API consomem limites do app e do caso de uso da WABA. Paginação, retries e chamadas duplicadas também aumentam o volume. Quando o limite é atingido, você pode receber códigos como 4 ou 80007, além de falhas temporárias.

EviteFaça
GET completo ao abrir cada telaLeia o banco local e ofereça botão de sincronização.
GET antes de cada envioValide o status local; atualize somente quando estiver antigo ou incerto.
Vários workers sincronizando a mesma WABAUse lock/dedupe por WABA.
Retry imediato e infinitoBackoff exponencial com jitter e limite de tentativas.
Pedir todos os campos sem necessidadeSolicite apenas os campos usados pelo sistema.
Ignorar cabeçalhos de usoMonitore X-App-Usage e X-Business-Use-Case-Usage quando presentes.

Backoff sugerido

Para erros transitórios, use uma fila com atrasos crescentes, por exemplo 30 segundos, 2 minutos, 5 minutos e 15 minutos, com pequena variação aleatória. Pare o retry quando o erro exigir correção humana, como token inválido, permissão ausente, template desabilitado ou problema de pagamento.

Rate limit não é resolvido trocando token
O limite pode ser compartilhado pelo app, WABA ou caso de uso. Criar outro token para repetir a mesma consulta não elimina o consumo e pode piorar o bloqueio temporário.

Antes de enviar um template

  1. Confirme que o template local está APPROVED e não está pausado ou desabilitado.
  2. Use exatamente o nome e o idioma cadastrados na Meta.
  3. Monte os componentes na mesma ordem e tipo do modelo aprovado.
  4. Preencha todas as variáveis obrigatórias e não envie valores vazios.
  5. Em header de mídia, use tipo e formato compatíveis.
  6. Confirme opt-in e finalidade correta da categoria.
  7. Guarde o wamid retornado e acompanhe os status de entrega no webhook configurado para a operação.

Uma resposta HTTP de sucesso significa que a Meta aceitou a solicitação; a entrega final ainda pode falhar depois. A configuração do App da HookCloud já está pronta. O assinante precisa apenas tratar os eventos que chegam ao webhook da própria operação e manter o catálogo local coerente.

Erros ao listar ou sincronizar templates

CódigoO que significaComo corrigirReferência Meta
0 / 3 / 10 / 200Token ou app sem autorização suficiente para o objeto/ação.Refaça o Embedded Signup ou gere uma credencial com acesso à WABA e whatsapp_business_management. Não repita com o mesmo token em loop.Access Tokens
100Parâmetro, campo, ID ou versão da chamada é inválido.Confira WABA ID, nomes dos campos, URL e versão da Graph API.Endpoint message_templates
190Token inválido, expirado ou revogado.Interrompa a sincronização, marque a conexão para reautorização e não exponha o token no log.Access Tokens
4Limite de chamadas do app atingido.Reduza frequência, una chamadas, use cache e reagende com backoff.Graph API Rate Limiting
80007Limite do caso de uso/WABA atingido.Pare o polling, monitore os cabeçalhos de uso e espere a recuperação da janela.Graph API Rate Limiting

Erros comuns de envio ou entrega de templates

A Meta pode devolver o erro imediatamente na API ou depois, no status failed do webhook. Sempre registre código, detalhes, horário, WABA ID, Phone Number ID, nome/idioma do template e wamid.

CódigoExplicação simplesAção recomendadaRetry?Meta
130429O número/app atingiu limite de capacidade ou throughput.Enfileire envios e reduza concorrência; use backoff.Sim, depoisRate limits
130472O destinatário está em um experimento da Meta e a mensagem não foi entregue.Não insista em loop. Aguarde e acompanhe a documentação/resultado do experimento.Não imediatoError codes
130497Envio restrito para o país/região do destinatário ou do negócio.Confira elegibilidade geográfica e políticas aplicáveis.Não, sem mudançaError codes
131000Falha genérica ou interna da plataforma.Registre o fbtrace_id, tente com backoff e confira o status da plataforma.Sim, limitadoError codes
131005Acesso negado para enviar em nome do número/WABA.Verifique token, escopos, tarefas no ativo e reautorize.NãoAccess Tokens
131008Parâmetro obrigatório ausente.Compare o payload com o template aprovado; preencha nome, idioma, componentes e variáveis.Após corrigirTemplate messages
131009Valor de parâmetro inválido.Revise número E.164, idioma, tipos, valores de botões e mídia.Após corrigirTemplate messages
131016Serviço temporariamente indisponível.Aguarde e tente novamente com backoff; não altere o template sem evidência.SimError codes
131021Remetente e destinatário são o mesmo número.Use outro destinatário.NãoError codes
131026A mensagem não pôde ser entregue ao destinatário.Confirme se o número usa WhatsApp, está correto, atualizado e aceitou os termos. Não trate como falha do template automaticamente.Somente após validarError codes
131031Conta/WABA bloqueada ou restrita.Abra WhatsApp Manager, consulte Qualidade/Visão geral da conta e siga o processo de revisão da Meta.NãoError codes
131037Nome de exibição ainda não aprovado ou não pronto para uso.Confira o status do nome e do número no WhatsApp Manager.Após aprovaçãoPhone numbers
131042Problema de pagamento ou elegibilidade comercial da WABA.Corrija a cobrança na Meta; a assinatura HookCloud via Stripe/Lastlink não paga as tarifas da Meta.Após corrigirError codes
131043A mensagem expirou dentro do TTL antes de ser entregue.Revise o TTL — comum em autenticação — e não reenvie código expirado.Novo códigoMessage Templates
131047Janela de atendimento de 24 horas encerrada para mensagem livre.Envie um template aprovado ou espere nova mensagem do usuário.Use templateTemplate messages
131048Restrição por spam/qualidade baixa ou excesso de bloqueios.Pare campanhas, revise opt-in, conteúdo, frequência e qualidade do número/template.Não imediatoError codes
131049A Meta decidiu não entregar para manter o engajamento saudável do ecossistema, frequentemente por limite de marketing por usuário.Não reenvie repetidamente. Aguarde, reduza frequência e use Utility somente se a mensagem for realmente transacional.Não imediatoPer-user marketing limits
131050O destinatário parou de receber marketing da empresa.Suprima marketing para esse contato e respeite a preferência até novo opt-in/retomada permitida.NãoError codes
131051Tipo de mensagem/componente não suportado.Use estrutura compatível com a Cloud API e com o template aprovado.Após corrigirTemplate messages
131053A Meta não conseguiu carregar a mídia usada na mensagem.Confira URL/arquivo, MIME type, tamanho e disponibilidade pública; reenvie mídia válida.Após corrigirError codes
131056Muitas mensagens do mesmo número para o mesmo destinatário em pouco tempo.Crie fila por destinatário e aguarde antes de tentar novamente.Sim, depoisError codes
131057Conta temporariamente em manutenção/migração.Aguarde a conclusão da operação da Meta e tente novamente mais tarde.Sim, depoisError codes
131061 / 131063Configuração específica de Marketing Messages incompatível com o endpoint Cloud API usado.Revise a configuração de marketing e use a API correta para o recurso habilitado.Após configurarMarketing templates
133010O número remetente não está registrado para uso na Cloud API.Conclua o registro do número e confira o Phone Number ID.Após registrarPhone numbers

Erros específicos do template

CódigoCausa mais comumComo contornar corretamenteMeta
132000A quantidade de parâmetros enviados não corresponde às variáveis do template.Conte variáveis por componente e envie exatamente a mesma quantidade e ordem.Template messages
132001Template inexistente, idioma errado, ainda não aprovado ou indisponível.Use nome e locale exatos; sincronize o status e confirme APPROVED.Message Templates API
132005Texto final/tradução excede o limite permitido.Reduza texto fixo e valores das variáveis; teste todos os idiomas.Template guidelines
132007Formato ou conteúdo viola regras de template.Leia o motivo, remova formatação/caracteres problemáticos e submeta novamente.Template guidelines
132012Tipo do parâmetro não combina com o componente aprovado, como imagem em header de vídeo.Espelhe exatamente os tipos de header, body e buttons do template.Template messages
132015Template pausado por baixa qualidade.Pare automações que dependem dele, corrija a estratégia e aguarde/revise conforme a Meta.Template pausing
132016Template desabilitado após problemas repetidos de qualidade.Não continue tentando. Crie outro template com conteúdo e público revisados.Template pausing
132018Parâmetros de template inválidos; detalhes costumam indicar variável vazia, extra ou malformada.Inspecione error_data.details e valide cada parâmetro antes do envio.Error codes
132068Template com WhatsApp Flow bloqueado por política/configuração.Revise o Flow, a associação ao template e as políticas aplicáveis.Error codes
132069Envio de template com Flow foi limitado por frequência.Reduza a velocidade e implemente fila/backoff.Rate limiting
135000Erro genérico ligado aos dados da mensagem/template.Leia os detalhes retornados, compare com o template aprovado e corrija o payload.Error codes
A lista da Meta é a fonte final
A Meta pode adicionar, alterar ou retirar códigos. Use esta tabela como diagnóstico operacional e confira sempre a página oficial de códigos de erro.

Passo a passo para o erro 131042: pagamento/elegibilidade

Abra o WhatsApp Manager da WABA corretaConfira se você está no Business Portfolio e na WABA do número que falhou.
Revise Pagamentos ou Billing & PaymentsConfirme método de pagamento ativo, sem saldo pendente, cartão recusado ou linha de crédito bloqueada.
Confira elegibilidade da contaVeja se a WABA está suspensa, excluída, em revisão ou com dados comerciais incompletos.
Valide moeda, fuso e vínculoO método precisa estar vinculado à conta correta. Um cartão em outro Business Portfolio não resolve.
Faça um teste unitárioDepois da correção, envie uma única mensagem. Não reinicie campanhas em massa antes de confirmar a entrega.
Stripe/Lastlink da HookCloud não substituem a cobrança da Meta
A assinatura do HookCloud Flow paga o software. Tarifas de mensagens/conversas da WhatsApp Business Platform são cobradas e administradas pela própria Meta na WABA do cliente.

Passo a passo para o erro 131049

A mensagem “This message was not delivered to maintain healthy ecosystem engagement” geralmente não é um defeito de token, webhook ou template inexistente. É uma decisão de entrega da Meta, especialmente em mensagens de marketing.

  1. Não repita a mesma mensagem em sequência.
  2. Registre o contato em uma lista temporária de supressão.
  3. Aguarde antes de uma nova tentativa; a Meta não publica um único prazo garantido para todos os casos.
  4. Reduza frequência e melhore segmentação/engajamento.
  5. Confirme opt-in e pedidos de parada.
  6. Use Utility apenas quando a finalidade for realmente transacional; não troque a categoria para burlar a decisão.
  7. Acompanhe qualidade do template e do número no WhatsApp Manager.

Consulte os limites de marketing por usuário na documentação da Meta.

O que salvar para diagnosticar sem expor segredos

  • código, título e error_data.details;
  • fbtrace_id e horário UTC;
  • WABA ID, Phone Number ID, template ID, nome e idioma;
  • wamid quando a API aceitou o envio;
  • status local do template e data da última sincronização;
  • tentativa, backoff aplicado e resposta HTTP;
  • nunca o token completo; e nunca solicite o App Secret da HookCloud.

Documentação oficial da Meta

Consulte a fonte oficial antes de implementar mudanças críticas, pois endpoints, campos, limites e políticas podem evoluir.

Ainda precisa de ajuda?

Envie o e-mail do owner, Workspace ID, Connection ID, horário aproximado e o código de suporte exibido no painel para suporte@hookcloud.app. Nunca envie o token completo.