Nó: Script
O nó Script executa um código escrito por você para calcular valores a partir dos dados dos nós anteriores — respostas de formulários, resultado de aprovações, saídas de outros scripts. Os resultados (texto, número, lista de e-mails ou lista de objetos) podem ser usados nos nós seguintes: no texto de e-mails, em condições, nos destinatários e em outros campos de texto.
O nó roda sozinho, sem aguardar nenhuma ação externa, e avança assim que o código termina.
Quando Usar
Use o nó Script quando um valor que o processo precisa não existe pronto em nenhum formulário. Exemplos comuns:
- Cálculos — somar itens, aplicar desconto, calcular prazo ou valor total a partir de várias respostas.
- Montar textos — compor uma mensagem ou um assunto de e-mail com partes de respostas diferentes.
- Escolher destinatários — devolver uma lista de e-mails que depende das respostas (por exemplo, o gestor de cada filial).
- Tabelas em e-mails — devolver uma lista de linhas (item, quantidade, valor) para aparecer como tabela no corpo do e-mail.
- Decidir o caminho — calcular um número ou um texto para usar como condição em um nó Se/Senão.
O código é escrito em TypeScript num editor com autocomplete. Para regras simples, como mostrar a resposta de um campo, prefira as variáveis normais do workflow: o nó Script é para quando é preciso calcular.
Configuração
Clique sobre o nó no canvas do editor de workflow. O painel lateral tem três abas, Inputs, Outputs e Testar, e a área Código logo abaixo delas. Os atalhos Alt+I, Alt+O e Alt+T trocam de aba; eles não funcionam enquanto você digita em um campo ou no editor de código.
Inputs — o que o script lê
Cada input dá ao script os dados de um nó anterior do workflow. Clique em Adicionar input e preencha:
| Campo | Descrição |
|---|---|
| Nó anterior | O nó de onde vêm os dados ("Selecione um nó anterior"). Só aparecem nós que vêm antes do Script no fluxo. |
| Nome da variável | O nome pelo qual o código acessa esses dados. Veja as regras de nomes. |
O que o script recebe depende do tipo do nó escolhido:
| Nó anterior | O que o script recebe |
|---|---|
| Gatilho de formulário, Solicitar Resposta de Formulário e Solicitar Acompanhamento | A resposta do formulário, com um item por pergunta (número, texto, data, opções escolhidas etc.) e informações da resposta. O autocomplete do editor mostra os campos reais do formulário. |
| Aprovação | O nome do nó, o resultado da aprovação e o comentário de quem respondeu. Antes da resposta, só o nome. |
| Gatilho agendado | O nome do nó e o horário agendado. |
| Gatilho: Plano de Ação e Solicitar Plano de Ação | Os dados do plano de ação daquele nó. |
| Outro nó Script | Os outputs que o outro script devolveu. É assim que um script usa o resultado de outro, inclusive listas de objetos. |
| Outros nós (Esperar, Enviar E-mail, Criar PDF etc.) | O nome do nó e o horário em que o fluxo chegou a ele. |
Webhook, Slack, Teams, Google Sheets, Excel, Google Drive e OneDrive não podem ser inputs, porque não produzem dados para o script ler.
O formato dos dados reflete o que o nó anterior tem no momento em que o script roda. Se o formulário ou o plano de ação mudar depois, o dado recebido muda junto.
Outputs — o que o script devolve
Cada output é um valor que o script entrega para os nós seguintes. Clique em Adicionar output, escolha o Tipo e dê um nome. Existem quatro tipos:
| Tipo | O que é | Onde pode ser usado |
|---|---|---|
| Texto | Uma frase ou palavra. Uma data devolvida como texto chega ao destino como texto no formato ISO (por exemplo, 2026-03-01T10:00:00.000Z). | Textos em geral (e-mails, status, nome de arquivo) e condições. |
| Número | Um número válido. NaN e infinito são recusados. | Textos em geral e condições. |
| Lista de e-mails | Uma lista de endereços de e-mail. | Destinatários dos nós de e-mail ("Adicionar de um nó Script"). |
| Lista de objetos | Uma tabela: cada item da lista é uma linha, e você declara os atributos (colunas), cada um do tipo Texto ou Número. | Só no corpo de um e-mail, como tabela, ou como input de outro nó Script. |
Todo output declarado precisa voltar no resultado do script, com o tipo declarado. Se faltar um, vier com tipo diferente, ou se uma linha de uma lista não tiver algum atributo, o nó falha e a mensagem diz qual output ou linha causou o problema. O que o script devolver além dos outputs declarados é descartado.
A lista de objetos aparece como tabela no corpo dos cinco nós de e-mail: Aprovação, Enviar E-mail, Solicitar Resposta de Formulário, Solicitar Acompanhamento e Solicitar Plano de Ação. Ela não funciona no assunto, no status, nem em Slack, Teams, webhook, planilha ou Drive.
Código
O código tem uma regra fixa de estrutura: a função calculateValue precisa ser a primeira coisa do código, com a assinatura abaixo. Funções e constantes auxiliares vão depois dela, nunca antes.
function calculateValue({ pedido, aprovacao }: Context): Result {
const total = calcularTotal(pedido);
return { total, resumo: `Total: ${total}` };
}
function calcularTotal(pedido: Context['pedido']): number {
// funções auxiliares ficam depois de calculateValue
return 0;
}
- Entre as chaves da assinatura, liste os nomes dos inputs que o script usa (
pedido,aprovacao). - A função devolve um objeto, com uma chave para cada output declarado.
try/catch,throweErrorsão liberados: use-os para tratar situações esperadas e devolver um valor padrão.- Palavras bloqueadas, que impedem salvar o código:
async,await,import,importScripts,eval,then,prototype,__proto__,setTimeout,setInterval,constructor,fetcheXMLHttpRequest. O script não acessa a internet, arquivos nem temporizadores. - O código pode ter até 100.000 caracteres.
- Um erro de sintaxe é apontado com a linha do problema, e o workflow não pode ser publicado enquanto o código não compilar.
O código é compilado quando o rascunho é salvo, o que acontece sozinho a cada 30 segundos ou ao fechar o painel do nó. Se aparecer o aviso "Código ainda não compilado", aguarde o salvamento automático; se o aviso continuar, corrija os erros de sintaxe.
Regras de nomes
| Nome | Regra | Por quê |
|---|---|---|
| Input (nome da variável) e Output | Só letras sem acento, números e _; começa com letra; até 60 caracteres; não pode ser palavra reservada do JavaScript (como class ou return) nem uma das palavras bloqueadas do código (como then). | O nome vira uma variável do código e uma chave usada nos textos ({{script...}}). Acento, hífen ou espaço quebrariam as duas coisas. |
| Atributo de uma lista de objetos | Livre (pode ter espaço no meio e acento), exceto os caracteres , " & < > }, e sem espaço no início nem no fim. | Esses caracteres atrapalham a lista de colunas da tabela do e-mail (,), o texto HTML (& < > ") e o fechamento da variável (}). Nomes iguais na mesma lista também não são aceitos. |
Dois inputs, ou dois outputs, não podem ter o mesmo nome.
Usando os resultados nos nós seguintes
Os outputs aparecem no grupo Script do seletor de variáveis dos campos de texto, e em dois outros lugares:
- Textos — no assunto e no corpo dos nós de e-mail, no status do nó Definir Status e no nome do arquivo e no conteúdo do Criar PDF. O valor entra no texto no lugar da variável.
- Condições — em uma regra com o tipo Script (nó, output, operador e valor). Servem outputs de tipo Texto ou Número. Na seta que sai do próprio Script, a regra também pode usar os outputs desse mesmo Script. Se o output mudar de tipo ou for removido depois, a regra mostra "O output mudou de tipo ou foi removido. Revise o output, o operador e o valor desta regra."
- Destinatários — nos nós de e-mail, Adicionar de um nó Script usa um output do tipo E-mails. Endereços repetidos ou inválidos são ignorados, e o que foi descartado fica registrado no histórico.
Link e tabela no corpo do e-mail
- Um texto no formato
[rótulo](url), em um output do tipo Texto, vira um link clicável no corpo do e-mail (somente endereçoshttpehttps). No assunto e nos outros campos, o texto aparece como foi escrito. - Uma lista de objetos vira uma tabela no corpo do e-mail, com uma coluna por atributo. O seletor de variáveis sempre inclui a lista de colunas, na ordem em que você as selecionar. Uma lista vazia mostra só o cabeçalho.
Textos vindos de respostas de formulário, ao entrarem no e-mail por um script, não executam código nem formatação indevida: o conteúdo é mostrado como texto.
Testar o script
A aba Testar, ao lado de Inputs e Outputs, roda o script sem disparar o workflow. Ela só aparece para quem pode editar o workflow:
- Clique em Carregar contexto de exemplo. O campo Contexto é preenchido com um exemplo para cada input, no formato real do nó escolhido, usando os formulários que estão na tela.
- Ajuste os valores do exemplo para o caso que quer simular. Se você adicionar ou renomear um input depois, as chaves que faltam são acrescentadas ao contexto ao rodar, sem perder o que você já editou.
- Clique em Rodar. O Resultado aparece ao lado, ou a mensagem do erro, se houver.
Pontos de atenção:
- O teste usa o código que está na tela, sem precisar salvar o rascunho antes. Erros de sintaxe, de assinatura ou palavras bloqueadas aparecem no Resultado.
- O teste e a execução real têm o mesmo limite de 10 segundos por execução, e 64 MB de memória. Estourar o tempo mostra "O script excedeu o limite de 10 segundos".
- O servidor aceita 2 testes ao mesmo tempo. Se houver mais, aparece "Há testes demais em andamento. Aguarde alguns segundos e tente de novo": basta tentar de novo. Os testes nunca atrasam os scripts dos workflows em execução, que têm suas próprias vagas.
- Se o Contexto não for um JSON válido, aparece "O contexto informado não é um JSON válido."
- O Contexto pode ter até 256 KB. Acima disso aparece "O contexto do teste passa do limite de 256 KB", e o teste nem começa.
Quando o script falha
Se o script ultrapassar 10 segundos ou 64 MB, lançar um erro não tratado, devolver um output com tipo errado, ou devolver um resultado maior que 256 KB, o nó falha. Com isso:
- A instância fica com status Falhou, e o responsável pelo workflow recebe um e-mail avisando, com o link para ver os eventos.
- O erro aparece no histórico da instância, com a causa (por exemplo, qual output ou linha estava errado).
- Os dados de entrada do script não são enviados para ferramentas de monitoramento de erros nem registrados no log do servidor, porque podem conter respostas de formulários.
Use try/catch para casos previsíveis (campo vazio, divisão por zero) e devolva um valor padrão. Assim a instância segue em frente em vez de falhar.
Quando o nó anterior não rodou
O workflow só garante que existe um caminho do nó anterior até o Script, não que o nó já rodou. Isso acontece, por exemplo, quando o Script lê um nó do outro lado de um Se/Senão, ou quando uma aprovação ainda não foi respondida.
Nesses casos o dado chega vazio (o input chega como um objeto sem dados, o texto aparece em branco), e o nó que leu o dado mostra no histórico da instância o aviso "Dados vazios de nós que não rodaram antes", com o nome de cada nó. O workflow não falha por isso: trate o caso vazio no código.
Isso é diferente de uma falha ao ler o formulário ou a resposta (por exemplo, uma indisponibilidade momentânea do banco de dados): nesse caso o script não roda com dados vazios. A instância fica com status Falhou, o responsável pelo workflow recebe o e-mail de aviso, e o erro aparece no histórico como falha do script.
Boas Práticas
- Dê nomes que expliquem o valor:
total_pedidoeemails_gestoresajudam mais do quexelista. - Declare só os inputs que usa: o script recebe só o que você configurou, e isso deixa o autocomplete mais limpo.
- Teste antes de publicar: use Carregar contexto de exemplo, ajuste os valores com casos extremos (campo vazio, lista vazia) e rode.
- Mantenha o script curto: cada script deve calcular um conjunto de valores. Para etapas diferentes, encadeie dois nós Script.
- Combine com o nó Definir Status: um status antes do Script ajuda a saber, no painel de instâncias, em que etapa a instância está.