v2.0

Paralelizar Agentes

Disparar vários agentes ao mesmo tempo e seguir trabalhando enquanto eles rodam; conferir como terminaram com o Aguardar Agentes (opcional); e o segundo nível de paralelismo: uma execução por item de uma lista.

Em resumo

Para que serve: especialistas em paralelo

Pense num agente que fecha pedidos. Antes de confirmar cada pedido ele precisa de três respostas que vêm de sistemas diferentes: o limite de crédito do cliente, no ERP; a disponibilidade em estoque, no sistema do armazém; e a validação do endereço de entrega, no portal da transportadora. Cada consulta é um agente especialista, com dono, versão, testes e Gestão de Erros próprios, e cada uma leva o seu tempo: trinta segundos aqui, um minuto ali.

Chamados um atrás do outro, os três somam o tempo deles, e o fechamento do pedido fica parado esperando. Com Paralelizar Agentes, os três saem juntos, e o tempo total é o do mais lento. E o agente principal não precisa ficar parado: enquanto os especialistas rodam, ele calcula os totais, aplica a tabela de preços e monta o resumo do pedido, etapas que não dependem de nenhuma das três respostas. Só na hora de decidir se o pedido é aprovado é que ele precisa das três respostas. Ali, ele pode ler as variáveis de retorno direto (o status de cada uma diz se ela já terminou) ou, para ter certeza de que as três terminaram antes de decidir, pôr um Aguardar Agentes.

Fluxo com uma etapa Paralelizar Agentes com quatro agentes, uma Regra Customizada Cálculo de Pedidos, uma etapa Aguardar Agentes com três agentes e, no fim, uma etapa Chamar Agente em dispara e segue
Um fluxo montado assim: o Paralelizar Agentes dispara quatro agentes; a Regra Customizada roda enquanto eles trabalham; o Aguardar Agentes reúne três deles antes de seguir; e no fim um Chamar Agente em dispara e segue avisa alguém sem precisar ser esperado.

Há mais de um jeito de montar isso, e a escolha é o Comportamento a cada disparo de cada agente:

O mesmo raciocínio vale quando as competências são iguais e o que muda é o volume: cinquenta notas para emitir não precisam ir uma atrás da outra. Nesse caso o paralelismo não é entre agentes diferentes, e sim do mesmo agente sobre uma lista, o segundo nível.

Como se cria

  1. Publique os agentes que serão chamados. Só a versão publicada pode ser chamada. Um agente ainda em desenvolvimento aparece na lista, mas desabilitado, com o motivo.
  2. No fluxo do pai, clique no + (no fim do fluxo, ou no + de uma seta para inserir no meio) e, no grupo Orquestração de Agentes, escolha Paralelizar Agentes.
  3. Abra a etapa e adicione os agentes, um a um, com + Adicionar agente. A lista traz os agentes do dono deste processo e os compartilhados com ele com permissão de executar. Um agente não pode chamar a si mesmo. Arrastar um agente do painel Agentes para o card da etapa também o acrescenta (No fluxo visual).
  4. Opcional: um Aguardar Agentes. Para esperar, num ponto do fluxo, os disparos em Não esperar, crie a etapa naquele ponto, pelo mesmo menu. Sem ela, as variáveis de retorno chegam sozinhas, em segundo plano.
Menu do + do fluxo com Paralelizar Agentes em destaque no grupo Orquestração de Agentes
No menu do +, grupo Orquestração de Agentes: Paralelizar Agentes.
Menu do + do fluxo com Aguardar Agentes em destaque no grupo Orquestração de Agentes
No mesmo grupo, Aguardar Agentes, criado no ponto do fluxo em que os disparos devem ter terminado.

As duas etapas nascem como etapas de Execução com a ação já definida e não trocam de tipo depois. Elas não têm nome próprio: aparecem no fluxo, no log e nos seletores de variáveis como Paralelizar Agentes 1, 2, 3 e Aguardar Agentes 1, 2, na ordem em que estão no fluxo. A opção Clonar do menu não lista as etapas de agentes: elas se criam de novo, escolhendo os agentes.

