Pular para o conteúdo

Regras de lógica

Como mostrar, ocultar, tornar obrigatórias ou pular perguntas no trulyform com base em respostas anteriores: formato das regras, operadores e valores.

Ver em Markdown (inglês)

Todas as páginas da documentação
Nesta página

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) e skip (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 show fica oculta até que uma das regras show dela 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…", deixe required como false e adicione uma regra require.
  • 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:

  1. Em cada pergunta, ele confere as regras show e hide que têm essa pergunta como destino, na ordem em que aparecem em rules. A primeira que for atendida decide se a pergunta aparece ou fica oculta.
  2. Se nenhuma for atendida, a pergunta fica oculta quando tem pelo menos uma regra show apontando para ela; caso contrário, aparece.
  3. Uma pergunta visível é obrigatória quando o required dela é true ou quando uma regra require apontando para ela é atendida.
  4. Depois que uma pergunta é respondida, a primeira regra skip atendida 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 contains em um ranking é sempre verdadeiro.

Dicas

  • Pergunta de acompanhamento só quando fizer sentido: use show na pergunta de acompanhamento quando a resposta anterior atender à condição. Para pular várias perguntas de uma vez, use skip.
  • "Outro, qual?": adicione uma opção Outro e, logo depois, uma pergunta de texto curto com uma regra show ligada 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 show só para algumas pessoas.
  • Vários gatilhos para a mesma pergunta: use mode: "any" com várias condições, ou adicione várias regras show.

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.

  1. A primeira regra oculta a pergunta sobre a data da sessão para quem escolhe o ingresso online.
  2. A segunda mostra a pergunta sobre restrições alimentares só para ingressos presenciais.
  3. 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.

Pronto para criar?
Conecte seu assistente.

Escolha o assistente que você usa, entre no trulyform e peça o formulário de que precisa.

Escolher assistente