Pular para o conteúdo principal

Compartilhamento de Workflows

O compartilhamento de workflows permite colaborar com sua equipe, distribuir automações e reutilizar soluções. Esta seção aborda todas as formas de compartilhar workflows no n8n de forma segura e eficiente.

Visão Geral

O compartilhamento de workflows oferece múltiplas opções para colaboração:

  • Compartilhamento interno com membros da equipe
  • Compartilhamento público via templates
  • Exportação/importação de workflows
  • Versionamento e controle de mudanças
  • Compartilhamento seguro com controle de acesso

Tipos de Compartilhamento

Compartilhamento Interno

Compartilhe workflows com membros da sua organização:

// Compartilhar workflow com usuários específicos
const compartilharWorkflow = async (workflowId, usuarios, permissoes) => {
  const response = await fetch(`/api/v1/workflows/${workflowId}/share`, {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'Authorization': 'Bearer YOUR_API_KEY'
    },
    body: JSON.stringify({
      users: usuarios,
      permissions: permissoes,
      message: 'Workflow compartilhado para colaboração'
    })
  });
  
  return response.json();
};

// Exemplo de uso
const usuarios = ['joao@empresa.com', 'maria@empresa.com'];
const permissoes = ['read', 'execute'];

await compartilharWorkflow('workflow-123', usuarios, permissoes);

Compartilhamento por Role

Compartilhe baseado em funções organizacionais:

// Compartilhar com roles específicas
const compartilharPorRole = async (workflowId, roles, permissoes) => {
  const response = await fetch(`/api/v1/workflows/${workflowId}/share/roles`, {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'Authorization': 'Bearer YOUR_API_KEY'
    },
    body: JSON.stringify({
      roles: roles,
      permissions: permissoes,
      inheritPermissions: true // Herdar permissões da role
    })
  });
  
  return response.json();
};

// Exemplo: Compartilhar com equipe de desenvolvimento
await compartilharPorRole('workflow-123', ['developer', 'admin'], ['read', 'write', 'execute']);

Compartilhamento Público

Crie templates públicos para a comunidade:

// Publicar workflow como template
const publicarTemplate = async (workflowId, metadata) => {
  const response = await fetch(`/api/v1/workflows/${workflowId}/publish`, {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'Authorization': 'Bearer YOUR_API_KEY'
    },
    body: JSON.stringify({
      public: true,
      template: true,
      metadata: {
        name: metadata.nome,
        description: metadata.descricao,
        category: metadata.categoria,
        tags: metadata.tags,
        version: metadata.versao,
        author: metadata.autor,
        license: metadata.licenca
      }
    })
  });
  
  return response.json();
};

// Exemplo: Publicar template de automação de vendas
const metadata = {
  nome: 'Automação de Vendas - CRM',
  descricao: 'Workflow para automatizar processo de vendas com integração CRM',
  categoria: 'Vendas',
  tags: ['crm', 'vendas', 'automação', 'brasil'],
  versao: '1.0.0',
  autor: 'Equipe n8n Brasil',
  licenca: 'MIT'
};

await publicarTemplate('workflow-123', metadata);

Permissões de Compartilhamento

Níveis de Permissão

Defina diferentes níveis de acesso:

// Configurar permissões granulares
const configurarPermissoes = {
  // Permissões básicas
  read: {
    description: 'Visualizar workflow',
    actions: ['view', 'export']
  },
  
  // Permissões de execução
  execute: {
    description: 'Executar workflow',
    actions: ['run', 'test', 'debug']
  },
  
  // Permissões de edição
  write: {
    description: 'Editar workflow',
    actions: ['edit', 'save', 'duplicate']
  },
  
  // Permissões administrativas
  admin: {
    description: 'Administrar workflow',
    actions: ['share', 'delete', 'configure', 'permissions']
  }
};

// Aplicar permissões
const aplicarPermissoes = async (workflowId, usuario, permissoes) => {
  const response = await fetch(`/api/v1/workflows/${workflowId}/permissions`, {
    method: 'PUT',
    headers: {
      'Content-Type': 'application/json',
      'Authorization': 'Bearer YOUR_API_KEY'
    },
    body: JSON.stringify({
      user: usuario,
      permissions: permissoes,
      expiresAt: new Date(Date.now() + 30 * 24 * 60 * 60 * 1000) // 30 dias
    })
  });
  
  return response.json();
};

Controle de Acesso Temporal

Configure permissões com prazo de validade:

// Compartilhamento temporário
const compartilhamentoTemporal = async (workflowId, usuarios, duracao) => {
  const expiracao = new Date(Date.now() + duracao * 60 * 60 * 1000); // duracao em horas
  
  const response = await fetch(`/api/v1/workflows/${workflowId}/share/temporary`, {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'Authorization': 'Bearer YOUR_API_KEY'
    },
    body: JSON.stringify({
      users: usuarios,
      permissions: ['read', 'execute'],
      expiresAt: expiracao,
      notifyExpiration: true
    })
  });
  
  return response.json();
};