No fluxo visual

Card da etapa Paralelizar Agentes no fluxo: um losango alongado com a marca + no canto e os avatares de Neo, Trinity e Morpheus, cada um com o nome do processo embaixo
O card do Paralelizar Agentes: o losango alongado com a marca + do gateway paralelo e um avatar por agente, com o nick e, embaixo, o nome do processo.
Card da etapa Aguardar Agentes no fluxo, com os lados côncavos, a bandeira de chegada e o avatar do Neo, o agente aguardado
O card do Aguardar Agentes: os lados côncavos por onde as setas convergem, a bandeira de chegada e o avatar de cada agente aguardado.

Como se configura

No painel da etapa, + Adicionar agente abre a lista, e cada agente escolhido vira um bloco com a letra da rota (A a F), o avatar, o nick do agente e, embaixo, o nome do processo dele e um resumo do comportamento a cada disparo. O bloco recolhe e expande pelo cabeçalho, o ícone de setas troca o agente daquele bloco mantendo o que já foi configurado nele, e o ícone de lixeira o remove. O mesmo agente pode entrar mais de uma vez, cada vez com os seus próprios parâmetros de entrada, comportamento a cada disparo e retorno; para muitas execuções iguais a partir de uma lista, use o disparo por item, abaixo.

Dentro de cada bloco estão as mesmas seções da etapa Chamar Agente, com o mesmo comportamento:

O fluxo do pai só segue quando todos os agentes que ele espera terminarem. Um agente da lista falhou? A etapa falha, e o log do pai diz qual. Os outros continuam até o fim, a menos que o pai seja parado. No log, cada agente aparece pelo nome dado com o avatar, seguido do nome do processo que ele executa entre parênteses.

Aguardar Agentes é opcional

Um Paralelizar com agentes em Não esperar funciona sem ele: as execuções rodam e o retorno pedido chega em segundo plano. O Aguardar Agentes, quando presente, espera as execuções escolhidas terminarem num ponto do fluxo e informa como terminaram. Também funciona sem Paralelizar, com disparos de etapas Chamar Agente em Não esperar.

Onde se altera depois

Sempre no painel da etapa do pai, bloco por bloco. O nick, o nome do processo, o avatar e a descrição vêm do cadastro de cada agente chamado, e os parâmetros também: um parâmetro criado pelo dono do agente aparece nos Parâmetros de entrada do bloco na próxima vez que você abrir a etapa.

O segundo nível: Disparar por cada item de uma lista

O primeiro nível de paralelismo é a lista de agentes do Paralelizar: agentes diferentes, lado a lado. O segundo nível é a seção Disparar por cada item de uma lista, que existe em cada bloco do Paralelizar e também na etapa Chamar Agente: o mesmo agente, multiplicado por uma lista, uma execução por item, todas disparadas ao mesmo tempo. Os dois níveis se somam. Um Paralelizar com três agentes, em que um deles dispara por uma lista de duzentos pedidos, tira duzentas e duas execuções de uma única etapa. Os tetos são seis agentes por etapa, cinco mil itens por lista e cinco mil execuções por etapa, somando tudo.

Painel de uma etapa com Disparar por cada item de uma lista ligado, o campo Lista com a variável do pai e, abaixo, a seção Modo de enfileiramento do disparo
O disparo por item: a chave Disparar por cada item de uma lista e o campo Lista, com a seção Modo de enfileiramento do disparo logo abaixo.

Ligue a chave e informe a lista. O campo aceita três formas:

