Pular para o conteúdo principal

A janela de 24 horas

É a regra que mais confunde quem chega ao WhatsApp oficial, e a causa mais comum de 422 meta_error em produção.

Você só pode enviar mensagem de conteúdo livre dentro de 24 horas contadas a partir da última mensagem que o cliente te enviou. Fora dessa janela, o WhatsApp aceita apenas templates previamente aprovados.

Como a janela abre e fecha​

Só a mensagem do cliente abre a janela. Suas próprias mensagens não estendem o prazo — mandar dez mensagens seguidas não compra mais tempo.

O erro quando a janela está fechada​

422 Unprocessable Entity
{
"error": {
"message": "The Meta Cloud API rejected the request.",
"type": "meta_error",
"meta": {
"error": {
"message": "(#131047) Re-engagement message",
"code": 131047,
"error_subcode": 2494010,
"fbtrace_id": "AbCdEfGhIjK"
}
}
}
}

O código 131047 é o sinal. Repetir a requisição não adianta — a correção é enviar um template.

Rastreando a janela no seu sistema​

A API não expõe um endpoint de "esta janela está aberta?". Você controla isso a partir dos webhooks: toda mensagem recebida chega com um timestamp Unix.

// Ao receber um webhook `messages` com uma mensagem do cliente:
const abertaAte = Number(mensagem.timestamp) * 1000 + 24 * 60 * 60 * 1000;
await db.conversas.upsert({ waId: mensagem.from, janelaAbertaAte: new Date(abertaAte) });

// Antes de enviar:
const conversa = await db.conversas.find({ waId: destinatario });
const podeTextoLivre = conversa && conversa.janelaAbertaAte > new Date();

Deixe uma margem de segurança de alguns minutos: o relógio que vale é o da Meta, não o seu.

Estratégia prática​

Dentro da janela — use o que quiser: texto, mídia, botões, listas. É mais barato e não passa por aprovação.

Fora da janela — envie um template. Ele reabre a conversa; assim que o cliente responder, você volta ao conteúdo livre.

Na dúvida — envie o template. Uma mensagem que chega custa mais barato que um erro que não chega.

Templates que valem a pena manter aprovados​

Ter uma pequena biblioteca aprovada evita ficar refém do prazo de aprovação:

SituaçãoCategoria
Retomar um atendimento paradoUTILITY
Confirmar pedido, entrega ou agendamentoUTILITY
Enviar código de verificaçãoAUTHENTICATION
Divulgar promoçãoMARKETING

Detalhes de criação e regras de variáveis em Templates.

Custo​

A Meta cobra por conversa iniciada, não por mensagem. Uma conversa aberta por template de MARKETING custa mais que uma de UTILITY, e conversas iniciadas pelo cliente (SERVICE) são as mais baratas — em muitos casos, gratuitas.

Isso muda o desenho da integração: um fluxo que leva o cliente a escrever primeiro sai mais barato que um que dispara templates de marketing.