O que você precisa saber
- Uma regra altera uma pergunta, o destino, com base nas respostas a perguntas que vêm antes dela.
- São quatro ações:
show(mostrar),hide(ocultar),require(tornar obrigatória) eskip(pular). - A regra só entra em ação depois que a pergunta de origem é respondida. Perguntas que a pessoa nem chegou a ver contam como não respondidas.
- Uma pergunta com regra
showfica oculta até que uma das regrasshowdela seja atendida. - Nas perguntas de escolha, as condições comparam os IDs das opções, nunca os rótulos.
- A lógica está disponível em todos os planos.
Formato da regra
As regras ficam na lista rules da definição:
| Chave | Observações |
|---|---|
id |
Um UUIDv7, único no formulário. |
sourceId |
A pergunta cuja resposta a regra aguarda. No skip, o salto acontece logo depois dessa pergunta. |
targetId |
A pergunta afetada pela regra. Precisa vir depois da origem. |
mode |
all: todas as condições precisam ser atendidas. any: basta uma. |
action |
show, hide, require ou skip. |
conditions |
Até 20 condições, cada uma no formato {fieldId, operator, value}. fieldId é a pergunta de origem ou uma anterior a ela. |
Na maioria das regras, a condição confere a própria pergunta de origem, então sourceId e o fieldId de cada condição são iguais. Eles só são diferentes quando a regra aguarda uma pergunta e, além dela, confere respostas anteriores, como "depois da pergunta sobre orçamento, se o orçamento for maior que 5.000 e o tipo de projeto for Site".
Cada formulário pode ter até 300 regras.
O que cada ação faz
show: o destino só aparece quando a regra é atendida.hide: o destino fica oculto quando a regra é atendida.require: o destino passa a ser obrigatório quando a regra é atendida. Nenhuma regra torna opcional uma pergunta que aparece; para "obrigatória só quando…", deixerequiredcomo false e adicione uma regrarequire.skip: depois que a pessoa responde à pergunta de origem, o formulário salta para o destino e pula todas as perguntas entre as duas. O salto é sempre para a frente. Para encerrar o formulário mais cedo, oculte as perguntas restantes.
Uma regra require não pode ter como destino um texto informativo, porque ele não coleta resposta.
Como as regras são avaliadas
O trulyform percorre as perguntas em ordem:
- Em cada pergunta, ele confere as regras
showehideque têm essa pergunta como destino, na ordem em que aparecem emrules. A primeira que for atendida decide se a pergunta aparece ou fica oculta. - Se nenhuma for atendida, a pergunta fica oculta quando tem pelo menos uma regra
showapontando para ela; caso contrário, aparece. - Uma pergunta visível é obrigatória quando o
requireddela é true ou quando uma regrarequireapontando para ela é atendida. - Depois que uma pergunta é respondida, a primeira regra
skipatendida que tem essa pergunta como origem faz o salto.
Enquanto a pergunta de origem não tem resposta, a regra nunca é atendida, sejam quais forem as condições; por isso ela não consegue reagir a uma origem deixada em branco. Depois que a origem é respondida, uma condição sobre uma pergunta sem resposta, oculta ou pulada não enxerga resposta nenhuma: só is_empty é atendida.
Uma pergunta oculta ou pulada nunca é obrigatória, mesmo com required true. Por isso, uma pergunta de acompanhamento exibida por uma regra show pode ter required: true: a obrigatoriedade só vale quando ela aparece.
As regras sempre usam as respostas atuais. Se a pessoa volta e muda uma resposta, as perguntas visíveis, ocultas e obrigatórias mudam junto.
Condições
A referência técnica a seguir é gerada a partir do código e está em inglês, como os assistentes de IA a leem.
| Operador | Significado |
|---|---|
eq |
Equals the value. Text comparisons ignore letter case and surrounding spaces. |
neq |
Does not equal the value. |
gt |
Greater than the value. Numbers compare as decimals; dates compare chronologically. |
gte |
Greater than or equal to the value. |
lt |
Less than the value. |
lte |
Less than or equal to the value. |
contains |
Text: contains the value. Multiple choice and ranking: the answer includes this option ID. |
not_contains |
The opposite of contains. |
has_value |
The question has an answer. Takes no value. |
is_empty |
The question has no answer, including when it was skipped or hidden. Takes no value. |
any_of |
The answer includes at least one of the listed option IDs. The value is a list. |
Valores de comparação por tipo de pergunta:
| Tipo | Operadores | Valor de comparação |
|---|---|---|
short_text |
eq, neq, has_value, is_empty, contains, not_contains |
A string, such as "yes". |
long_text |
eq, neq, has_value, is_empty, contains, not_contains |
A string, such as "yes". |
email |
eq, neq, has_value, is_empty, contains, not_contains |
A string, such as "yes". |
phone |
eq, neq, has_value, is_empty, contains, not_contains |
A string, such as "yes". |
number |
eq, neq, has_value, is_empty, gt, gte, lt, lte |
A number or decimal string, such as "7" or "2.5". |
date |
eq, neq, has_value, is_empty, gt, gte, lt, lte |
A date as "YYYY-MM-DD". |
single_choice |
eq, neq, has_value, is_empty |
An option ID from this question. |
dropdown |
eq, neq, has_value, is_empty |
An option ID from this question. |
multiple_choice |
contains, not_contains, any_of, has_value, is_empty |
An option ID from this question. any_of takes a list of option IDs. |
consent |
eq, neq, has_value, is_empty |
true or false. |
nps |
eq, neq, has_value, is_empty, gt, gte, lt, lte |
A number or decimal string, such as "7" or "2.5". |
opinion_scale |
eq, neq, has_value, is_empty, gt, gte, lt, lte |
A number or decimal string, such as "7" or "2.5". |
ranking |
contains, not_contains, any_of, has_value, is_empty |
An option ID from this question. any_of takes a list of option IDs. |
matrix |
has_value, is_empty |
Only has_value and is_empty. |
file_upload |
has_value, is_empty |
Only has_value and is_empty. |
statement |
None | Statements cannot be used in conditions. |
website |
eq, neq, has_value, is_empty, contains, not_contains |
A string, such as "yes". |
- Comparações de texto ignoram maiúsculas e minúsculas e os espaços antes e depois da resposta. Respostas de site comparam o endereço salvo exatamente como está, como "https://example.com".
- Nas perguntas de escolha, os valores são IDs de opções. Em
any_of, o valor é uma lista de IDs de opções. - Em perguntas de NPS e de escala de opinião com caixa de comentário, a comparação usa a nota.
- Uma resposta de ranking sempre traz todas as opções, então
containsem um ranking é sempre verdadeiro.
Dicas
- Pergunta de acompanhamento só quando fizer sentido: use
showna pergunta de acompanhamento quando a resposta anterior atender à condição. Para pular várias perguntas de uma vez, useskip. - "Outro, qual?": adicione uma opção Outro e, logo depois, uma pergunta de texto curto com uma regra
showligada a essa opção. - Textos diferentes para pessoas diferentes: o formulário tem uma única tela final, então use referências de resposta nela, ou adicione um texto informativo logo antes do fim e mostre-o com
showsó para algumas pessoas. - Vários gatilhos para a mesma pergunta: use
mode: "any"com várias condições, ou adicione várias regrasshow.
Exemplo
A inscrição em workshop pergunta qual ingresso a pessoa quer e usa essa resposta três vezes:
Workshop registration: rules
[
{
"id": "01990000-0000-7000-8000-000000000121",
"sourceId": "01990000-0000-7000-8000-000000000103",
"targetId": "01990000-0000-7000-8000-000000000105",
"mode": "all",
"action": "hide",
"conditions": [{"fieldId":"01990000-0000-7000-8000-000000000103","operator":"eq","value":"01990000-0000-7000-8000-000000000112"}]
},
{
"id": "01990000-0000-7000-8000-000000000122",
"sourceId": "01990000-0000-7000-8000-000000000103",
"targetId": "01990000-0000-7000-8000-000000000106",
"mode": "all",
"action": "show",
"conditions": [{"fieldId":"01990000-0000-7000-8000-000000000103","operator":"eq","value":"01990000-0000-7000-8000-000000000111"}]
},
{
"id": "01990000-0000-7000-8000-000000000123",
"sourceId": "01990000-0000-7000-8000-000000000103",
"targetId": "01990000-0000-7000-8000-000000000107",
"mode": "all",
"action": "require",
"conditions": [{"fieldId":"01990000-0000-7000-8000-000000000103","operator":"eq","value":"01990000-0000-7000-8000-000000000111"}]
}
]
Selecione o texto para copiá-lo.
- A primeira regra oculta a pergunta sobre a data da sessão para quem escolhe o ingresso online.
- A segunda mostra a pergunta sobre restrições alimentares só para ingressos presenciais.
- A terceira torna o telefone obrigatório para ingressos presenciais.
A candidatura a vaga usa uma regra skip: quem nunca trabalhou em equipe remota pula a pergunta de acompanhamento sobre o assunto.