// Exemplo: Compartilhar por 24 horas
await compartilhamentoTemporal('workflow-123', ['consultor@empresa.com'], 24);

Compartilhamento Seguro

Criptografia de Dados Sensíveis

Proteja informações confidenciais:

// Configurar criptografia para compartilhamento
const configurarCriptografia = {
  enabled: true,
  algorithm: 'AES-256-GCM',
  keyRotation: {
    enabled: true,
    interval: 30, // dias
    autoRotate: true
  },
  sensitiveFields: [
    'api_key',
    'password',
    'token',
    'secret',
    'cpf',
    'cnpj'
  ]
};

// Criptografar workflow antes do compartilhamento
const criptografarWorkflow = async (workflowId, chavePublica) => {
  const workflow = await buscarWorkflow(workflowId);
  
  // Criptografar credenciais sensíveis
  const workflowCriptografado = {
    ...workflow,
    nodes: workflow.nodes.map(node => {
      if (node.credentials) {
        return {
          ...node,
          credentials: criptografarCredenciais(node.credentials, chavePublica)
        };
      }
      return node;
    })
  };
  
  return workflowCriptografado;
};

Assinatura Digital

Verifique a autenticidade dos workflows:

// Assinar workflow digitalmente
const assinarWorkflow = async (workflowId, chavePrivada) => {
  const workflow = await buscarWorkflow(workflowId);
  const hash = await gerarHash(JSON.stringify(workflow));
  const assinatura = await assinarHash(hash, chavePrivada);
  
  return {
    workflow: workflow,
    signature: assinatura,
    timestamp: new Date().toISOString(),
    author: 'autor@empresa.com'
  };
};

// Verificar assinatura
const verificarAssinatura = async (workflowAssinado, chavePublica) => {
  const hash = await gerarHash(JSON.stringify(workflowAssinado.workflow));
  const valido = await verificarHash(hash, workflowAssinado.signature, chavePublica);
  
  return {
    valid: valido,
    timestamp: workflowAssinado.timestamp,
    author: workflowAssinado.author
  };
};

Templates e Bibliotecas

Biblioteca de Templates

Organize templates por categoria:

// Criar biblioteca de templates
const bibliotecaTemplates = {
  vendas: {
    nome: 'Automações de Vendas',
    descricao: 'Templates para automação de processos de vendas',
    templates: [
      {
        id: 'vendas-lead-scoring',
        nome: 'Lead Scoring Automático',
        descricao: 'Classifica leads automaticamente baseado em comportamento',
        tags: ['vendas', 'lead', 'scoring', 'crm'],
        versao: '1.2.0',
        downloads: 1250
      },
      {
        id: 'vendas-follow-up',
        nome: 'Follow-up Automático',
        descricao: 'Automatiza follow-up com prospects',
        tags: ['vendas', 'follow-up', 'email', 'automação'],
        versao: '1.1.0',
        downloads: 890
      }
    ]
  },
  
  financeiro: {
    nome: 'Automações Financeiras',
    descricao: 'Templates para processos financeiros',
    templates: [
      {
        id: 'financeiro-conciliacao',
        nome: 'Conciliação Bancária',
        descricao: 'Automatiza conciliação bancária',
        tags: ['financeiro', 'banco', 'conciliação', 'contabilidade'],
        versao: '1.0.0',
        downloads: 567
      }
    ]
  }
};

Marketplace de Templates

Crie um marketplace para a comunidade:

// Configurar marketplace
const marketplaceConfig = {
  name: 'n8n Brasil Marketplace',
  description: 'Marketplace de templates para automação',
  categories: [
    'Vendas',
    'Marketing',
    'Financeiro',
    'RH',
    'Suporte',
    'E-commerce',
    'Integrações BR'
  ],
  
  // Sistema de avaliação
  rating: {
    enabled: true,
    minRating: 1,
    maxRating: 5,
    requireReview: true
  },
  
  // Sistema de downloads
  downloads: {
    trackDownloads: true,
    requireAuth: false,
    limitPerUser: 100
  },
  
  // Sistema de monetização
  monetization: {
    enabled: false,
    currency: 'BRL',
    paymentMethods: ['pix', 'cartao', 'boleto']
  }
};

Colaboração em Tempo Real

Edição Colaborativa

Trabalhe em equipe no mesmo workflow:

// Configurar edição colaborativa
const configuracaoColaborativa = {
  enabled: true,
  maxCollaborators: 10,
  conflictResolution: 'manual', // manual, auto, prompt
  
  // Controle de versões
  versioning: {
    enabled: true,
    autoSave: true,
    saveInterval: 30000, // 30 segundos
    maxVersions: 50
  },
  
  // Comentários e feedback
  comments: {
    enabled: true,
    allowAttachments: true,
    notifyMentions: true
  },
  
  // Histórico de mudanças
  changeTracking: {
    enabled: true,
    trackUser: true,
    trackTimestamp: true,
    trackChanges: true
  }
};

