Exercício 02 · Encontro 01 · 35 minutos
A fila do dia: o fluxo que trabalha em lote
O que você vai aprender
Você vai transformar uma planilha de vinte pedidos numa tabela de dados, criar um fluxo com gatilho de horário que lê todos os pedidos novos de uma vez, separa as reclamações com uma condição e atualiza o status de cada linha. Você sai entendendo que um fluxo trabalha com muitos itens ao mesmo tempo.
Como começar
- Onde
- A conta do n8n. Um fluxo novo será criado no passo 2.
- Conversa
- O chat da reunião, para os sinais.
- Pasta
- O kit na Área de Trabalho: o arquivo 03-pedidos-vale-verde.csv.
- Vem de
- Exercício 1: tabela, formulário e expressões.
- Leva para
- Exercício 3: o e-mail automático. No Encontro 2, as condições ganham inteligência artificial.
Baixe antes de começar
- Baixar
- Fluxo pronto: Fila do dia (JSON)Fluxo (JSON)Baixar
Plano B. Depois de importar, escolha a tabela pedidos nos três nós Data Table.
Situação
Todo dia às 8h a Secretaria precisa olhar os pedidos que chegaram e separar o que é reclamação, que tem prazo curto, do resto, que entra na fila normal. Hoje alguém faz isso lendo um a um. O fluxo vai fazer isso para vinte pedidos de uma vez. O agendamento ficará configurado, mas não será publicado hoje.
Um nó trabalha em todos os itens de uma vez. A condição separa; a atualização registra.
Confira que 03-pedidos-vale-verde.csv está na pasta do kit. Ele tem vinte linhas fictícias com as mesmas sete colunas da tabela protocolos.
Passo a passo
6 passos · 35 minO que este exercício monta, caixinha por caixinha
- Gatilho de horário
- Data table: buscar os novos
- If: é reclamação?
- Data table: atualizar (true e false)
Importar os pedidos
6 minutos. Vinte pedidos de uma vez, vindos da planilha do kit.
Por que este passo: Um fluxo em lote precisa de lote: vinte pedidos que já chegaram, como se fosse a fila de ontem. Importar a planilha cria a tabela cheia num clique.
- No menu da esquerda, clique em Overview. No alto, clique na aba Data tables.
- Clique no botão laranja Create data table. Na caixa Create new data table, em Data table name, cole:Data table name · copiar
pedidos - Marque Import CSV (importar planilha). Clique em Drop file here or click to upload e escolha 03-pedidos-vale-verde.csv, na pasta do kit, na Área de Trabalho.
- Deixe marcado My CSV file contains a header row (a primeira linha tem os nomes das colunas) e clique em Create.
- Abre a tela Set data table columns, com a mensagem We found 7 columns and 20 rows. Confira as sete colunas, todas em String, e clique em Create.
- Abra a tabela e role: vinte linhas, todas com status novo.
Deve aparecer: A tabela pedidos com vinte linhas e sete colunas. Sinal no chat: 20 LINHAS.
- Não achou Import CSV? Ele fica ao lado de From scratch, na caixa Create new data table. Se a conta não oferecer a importação, escreva TRAVEI 2.1 e use o plano B do fim da página.
- As colunas saíram com nomes estranhos (column1, column2)? O My CSV file contains a header row ficou desmarcado. Apague a tabela e importe de novo, com a caixa marcada.
O que acabou de acontecer: As sete colunas são as mesmas da tabela protocolos: um pedido é sempre o mesmo pacote, chegue pelo formulário ou pela planilha.
O gatilho de horário
Caixinha 1 de 4: Gatilho de horário5 minutos. Um fluxo novo, que vai rodar sozinho todo dia às 8h.
Por que este passo: O gatilho de horário é o relógio: o fluxo acorda sozinho todo dia às 8h no fuso configurado neste fluxo. É o terceiro tipo de gatilho que você vê, depois do manual e do formulário.
- Overview, aba Workflows, clique em Create workflow.
- No alto à esquerda, clique em My workflow, apague, cole o nome abaixo e tecle Enter.Nome do fluxo · copiar
Fila do dia - No menu de três pontos ao lado do nome do fluxo, clique em Settings (configurações). Em Timezone (fuso horário), digite sao paulo, escolha America/Sao_Paulo e clique em Save (salvar). Se Settings estiver cinza, espere dois segundos: o n8n ainda está salvando o nome. Como no Exercício 1: cada fluxo tem o seu fuso.
- Clique em Add first step. Na lista de gatilhos, sem digitar nada, clique em On a schedule (num horário). Se preferir buscar, digite schedule e clique em Schedule Trigger.
- Em Trigger Rules (regras), no bloco Trigger Interval 1, confira: Trigger Interval (intervalo) em Days (dias) e Days Between Triggers (dias entre disparos) em 1. Os dois já vêm assim.
- Em Trigger at Hour (hora), que vem em Midnight (meia-noite), clique e escolha 8am.
- Em Trigger at Minute (minuto), deixe 0.
- Feche o painel no X, no canto superior direito (ou tecle Esc).
Deve aparecer: O gatilho com o relógio e o fuso America/Sao_Paulo nas configurações deste fluxo. Sinal no chat: AGENDA.
- Ele não vai esperar até amanhã: o Execute workflow roda o fluxo na hora, para testar.
O que acabou de acontecer: Para testar, você não espera até amanhã: Execute workflow roda na hora. Se fosse publicado, o fluxo rodaria às 8h de São Paulo, inclusive amanhã; por isso ele fica sem publicar neste exercício.
Buscar os pedidos novos
Caixinha 2 de 4: Data table: buscar os novos6 minutos. O nó que lê a tabela e devolve todos os pedidos com status novo.
Por que este passo: Buscar com condição é perguntar à tabela só o que interessa: os pedidos com status novo. O fluxo trabalha em lote: o que sai daqui não é um item, são vinte.
- Clique no + à direita do gatilho. Na busca, digite data table e clique em Data table.
- Na lista de ações, clique em Get row(s) (buscar linhas).
- No painel, confira: Resource Row e Operation Get.
- Em Data table, deixe From List, clique no campo e escolha pedidos.
- Must Match (deve atender) pode ficar como está: com uma condição só, tanto faz.
- Em Conditions (condições), clique em Add Condition (adicionar condição). Aparece o bloco Conditions 1, com Column, Condition e Value.
- Em Column (coluna), que vem com id (number), clique e escolha status (string). As colunas aparecem com o tipo entre parênteses.
- Em Condition (condição), clique e escolha Equals (igual).
- Em Value (valor), cole:Value da condição · copiar
novo - Ligue Return All (devolver todas). Desligado, o nó para no Limit Per Input Row, que vem com 50; ligado, esse limite deixa de valer.
- Clique em Execute step (executar este passo), no alto do painel.
Deve aparecer: No OUTPUT, vinte itens, um por linha da tabela. Sinal no chat: 20 ITENS.
- Saíram zero itens? O valor da condição está diferente de novo (minúsculo, sem espaço) ou a tabela escolhida é a protocolos.
O que acabou de acontecer: Conte os itens no OUTPUT: vinte. Cada nó a partir daqui vai trabalhar nos vinte, um por um, sem você fazer nada.
Separar as reclamações
Caixinha 3 de 4: If: é reclamação?8 minutos. O nó If separa os itens em dois caminhos: true (verdadeiro) e false (falso).
Por que este passo: O If é a primeira decisão do curso: uma condição, duas saídas. Reclamação vai para um lado, o resto para o outro. No próximo encontro, a inteligência artificial vai alimentar esta decisão lendo a descrição, em vez de uma lista.
- Clique no + à direita do Data table. Na busca, digite if e clique em If (se).
- A condição tem três partes. No primeiro campo, arraste o campo tipo da coluna INPUT, à esquerda (vira {{ $json.tipo }}).
- No seletor do meio, confira String (texto) e is equal to (é igual a). Já vem assim.
- No segundo campo, cole o valor abaixo, com R maiúsculo e acento, exatamente como está na tabela.Segundo valor da condição · copiar
Reclamação - Clique em Execute step.
Deve aparecer: O If mostra duas saídas: true (verdadeiro) com as reclamações e false (falso) com o resto. Conte os itens em cada uma. Sinal no chat: SEPAROU e os dois números.
- Tudo foi para false? Compare o valor digitado com o que está na tabela: precisa ser idêntico, inclusive o acento.
O que acabou de acontecer: true e false não são bom e ruim: são os dois caminhos. Um item nunca vai pelos dois.
Atualizar cada linha
Caixinha 4 de 4: Data table: atualizar (true e false)7 minutos. Dois nós de atualização: um para as reclamações, outro para o resto.
Por que este passo: Atualizar é fechar o ciclo: a tabela registra o que o fluxo decidiu. A condição Equals com o protocolo garante que cada item mexa só na própria linha.
- Clique no + da saída true do If. Clique dentro do campo de busca (o cursor tem que piscar ali), digite data table, clique em Data table e, nas ações, em Update row(s) (atualizar linhas).
- No painel, confira Resource Row e Operation Update. Em Data table, escolha pedidos.
- Em Conditions, clique em Add Condition. Em Column, escolha protocolo. Em Condition, escolha Equals.
- Em Value, arraste o campo protocolo da coluna INPUT (vira {{ $json.protocolo }}): é o que faz cada item atualizar a própria linha.
- Em Columns, Mapping Column Mode: clique e escolha Map Each Column Manually.
- Em Values to update (valores a atualizar) aparecem todas as colunas da tabela. Deixe só status: no menu de três pontinhos ao lado de Values to update, clique em Remove All Columns (remover todas); depois, em + Add column to send (adicionar coluna), escolha status. Coluna que fica vazia aqui é apagada na tabela.
- No campo status, cole:status, na saída true · copiar
prioridade - Feche o painel no X, no canto superior direito (ou tecle Esc).
- Clique no + da saída false do If e repita os itens a a f para o segundo nó de atualização. Ele entra no desenho com o nome Update row(s)1.
- No campo status deste segundo nó, cole:status, na saída false · copiar
fila - Feche o painel no X, no canto superior direito (ou tecle Esc). Clique em Execute workflow.
Deve aparecer: Todas as caixinhas verdes. Overview, aba Data tables, tabela pedidos: nenhum status novo, só prioridade e fila. Sinal no chat: FILA.
- Sobrou linha com status novo? A condição do Update não achou o protocolo: confira que o valor é {{ $json.protocolo }} e não um texto fixo.
- A tabela perdeu nome, email ou descricao? Ficaram colunas vazias em Values to Update. Deixe só status nos dois nós e reimporte o CSV numa tabela nova (ou use o plano B).
O que acabou de acontecer: Se a condição fosse um protocolo fixo, os vinte itens atualizariam a mesma linha. A expressão é o que faz cada pacote encontrar a sua.
Registre
3 minutos. Complete as linhas do fim desta página. Não publique este fluxo hoje: amanhã às 8h ele rodaria de novo, sem pedido novo para tratar.
O que você deve ver
- A tabela pedidos com vinte linhas importadas do CSV.
- O fluxo Fila do dia com cinco caixinhas: gatilho, buscar, If, atualizar, atualizar.
- As reclamações com status prioridade; o resto com status fila.
Checagem obrigatória
- O Get devolveu vinte itens antes do If.
- O If separou pelo campo tipo, com o valor exato Reclamação.
- A tabela não tem mais nenhum status novo, e nome, email e descricao continuam preenchidos.
Se travarabrir
- O Import CSV não aceita o arquivo.
- Abra o CSV no Bloco de Notas e confira a primeira linha: protocolo,nome,email,tipo,descricao,status,criado_em. Se o Excel abriu e salvou, pode ter trocado as vírgulas por ponto e vírgula: use o arquivo original do kit.
- O If não mostra as duas saídas.
- Execute step com o nó aberto: as saídas só aparecem depois de rodar. Se uma saída mostra zero itens, os dados passaram todos pelo outro caminho; confira o valor Reclamação e o acento.
- O Update atualizou uma linha só.
- O Value da condição está fixo (um protocolo específico). Precisa ser a expressão {{ $json.protocolo }}, arrastada do INPUT.
- A minha tela não tem Import CSV.
- Plano B: botão Create data table, From scratch, nome pedidos, as mesmas sete colunas da tabela protocolos. Na própria tabela, use Add row (adicionar linha) e digite cinco pedidos fictícios, dois deles com tipo Reclamação e todos com status novo. O fluxo funciona igual, com cinco itens no lugar de vinte.
- Cinco minutos travado.
- Plano B: Create workflow; no menu de três pontos ao lado do nome do fluxo, Import e From file com 06-fila-do-dia.json do kit; escolha a tabela pedidos nos três nós Data Table; Execute workflow. O arquivo importado ganha o nome do fluxo que está dentro dele: para não ficar com dois de mesmo nome, arquive antes o seu fluxo travado (menu de três pontos, Archive).
Se você terminou antesabrir
Não avance para o próximo passo. Faça um destes testes na resposta que já tem:
- Acrescente uma terceira regra: se a descrição contém a palavra urgente, status urgente. Dica: o If aceita mais de uma condição e o operador contains (contém).
- Abra a aba Executions do fluxo e clique na execução: dá para ver o que cada nó recebeu e devolveu, item por item.
Leve para o seu trabalho
- Import CSV cria a tabela pronta
- Schedule Trigger é o relógio
- Get com filtro busca em lote
- If tem duas saídas: true e false
- Update com expressão atualiza cada item
Registre o método
Complete na folha ou num bloco de notas. É o que fica quando a aula acaba.
- Quantos pedidos eram reclamação:
- O que o If faz com um item que não é reclamação:
- Por que não publiquei este fluxo hoje: