Validações de segurança do Flow Builder: por que travam você
Cinco bloqueios aplicados antes de publicar, o cenário real que cada um evita e o jeito de resolver dentro do editor sem tentar burlar a regra.

Fiquei irritado com as validações de segurança do Flow Builder num sábado à noite. Eu queria publicar, o editor não deixava, e a mensagem falava de referência circular entre fluxos. Passei meia hora tentando entender o que aquilo tinha a ver com o meu desenho. Tinha tudo. O fluxo A chamava o B, que chamava o C, que voltava para o A. Se tivesse publicado, teria rodado até derrubar alguma coisa.
São cinco cenários barrados, todos ligados a subfluxo e a loop. Cada um virou regra depois de causar estrago em algum lugar. Entender o motivo de cada bloqueio é o que evita você contornar a regra e reintroduzir o problema por outra porta, que foi exatamente o que eu tentei fazer naquele sábado.
Aqui eu detalho cada bloqueio, o sintoma que ele evita e como corrigir. Este texto é irmão do catálogo de erros comuns em fluxos de chatbot, que trata dos defeitos que nenhuma validação consegue pegar.
O que as validações de segurança cobrem e o que ignoram
Ela é estrutural. Olha o grafo do fluxo, as referências entre fluxos e a presença de bloco de espera dentro dos ciclos. Não olha texto, não olha tom, não julga a sua regra de negócio e não tem opinião sobre a experiência do cliente.
| Bloqueio | Cenário evitado |
|---|---|
| Bloco Flow sem destino | Jornada que termina no vazio ao chamar o subfluxo |
| Bloco Flow apontando para o próprio fluxo | Recursão imediata e consumo sem fim |
| Destino inexistente, inativo ou de outra empresa | Chamada para um fluxo que não pode responder |
| Referência circular entre fluxos | Fluxo A chama B que chama A, sem parar nunca |
| Loop local sem bloco de espera | Ciclo interno rodando sem pausa nem interação |
Bloco Flow sem destino
O bloco Flow nasce no canvas com o rótulo "Defina um fluxo". É um lembrete visual de que ele está pela metade. Publicar assim seria mandar o cliente para um subfluxo que não existe, no meio da jornada, sem aviso.
A correção é rápida: abra o bloco, escolha o fluxo de destino e olhe o preview dos nós que o editor carrega. Esse preview é o jeito mais rápido de confirmar que você pegou o subfluxo certo, e eu confio mais nele do que no nome do fluxo.
Autorreferência e referência circular
Bloco Flow apontando para o próprio fluxo é recursão na hora. A referência circular é mais traiçoeira, porque nenhum bloco parece errado quando você olha um por vez. Foi o meu caso. Cada fluxo estava impecável sozinho.
Quando a validação acusa circularidade, não saia removendo bloco Flow. Repense a hierarquia. Subfluxo deve ser folha ou nível intermediário com direção única. Se qualquer jornada pode chamar qualquer outra, você não tem hierarquia, tem um emaranhado.
Destino inativo ou de outra empresa
Esse bloqueio protege dois limites. O primeiro é prático: apontar para fluxo inativo ou inexistente resulta em jornada interrompida. O segundo é de isolamento, e um fluxo não pode chamar fluxo de outra empresa, o que preserva a separação dos dados na plataforma.
Esse erro aparece com força depois de importar um arquivo `.flux` de outro ambiente. As referências internas apontam para identificadores que não existem no destino, e a validação pega antes que alguém publique. Já importei fluxo às pressas e agradeci por esse bloqueio existir.
Loop local sem bloco de espera
Ciclo dentro do fluxo não é proibido. O que é barrado é o ciclo sem nenhum bloco que aguarde resposta, menu, captura, delay ou mensagem segura. Sem ponto de pausa, o motor percorre o ciclo sem intervalo e sem ninguém do outro lado.
A leitura simples da regra: todo ciclo precisa de um motivo para respirar. Se o ciclo existe para repetir uma pergunta, ele já tem Menu ou Captura. Se existe para reprocessar, precisa de Delay. Se não tem nenhum dos dois, quase sempre é aresta ligada por engano.
- Bloco que aguarda resposta do contato
- Bloco Menu, que mostra opções e espera a escolha
- Bloco Captura, que coleta resposta aberta
- Bloco Delay, que suspende a execução por um período
- Mensagem segura, aceita como ponto de pausa
Qualquer um desses deixa o ciclo legítimo. A escolha depende do motivo da repetição e segue os critérios de tipos de blocos do Flow Builder, que explica quando cada peça encaixa melhor.
Como eu corrijo, na ordem
- Rode a validaçãoA ação está na barra única, junto com salvar, importar e exportar.
- Use a localização visualO editor aponta no canvas onde está cada problema, o que evita caçada manual em fluxo grande.
- Corrija do subfluxo para o principalErro de bloco Flow se propaga. Resolver o destino primeiro derruba vários apontamentos de uma vez.
- Revalide até a lista zerarCorreção costuma revelar problema que estava escondido atrás do erro anterior.
- Só então converse com o botTeste conversacional com estrutura inválida gera diagnóstico enganoso e faz você caçar fantasma.
O que continua sendo com você
A validação não garante que existe rota para humano, não avalia se o menu faz sentido e não sabe se sua regra de negócio está certa. Isso continua dependendo de leitura humana e de teste, como descrevi em como criar seu primeiro fluxo.
- Validação estrutural sem nenhum apontamento pendente
- Todos os blocos Flow com destino ativo e da mesma empresa
- Nenhum ciclo sem bloco de espera
- Rota de transferência para humano alcançável
- Teste conversacional feito com desvio de propósito
Também não faz parte do escopo verificar se as integrações estão de pé. Um bloco HTTP apontando para serviço fora do ar passa limpo, porque a estrutura está correta. O mesmo vale para credencial do bloco Dados e para integração com sistema externo, como a sincronização com canais de marketplace. Isso é teste de ambiente, feito antes de ativar.
Faça isso hoje
Rode a validação em todos os fluxos ativos, inclusive nos que parecem tranquilos. Fluxo antigo acumula bloco Flow apontando para jornada que alguém desativou faz meses. Depois pegue o hábito de validar antes de cada ativação, com o checklist do lado.