FormaExemploComo vira execuções
Uma variável do tipo Lista{pedidos}, {matrix.cnpjs}Uma execução por elemento. As listas do fluxo (Matrix, Variáveis do Fluxo, raspagem, resultado de API, lista de registros de outro agente) aparecem no topo do menu do campo, com o selo [ ].
Uma variável gravada por script{clientes}, gravada com bm.doneO tipo dela vem da execução: uma lista vira uma execução por elemento, e um texto é cortado nas vírgulas. Para ela valer como lista em todo o fluxo, declare o mesmo nome em Variáveis do Fluxo, com Tipo Lista, na mesma etapa do script.
Itens digitadosSP, RJ, MG ou ["Av. Paulista, 1020", "Rua Augusta, 500"]Cada vírgula separa um item; o item que tem vírgula vai na forma JSON. Embaixo do campo, o painel mostra os itens que vão virar execução.

Uma variável de tipo declarado que nunca é lista (Moeda, Número, Verdadeiro/Falso, Secreto e as contagens do Aguardar Agentes) aparece no menu travada, com o motivo. Escrita à mão no campo, o painel avisa, o salvar recusa, o card vira pendência e, na execução, a etapa falha antes de disparar. Com isso, uma Moeda de 1.234,90 não vira duas execuções, "1.234" e "90".

São dois lugares, com papéis diferentes: na seção fica a lista; nos Parâmetros de entrada do agente chamado, cada parâmetro diz o que recebe em cada execução:

Parâmetros de entrada do agente chamado com o disparo por item: a coluna O que cada execução recebe, com Não enviar nada e O item da vez, inteiro, ligada à coluna Parâmetro no agente; abaixo, o Comportamento a cada disparo com Não esperar, Esperar finalizar, Esperar até um prazo e Esperar a resposta antecipada
Os Parâmetros de entrada do agente chamado com o disparo por item: cada parâmetro diz o que recebe em cada execução. Abaixo, o Comportamento a cada disparo.

Nos bastidores as duas primeiras viram {item} e {item.campo}. O erro mais comum é pôr a lista inteira também nos Parâmetros de entrada: o painel avisa na hora, com o nome dos parâmetros que precisam receber o item em vez da lista.

Quando o item não traz o valor

Nos parâmetros que recebem o item da vez, inteiro ou um campo do item da vez, o painel mostra Se vier vazio ou faltar no item. Vale para o valor em branco, nulo, ou o campo que não existe naquele item:

OpçãoO que acontece naquela execuçãoQuando usar
Enviar vazio: o agente chamado trata (o padrão)O parâmetro chega vazio e o agente chamado decide o que fazer, como com qualquer outro valor. O valor padrão do parâmetro no agente não entra, porque um valor foi enviado.O agente chamado sabe lidar com o valor em branco.
Usar o valor padrão do parâmetro no agenteO parâmetro fica fora do envio daquela execução, e o agente usa o valor padrão cadastrado nele.Campo opcional, com um valor padrão que serve.
Não disparar a execução deste itemA execução daquele item não sai e não cobra crédito; as outras saem normalmente. O registro dela fica ERROR, com "não foi disparada" e o parâmetro, e ela conta como falha: numa espera que aguarda, a etapa falha no fim, depois de as outras terminarem, dizendo quais itens; no Aguardar Agentes, entra em failed.Um item sem esse valor não tem o que fazer no agente chamado, como um cadastro sem CNPJ.

Nas três opções, o log do agente principal diz, por parâmetro, em quantos e em quais itens o valor faltou e o que foi feito, só com a posição dos itens, sem o valor.

Quando nenhum item tem o campo pedido e está claro que é engano, a etapa falha antes de disparar qualquer execução, e nada é cobrado. Isso acontece em dois casos: os itens da lista não são registros (objetos com campos), ou existe nos itens um campo de grafia parecida, como cnpj para CNPJ ou cpnj, e razao_social para RazaoSocial. A mensagem diz o campo que existe. Um campo que falta em todos os itens, sem nenhum parecido, segue a opção escolhida acima, como qualquer valor vazio.

Exemplo: uma lista de empresas, com um campo de cada empresa em cada parâmetro

