Condicionais em Modelos em HTML
Condicionais em Templates
As Condicionais permitem que uma mesma mensagem mude de acordo com os dados do cliente, do projeto ou da venda. Em vez de criar várias mensagens diferentes para cada situação, você cria uma única mensagem inteligente que se adapta sozinha.
Início rápido
Um exemplo completo, com tudo o que você precisa saber em 30 segundos:
Olá, [[nome_cliente]]!
{{if [[status_projeto]] == 'Aprovado'}}
Seu projeto foi aprovado e está pronto para a próxima etapa.
{{else}}
Estamos analisando seu projeto e em breve traremos novidades.
{{endif}}
{{if [[telefone_contato]] IsNotEmpty}}
Caso prefira, retornamos pelo número [[telefone_contato]].
{{endif}}
Tudo o que está em {{if}} ... {{endif}} só aparece se a condição for verdadeira. O {{else}} é opcional e define o que mostrar quando a condição for falsa.
Sintaxe básica
A estrutura sempre segue este formato:
{{if CONDIÇÃO}}
Texto exibido quando a condição é verdadeira
{{else}}
Texto exibido quando a condição é falsa
{{endif}}
A parte do {{else}} é opcional. Sem ela, se a condição for falsa, simplesmente nada é exibido naquele lugar.
Sem else (mais comum)
{{if [[nome]] IsNotEmpty}}
Olá, [[nome]]!
{{endif}}
Com else
{{if [[nome]] IsNotEmpty}}
Olá, [[nome]]!
{{else}}
Olá!
{{endif}}
Como funciona
- O sistema procura blocos no formato
{{if ... }} ... {{endif}}dentro da mensagem. - Avalia a condição.
- Substitui o bloco inteiro pelo texto da parte correspondente (
ifouelse). - Tudo o que estiver fora da condicional permanece inalterado.
Comparações de texto não diferenciam maiúsculas de minúsculas.'Aprovado'é tratado como igual a'aprovado'ou'APROVADO'.
Variáveis no template
Variáveis aparecem entre colchetes duplos: [[nome_da_variavel]]. Elas podem ser usadas em três lugares:
Dentro da condição:
{{if [[status_projeto]] == 'Aprovado'}}
Dentro do conteúdo exibido:
{{if [[nome]] IsNotEmpty}}
Bem-vindo, [[nome]]! Seu protocolo é [[protocolo]].
{{endif}}
Comparando duas variáveis entre si:
{{if [[valor_pago]] >= [[valor_total]]}}
Pagamento quitado.
{{else}}
Ainda há saldo em aberto.
{{endif}}
Operadores de comparação
Igualdade e diferença
Operador | Significado |
|---|---|
| É igual a |
| É diferente de |
Funcionam tanto para texto quanto para números.
{{if [[status_projeto]] == 'Aprovado'}}
Seu projeto foi aprovado! 🎉
{{endif}}
{{if [[forma_pagamento]] != 'Boleto'}}
Pagamento confirmado automaticamente.
{{endif}}
Strings podem usar aspas simples'texto'ou aspas duplas"texto". Os dois funcionam.
Comparação numérica
Operador | Significado |
|---|---|
| Maior que |
| Menor que |
| Maior ou igual a |
| Menor ou igual a |
{{if [[potencia_kwp]] >= 10}}
Sua usina é classificada como **média**.
{{else}}
Sua usina é classificada como **micro**.
{{endif}}
{{if [[valor_total]] > 50000}}
Você tem direito ao desconto VIP!
{{endif}}
Números aceitam tanto o formato brasileiro (1.234,56) quanto o internacional (1234.56). Se algum dos lados não for um número válido, a comparação volta a ser feita como texto (ordem alfabética). Por isso, sempre garanta que o campo realmente contém um número antes de usar>,<,>=ou<=.
Operadores de texto
Operador | Significado |
|---|---|
| Contém o texto informado |
| NÃO contém o texto informado |
| Começa com o texto informado |
| Termina com o texto informado |
{{if [[email]] Contains '@gmail.com'}}
Detectamos que você usa Gmail.
{{endif}}
{{if [[telefone]] StartsWith '+55'}}
Cliente nacional confirmado.
{{endif}}
{{if [[observacoes]] Not Contains 'urgente'}}
Atendimento será feito em até 48h.
{{else}}
Atendimento prioritário acionado!
{{endif}}
{{if [[arquivo]] EndsWith '.pdf'}}
Documento em PDF recebido com sucesso.
{{endif}}
Verificação de preenchimento
Operador | Significado |
|---|---|
| Está vazio ou não foi preenchido |
| Tem algum valor preenchido |
São extremamente úteis para evitar mensagens com lacunas em branco.
{{if [[nome_cliente]] IsNotEmpty}}
Olá, [[nome_cliente]]!
{{else}}
Olá!
{{endif}}
{{if [[data_instalacao]] IsEmpty}}
Ainda estamos agendando sua instalação. Em breve entraremos em contato.
{{else}}
Sua instalação está agendada para [[data_instalacao]].
{{endif}}
Quando uma variável não tem valor preenchido (e o sistema não consegue substituir), ela é considerada "vazia" para efeitos do IsEmpty. Isso evita que o cliente receba mensagens com placeholders soltos no meio do texto.Combinando condições com AND, OR e NOT
Quando uma única condição não basta, você pode combinar várias usando os operadores lógicos AND, OR e NOT.
AND — todas as condições devem ser verdadeiras
{{if [[status]] == 'Aprovado' AND [[valor_total]] > 10000}}
Projeto aprovado e elegível para financiamento.
{{endif}}
OR — basta uma das condições ser verdadeira
{{if [[email]] IsEmpty OR [[telefone]] IsEmpty}}
Por favor, complete seu cadastro com email e telefone.
{{endif}}
NOT — inverte o resultado
{{if NOT [[observacoes]] Contains 'cancelar'}}
Vamos prosseguir com a instalação.
{{endif}}
Parênteses para agrupar
Quando precisa misturar AND com OR, use parênteses para deixar claro o que combina com o quê:
{{if ([[status]] == 'Aprovado' OR [[status]] == 'EmAnalise') AND [[valor]] > 1000}}
Seu projeto se enquadra no atendimento prioritário.
{{endif}}
Ordem de precedência (do mais "forte" para o mais "fraco"):NOT→AND→OR. Quando misturar os três sem parênteses,NOTé avaliado primeiro, depoisAND, depoisOR. Em caso de dúvida, use parênteses — eles deixam a intenção explícita.
Condicionais aninhadas
É possível colocar uma condicional dentro de outra para criar lógicas mais ricas:
{{if [[tipo_cliente]] == 'PJ'}}
{{if [[faturamento_anual]] > 1000000}}
Você se enquadra como cliente Enterprise.
{{else}}
Você se enquadra como cliente Business.
{{endif}}
{{else}}
Você se enquadra como cliente Residencial.
{{endif}}
Cada {{if}} precisa ter o seu {{endif}} correspondente. A indentação é só para leitura — não afeta o resultado.
Em muitos casos, é mais limpo usar AND/OR/NOT do que aninhar várias condicionais. Prefira aninhamento apenas quando os ramos têm conteúdos bem diferentes entre si.
Receitas prontas
Saudação por etapa do projeto
Olá, [[nome_cliente]]!
{{if [[etapa]] == 'Homologacao'}}
Seu projeto está em fase de homologação na concessionária. O prazo médio é de 30 dias.
{{endif}}
{{if [[etapa]] == 'Instalacao'}}
Sua instalação está marcada para [[data_instalacao]]. A equipe chegará entre 8h e 12h.
{{endif}}
{{if [[etapa]] == 'Concluido'}}
Parabéns! Sua usina já está gerando energia.
{{endif}}
Confirmação de pagamento condicional
Recebemos seu pagamento de R$ [[valor_pago]].
{{if [[valor_pago]] >= [[valor_total]]}}
Pagamento quitado integralmente. Obrigado!
{{else}}
Saldo restante: R$ [[saldo_devedor]].
Pague pelo link: [[link_pagamento]]
{{endif}}
Mensagem só para clientes com canal de contato preenchido
Olá!
{{if [[telefone_contato]] IsNotEmpty AND [[email]] IsNotEmpty}}
Podemos retornar pelo telefone [[telefone_contato]] ou pelo email [[email]].
{{else}}
{{if [[telefone_contato]] IsNotEmpty}}
Caso prefira, retornamos pelo telefone [[telefone_contato]].
{{endif}}
{{if [[email]] IsNotEmpty}}
Caso prefira, retornamos pelo email [[email]].
{{endif}}
{{endif}}
Detecção de cliente corporativo
{{if [[email]] Contains '@' AND NOT ([[email]] Contains '@gmail.com' OR [[email]] Contains '@hotmail.com' OR [[email]] Contains '@outlook.com')}}
Detectamos que você é cliente corporativo. Você terá atendimento dedicado.
{{else}}
Atendimento residencial padrão acionado.
{{endif}}
Filtro por porte da usina
{{if [[potencia_kwp]] < 5}}
Sua usina é micro residencial.
{{endif}}
{{if [[potencia_kwp]] >= 5 AND [[potencia_kwp]] < 75}}
Sua usina é mini residencial/comercial.
{{endif}}
{{if [[potencia_kwp]] >= 75}}
Sua usina é de grande porte. Atendimento técnico especializado disponível.
{{endif}}
Validação de cadastro completo
{{if [[nome]] IsEmpty OR [[cpf]] IsEmpty OR [[endereco]] IsEmpty}}
⚠️ Seu cadastro está incompleto. Faltam dados básicos. Acesse o portal para completar.
{{else}}
✅ Cadastro completo. Você está pronto para avançar.
{{endif}}
Como saber se está funcionando
Quando uma condicional não funciona como esperado, na maioria das vezes uma destas situações aconteceu:
- A condição era inválida e foi tratada como falsa. Quando o sistema não consegue interpretar a condição (por erro de digitação, aspas faltando, operador errado), ele assume que a condição é falsa e exibe o conteúdo do
{{else}}(ou nada, se não houver else). - A variável não tinha valor. Se
[[campo]]não foi substituído por nenhum dado real, ele entra na comparação como vazio. Isso afeta==,!=e até as comparações numéricas. - Comparou texto como número. Se o campo for texto (ex.:
"Aprovado") e você usar>ou<, a comparação será alfabética e provavelmente não vai dar o resultado esperado.
Para depurar, crie uma versão de teste da mensagem dividindo a condição em pedaços. Por exemplo, em vez de:
{{if [[status]] == 'Aprovado' AND [[valor]] > 1000}}OK{{endif}}
Faça um teste isolado:
Status: [[status]]
Valor: [[valor]]
{{if [[status]] == 'Aprovado'}}Status bate{{else}}Status não bate{{endif}}
{{if [[valor]] > 1000}}Valor bate{{else}}Valor não bate{{endif}}
Assim você descobre rapidamente qual lado da condição está falhando.
Dicas e boas práticas
- Sempre use
IsNotEmptyantes de exibir uma variável opcional, para evitar mensagens com lacunas em branco. - Prefira
==e!=para comparar status fixos (ex.:'Aprovado','Pendente','Cancelado'). - Use
Containsquando o conteúdo do campo pode variar mas você quer detectar uma palavra-chave (ex.: detectar@gmail.comem um email). - Mantenha a indentação quando usar condicionais aninhadas — facilita a leitura e a manutenção.
- Use parênteses sempre que misturar AND com OR. Não custa nada e evita confusão.
- Sempre coloque valores de texto entre aspas.
[[status]] == Aprovadonão funciona;[[status]] == 'Aprovado'sim.
Erros comuns
Esquecer o {{endif}}
❌ Errado:
{{if [[nome]] IsNotEmpty}}
Olá, [[nome]]
✅ Certo:
{{if [[nome]] IsNotEmpty}}
Olá, [[nome]]
{{endif}}
Esquecer as aspas em valores de texto
❌ Errado:
{{if [[status]] == Aprovado}}
✅ Certo:
{{if [[status]] == 'Aprovado'}}
Usar > ou < com texto
❌ Pode dar resultado inesperado:
{{if [[status]] > 'Aprovado'}}
✅ Use == ou !=:
{{if [[status]] == 'Aprovado'}}
Espaços no operador Not Contains
Use exatamente Not Contains (com espaço entre as palavras). Outras grafias não funcionam.
else sem if
{{else}} só funciona dentro de um bloco {{if}}...{{endif}}. Não pode aparecer sozinho.
Confundir AND/OR sem parênteses
❌ Pode dar resultado inesperado:
{{if [[a]] == 'x' OR [[b]] == 'y' AND [[c]] == 'z'}}
✅ Use parênteses para deixar claro:
{{if ([[a]] == 'x' OR [[b]] == 'y') AND [[c]] == 'z'}}
ou
{{if [[a]] == 'x' OR ([[b]] == 'y' AND [[c]] == 'z')}}
Tabela de referência rápida
Operadores de comparação
Operador | Tipo | Exemplo |
|---|---|---|
| Igualdade | |
| Diferença | |
| Maior que | |
| Menor que | |
| Maior ou igual | |
| Menor ou igual | |
| Contém texto | |
| Não contém texto | |
| Começa com | |
| Termina com | |
| Está vazio | |
| Está preenchido | |
Operadores lógicos
Operador | Significado | Exemplo |
|---|---|---|
| Todas as condições devem ser verdadeiras | |
| Pelo menos uma condição deve ser verdadeira | |
| Inverte o resultado | |
| Agrupa para definir prioridade | |
Estrutura de delimitadores
Marcação | Função |
|---|---|
| Inicia o bloco condicional |
| Define o conteúdo alternativo (opcional) |
| Encerra o bloco condicional (obrigatório) |
| Marca uma variável que será substituída |
| Define um valor de texto fixo na comparação |
Em caso de dúvidas, entre em contato com o suporte.
Atualizado em: 30/04/2026
Obrigado!
