Atualizado em 29/10/2026
O erro 131047 da API do WhatsApp significa que passaram mais de 24 horas desde a última mensagem do cliente para o seu número, então a janela de atendimento fechou e mensagens livres (texto, mídia, botões, listas) não são mais aceitas. A solução oficial é enviar um template aprovado; quando o cliente responder, a janela de 24 horas abre de novo. Dá para evitar o erro guardando a hora da última mensagem de cada contato e escolhendo entre texto livre e template antes de enviar.
O guia geral de erros da API do WhatsApp traz a tabela completa de códigos. Aqui o assunto é só o 131047: por que acontece, como prevenir no código e como trazer o cliente de volta sem gastar mais do que precisa.
O que diz a documentação da Meta
Na tabela de códigos de erro da Meta, o 131047 é descrito assim: mais de 24 horas se passaram desde que o destinatário respondeu pela última vez ao número remetente. A solução indicada é enviar uma mensagem de template.
A regra por trás está na página de preços: quando um usuário manda mensagem ou liga para a empresa, abre-se uma janela de atendimento de 24 horas. Cada nova mensagem ou ligação do usuário reinicia o contador. Mensagens que não são template só podem ser enviadas com a janela aberta.
Na prática, o erro chega de forma assíncrona, no webhook de status, depois que a API já devolveu um wamid:
{
"statuses": [
{
"id": "wamid.HBgLNTUxMTk5OTk5OTk5...",
"status": "failed",
"timestamp": "1761750000",
"recipient_id": "5511999999999",
"errors": [
{
"code": 131047,
"title": "More than 24 hours have passed since the recipient last replied to the sender number.",
"error_data": {
"details": "More than 24 hours have passed since the recipient last replied to the sender number."
}
}
]
}
]
}
Os textos de title e details podem mudar; trate sempre pelo code. Por isso o 200 OK do envio não basta: quem só olha a resposta síncrona acha que a mensagem saiu. O artigo de mensagem não entregue mostra como acompanhar esses status.
Quando o 131047 costuma aparecer
O erro quase nunca é “do WhatsApp”. Ele aparece em fluxos que esquecem a janela:
- Atendente que responde no dia seguinte. O cliente escreveu sexta às 18h, o atendente responde segunda às 9h com texto livre.
- Automação disparada por evento do sistema. Pedido enviado, boleto gerado, reunião remarcada: o sistema manda texto livre para um contato que não falou com a empresa há dias.
- Bot que retoma conversa parada. Um lembrete “ainda precisa de ajuda?” enviado 30 horas depois.
- Migração de API não oficial. Quem vem de bibliotecas como Baileys estava acostumado a mandar texto para qualquer pessoa a qualquer hora. Na API oficial, fora da janela, só template.
Templates não sofrem o 131047. Ele é exclusivo de mensagens livres fora da janela.
Quer testar enquanto lê? Crie sua conta na Vectalk e envie a primeira mensagem pela API oficial. Criar conta grátis →
O que abre (e reabre) a janela de 24 horas
Pela documentação de preços, a janela abre quando o usuário manda uma mensagem ou liga para a empresa, e cada nova mensagem ou ligação reinicia as 24 horas. A sua própria mensagem não abre nada: enviar um template não reabre a janela por si só. Quem reabre é o cliente, ao responder.
E as respostas a botões? A página de preços fala em mensagem ou ligação do usuário e não detalha cada tipo de mensagem. O que a referência de webhooks mostra é que o toque em um botão de resposta rápida de um template chega no webhook messages como uma mensagem recebida do usuário, com type: "button" e o próprio timestamp. Por isso o código abaixo grava a hora de qualquer mensagem recebida, inclusive essas.
Existe também a janela de entrada gratuita, ligada a anúncios Click-to-WhatsApp: quando o usuário chega por um desses anúncios (no app Android ou iOS) e você responde dentro da janela de atendimento, abre-se uma janela que pode durar até 7 dias. Enquanto ela está aberta, a Meta não cobra mensagens de marketing, utilidade, autenticação e serviço. Ela aparece na documentação de preços como regra de cobrança; no código, continue decidindo entre texto livre e template pelo horário da última mensagem do cliente.
As regras completas estão no guia da janela de 24 horas do WhatsApp.
Como detectar antes de enviar
A forma mais barata de lidar com o 131047 é não provocá-lo. Grave o timestamp de cada mensagem recebida, por contato, e consulte antes de qualquer envio. O exemplo em Node.js abaixo faz isso com um Map em memória; em produção, use banco ou Redis.
const API_URL = 'https://apis.vectalk.com.br/api/messages';
const TOKEN = process.env.VECTALK_TOKEN;
const JANELA_MS = 24 * 60 * 60 * 1000;
const MARGEM_MS = 10 * 60 * 1000; // folga para filas e relógios
const ultimaEntrada = new Map(); // wa_id -> timestamp em ms
// No webhook: guarda a hora da última mensagem do cliente
function onWebhook(body) {
for (const entry of body.entry || []) {
for (const change of entry.changes || []) {
for (const msg of change.value?.messages || []) {
ultimaEntrada.set(msg.from, Number(msg.timestamp) * 1000);
}
}
}
}
function janelaAberta(waId) {
const t = ultimaEntrada.get(waId);
return t !== undefined && Date.now() - t < JANELA_MS - MARGEM_MS;
}
async function enviar(payload) {
const res = await fetch(API_URL, {
method: 'POST',
headers: { Authorization: `Bearer ${TOKEN}`, 'Content-Type': 'application/json' },
body: JSON.stringify({ messaging_product: 'whatsapp', ...payload })
});
return res.json();
}
// Escolhe texto livre ou template conforme a janela
async function responder(waId, texto, nomeCliente) {
if (janelaAberta(waId)) {
return enviar({ to: waId, type: 'text', text: { body: texto } });
}
return enviar({
to: waId,
type: 'template',
template: {
name: 'retomar_atendimento',
language: { code: 'pt_BR' },
components: [
{ type: 'body', parameters: [{ type: 'text', text: nomeCliente }] }
]
}
});
}
Três cuidados com esse padrão:
- Use o
timestampda mensagem, não a hora em que o webhook chegou. Retentativas da Meta podem entregar o evento atrasado. - Deixe uma margem. Uma mensagem montada às 23h59 da janela pode sair depois de vencida, se ficar na fila.
- Trate o erro mesmo assim. Se o 131047 chegar no webhook, marque a mensagem e caia para o template, em vez de repetir o texto livre.
Se você integra atendentes humanos, mostre no painel do atendente quanto tempo resta na janela. Isso evita a resposta de segunda-feira que nunca chega.
Como reengajar o cliente com template
O template certo depende do motivo do contato. A categoria define o preço e a chance de aprovação, e é a Meta que decide a categoria final; veja como a Meta classifica templates.
| Situação | Categoria provável | Exemplo de texto |
|---|---|---|
| Resposta a uma solicitação que o cliente abriu | Utilidade | “Olá, {{1}}. Temos a resposta sobre a sua solicitação {{2}}. Toque em Ver resposta para continuar.” |
| Atualização de pedido, entrega ou agendamento | Utilidade | “Seu pedido {{1}} saiu para entrega. Toque em Falar com a loja se precisar de algo.” |
| Oferta, cupom ou convite para voltar a comprar | Marketing | “{{1}}, separamos uma condição especial para você. Quer conhecer?” |
Duas dicas para a mensagem trazer o cliente de volta:
- Coloque um botão de resposta rápida. Tocar é mais fácil do que digitar, e o toque chega no seu webhook como mensagem do cliente. A partir dela, o atendente ou o bot volta a decidir pela hora da última mensagem recebida, como no código acima.
- Diga por que está escrevendo. “Temos a resposta sobre a sua solicitação” funciona melhor do que “Olá, tudo bem?”, e é mais fácil de aprovar como utilidade.
O JSON completo de envio de templates, com variáveis, mídia e botões, está em como enviar template pela API.
Quanto custa reengajar
Uma mensagem que falha com 131047 não é cobrada: a Meta só cobra mensagens entregues. O custo está no template que você envia para resolver. As tarifas da Meta para destino Brasil, desde 1º/10/2026, são:
| Categoria | Preço por mensagem entregue (destino Brasil) |
|---|---|
| Marketing | R$ 0,3217 |
| Utilidade | R$ 0,0350 |
| Autenticação | R$ 0,0350 |
| Serviço | R$ 0,0350, depois de 1.000 grátis por número no mês |
Desde 1º/10/2026, templates de utilidade enviados dentro da janela de atendimento também são cobrados, e as mensagens de serviço (texto livre dentro da janela) passaram a ter franquia de 1.000 por número por mês. O que mudou está em mensagens de utilidade na janela de atendimento.
A conta prática: retomar com utilidade custa uma fração do marketing. Se o motivo do contato é a solicitação do próprio cliente, um template de utilidade bem escrito resolve o 131047 pelo menor preço. Para outros países, veja o preço da API do WhatsApp por país.
Como fazer isso com a Vectalk
A Vectalk é um proxy da Cloud API oficial, então o 131047 chega no seu webhook com o mesmo código e o mesmo formato da Meta, e o exemplo acima funciona sem mudanças: o envio vai para POST https://apis.vectalk.com.br/api/messages com o mesmo corpo JSON da Meta. Os templates são criados no painel, que tem uma Biblioteca de Modelos, ou pela API de templates. Para revisar falhas, filtre o histórico com GET /api/messages?status=failed no endpoint Listar Mensagens.
Cada mensagem entregue é descontada do seu saldo pré-pago e a Vectalk paga a Meta pela linha de crédito dela, sem cartão seu na Meta. Crie a conta em apps.vectalk.com.br/register ou veja o panorama no guia da API oficial do WhatsApp.
Perguntas frequentes
O que significa o erro 131047 no WhatsApp?
Que passaram mais de 24 horas desde a última mensagem do cliente para o seu número. A janela de atendimento fechou, e só templates aprovados podem ser enviados até o cliente responder de novo.
Enviar um template reabre a janela de 24 horas?
Não sozinho. A janela abre quando o cliente manda mensagem ou liga. O template serve para provocar essa resposta; quando ela chega, você tem mais 24 horas para mensagens livres.
Mensagem que falhou com 131047 é cobrada?
Não. A Meta só cobra mensagens entregues, e uma mensagem com 131047 não foi entregue. Você paga apenas o template que enviar depois, se ele for entregue.
Qual template usar para retomar a conversa?
Se o contato é sobre algo que o cliente pediu (resposta de suporte, pedido, agendamento), um template de utilidade, que custa R$ 0,0350 por mensagem entregue no Brasil. Se é oferta ou convite para comprar, marketing, a R$ 0,3217.
Posso aumentar a janela para mais de 24 horas?
Não. A janela de atendimento é de 24 horas a partir da última mensagem ou ligação do cliente. A janela de entrada gratuita de até 7 dias, dos anúncios Click-to-WhatsApp, aparece na página de preços da Meta como regra de cobrança.
Fontes oficiais consultadas em 29/10/2026: Códigos de erro da WhatsApp Cloud API, Preços da plataforma do WhatsApp Business, Referência do webhook de status, Referência do webhook de botão, Webhooks na documentação da Meta, Listar Mensagens na documentação da Vectalk, Criar template na documentação da Vectalk.
Teste a API oficial do WhatsApp hoje
Crie sua conta, gere o token e envie a primeira mensagem seguindo o guia da documentação. Mesmos payloads e webhooks da Cloud API da Meta.
