Unternehmensverwaltung
Mit der Brevo CRM Companies API verwaltest du B2B-Beziehungen und Firmenkonten für Enterprise-Loyalty-Programme innerhalb der Tajo-Plattform.
Überblick
Die Unternehmensverwaltung ist essenziell für:
- Corporate-Loyalty-Programme mit Sammelprämien und Tier-Management
- B2B-Kundenbeziehungen mit eigenen Account Managern
- Enterprise-Sales-Tracking mit Auswertungen auf Unternehmensebene
- Multi-Standort-Unternehmen mit zentralem Loyalty-Management
- Partner- und Reseller-Programme mit Sonderkonditionen und Prämien
Schnellstart
Unternehmen anlegen
POST https://api.brevo.com/v3/companiesContent-Type: application/jsonapi-key: YOUR_API_KEY
{ "name": "Acme Corporation", "attributes": { "industry": "Technology", "company_size": "500-1000", "website": "https://acmecorp.com", "phone": "+1-555-0123", "address": "123 Business Ave, Tech City, CA 90210", "loyalty_program": "Enterprise Plus", "loyalty_tier": "Corporate Gold", "annual_spend": 250000, "contract_value": 500000, "renewal_date": "2024-12-31", "account_manager": "Sarah Johnson", "industry_vertical": "Software Services" }}Antwort
{ "id": "comp_123456789", "name": "Acme Corporation", "created_at": "2024-01-25T14:30:00Z", "updated_at": "2024-01-25T14:30:00Z"}Enterprise-Loyalty-Integration
Einrichtung von Firmenkonten
Lege umfassende Firmenkonten mit Loyalty-Programm-Integration an:
class TajoEnterpriseService { constructor() { this.companiesApi = new CompaniesApi(); this.contactsApi = new ContactsApi(); }
async createCorporateAccount(companyData) { // Unternehmen mit Loyalty-Attributen anlegen const company = { name: companyData.name, attributes: { // Unternehmensdaten industry: companyData.industry, company_size: companyData.employeeCount, website: companyData.website, phone: companyData.phone, address: companyData.address, tax_id: companyData.taxId,
// Loyalty-Programm-Daten loyalty_program: 'Enterprise Plus', loyalty_tier: this.determineEnterpriseTier(companyData.annualSpend), loyalty_points: 0, annual_spend: companyData.annualSpend || 0, lifetime_value: companyData.lifetimeValue || 0,
// Vertragsdaten contract_value: companyData.contractValue, contract_start: companyData.contractStart, renewal_date: companyData.renewalDate, payment_terms: companyData.paymentTerms,
// Account-Management account_manager: companyData.accountManager, success_manager: companyData.successManager, billing_contact: companyData.billingContact,
// Einstellungen bulk_discount_eligible: true, volume_rewards_enabled: true, consolidated_billing: companyData.consolidatedBilling, multi_location: companyData.hasMultipleLocations } };
try { const response = await this.companiesApi.createCompany(company);
// Corporate-Loyalty-Tracking einrichten await this.initializeCorporateLoyalty(response.id, companyData);
return response; } catch (error) { console.error('Error creating corporate account:', error); throw error; } }
determineEnterpriseTier(annualSpend) { if (annualSpend >= 1000000) return 'Enterprise Diamond'; if (annualSpend >= 500000) return 'Enterprise Platinum'; if (annualSpend >= 250000) return 'Enterprise Gold'; if (annualSpend >= 100000) return 'Enterprise Silver'; return 'Enterprise Bronze'; }
async initializeCorporateLoyalty(companyId, companyData) { // Eintrag im Corporate-Loyalty-Programm erstellen await loyaltyService.createCorporateProgram({ companyId: companyId, programType: 'enterprise', tier: this.determineEnterpriseTier(companyData.annualSpend), volumeDiscounts: this.calculateVolumeDiscounts(companyData.annualSpend), bulkRewards: true, dedicatedSupport: true });
// Automatisches Tracking einrichten await loyaltyService.setupCorporateTracking(companyId, { trackVolumeDiscounts: true, trackBulkOrders: true, trackMultiLocation: companyData.hasMultipleLocations, consolidateReporting: true }); }}Corporate-Tier-Management
Setze ausgefeiltes Tier-Management für B2B-Konten um:
class CorporateTierManager { constructor() { this.tierThresholds = { 'Enterprise Bronze': { minSpend: 0, benefits: ['basic_support', 'standard_shipping'] }, 'Enterprise Silver': { minSpend: 100000, benefits: ['priority_support', 'free_shipping', '5%_discount'] }, 'Enterprise Gold': { minSpend: 250000, benefits: ['dedicated_manager', 'expedited_shipping', '10%_discount'] }, 'Enterprise Platinum': { minSpend: 500000, benefits: ['premium_support', 'custom_integration', '15%_discount'] }, 'Enterprise Diamond': { minSpend: 1000000, benefits: ['white_glove_service', 'unlimited_integration', '20%_discount'] } }; }
async evaluateTierUpgrade(companyId, currentSpend) { const company = await this.companiesApi.getCompany(companyId); const currentTier = company.attributes.loyalty_tier; const newTier = this.calculateTier(currentSpend);
if (newTier !== currentTier && this.isUpgrade(currentTier, newTier)) { await this.processTierUpgrade(companyId, currentTier, newTier, currentSpend); }
return newTier; }
async processTierUpgrade(companyId, oldTier, newTier, currentSpend) { // Tier des Unternehmens aktualisieren await this.companiesApi.updateCompany(companyId, { attributes: { loyalty_tier: newTier, tier_upgrade_date: new Date().toISOString(), previous_tier: oldTier, annual_spend: currentSpend } });
// Account-Team benachrichtigen const company = await this.companiesApi.getCompany(companyId); await this.notifyAccountTeam(company, { upgradeType: 'tier_upgrade', oldTier: oldTier, newTier: newTier, newBenefits: this.tierThresholds[newTier].benefits });
// Glückwünsche an die Kontakte des Unternehmens senden await this.sendTierUpgradeNotifications(companyId, { companyName: company.name, newTier: newTier, benefits: this.tierThresholds[newTier].benefits });
// Neue Tier-Vorteile anwenden await this.applyTierBenefits(companyId, newTier); }
calculateTier(annualSpend) { const tiers = Object.entries(this.tierThresholds) .sort(([,a], [,b]) => b.minSpend - a.minSpend);
for (const [tier, threshold] of tiers) { if (annualSpend >= threshold.minSpend) { return tier; } } return 'Enterprise Bronze'; }}Multi-Standort-Verwaltung
Standorthierarchie
Bilde komplexe Multi-Standort-Strukturen ab:
class MultiLocationManager { async createLocationHierarchy(parentCompanyId, locations) { const locationCompanies = [];
for (const location of locations) { const locationCompany = { name: `${location.companyName} - ${location.locationName}`, attributes: { parent_company_id: parentCompanyId, location_type: location.type, // 'headquarters', 'branch', 'franchise' location_name: location.locationName, address: location.address, phone: location.phone, manager: location.manager, employee_count: location.employeeCount,
// Vererbung des Loyalty-Programms loyalty_program: 'Enterprise Plus', inherit_parent_tier: true, location_budget: location.budget, location_spending_limit: location.spendingLimit,
// Performance-Tracking location_performance_target: location.target, location_rewards_pool: location.rewardsPool } };
const createdLocation = await this.companiesApi.createCompany(locationCompany); locationCompanies.push(createdLocation);
// Mitarbeitende dem Standort zuordnen await this.linkEmployeesToLocation(createdLocation.id, location.employees); }
// Konsolidiertes Reporting einrichten await this.setupConsolidatedReporting(parentCompanyId, locationCompanies);
return locationCompanies; }
async linkEmployeesToLocation(locationCompanyId, employees) { for (const employee of employees) { await this.contactsApi.updateContact(employee.email, { attributes: { company_id: locationCompanyId, employee_level: employee.level, department: employee.department, location_rewards_eligible: true } }); } }
async consolidateLocationSpending(parentCompanyId) { const locations = await this.getCompanyLocations(parentCompanyId); let totalSpending = 0; let totalRewards = 0;
for (const location of locations) { const locationSpend = location.attributes.annual_spend || 0; const locationRewards = location.attributes.loyalty_points || 0;
totalSpending += locationSpend; totalRewards += locationRewards; }
// Summen am Mutterunternehmen aktualisieren await this.companiesApi.updateCompany(parentCompanyId, { attributes: { consolidated_annual_spend: totalSpending, consolidated_loyalty_points: totalRewards, last_consolidation_date: new Date().toISOString() } });
// Tier-Upgrade auf Basis der konsolidierten Ausgaben prüfen await this.tierManager.evaluateTierUpgrade(parentCompanyId, totalSpending);
return { totalSpending, totalRewards, locationCount: locations.length }; }}Corporate Deals und Verträge
Deal-Management
Verfolge und verwalte Corporate-Deals mit Auswirkungen auf das Loyalty-Programm:
class CorporateDealManager { async createCorporateDeal(dealData) { const deal = { name: dealData.dealName, company_id: dealData.companyId, attributes: { deal_value: dealData.value, deal_stage: dealData.stage, close_date: dealData.expectedCloseDate, probability: dealData.probability, deal_type: dealData.type, // 'new_business', 'renewal', 'upsell', 'expansion'
// Auswirkung auf das Loyalty-Programm loyalty_points_included: dealData.loyaltyPointsBonus, tier_upgrade_eligible: dealData.tierUpgradeEligible, volume_discount_rate: dealData.volumeDiscountRate,
// Vertragskonditionen contract_length: dealData.contractLength, renewal_terms: dealData.renewalTerms, early_termination_clause: dealData.earlyTermination,
// Team-Zuordnung sales_rep: dealData.salesRep, solution_engineer: dealData.solutionEngineer, success_manager: dealData.successManager } };
const createdDeal = await this.dealsApi.createDeal(deal);
// Deal-spezifisches Loyalty-Tracking einrichten if (dealData.loyaltyPointsBonus > 0) { await this.setupDealLoyaltyTracking(createdDeal.id, dealData); }
return createdDeal; }
async setupDealLoyaltyTracking(dealId, dealData) { // Loyalty-Meilenstein an den Deal-Abschluss koppeln await loyaltyService.createMilestone({ companyId: dealData.companyId, dealId: dealId, type: 'deal_closure', pointsReward: dealData.loyaltyPointsBonus, tierBonus: dealData.tierUpgradeEligible, triggerCondition: 'deal_won' });
// Volumenrabatt-Tracking einrichten if (dealData.volumeDiscountRate > 0) { await loyaltyService.setupVolumeTracking({ companyId: dealData.companyId, dealId: dealId, discountRate: dealData.volumeDiscountRate, thresholds: this.calculateVolumeThresholds(dealData.value) }); } }
async processDealClosure(dealId, status) { const deal = await this.dealsApi.getDeal(dealId);
if (status === 'won') { // Loyalty-Punkte für erfolgreichen Deal vergeben if (deal.attributes.loyalty_points_included > 0) { await loyaltyService.awardCorporatePoints( deal.company_id, deal.attributes.loyalty_points_included, { reason: 'Deal closure bonus', dealId: dealId, dealValue: deal.attributes.deal_value } ); }
// Tier-Bewertung auslösen if (deal.attributes.tier_upgrade_eligible) { const company = await this.companiesApi.getCompany(deal.company_id); const newSpendTotal = (company.attributes.annual_spend || 0) + deal.attributes.deal_value;
await this.tierManager.evaluateTierUpgrade(deal.company_id, newSpendTotal); }
// Verlängerungs-Tracking einrichten await this.setupRenewalTracking(deal); }
// Deal-Status aktualisieren await this.dealsApi.updateDeal(dealId, { attributes: { deal_stage: status, close_date: new Date().toISOString(), actual_value: deal.attributes.deal_value } }); }}Corporate-Analytics und Reporting
Enterprise-Dashboard
Erstelle umfassende Auswertungen für Firmenkonten:
class CorporateAnalytics { async generateCorporateReport(companyId, timeframe) { const company = await this.companiesApi.getCompany(companyId); const locations = await this.getCompanyLocations(companyId); const deals = await this.getCompanyDeals(companyId, timeframe); const contacts = await this.getCompanyContacts(companyId);
const report = { company: { name: company.name, tier: company.attributes.loyalty_tier, totalSpending: company.attributes.annual_spend, totalPoints: company.attributes.loyalty_points, locations: locations.length },
performance: { spendingGrowth: await this.calculateSpendingGrowth(companyId, timeframe), tierProgress: await this.calculateTierProgress(companyId), loyaltyEngagement: await this.calculateLoyaltyEngagement(companyId), volumeDiscountsSaved: await this.calculateVolumeDiscounts(companyId, timeframe) },
deals: { totalDeals: deals.length, totalValue: deals.reduce((sum, deal) => sum + (deal.attributes.deal_value || 0), 0), averageDealSize: deals.length > 0 ? deals.reduce((sum, deal) => sum + (deal.attributes.deal_value || 0), 0) / deals.length : 0, winRate: deals.filter(d => d.attributes.deal_stage === 'won').length / deals.length * 100 },
engagement: { activeContacts: contacts.filter(c => c.attributes.last_activity > this.getDateDaysAgo(30)).length, totalContacts: contacts.length, emailEngagement: await this.calculateEmailEngagement(contacts), rewardRedemptions: await this.getRewardRedemptions(companyId, timeframe) },
recommendations: await this.generateRecommendations(companyId, { spending: company.attributes.annual_spend, tier: company.attributes.loyalty_tier, engagement: await this.calculateLoyaltyEngagement(companyId) }) };
return report; }
async generateRecommendations(companyId, metrics) { const recommendations = []; const company = await this.companiesApi.getCompany(companyId);
// Tier-Upgrade-Chancen const nextTier = this.getNextTier(metrics.tier); if (nextTier) { const spendingNeeded = this.getSpendingForTier(nextTier) - metrics.spending; if (spendingNeeded > 0 && spendingNeeded < metrics.spending * 0.5) { recommendations.push({ type: 'tier_upgrade_opportunity', title: `${nextTier} tier within reach`, description: `Increase annual spending by $${spendingNeeded.toLocaleString()} to unlock ${nextTier} benefits`, priority: 'high', potentialValue: this.calculateTierUpgradeValue(nextTier) }); } }
// Volumenrabatt-Chancen if (metrics.spending > 100000 && !company.attributes.volume_discount_enrolled) { recommendations.push({ type: 'volume_discount', title: 'Volume discount eligible', description: 'Enroll in volume discount program to save up to 15% on bulk orders', priority: 'medium', potentialSavings: metrics.spending * 0.15 }); }
// Engagement steigern if (metrics.engagement < 0.5) { recommendations.push({ type: 'engagement_improvement', title: 'Boost employee engagement', description: 'Consider employee loyalty workshops or gamification features', priority: 'medium', expectedImpact: 'Increase program utilization by 30%' }); }
return recommendations; }}API-Methoden-Referenz
CRUD-Operationen für Companies
// Unternehmensdetails abrufenconst company = await companiesApi.getCompany('comp_123456789');
// Unternehmensattribute aktualisierenawait companiesApi.updateCompany('comp_123456789', { attributes: { annual_spend: 750000, loyalty_tier: 'Enterprise Platinum', last_tier_review: new Date().toISOString() }});
// Unternehmen löschen (entfernt alle zugehörigen Daten)await companiesApi.deleteCompany('comp_123456789');
// Alle Unternehmen mit Filtern abrufenconst companies = await companiesApi.getCompanies({ filters: { 'attributes.loyalty_tier': 'Enterprise Gold', 'attributes.annual_spend': '>500000' }, sort: 'attributes.annual_spend:desc', limit: 50});Erweiterte Abfragen
// Unternehmen nach Branche und Tier findenconst techGoldCompanies = await companiesApi.getCompanies({ filters: { 'attributes.industry': 'Technology', 'attributes.loyalty_tier': 'Enterprise Gold', 'attributes.contract_value': '>250000' }});
// Unternehmen mit anstehender Vertragsverlängerungconst renewalDueCompanies = await companiesApi.getCompanies({ filters: { 'attributes.renewal_date': `<${new Date(Date.now() + 90 * 24 * 60 * 60 * 1000).toISOString()}` }});
// Inaktive Unternehmen mit hohem Wert findenconst inactiveHighValueCompanies = await companiesApi.getCompanies({ filters: { 'attributes.annual_spend': '>500000', 'attributes.last_activity': `<${new Date(Date.now() - 60 * 24 * 60 * 60 * 1000).toISOString()}` }});Best Practices
- Hierarchische Struktur: Nutze Eltern-Kind-Beziehungen für Multi-Standort-Unternehmen
- Konsolidiertes Reporting: Aggregiere Ausgaben und Prämien über alle Standorte
- Tier-Management: Regelmäßige Tier-Bewertungen anhand der konsolidierten Ausgaben
- Account-Team-Integration: Halte Account Manager über Loyalty-Änderungen informiert
- Custom-Attribute: Nutze umfassende Attribute für branchenspezifische Daten
- Automatisierte Workflows: Richte Trigger für Tier-Upgrades und Vertragsverlängerungen ein
Fehlerbehandlung
try { const company = await companiesApi.createCompany(companyData); console.log('Company created:', company.id);} catch (error) { if (error.status === 409) { console.error('Company already exists with this name'); } else if (error.status === 400) { console.error('Invalid company data:', error.message); } else { console.error('Unexpected error:', error); }}Nächste Schritte
- Deal-Management – Corporate-Deals und Chancen verfolgen
- Aufgabenverwaltung – Account-Aktivitäten und Follow-ups verwalten
- Notizen und Dateien – Kundeninteraktionen dokumentieren
- CRM-Analytics – Erweitertes Reporting und Insights