Quando preciso usar template vs mensagem livre
Resumo: Se o cliente te mandou mensagem nas últimas 24 horas, você responde com qualquer texto livre. Se passou de 24h sem ele mandar nada, sua próxima mensagem precisa ser um template aprovado.
Quando usar isso
Toda hora — esta é a regra mais importante do WhatsApp Business. Se você ignorar, suas mensagens falham com erro RE_ENGAGEMENT_MESSAGE_REQUIRED.
(Só vale para canais WABA. Baileys não tem essa restrição.)
A regra na prática
Imagine este cenário ao longo da semana:
| Quando | Quem fez algo | O que você pode mandar |
|---|---|---|
| Segunda 10h | Cliente: "Bom dia, preciso marcar consulta" | Janela aberta. Você pode responder qualquer coisa |
| Segunda 11h | Você responde: "Bom dia, temos terça às 14h" | Conversa em andamento, janela aberta |
| Segunda 12h | Cliente confirma: "Ótimo, pode marcar" | Janela ainda aberta (passou 1h desde a última mensagem do cliente) |
| Terça 10h | Você confirma o agendamento | Janela ainda aberta (passaram 22h da última mensagem do cliente) |
| Quarta 13h | Você quer mandar lembrete de consulta | Janela fechada — passaram >24h sem o cliente mandar nada. Precisa de template |
A regra olha sempre a última mensagem do cliente, não a sua.
Como saber se a janela está aberta?
O gateway controla isso para você. Quando você tenta enviar uma mensagem livre fora da janela, o WABA retorna um erro específico:
RE_ENGAGEMENT_MESSAGE_REQUIRED
Cannot send message. The customer service window has expired.
Use an approved template to re-engage.
Em alguns clientes WABA, o erro vem como Recipient phone number not in allowed list ou Message Undeliverable.
Exemplos por cenário
Cenário A: cliente mandou mensagem agora
Cliente (14:00): "Vocês atendem aos sábados?" Você (14:05): "Sim, das 9h às 12h." ✅ Mensagem livre OK
Cenário B: 1 dia depois, mas dentro de 24h
Cliente (segunda 10h): "Quero remarcar" Você (terça 9h): "Pode ser para terça às 16h?" ✅ Mensagem livre OK (passou 23h)
Cenário C: passou de 24h sem cliente responder
Cliente (segunda 10h): "Quero remarcar" Você (segunda 11h): "Pode ser para terça 16h?" Cliente: (não respondeu) Você (terça 15h): "Continua de pé para amanhã?" ❌ Falha — passaram >24h da última mensagem do cliente
Para mandar a mensagem do exemplo C, você precisaria de um template tipo:
Olá {{1}}, lembrando que ainda aguardamos sua confirmação sobre o reagendamento. Pode responder esta mensagem.
Cenário D: campanha de marketing
Quer mandar promoção de Black Friday para 500 clientes? Todos vão precisar de template (categoria MARKETING), independente de quando eles falaram com você por último.
E quando uso mensagem livre?
Toda vez que estiver dentro da janela (cliente mandou nas últimas 24h), você pode usar:
- Texto livre
- Imagem, vídeo, áudio, documento com legenda
- Botões interativos (de resposta rápida ou lista)
- Localização, contato, figurinha
Sem limitação de conteúdo (só as regras gerais de não-spam).
Custo: livre vs template
| Modo | Custo Meta |
|---|---|
| Mensagem livre dentro da janela (service) | Grátis após uma franquia mensal (~1000 conversas service grátis por mês) |
| Template MARKETING | Pago (mais caro) |
| Template UTILITY | Pago (médio) |
| Template AUTHENTICATION | Pago (mais barato) |
Por isso é importante responder os clientes rápido — mantém a janela aberta e evita pagar template.
Dúvidas comuns
Se o cliente clica num botão da minha mensagem, a janela reabre? Sim. Cliente clicar em botão (button_reply ou list_reply) conta como mensagem dele — janela renova por mais 24h.
Reagir com emoji conta como mensagem? Sim, a reação do cliente conta como atividade dele — abre/renova a janela.
E se o cliente apagar a mensagem dele? A janela permanece aberta pelo tempo que originalmente foi medido (a Meta calcula no momento da chegada).
O cliente bloqueou meu número. A janela continua? Não. Se o cliente bloquear, qualquer envio falha (livre ou template). A Meta retorna erro tipo Receiver has blocked you.
Onde vejo qual mensagem foi a última do cliente? No painel, em cada conversa, é só olhar a timeline. Pela API, você consulta GET /v1/messages/conversation/:contactKey?direction=in&limit=1.