O agente principal recebe, pela API, a Matrix empresas, do tipo Lista, com uma empresa por item. Cada item é um objeto, e a terceira empresa não tem endereço:

Valor de {matrix.empresas}
[
  { "cnpj": "12.345.678/0001-90", "razao": "ACME Ltda", "endereco": { "cidade": "São Paulo", "uf": "SP" } },
  { "cnpj": "98.765.432/0001-10", "razao": "Beta S.A.", "endereco": { "cidade": "Recife", "uf": "PE" } },
  { "cnpj": "11.222.333/0001-44", "razao": "Gama ME" }
]

A etapa Chamar Agente chama o agente Consulta CNPJ com Disparar por cada item de uma lista ligado e a lista {matrix.empresas}. Nos Parâmetros de entrada do agente chamado, cada parâmetro escolhe o que recebe:

Parâmetro no agenteO que cada execução recebeO que se preenche
cnpj (Texto)Um campo do item da vezcampo cnpj
uf (Texto)Um campo do item da vezcampo endereco.uf (o ponto entra num objeto dentro do item); Se vier vazio ou faltar no item: Enviar vazio, o padrão
empresa (Objeto)O item da vez, inteironada a preencher
canal (Texto)Não vem da lista: valor fixo ou variável do chamadorportal
observacao (Texto)Não enviar nada: o agente usa o valor padrão do parâmetronada a preencher

São três execuções, uma por empresa, e cada uma recebe:

Execuçãocnpjufempresacanalobservacao
112.345.678/0001-90SPo objeto da ACME Ltda, inteiroportalo valor padrão do agente
298.765.432/0001-10PEo objeto da Beta S.A., inteiroportalo valor padrão do agente
311.222.333/0001-44vazioo objeto da Gama ME, inteiroportalo valor padrão do agente

A Gama ME não tem endereco, então uf chega vazio na terceira execução, e o log do agente principal diz que o parâmetro uf ficou sem valor no item 3. Com Usar o valor padrão do parâmetro no agente, a terceira execução sai sem uf e o agente usa o valor padrão dele; com Não disparar a execução deste item, saem só as duas primeiras, o terceiro registro fica ERROR e a etapa falha no fim, depois de as duas terminarem. O nome do campo é escrito como está no item, com as mesmas maiúsculas e minúsculas, e o ponto separa os níveis. Com o retorno Variável do agente situacao_cadastral gravado no registro como situacao, e consultas em Armazenar cada retorno em uma lista, o primeiro registro de {consultas} fica assim (o registro é explicado a seguir):

Primeiro registro de {consultas}
{
  "indice": 1,
  "item": { "cnpj": "12.345.678/0001-90", "razao": "ACME Ltda", "endereco": { "cidade": "São Paulo", "uf": "SP" } },
  "entrada": {
    "cnpj": "12.345.678/0001-90",
    "uf": "SP",
    "empresa": { "cnpj": "12.345.678/0001-90", "razao": "ACME Ltda", "endereco": { "cidade": "São Paulo", "uf": "SP" } },
    "canal": "portal"
  },
  "status": "FINALIZED",
  "erro": "",
  "etapa": "",
  "situacao": "ATIVA"
}

observacao fica fora de entrada porque não foi enviado. No terceiro registro, entrada.uf é "".

O retorno vira uma lista de registros

Seção Retorno do agente chamado com o campo Armazenar cada retorno em uma lista e, abaixo, um campo do registro: Do agente (Variável do agente), Registro na lista e a marca Sensível
Com o disparo por item, o Retorno do agente chamado pede uma variável do chamador que armazena cada retorno em uma lista; cada linha abaixo vira um valor dentro de cada registro.

