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.
- 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:
| Modo | O 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 |
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
- 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.
- 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.
- 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.
- 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.
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(ouvars["NAME"]) — variáveis do projeto e globais, todo valor como string.- Dentro do corpo de um loop,
item,index,itereloops.<id>(veja loops).
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 stringsLoops 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.
{
"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.