Código

function preencherCampaignValues(unified_lead, campaign_values, campaign) {
 
  // Campos obrigatórios que devem estar presentes
  const camposObrigatorios = [
    'opportunity_type',
    'installments_quantity', 
    'released_value',
    'installment_value'
  ];
  
  // Verificar se todos os campos obrigatórios estão presentes
  for (const campo of camposObrigatorios) {
    if (!(campo in campaign_values)) {
      throw new Error(`Campo obrigatório '${campo}' não encontrado em campaign_values`);
      }
}
 
  // Verificar se o unified_lead é válido
  if (!unified_lead) {
    throw new Error('Unified lead inválido');
  }
  
  // Inicializar o objeto opportunities se não existir
  if (!unified_lead.opportunities) {
    unified_lead.opportunities = {};
  }
  
  // Determinar o tipo de oportunidade baseado no opportunity_type
  let tipoOportunidade = null;
  
  switch (campaign_values.opportunity_type) {
    case 'credito_novo':
      tipoOportunidade = 'credito_novo';
      break;
    case 'saque_beneficio':
      tipoOportunidade = 'saque_beneficio';
      break;
    case 'cartao_consignado':
      tipoOportunidade = 'cartao_consignado';
      break;
    case 'saque_fgts':
      tipoOportunidade = 'saque_fgts';
      break;
    case 'reducao_parcela':
      tipoOportunidade = 'reducao_parcela';
      break;
    case 'troco_maximo':
      tipoOportunidade = 'troco_maximo';
      break;
    default:
      // Se não encontrar um tipo específico, criar um novo array
      tipoOportunidade = campaign_values.opportunity_type;
      break;
  }
  
  // Inicializar o array de oportunidades se não existir
  if (!unified_lead.opportunities[tipoOportunidade]) {
    unified_lead.opportunities[tipoOportunidade] = [];
  }
  
  // Definir a campanha no objeto opportunities
  unified_lead.opportunities.campaign = campaign;
  
  // Criar nova oportunidade com os dados da campanha
  const novaOportunidade = {
    released_value: parseFloat(campaign_values.released_value),
    installment_value: parseFloat(campaign_values.installment_value),
    target_bank: campaign_values.target_bank,
    installments: parseInt(campaign_values.installments_quantity),
    commission: parseInt(campaign_values.commission),
  };
  
  // Adicionar a nova oportunidade na primeira posição do array
  unified_lead.opportunities[tipoOportunidade].unshift(novaOportunidade);
  
  // Atualizar o timestamp de modificação
  unified_lead.updated_at = new Date().toISOString();
  
  return unified_lead;
}
 
// Função principal para uso no n8n
try {
  // Extrair os dados de entrada do $json
  const unified_lead = $json.unified_lead;
  const campaign_values = $json.campaign_values;
  const campaign = $('set initial data').first().json.campaign;
 
  // Processar os dados
  const resultado = preencherCampaignValues(unified_lead, campaign_values, campaign);
 
  $json.unified_lead = resultado;
  return $json;
  
} catch (error) {
  return {
    success: false,
    error: error.message,
    data: null
  };
}

Saídas

  • unified_lead: UnifiedLead enriquecido com opportunities da campanha
    • Array opportunities[tipo] contendo a nova oportunidade
    • Campo opportunities.campaign com nome da campanha
    • updated_at atualizado

Descrição adicional

Enriquece o UnifiedLead adicionando os dados da oportunidade específica desta campanha no campo opportunities.

Funcionalidades:

  • Valida campos obrigatórios
  • Cria estrutura de opportunities se não existir
  • Adiciona oportunidade no início do array (unshift)
  • Converte valores para tipos corretos (float, int)
  • Define timestamp de atualização

Relações

← Recebe de: 21-flow-variable---set-unified-lead → Envia para: 23-execute-workflow---modelar-dados-criar-negocio

Observações

  • Usa unshift() para priorizar oportunidade mais recente
  • Validação robusta de campos obrigatórios
  • Switch case para mapear tipos de oportunidade