Com o disparo por item, em vez de uma variável por linha você informa, em Armazenar cada retorno em uma lista, uma variável do pai que recebe a lista de resultados, com um registro por execução, na ordem dos itens. Cada registro traz indice, item (o item da lista), entrada (o que foi enviado, parâmetro por parâmetro; o que não foi enviado não aparece), status, erro, etapa (a etapa do agente em que falhou) e os campos que você pedir: variáveis do agente ou o corpo do Webhook Response, cada um com o nome que você der dentro do registro. Nada é sobrescrito de uma execução para outra: a que deu certo traz os dados, a que falhou traz o erro e onde parou, e as duas trazem o que foi enviado. A lista se percorre com um Loop. Uma execução que falhou não interrompe as outras: todas as execuções da lista rodam até o fim, e só então a etapa falha, com o item identificado no log. Com a lista saindo uma quantidade específica por vez, a falha de uma execução também não para a lista.

Em Não esperar, a lista de resultados nasce com um registro RUNNING por item, e cada registro é trocado quando a execução dele termina, em segundo plano. Lista vazia é erro: nada é disparado e a etapa falha, entrando na Gestão de Erros. A variável da lista que nenhuma etapa gravou também, com a mensagem de que ela não existe nesta execução. Quase sempre a lista vazia é a etapa anterior que não gravou nada, e seguir em silêncio só empurraria o problema para a frente. No Paralelizar, uma lista vazia em qualquer agente impede o disparo de todos.

Cada item é uma execução e custa 1 crédito. Antes de disparar o sistema confere o saldo para a etapa inteira: se ele não cobrir todos os itens de todos os agentes, nenhum é disparado. Como todas as execuções saem ao mesmo tempo, a seção Distribuição do processamento reparte o lote entre máquinas. Detalhes: Balancear Carga dos Agentes.

Runtime em modo fila: como o agente chamado entra na conta

Um Ambiente Runtime com Enfileirar Jobs ligado tem um teto de execuções ao mesmo tempo (o campo Execuções ao mesmo tempo do cadastro; 1 é uma por vez, em ordem). Uma execução disparada por outro agente, seja pelo Chamar Agente, pelo Paralelizar ou pelo disparo por item, entra nessa conta e nessa fila como qualquer outra, com duas regras próprias:

O que isso significa na prática:

Três tetos com nomes parecidos

Enfileirar Jobs, com o número de execuções ao mesmo tempo, é do Ambiente Runtime e protege a máquina. Execuções ao mesmo tempo nas configurações do agente é do agente e protege o sistema que ele acessa. Uma quantidade específica por vez, na seção Modo de enfileiramento do disparo da etapa, é do fluxo e controla a lista. Os três valem juntos. Comparação lado a lado: Enfileirar Agentes → Os três tetos.

Aguardar Agentes: o ponto de encontro

A etapa Aguardar Agentes é opcional. Ela espera as execuções disparadas em Não esperar, venham de um Paralelizar Agentes ou de um Chamar Agente, e serve a dois usos: garantir que as execuções escolhidas terminaram antes de um ponto do fluxo, e conferir como terminaram, num lugar só. Sem ela, as execuções rodam do mesmo jeito e o retorno pedido chega em segundo plano.

No ponto em que está, ela para o fluxo até as execuções escolhidas terminarem, ou até um teto, e então segue. Só espera o que foi disparado antes dela no fluxo. Um fluxo pode ter Paralelizar sem Aguardar, Aguardar sem Paralelizar (com disparos de etapas Chamar Agente em Não esperar), ou os dois. Com uma etapa Chamar Agente sozinha: Subprocesso de Agentes → Aguardar Agentes com uma chamada só.

No painel:

Por conta própria, o Aguardar não leva nada ao chamador: um disparo sem esperar não falha a etapa que o disparou, e o Aguardar só espera. O que aconteceu em cada agente (terminou bem, falhou, em que etapa, com que erro, e os dados que ele devolveu) está nas variáveis mapeadas no disparo dele, uma a uma; com o disparo por item, na lista de registros. É por elas que o fluxo decide depois do ponto de encontro, e a etapa só falha se você escolher isso no teto ou na falha.

As variáveis da espera

A etapa grava uma família de variáveis com o prefixo que você deu, no padrão agentWaiter.<prefixo>.<campo>, do mesmo jeito que matrix. e connector.. Elas aparecem nos seletores de variável do fluxo assim que você sai do campo Prefixo Identificador desta Etapa, sem precisar salvar antes, com a marca de lista onde cabe, e servem para decidir logo depois do ponto de encontro. Para o prefixo fin:

VariávelO que traz
{agentWaiter.fin.status}FINALIZED (todos terminaram bem), ERROR (todos terminaram e ao menos um falhou) ou TIMEOUT (o teto acabou com execução rodando). Quando mais de um vale, o pior vence: TIMEOUT acima de ERROR, ERROR acima de FINALIZED.
{agentWaiter.fin.total}Quantos agentes a etapa aguardou.
{agentWaiter.fin.succeeded}Quantos terminaram bem.
{agentWaiter.fin.failed}Quantos terminaram com falha.
{agentWaiter.fin.running}Quantos ainda rodavam quando o teto acabou (zero quando todas terminaram antes do teto).
{agentWaiter.fin.errors} listaUm registro por agente que terminou com falha.
{agentWaiter.fin.pending} listaUm registro por agente que ainda rodava.
{agentWaiter.fin.completed} listaUm registro por agente que terminou bem.

Cada registro das três listas tem a mesma forma: agent (o nome do agente), step (a etapa que o disparou), item (o número do item, no disparo por item; vazio fora dele), status, error, failedAt (a etapa do agente chamado em que falhou) e vars, o retrato das variáveis que o disparo daquele agente mapeou, já com os valores que chegaram. Com o disparo por item, vars traz o registro daquela execução dentro da lista de resultados, não a lista inteira.

Três cenários, com dois agentes aguardados, Consulta CNPJ e Emitir NF:

O que aconteceustatustotal / succeeded / failed / runningListas
Os dois terminaram bemFINALIZED2 / 2 / 0 / 0completed com os dois; errors e pending vazias
Emitir NF falhou na etapa Login com "CRM caiu"ERROR2 / 1 / 1 / 0errors com um registro: agent "Emitir NF", status ERROR, error "CRM caiu", failedAt "Login", vars com o status e o erro mapeados no disparo
Teto de 120 s acabou com Emitir NF rodandoTIMEOUT2 / 1 / 0 / 1pending com "Emitir NF" (status RUNNING); completed com "Consulta CNPJ"

Na prática: uma Decisão de Rota logo depois compara {agentWaiter.fin.status} com FINALIZED para seguir o caminho feliz, ou {agentWaiter.fin.failed} maior que zero para desviar ao tratamento; uma Regra Customizada percorre {agentWaiter.fin.errors} e monta o aviso com agent, error e failedAt de cada um. A etapa nunca falha por conta própria: enquanto nenhuma das duas escolhas "Falhar a etapa" está marcada, o painel nem mostra a Gestão de Erros, porque não haveria o que tratar.

"Terminou" é o retorno da execução chegar ao pai. Por isso, quando há um Aguardar Agentes no fluxo, todo disparo em Não esperar fica acompanhado, mesmo sem retorno pedido. Um disparo que já terminou quando a etapa começa conta do mesmo jeito: entra em total e na lista que lhe cabe, e a etapa segue na hora se não sobrou ninguém rodando. Se nenhum disparo aconteceu antes da etapa (um caminho do fluxo que contorna a chamada, por exemplo), ela avisa no log, grava total zero e o fluxo segue. Duas esperas no mesmo fluxo precisam de prefixos diferentes; o painel recusa o prefixo repetido. Ao sair da etapa, as variáveis mapeadas nos disparos (status, erro, etapa, dados) já estão preenchidas para o que terminou. A etapa vira pendência se ficar sem o Prefixo Identificador desta Etapa ou se "só estas" ficar sem etapa marcada. Parar o pai enquanto ela espera solta a espera; as execuções disparadas seguem sozinhas. O log, no terminal de debug e no log oficial, diz quem estava sendo aguardado e com que teto, como cada um terminou, e quais variáveis a etapa gravou, com o status e as contagens.

