// Exemplo de código para n8n ou similar
// 1. Configuração inicial
const leads = inputData.json.leads;
const apiKey = 'YOUR_CLAY_API_KEY';
const salesforceUrl = 'https://your-instance.salesforce.com';
const sfToken = 'YOUR_SALESFORCE_TOKEN';
// 2. Função de enrichment
async function enrichLeads(leads) {
const enrichedLeads = [];
for (const lead of leads) {
// Tenta primeira fonte (Clay)
let enriched = await clayEnrich(lead.email, apiKey);
// Fallback para segunda fonte se necessário
if (!enriched.company || !enriched.title) {
const secondaryData = await zoomInfoEnrich(lead.email);
enriched = { ...enriched, ...secondaryData };
}
// Normalização de dados
enriched.company = normalizeCompany(enriched.company);
enriched.title = normalizeTitle(enriched.title);
// Adiciona dados enriquecidos
enrichedLeads.push({
original: lead,
enriched: enriched,
score: calculateScore(enriched)
});
}
return enrichedLeads;
}
// 3. Atualização no CRM
async function updateCRM(enrichedLeads) {
const results = [];
for (const item of enrichedLeads) {
// Verifica duplicatas
const existing = await checkExistingInSF(
item.enriched.email,
salesforceUrl,
sfToken
);
if (existing) {
// Atualiza registro existente
results.push(await updateLeadInSF(
existing.id,
item.enriched,
salesforceUrl,
sfToken
));
} else {
// Cria novo registro
results.push(await createLeadInSF(
item.enriched,
salesforceUrl,
sfToken
));
}
}
return results;
}
// 4. Pipeline principal
(async () => {
try {
const enriched = await enrichLeads(leads);
const crmResults = await updateCRM(enriched);
// Logging e telemetria
logResults(enriched, crmResults);
return {
processed: enriched.length,
successful: crmResults.filter(r => r.success).length,
failed: crmResults.filter(r => !r.success).length
};
} catch (error) {
console.error('Pipeline failed:', error);
throw error;
}
})();