Pular para o conteúdo principal

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:

QuandoQuem fez algoO que você pode mandar
Segunda 10hCliente: "Bom dia, preciso marcar consulta"Janela aberta. Você pode responder qualquer coisa
Segunda 11hVocê responde: "Bom dia, temos terça às 14h"Conversa em andamento, janela aberta
Segunda 12hCliente confirma: "Ótimo, pode marcar"Janela ainda aberta (passou 1h desde a última mensagem do cliente)
Terça 10hVocê confirma o agendamentoJanela ainda aberta (passaram 22h da última mensagem do cliente)
Quarta 13hVocê quer mandar lembrete de consultaJanela 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

ModoCusto Meta
Mensagem livre dentro da janela (service)Grátis após uma franquia mensal (~1000 conversas service grátis por mês)
Template MARKETINGPago (mais caro)
Template UTILITYPago (médio)
Template AUTHENTICATIONPago (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.

Artigos relacionados