Planos

Paralelizar Agentes existe a partir do plano Professional, o plano com paralelismo. Nos planos sem paralelismo a opção aparece travada no + do fluxo, com o motivo e o convite ao upgrade; um fluxo que já tem a etapa (importado, ou de quando o plano comportava) mostra a etapa como pendência, não publica, e a execução é recusada com a mensagem do plano. As outras duas etapas do grupo existem em todos os planos: Chamar Agente funciona numa máquina de teto 1 porque o chamador solta a vaga enquanto espera, e Aguardar Agentes não depende de plano.

Limites, créditos e ciclo de vida

LimiteValorO que acontece ao passarContorno
Agentes por etapa Paralelizar Agentes6 (as rotas A a F)A etapa não aceita o sétimo.Duas etapas Paralelizar em sequência, ou um Aguardar Agentes reunindo as duas.
Itens por lista no disparo por item5000Nada é disparado; a etapa falha dizendo quantos itens a lista tem.Fatie a lista em pedaços de até 5000 e volte à etapa a cada pedaço (Loop), ou gere a lista já por partes.
Execuções por etapa, somando todos os agentes e itens5000Nada é disparado; a etapa falha dizendo quantas dispararia.Pedaços menores, ou uma etapa por agente em vez de um Paralelizar com todos.
Prazo de espera por agente (Esperar até um prazo, resposta antecipada)1 a 120 segundosEstourou: a etapa falha e o agente chamado continua rodando.Esperar finalizar (sem prazo escolhido, mas com o teto de 24 horas), ou Não esperar com um Aguardar Agentes, que aceita teto de até 24 horas.
Esperar finalizar (sem prazo escolhido)Teto de 24 horas por execuçãoPassou: a etapa falha como um prazo estourado, e o agente chamado continua rodando. O log avisa desde o começo que a plataforma desiste em 24 h.Trabalho de mais de um dia pede lotes separados, por agendamento.
Teto do Aguardar AgentesAté 24 horas; "sem teto" também desiste em 24 horasEstourou: status TIMEOUT na espera; o fluxo segue ou a etapa falha, como configurado.Trabalho de mais de um dia pede lotes separados, por agendamento.
Runtimes numa distribuição20, e pelo menos 2 ligadosSó os vinte primeiros marcados contam; com menos de 2 ligados o disparo é recusado.Marque ambientes equivalentes de sobra; se todos podem cair, prefira o ambiente do próprio agente com Fluxo offline.
Profundidade de chamadas (um agente que chama outro, que chama outro)5 níveisO disparo é recusado antes de sair, e a etapa falha.Achatar a cadeia: quem está no alto chama os de baixo diretamente.
Teto do ambiente (Enfileirar Jobs com número)1 ou mais, por ambienteA execução que não cabe espera vaga na fila do ambiente; o chamador que espera solta a vaga dele.Suba o número ou reparta entre máquinas.
Teto do agente (Execuções ao mesmo tempo)0 é sem teto; 1 ou maisA execução que não cabe espera vaga sem tomar a vez dos outros agentes.Se o sistema de destino aceita mais, suba o número.
Créditos1 por execução, além do crédito do paiSem saldo para a etapa inteira, nada é disparado.Confira o saldo antes de um lote grande, ou fatie por dia.
Boa prática: nunca espere sem teto

Um Paralelizar com todos em Esperar finalizar, ou um Aguardar Agentes sem teto, fica parado enquanto o mais lento não volta, por no máximo 24 horas. A plataforma cobre o runtime que cai ou fica desligado, mas não tem como saber que uma execução viva vai demorar mais do que deveria, e 24 horas é tempo demais para um agente parado em produção. Ponha teto no Aguardar Agentes (até 24 horas), use Esperar até um prazo onde cada agente é curto, e mantenha o Limitador de Ações de cada agente chamado no tamanho real do trabalho. Detalhes: Quando o runtime do agente chamado sai do ar.

