Gestão
Operacional
Workflows n8n
Estrutura SQLite

Cadastro de Setores

Setores Cadastrados

ID Nome Descrição Ações
1 Recursos Humanos Gestão de pessoas e recrutamento
2 Financeiro Contas a pagar e receber

Cadastro de Usuários

Usuários Cadastrados

ID Nome E-mail Setor Ações
1 Maria Santos maria@empresa.com Recursos Humanos
2 Carlos Oliveira carlos@empresa.com Financeiro

Formulário de Envio

Formulários Criados

ID Título Perguntas Destinatários Ações
1 Pesquisa de Clima 5 Recursos Humanos
2 Avaliação de Desempenho 8 Todos os setores

Workflow para Criar Setor (SQLite)

Este workflow recebe dados via webhook e insere no banco SQLite:

// Webhook para receber dados
const { name, description } = $input().data;

// Conexão com SQLite
const db = $sqlite('database.db');

// Inserir no banco de dados
const result = db.run(`
INSERT INTO sectors (name, description)
VALUES (?, ?)
`, [name, description]);

// Retornar resposta
$return({
  success: true,
  message: "Setor criado com sucesso",
  id: result.lastID
});

Workflow para Enviar E-mail (Microsoft Outlook)

Este workflow busca usuários de um setor e envia e-mail via Microsoft Outlook:

// Receber setor do webhook
const { sectorId, subject, message } = $input().data;

// Buscar e-mails dos usuários do setor
const db = $sqlite('database.db');
const users = db.query(`
SELECT email FROM users WHERE sector_id = ?
`, [sectorId]);

// Preparar lista de destinatários
const recipients = users.map(user => user.email).join(';');

// Enviar e-mail com Microsoft Outlook
const outlook = $node('n8n-nodes-base.microsoftOutlook');
const emailResult = outlook.execute('sendEmail', {
  to: recipients,
  subject: subject,
  body: message,
  contentType: 'HTML'
});

$return({
  success: true,
  message: "E-mail enviado com sucesso",
  recipients: recipients
});

Workflow Completo do Sistema

Fluxo completo para processar formulários e enviar para setores:

// 1. Webhook para receber dados do formulário
const { title, questions, sectors } = $input().data;

// 2. Salvar formulário no SQLite
const db = $sqlite('database.db');
const formResult = db.run(`
INSERT INTO forms (title, questions_json)
VALUES (?, ?)
`, [title, JSON.stringify(questions)]);

// 3. Para cada setor selecionado
for (const sectorId of sectors) {
  // Buscar e-mails dos usuários do setor
  const users = db.query(`
SELECT email FROM users WHERE sector_id = ?
`, [sectorId]);

  // Enviar e-mail para cada usuário
  const recipients = users.map(user => user.email).join(';');
  const outlook = $node('n8n-nodes-base.microsoftOutlook');
  outlook.execute('sendEmail', {
    to: recipients,
    subject: `Novo formulário: ${title}`,
    body: generateEmailBody(title, questions),
    contentType: 'HTML'
  });
}

$return({
  success: true,
  message: "Formulário processado e e-mails enviados"
});

Estrutura do Banco de Dados SQLite

Script SQL para criar as tabelas necessárias:

-- Tabela de setores
CREATE TABLE sectors (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  name TEXT NOT NULL,
  description TEXT,
  created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

-- Tabela de usuários
CREATE TABLE users (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  name TEXT NOT NULL,
  email TEXT NOT NULL UNIQUE,
  sector_id INTEGER NOT NULL,
  created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  FOREIGN KEY (sector_id) REFERENCES sectors(id)
);

-- Tabela de formulários
CREATE TABLE forms (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  title TEXT NOT NULL,
  questions_json TEXT NOT NULL,
  created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

-- Tabela de relacionamento formulários-setores
CREATE TABLE form_sectors (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  form_id INTEGER NOT NULL,
  sector_id INTEGER NOT NULL,
  FOREIGN KEY (form_id) REFERENCES forms(id),
  FOREIGN KEY (sector_id) REFERENCES sectors(id)
);

Consultas SQL Úteis

-- Buscar todos os usuários de um setor
SELECT u.name, u.email, s.name AS sector_name
FROM users u
JOIN sectors s ON u.sector_id = s.id
WHERE s.id = ?;

-- Contar usuários por setor
SELECT s.name, COUNT(u.id) AS user_count
FROM sectors s
LEFT JOIN users u ON s.id = u.sector_id
GROUP BY s.id;

-- Buscar formulários e seus setores destinatários
SELECT f.title, f.created_at, GROUP_CONCAT(s.name, ', ') AS sectors
FROM forms f
JOIN form_sectors fs ON f.id = fs.form_id
JOIN sectors s ON fs.sector_id = s.id
GROUP BY f.id;

Configuração do SQLite no n8n

Para usar SQLite no n8n, você precisa:

  1. Instalar o nó "SQLite" no n8n
  2. Configurar a conexão com o banco de dados
  3. Criar as tabelas usando o script acima
  4. Desenvolver workflows que utilizem operações SQL

O n8n gerencia automaticamente o arquivo do banco SQLite, normalmente localizado na pasta de dados do n8n.