Artigos sobre: Conceitos

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


  1. O sistema procura blocos no formato {{if ... }} ... {{endif}} dentro da mensagem.
  2. Avalia a condição.
  3. Substitui o bloco inteiro pelo texto da parte correspondente (if ou else).
  4. 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

Contains

Contém o texto informado

Not Contains

NÃO contém o texto informado

StartsWith

Começa com o texto informado

EndsWith

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

IsEmpty

Está vazio ou não foi preenchido

IsNotEmpty

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"): NOTANDOR. Quando misturar os três sem parênteses, NOT é avaliado primeiro, depois AND, depois OR. 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:


  1. 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).
  2. 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.
  3. 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 IsNotEmpty antes de exibir uma variável opcional, para evitar mensagens com lacunas em branco.
  • Prefira == e != para comparar status fixos (ex.: 'Aprovado', 'Pendente', 'Cancelado').
  • Use Contains quando o conteúdo do campo pode variar mas você quer detectar uma palavra-chave (ex.: detectar @gmail.com em 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]] == Aprovado nã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

[[status]] == 'Aprovado'

!=

Diferença

[[status]] != 'Cancelado'

>

Maior que

[[potencia]] > 10

<

Menor que

[[potencia]] < 5

>=

Maior ou igual

[[valor]] >= 1000

<=

Menor ou igual

[[valor]] <= 500

Contains

Contém texto

[[email]] Contains '@gmail.com'

Not Contains

Não contém texto

[[obs]] Not Contains 'urgente'

StartsWith

Começa com

[[telefone]] StartsWith '+55'

EndsWith

Termina com

[[arquivo]] EndsWith '.pdf'

IsEmpty

Está vazio

[[data_instalacao]] IsEmpty

IsNotEmpty

Está preenchido

[[nome]] IsNotEmpty


Operadores lógicos


Operador

Significado

Exemplo

AND

Todas as condições devem ser verdadeiras

[[a]] == 'x' AND [[b]] > 10

OR

Pelo menos uma condição deve ser verdadeira

[[a]] IsEmpty OR [[b]] IsEmpty

NOT

Inverte o resultado

NOT [[obs]] Contains 'spam'

( )

Agrupa para definir prioridade

([[a]] == 'x' OR [[a]] == 'y') AND [[b]] > 0


Estrutura de delimitadores


Marcação

Função

{{if ...}}

Inicia o bloco condicional

{{else}}

Define o conteúdo alternativo (opcional)

{{endif}}

Encerra o bloco condicional (obrigatório)

[[variavel]]

Marca uma variável que será substituída

'texto'

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

Este artigo foi útil?

Compartilhe seu feedback

Cancelar

Obrigado!