IDs de Workflow
Os IDs de workflow são identificadores únicos que permitem referenciar, rastrear e gerenciar workflows de forma programática. Esta seção aborda como entender, usar e gerenciar IDs de workflow no n8n.
Visão Geral
Os IDs de workflow são fundamentais para:
- Identificação única de workflows no sistema
- Referência programática via API
- Rastreamento de execuções e mudanças
- Integração com sistemas externos
- Auditoria e compliance
Estrutura dos IDs
Formato Padrão
Os IDs de workflow seguem um formato específico:
// Estrutura do ID de workflow
const estruturaId = {
// Formato: UUID v4
formato: 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx',
// Exemplo real
exemplo: 'a1b2c3d4-e5f6-7890-abcd-ef1234567890',
// Componentes
componentes: {
versao: '4', // Versão do UUID
variante: '8', // Variante do UUID
timestamp: 'timestamp-embedded', // Timestamp embutido
aleatorio: 'random-bytes' // Bytes aleatórios
}
};
Tipos de IDs
// Diferentes tipos de identificadores
const tiposIds = {
// ID interno do n8n
interno: {
formato: 'uuid-v4',
exemplo: 'a1b2c3d4-e5f6-7890-abcd-ef1234567890',
uso: 'Identificação interna no banco de dados'
},
// ID de execução
execucao: {
formato: 'uuid-v4',
exemplo: 'b2c3d4e5-f6g7-8901-bcde-f23456789012',
uso: 'Identificação única de cada execução'
},
// ID de versão
versao: {
formato: 'semantic-versioning',
exemplo: '1.2.3',
uso: 'Controle de versão do workflow'
},
// ID customizado
customizado: {
formato: 'user-defined',
exemplo: 'vendas-automacao-2024',
uso: 'Identificação amigável para usuários'
}
};
Geração de IDs
Geração Automática
Os IDs são gerados automaticamente pelo n8n:
// Geração automática de ID
const gerarIdAutomatico = () => {
// O n8n gera automaticamente UUIDs v4
const uuid = require('uuid');
return uuid.v4();
};
// Exemplo de uso
const novoId = gerarIdAutomatico();
console.log(novoId); // a1b2c3d4-e5f6-7890-abcd-ef1234567890
Geração Customizada
Para casos especiais, você pode gerar IDs customizados:
// Gerar ID customizado
const gerarIdCustomizado = (prefixo, sufixo) => {
const timestamp = Date.now();
const aleatorio = Math.random().toString(36).substring(2, 8);
return `${prefixo}-${timestamp}-${aleatorio}${sufixo ? `-${sufixo}` : ''}`;
};
// Exemplos de uso
const idVendas = gerarIdCustomizado('vendas', 'automacao');
console.log(idVendas); // vendas-1703123456789-abc123-automacao
const idFinanceiro = gerarIdCustomizado('financeiro', 'conciliacao');
console.log(idFinanceiro); // financeiro-1703123456789-def456-conciliacao
Obtenção de IDs
Via Interface Web
Para obter o ID de um workflow via interface:
- Abra o workflow no editor
- Clique no menu (⋮) no canto superior direito
- Selecione "Copy ID" no menu
- O ID será copiado para a área de transferência
Via API
// Obter ID de workflow via API
const obterIdWorkflow = async (nomeWorkflow) => {
const response = await fetch('/api/v1/workflows', {
method: 'GET',
headers: {
'Authorization': 'Bearer YOUR_API_KEY'
},
params: {
name: nomeWorkflow
}
});
const workflows = await response.json();
if (workflows.length > 0) {
return workflows[0].id;
}
throw new Error(`Workflow "${nomeWorkflow}" não encontrado`);
};
// Exemplo de uso
const id = await obterIdWorkflow('Automação de Vendas');
console.log(id); // a1b2c3d4-e5f6-7890-abcd-ef1234567890
Listar IDs de Múltiplos Workflows
// Listar IDs de workflows com filtros
const listarIdsWorkflows = async (filtros = {}) => {
const response = await fetch('/api/v1/workflows', {
method: 'GET',
headers: {
'Authorization': 'Bearer YOUR_API_KEY'
},
params: filtros
});
const workflows = await response.json();
return workflows.map(workflow => ({
id: workflow.id,
name: workflow.name,
active: workflow.active,
updatedAt: workflow.updatedAt
}));
};
// Exemplo: Listar IDs de workflows ativos
const workflowsAtivos = await listarIdsWorkflows({
active: true
});
// Exemplo: Listar IDs de workflows por tag
const workflowsVendas = await listarIdsWorkflows({
tags: ['vendas']
});
Uso de IDs
Referência via API
// Usar ID para operações na API
const operacoesComId = {
// Obter workflow por ID
obterWorkflow: async (id) => {
const response = await fetch(`/api/v1/workflows/${id}`, {
method: 'GET',
headers: {
'Authorization': 'Bearer YOUR_API_KEY'
}
});
return response.json();
},
// Executar workflow por ID
executarWorkflow: async (id, dados = {}) => {
const response = await fetch(`/api/v1/workflows/${id}/execute`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer YOUR_API_KEY'
},
body: JSON.stringify(dados)
});
return response.json();
},
// Atualizar workflow por ID
atualizarWorkflow: async (id, dados) => {
const response = await fetch(`/api/v1/workflows/${id}`, {
method: 'PUT',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer YOUR_API_KEY'
},
body: JSON.stringify(dados)
});
return response.json();
},
// Excluir workflow por ID
excluirWorkflow: async (id) => {
const response = await fetch(`/api/v1/workflows/${id}`, {
method: 'DELETE',
headers: {
'Authorization': 'Bearer YOUR_API_KEY'
}
});
return response.json();
}
};
// Exemplo de uso
const workflow = await operacoesComId.obterWorkflow('a1b2c3d4-e5f6-7890-abcd-ef1234567890');
const execucao = await operacoesComId.executarWorkflow('a1b2c3d4-e5f6-7890-abcd-ef1234567890', {
data: { lead: 'novo-lead@email.com' }
});
Integração com Sistemas Externos
// Integrar IDs com sistemas externos
const integracaoIds = {
// Mapear ID do n8n com ID externo
mapearId: async (idN8n, idExterno, sistema) => {
const mapeamento = {
idN8n: idN8n,
idExterno: idExterno,
sistema: sistema,
criadoEm: new Date().toISOString()
};
// Salvar mapeamento no banco de dados
await salvarMapeamento(mapeamento);
return mapeamento;
},
// Obter ID externo por ID do n8n
obterIdExterno: async (idN8n, sistema) => {
const mapeamento = await buscarMapeamento(idN8n, sistema);
return mapeamento ? mapeamento.idExterno : null;
},
// Obter ID do n8n por ID externo
obterIdN8n: async (idExterno, sistema) => {
const mapeamento = await buscarMapeamentoPorExterno(idExterno, sistema);
return mapeamento ? mapeamento.idN8n : null;
}
};
// Exemplo: Integração com CRM
const idN8n = 'a1b2c3d4-e5f6-7890-abcd-ef1234567890';
const idCrm = 'CRM-2024-001';
await integracaoIds.mapearId(idN8n, idCrm, 'salesforce');
const idExterno = await integracaoIds.obterIdExterno(idN8n, 'salesforce');
Rastreamento e Auditoria
Histórico de Mudanças
// Rastrear mudanças por ID
const rastreamentoIds = {
// Registrar mudança
registrarMudanca: async (idWorkflow, tipo, detalhes) => {
const mudanca = {
workflowId: idWorkflow,
tipo: tipo, // 'criado', 'atualizado', 'executado', 'excluido'
detalhes: detalhes,
timestamp: new Date().toISOString(),
usuario: 'usuario@empresa.com'
};
await salvarMudanca(mudanca);
return mudanca;
},
// Obter histórico de mudanças
obterHistorico: async (idWorkflow, limite = 100) => {
const mudancas = await buscarMudancas(idWorkflow, limite);
return mudancas.sort((a, b) => new Date(b.timestamp) - new Date(a.timestamp));
},
// Obter última mudança
obterUltimaMudanca: async (idWorkflow) => {
const mudancas = await rastreamentoIds.obterHistorico(idWorkflow, 1);
return mudancas[0] || null;
}
};
// Exemplo de uso
await rastreamentoIds.registrarMudanca(
'a1b2c3d4-e5f6-7890-abcd-ef1234567890',
'executado',
{ resultado: 'sucesso', duracao: '2.5s' }
);
const historico = await rastreamentoIds.obterHistorico('a1b2c3d4-e5f6-7890-abcd-ef1234567890');
Logs de Auditoria
// Logs de auditoria por ID
const auditoriaIds = {
// Log de acesso
logAcesso: async (idWorkflow, acao, usuario) => {
const log = {
workflowId: idWorkflow,
acao: acao, // 'visualizar', 'editar', 'executar', 'excluir'
usuario: usuario,
timestamp: new Date().toISOString(),
ip: '192.168.1.100',
userAgent: 'Mozilla/5.0...'
};
await salvarLogAuditoria(log);
return log;
},
// Obter logs de auditoria
obterLogsAuditoria: async (idWorkflow, periodo) => {
const logs = await buscarLogsAuditoria(idWorkflow, periodo);
return logs.sort((a, b) => new Date(b.timestamp) - new Date(a.timestamp));
},
// Relatório de auditoria
relatorioAuditoria: async (idWorkflow) => {
const logs = await auditoriaIds.obterLogsAuditoria(idWorkflow, '30d');
return {
totalAcessos: logs.length,
acessosPorUsuario: agruparPorUsuario(logs),
acessosPorAcao: agruparPorAcao(logs),
ultimoAcesso: logs[0] || null
};
}
};
// Exemplo de uso
await auditoriaIds.logAcesso(
'a1b2c3d4-e5f6-7890-abcd-ef1234567890',
'executar',
'joao@empresa.com'
);
const relatorio = await auditoriaIds.relatorioAuditoria('a1b2c3d4-e5f6-7890-abcd-ef1234567890');
IDs em URLs e Webhooks
URLs com IDs
// URLs que usam IDs de workflow
const urlsComIds = {
// URL do editor
editor: (id) => `https://n8n.empresa.com/workflow/${id}`,
// URL da API
api: (id) => `https://n8n.empresa.com/api/v1/workflows/${id}`,
// URL de execução
execucao: (id) => `https://n8n.empresa.com/api/v1/workflows/${id}/execute`,
// URL de webhook
webhook: (id) => `https://n8n.empresa.com/webhook/${id}`,
// URL de histórico
historico: (id) => `https://n8n.empresa.com/workflow/${id}/history`
};
// Exemplo de uso
const id = 'a1b2c3d4-e5f6-7890-abcd-ef1234567890';
console.log(urlsComIds.editor(id)); // https://n8n.empresa.com/workflow/a1b2c3d4-e5f6-7890-abcd-ef1234567890
console.log(urlsComIds.webhook(id)); // https://n8n.empresa.com/webhook/a1b2c3d4-e5f6-7890-abcd-ef1234567890
Webhooks com IDs
// Configurar webhook com ID
const configurarWebhook = async (idWorkflow, configuracao) => {
const webhook = {
workflowId: idWorkflow,
path: configuracao.path || `webhook-${idWorkflow}`,
method: configuracao.method || 'POST',
authentication: configuracao.authentication || 'none',
active: configuracao.active || true
};
const response = await fetch(`/api/v1/workflows/${idWorkflow}/webhooks`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer YOUR_API_KEY'
},
body: JSON.stringify(webhook)
});
return response.json();
};
// Exemplo: Configurar webhook para automação de vendas
const configuracaoWebhook = {
path: 'vendas-lead',
method: 'POST',
authentication: 'header',
active: true
};
const webhook = await configurarWebhook('a1b2c3d4-e5f6-7890-abcd-ef1234567890', configuracaoWebhook);
IDs em Templates e Compartilhamento
Templates com IDs
// Criar template com ID
const criarTemplateComId = async (idWorkflow, metadata) => {
const workflow = await obterWorkflow(idWorkflow);
const template = {
...workflow,
templateId: `template-${idWorkflow}`,
metadata: {
...metadata,
originalId: idWorkflow,
createdAt: new Date().toISOString(),
version: '1.0.0'
}
};
return template;
};
// Exemplo: Criar template de automação de vendas
const metadata = {
name: 'Automação de Vendas - Template',
description: 'Template para automação de processo de vendas',
category: 'Vendas',
tags: ['vendas', 'crm', 'automação']
};
const template = await criarTemplateComId('a1b2c3d4-e5f6-7890-abcd-ef1234567890', metadata);
Compartilhamento com IDs
// Compartilhar workflow por ID
const compartilharPorId = async (idWorkflow, usuarios, permissoes) => {
const compartilhamento = {
workflowId: idWorkflow,
usuarios: usuarios,
permissoes: permissoes,
compartilhadoEm: new Date().toISOString(),
compartilhadoPor: 'admin@empresa.com'
};
const response = await fetch(`/api/v1/workflows/${idWorkflow}/share`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer YOUR_API_KEY'
},
body: JSON.stringify(compartilhamento)
});
return response.json();
};
// Exemplo: Compartilhar workflow de vendas
const usuarios = ['joao@empresa.com', 'maria@empresa.com'];
const permissoes = ['read', 'execute'];
await compartilharPorId('a1b2c3d4-e5f6-7890-abcd-ef1234567890', usuarios, permissoes);
Validação e Segurança
Validação de IDs
// Validar formato de ID
const validarId = (id) => {
// Regex para UUID v4
const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
return {
valido: uuidRegex.test(id),
formato: 'uuid-v4',
comprimento: id.length,
caracteres: id.replace(/[^0-9a-f-]/gi, '').length === id.length
};
};
// Exemplo de uso
const id = 'a1b2c3d4-e5f6-7890-abcd-ef1234567890';
const validacao = validarId(id);
console.log(validacao); // { valido: true, formato: 'uuid-v4', comprimento: 36, caracteres: 36 }
Segurança de IDs
// Medidas de segurança para IDs
const segurancaIds = {
// Verificar permissões de acesso
verificarPermissoes: async (idWorkflow, usuario) => {
const workflow = await obterWorkflow(idWorkflow);
const permissoes = await obterPermissoesUsuario(usuario);
return {
podeVisualizar: permissoes.includes('read') || workflow.owner === usuario,
podeEditar: permissoes.includes('write') || workflow.owner === usuario,
podeExecutar: permissoes.includes('execute') || workflow.owner === usuario,
podeExcluir: permissoes.includes('admin') || workflow.owner === usuario
};
},
// Log de tentativas de acesso
logTentativaAcesso: async (idWorkflow, usuario, sucesso) => {
const log = {
workflowId: idWorkflow,
usuario: usuario,
sucesso: sucesso,
timestamp: new Date().toISOString(),
ip: '192.168.1.100'
};
await salvarLogSeguranca(log);
return log;
},
// Rate limiting por ID
verificarRateLimit: async (idWorkflow, usuario) => {
const tentativas = await contarTentativas(idWorkflow, usuario, '1h');
const limite = 100; // 100 tentativas por hora
return {
permitido: tentativas < limite,
tentativasRestantes: limite - tentativas,
resetEm: new Date(Date.now() + 3600000) // 1 hora
};
}
};
// Exemplo de uso
const permissoes = await segurancaIds.verificarPermissoes('a1b2c3d4-e5f6-7890-abcd-ef1234567890', 'joao@empresa.com');
const rateLimit = await segurancaIds.verificarRateLimit('a1b2c3d4-e5f6-7890-abcd-ef1234567890', 'joao@empresa.com');
Workflows de Gerenciamento de IDs
Workflow: Backup de IDs
Workflow: Auditoria de IDs
Boas Práticas
Nomenclatura e Organização
- Use IDs consistentes em toda a organização
- Documente mapeamentos de IDs externos
- Implemente validação de IDs
- Mantenha histórico de mudanças
Segurança
- Valide permissões antes de usar IDs
- Implemente rate limiting para APIs
- Log todas as operações com IDs
- Use HTTPS para todas as operações
Performance
- Cache IDs frequentemente usados
- Use índices no banco de dados
- Implemente paginação para listas grandes
- Otimize consultas por ID
Troubleshooting
Problemas Comuns
ID não encontrado:
- Verificar se o ID está correto
- Verificar se o workflow existe
- Verificar permissões de acesso
- Verificar se o ID não foi excluído
ID inválido:
- Verificar formato do UUID
- Verificar caracteres especiais
- Verificar comprimento correto
- Verificar encoding
Problemas de performance:
- Verificar índices no banco de dados
- Verificar cache de IDs
- Verificar consultas otimizadas
- Verificar rate limiting
Recursos Adicionais
Documentação Oficial
Ferramentas Relacionadas
- n8n CLI: Gerenciamento de IDs via linha de comando
- n8n API: Operações programáticas com IDs
- UUID Generator: Geradores de UUID online
Próximo: Histórico de Workflows - Acesse e analise o histórico de execuções