---
title: Repetir (laço)
description: Repita um conjunto de blocos enquanto uma condição for verdadeira, com contagem máxima de segurança.
---

<NoCard kind="loop" categoria="Lógica" />

# Repetir (laço)

<Secao icon="info">Para que serve</Secao>

É como girar uma roleta até sair o número certo: o fluxo repete um conjunto de ações várias vezes, e a cada volta você pode checar se deve parar ou continuar. Diferente de Repetir para cada item (que percorre uma lista), o Repetir (laço) repete enquanto uma condição for verdadeira — ou até atingir o número máximo de repetições.

<Secao icon="clock">Quando usar</Secao>

- Tentar uma ação até obter sucesso (ex.: chamar uma API que pode falhar e retentar até 3 vezes).
- Aguardar que um status mude antes de continuar (ex.: verificar de tempos em tempos se um pagamento foi confirmado).
- Manter uma conversa ativa enquanto o contato não der uma resposta válida.
- Qualquer lógica que precise de **repetição controlada** com condição de parada.

## Como funciona o quadro de Repetir (laço)

O Repetir (laço) é um **quadro visual** no canvas — um bloco maior que envolve outros blocos. Quando você adiciona o quadro, dois pontos de controle são gerados automaticamente dentro dele:

- **Início do Repetir (laço)** — onde a execução começa a cada volta.
- **Fim do Repetir (laço)** — onde você decide se repete ou sai.

Você monta a lógica de cada volta **dentro** do quadro, entre o início e o fim. No Fim do Repetir (laço) você configura as condições de saída (break conditions).

<Captura legenda="Painel de configuração do nó Laço, com os campos Variáveis de loop, Condição de término de loop e Contagem máxima de loop" src="/img/node-loop-inspector.png" />

<Secao icon="list-checks">Passo a passo</Secao>

<Passos>
  <Passo>Arraste o bloco **Repetir (laço)** para o canvas a partir da categoria **Lógica**. Um quadro com início e fim automáticos aparece. <Captura legenda="Painel de busca de blocos aberto no canvas, com as categorias e a lista de nós disponíveis para arrastar" src="/img/flowbuilder-paleta-aberta.png" /></Passo>
  <Passo>Clique no quadro para abrir o painel de configuração. <Captura legenda="Painel de configuração do nó Laço, com os campos Variáveis de loop, Condição de término de loop e Contagem máxima de loop" src="/img/node-loop-inspector.png" /></Passo>
  <Passo>Defina o **número máximo de repetições** — quantas voltas o loop pode dar antes de forçar a saída (proteção contra loops infinitos).</Passo>
  <Passo>Configure as **condições de saída** (break conditions): defina qual condição, quando verdadeira, deve encerrar o loop antes de atingir o máximo.</Passo>
  <Passo>Defina as **variáveis de loop** que serão atualizadas a cada volta (ex.: contador, acumulador de resultados).</Passo>
  <Passo>Adicione os blocos que devem executar a cada volta **dentro** do quadro, conectando-os entre o início e o fim do loop. <Captura legenda="Fluxo de exemplo no canvas, com os blocos conectados em sequência do Início ao Fim" src="/img/flow-exemplo-canvas.png" /></Passo>
  <Passo>Conecte a saída do quadro ao próximo bloco que roda após o loop terminar. <Captura legenda="Fluxo de exemplo no canvas, com os blocos conectados em sequência do Início ao Fim" src="/img/flow-exemplo-canvas.png" /></Passo>
</Passos>

<Secao icon="sliders-horizontal">Campos</Secao>

| Campo | O que faz |
|-------|-----------|
| Contagem máxima | Número máximo de voltas antes de sair obrigatoriamente |
| Break conditions | Condições que, quando verdadeiras, encerram o loop imediatamente |
| Variáveis de loop | Variáveis que persistem e podem ser atualizadas entre as voltas |
| Título | Nome interno do quadro no canvas |

<Secao icon="circle-check">Exemplo</Secao>

Um fluxo precisa verificar se um boleto foi pago antes de liberar um documento. O Repetir (laço) checa o status do pagamento a cada 5 minutos, por até 3 tentativas:

- **Contagem máxima:** 3
- **Break condition:** `status_pagamento` é igual a `pago`
- Dentro do loop:
  1. `Requisição HTTP` → chama a API do banco para consultar o status
  2. (o status retornado é salvo na variável `status_pagamento`)
- Após o loop:
  - Se saiu por break condition (pago) → envia o documento
  - Se saiu por contagem máxima (não pagou em 3 tentativas) → envia mensagem de instrução

<Captura legenda="Fluxo de exemplo no canvas com um nó de condição gerando duas saídas (IF/ELSE) conectadas a caminhos diferentes" src="/img/flow-exemplo-condicao-branches.png" />

<Dica>
Sempre configure uma **contagem máxima** razoável. Sem ela, um bug na condição de saída pode fazer o fluxo girar para sempre, consumindo recursos e nunca respondendo ao contato.
</Dica>

<Cuidado>
Não use Repetir (laço) para substituir a [Iteração](/guia/flow-builder/logica/iteracao). Se você tem uma lista de itens para processar, use Repetir para cada item — é mais eficiente e legível. Repetir (laço) é para quando você repete uma ação aguardando que algo aconteça, não para percorrer uma lista.
</Cuidado>

## Saiba mais

- [Repetir para cada item](/guia/flow-builder/logica/iteracao) — percorrer uma lista, em vez de repetir com condição de parada
- [Requisição HTTP](/guia/flow-builder/dados/http) — o tipo de bloco mais comum dentro de um loop de checagem
- [Se / Senão (condição)](/guia/flow-builder/logica/if-else) — avaliar o resultado após o loop terminar