// Adicionar comentário ao workflow
const adicionarComentario = async (workflowId, comentario) => {
  const response = await fetch(`/api/v1/workflows/${workflowId}/comments`, {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'Authorization': 'Bearer YOUR_API_KEY'
    },
    body: JSON.stringify({
      text: comentario.texto,
      nodeId: comentario.nodeId,
      position: comentario.posicao,
      mentions: comentario.mentions
    })
  });
  
  return response.json();
};

Notificações de Colaboração

Mantenha a equipe informada:

// Configurar notificações de colaboração
const notificacoesColaboracao = {
  onShare: {
    enabled: true,
    channels: ['email', 'slack'],
    template: 'Workflow compartilhado com você por {{author}}'
  },
  
  onComment: {
    enabled: true,
    channels: ['email', 'slack'],
    template: 'Novo comentário no workflow {{workflowName}}'
  },
  
  onEdit: {
    enabled: true,
    channels: ['slack'],
    template: 'Workflow {{workflowName}} foi editado por {{user}}'
  },
  
  onPublish: {
    enabled: true,
    channels: ['email', 'slack', 'teams'],
    template: 'Novo template publicado: {{templateName}}'
  }
};

Compartilhamento Específico para Brasil

Templates Brasileiros

Crie templates específicos para o mercado brasileiro:

// Templates específicos do Brasil
const templatesBrasil = {
  nfe: {
    nome: 'Automação NFe',
    descricao: 'Automatiza emissão e envio de NFes',
    integracoes: ['sefaz', 'email', 'whatsapp'],
    campos: ['cnpj', 'inscricao_estadual', 'cfop', 'icms']
  },
  
  pix: {
    nome: 'Automação PIX',
    descricao: 'Processa pagamentos PIX automaticamente',
    integracoes: ['banco_central', 'webhook', 'email'],
    campos: ['chave_pix', 'valor', 'descricao', 'beneficiario']
  },
  
  lgpd: {
    nome: 'Compliance LGPD',
    descricao: 'Automatiza processos de conformidade LGPD',
    integracoes: ['database', 'email', 'api'],
    campos: ['consentimento', 'finalidade', 'retencao', 'exclusao']
  },
  
  serasa: {
    nome: 'Consulta Serasa',
    descricao: 'Consulta dados de crédito no Serasa',
    integracoes: ['serasa_api', 'crm', 'email'],
    campos: ['cpf', 'cnpj', 'score', 'restricoes']
  }
};

Integrações Brasileiras

Compartilhe workflows com integrações locais:

// Workflows com integrações brasileiras
const integracoesBrasil = {
  receita: {
    nome: 'Consulta Receita Federal',
    descricao: 'Consulta dados de empresas na Receita',
    api: 'https://receitaws.com.br/v1/cnpj/',
    campos: ['cnpj', 'razao_social', 'situacao', 'endereco']
  },
  
  viacep: {
    nome: 'Consulta ViaCEP',
    descricao: 'Consulta endereços pelo CEP',
    api: 'https://viacep.com.br/ws/',
    campos: ['cep', 'logradouro', 'bairro', 'cidade', 'estado']
  },
  
  correios: {
    nome: 'Rastreamento Correios',
    descricao: 'Rastreia encomendas dos Correios',
    api: 'https://rastreamento.correios.com.br/app/index.php',
    campos: ['codigo_rastreio', 'status', 'historico', 'prazo']
  }
};

Workflows de Compartilhamento

Workflow: Aprovação de Compartilhamento

Workflow: Distribuição de Templates

Boas Práticas

Segurança

  • Sempre valide permissões antes de compartilhar
  • Use criptografia para dados sensíveis
  • Implemente auditoria de compartilhamentos
  • Configure expiração para acessos temporários

Colaboração

  • Documente workflows antes de compartilhar
  • Use comentários para explicar lógica complexa
  • Mantenha versionamento de mudanças
  • Notifique mudanças importantes

Organização

  • Categorize templates adequadamente
  • Use tags descritivas para facilitar busca
  • Mantenha biblioteca atualizada regularmente
  • Solicite feedback dos usuários

Troubleshooting

Problemas Comuns

Workflow não compartilhado:

  • Verificar permissões do usuário
  • Verificar configurações de rede
  • Verificar tamanho do workflow

Permissões não aplicadas:

  • Verificar configurações de role
  • Verificar herança de permissões
  • Verificar expiração de acesso

Template não publicado:

  • Verificar metadados obrigatórios
  • Verificar validação de qualidade
  • Verificar configurações de marketplace

Recursos Adicionais

Documentação Oficial

Ferramentas Relacionadas

  • n8n Templates: Biblioteca oficial de templates
  • GitHub: Versionamento de workflows
  • Slack: Notificações de colaboração

Próximo: Exportação e Importação - Mova workflows entre ambientes