Quando algo dá errado

Situações de uma chamada (agente que falhou, prazo, dado sensível, runtime do pai que reiniciou): Subprocesso de Agentes → Quando algo dá errado. Abaixo, o que é próprio de vários agentes e de várias execuções:

SituaçãoO que acontece
Um agente da lista terminou com falhaA etapa falha com o status dele na mensagem e o log diz qual. Os outros continuam até o fim. A etapa entra na Gestão de Erros.
A lista do disparo por item veio vaziaNada é disparado, de nenhum agente da etapa. A etapa falha dizendo de qual agente é a lista vazia.
A variável da lista não existe na execução (nenhuma etapa anterior a gravou)Nada é disparado, de nenhum agente da etapa. A etapa falha dizendo o agente e a variável.
Um parâmetro usa um campo que nenhum item tem, com um campo de grafia parecida nos itens (CNPJ e cnpj), ou os itens não são registrosNada é disparado, de nenhum agente da etapa. A etapa falha dizendo o parâmetro, o campo pedido e o campo que existe.
O valor tirado do item veio vazio ou faltou em alguns itensVale o Se vier vazio ou faltar no item do parâmetro, e o log diz em quais itens. Com Não disparar, esses itens ficam ERROR no registro e a etapa falha no fim, depois das outras execuções.
A lista é uma variável de tipo Moeda, Número, Verdadeiro/Falso ou SecretoO card fica com pendência e o painel não salva. Numa etapa importada ou escrita fora do painel, a execução falha antes de disparar, dizendo a variável e o tipo.
A etapa dispararia execuções demais de uma vezO limite é de 5000 execuções por etapa, somando todos os agentes dela. Passando disso, nada é disparado e a etapa falha dizendo quantas seriam.
Créditos insuficientes para o lote inteiroNada é disparado. A etapa falha dizendo quantos créditos a etapa precisa e quantos a empresa tem.
O runtime de um dos agentes está desligadoSem Manter fluxo offline, nada daquele agente é disparado e a etapa falha. Com ela ligada, as execuções esperam o runtime voltar, como descrito em Runtime em modo fila. Passados 30 minutos com alguém esperando por elas, a plataforma cancela essas execuções e devolve a falha, em Quando o runtime do agente chamado sai do ar.
O runtime de um agente aguardado sai do ar depois do disparoO Aguardar Agentes não fica parado para sempre, nem quando está sem teto. A plataforma devolve a falha daquela execução, ela conta em failed, entra em errors e a espera termina. O mesmo vale para o disparo que já tinha o retorno mapeado: o status dele deixa de ser RUNNING e passa a CRASHED.
O teto do Aguardar Agentes acabou com execução rodandoO status da espera vale TIMEOUT e os que rodavam ficam em pending. O fluxo segue ou a etapa falha, conforme a escolha no painel. As execuções continuam e as variáveis delas chegam depois.
Um aguardado terminou com falhaO status da espera vale ERROR e ele entra em errors. O fluxo segue ou a etapa falha, conforme a escolha no painel.
A etapa roda de novo (nova tentativa da Gestão de Erros, ou um laço que volta a ela) com execuções da vez anterior ainda rodandoAs execuções de agora são novas e independentes, e cada uma cobra o seu crédito: as anteriores não são paradas, porque podem estar no meio de um trabalho que não se desfaz. O log avisa quantas ficaram e por quê; para interrompê-las, use o Control Room.

Tudo isso fica no log do pai: "Paralelizando agentes", quantas execuções cada agente iniciou e em que runtime, "Aguardando", quem terminou como, e o que foi recebido e retido. Os valores em si não aparecem no log.