FlowsGuia

Passando valores entre passos

Toda entrada de um passo de flow recebe o valor de um binding: um valor fixo, um campo da saída de um passo anterior, uma expressão JavaScript curta ou uma variável do projeto. Bindings são o jeito de um flow passar dados sem código de cola — e são verificados antes da execução, então um binding quebrado é apontado em vez de mandar null adiante em silêncio.

10 min de leituraAntes: O que é um flowAbrir no Waiso
O que você vai aprender
  • Escolher um dos quatro modos de binding para cada entrada
  • Ler um campo da saída de um passo anterior pelo caminho
  • Calcular um valor com uma expressão sobre nodes e vars
  • Usar uma variável e saber como os segredos ficam fora do registro da execução

De onde vem o valor de uma entrada

As entradas de um passo são os parâmetros dele — os argumentos do main de um script, os marcadores :name de uma consulta SQL, os campos de um passo pronto, as entradas de Início de um subflow. Cada linha de parâmetro tem quatro botões pequenos, e o que está aceso diz de onde vem o valor:

ModoO valor éExemplo
Value (lápis)Uma constante que você digita. Um número continua número.BRL
From node (seta)Uma entrada do Início, ou um campo de um passo acima.Fetch orders → rows.0.total
Expression (chaves)O resultado de uma expressão JavaScript.nodes.fetchOrders.output.count * 2
Variável (chave)O valor atual de uma variável do projeto ou global.BILLING_API_KEY
Um passo lê a saída de um passo anterior; outro lê uma variável.

Uma linha sem valor e sem padrão mostra um sinal de alerta: a entrada é obrigatória para a execução. O próprio passo avisa também — Faltando ligar: name no canvas.

Ligue uma entrada

  1. Abra os parâmetros do passo

    Num passo de script ou SQL, clique no passo e depois em Abrir editor de código: a aba Parâmetros lista cada entrada ao lado do código. Passos prontos, subflows e passos de AI Scraper mostram as entradas na aba Parâmetros do painel lateral.

  2. Escolha o modo

    Clique num dos quatro botões da linha. Trocar de modo limpa a outra fonte, então um parâmetro nunca tem duas.

  3. Escolha a fonte

    From node abre um seletor com as entradas do Início e cada passo acima com os campos; Variável abre Buscar variáveis… com as variáveis do projeto e depois as globais. Ao escolher, a linha vira um chip: o nome do passo → o caminho.

  4. Teste sem mexer nos bindings

    A aba Teste guarda valores usados só quando você roda o passo pelo editor — os bindings ficam como estão.

invoice_line.py
def main(customer: str, total: float, api_key: str, currency: str = "BRL"):
    # api_key arrives with its real value; the run records it as •••
    return {
        "line": f"{customer}: {currency} {total:.2f}",
        "signed": len(api_key) > 0,
    }

Num flow, customer poderia vir de From node (Início → customer), total de uma Expression, api_key de uma Variável secreta e currency ficar com o padrão.

Saídas de nó e caminhos

Um binding From node cita um passo e um caminho dentro da saída dele. Pontos entram em objetos e números entram em listas: rows.0.email é o email da primeira linha. Uma chave com espaços vai entre aspas — rows.0["First Name"]. Um output. no começo é opcional (output.count e count leem o mesmo campo); um binding ao Início usa o nome da entrada.

O seletor mostra os campos de um passo mesmo antes da primeira execução — Ainda não rodou — estes são os campos que ele devolve — e um campo cujo tipo não cabe no parâmetro não pode ser escolhido; ao passar o mouse, ele explica o motivo (Esse valor é string — esse parâmetro espera number). Na execução, um caminho inexistente faz o passo falhar com path 'rows.0.mail' has no segment 'mail', em vez de passar nada.

Expressões

Uma Expression é uma expressão JavaScript, avaliada num motor isolado sem nada para alcançar fora — sem rede, sem arquivos, sem require. Ela enxerga:

  • nodes.<alias>.output — cada passo que já produziu saída. O alias é o rótulo do passo em camelCase, sem acentos: Fetch orders → nodes.fetchOrders, Preço médio → nodes.precoMedio.
  • vars.NAME (ou vars["NAME"]) — variáveis do projeto e globais, todo valor como string.
  • Dentro do corpo de um loop, item, index, iter e loops.<id> (veja loops).
JavaScriptexpressions.js
nodes.fetchOrders.output.count * 2
`Total: ${nodes.addTax.output.total}`
{ name: nodes.fetchUser.output.name, tier: "gold" }  // an object literal is a value
Number(vars.RETRY_COUNT) + 1                       // variables are strings

Loops e ramos em paralelo

Dentro de um loop, ligue um passo ao elemento atual do loop: From node → o loop → item.email. Depois de um nó Ramos em paralelo, leia um ramo pelo nome: output["Fatura"]. Renomear um ramo reescreve os bindings que o leem.

Variáveis e segredos

Um binding Variável lê o valor da variável quando o passo roda, nunca uma cópia guardada no flow — mude a variável na página Variáveis e a próxima execução usa o valor novo, sem republicar. O valor chega como texto e é convertido para o tipo que o script declara, então RETRY_COUNT ligado a retries: int chega como número. Uma variável do projeto vence uma global de mesmo nome.

Segredos continuam secretos no registro. Quando uma entrada está ligada a uma variável secreta — direto, ou por uma expressão que cita vars.<SECRETO> — o passo recebe o valor real, mas a execução guarda a entrada como •••, e a visão da execução mostra um cadeado: Valor secreto — não registrado. Variáveis não secretas ficam registradas como estão.

Saída esperadaSucessoAs entradas registradas do passo na aba Dados da execução
{
  "customer": "Ana Souza",
  "total": 129.9,
  "api_key": "•••",
  "currency": "BRL"
}

Uma variável que não existe mais mostra o chip marcado como não existe: escolha outra ou limpe o binding. Variáveis criadas por uma integração (a senha ou a access key dela) aparecem no seletor com o ícone do provedor.

Verificações e códigos de erro

  • unknown_variable — um binding cita uma variável que não existe em nenhum escopo. Recusado na publicação e na execução; uma variável apagada depois da publicação faz o passo falhar com o mesmo código.
  • invalid_binding — um binding de variável também tem uma fonte de nó ou um valor digitado; um parâmetro tem uma fonte só.
  • invalid_parameter — uma constante que não cabe no tipo declarado é recusada na publicação; um valor vindo de um nó ou de uma expressão é verificado quando o passo roda.