Integrationsguide för Tajo och Brevo
Den här utförliga guiden tar dig steg för steg genom hur du integrerar din lojalitetsplattform Tajo med Brevo och bygger kraftfulla, automatiserade kampanjer för kundengagemang.
Översikt
Med integrationen mellan Tajo och Brevo kan du:
- Synka kunddata i realtid mellan plattformarna
- Automatisera lojalitetskampanjer utifrån kundbeteende
- Följa engagemanget över e-post, SMS och WhatsApp
- Segmentera kunder efter lojalitetsnivå och köpbeteende
- Utlösa personliga meddelanden vid viktiga lojalitetshändelser
Förutsättningar
Innan du sätter igång med integrationen behöver du:
- Ett Tajo-konto med ett konfigurerat lojalitetsprogram
- Ett Brevo-konto med API-åtkomst
- Giltiga API-nycklar för båda plattformarna
- Webhook-endpoints uppsatta för synkronisering i realtid
- Ett SSL-certifikat för säker dataöverföring
Steg 1: Sätt upp autentiseringen
Skapa en API-nyckel i Brevo
- Logga in på ditt Brevo-konto
- Gå till Account & Plan > API Keys
- Klicka på Generate a new API key
- Döp den till “Tajo Integration”
- Kopiera nyckeln och förvara den säkert
# Store in environment variablesexport BREVO_API_KEY="xkeysib-your-api-key-here"export TAJO_WEBHOOK_SECRET="your-webhook-secret"Konfigurera Tajo-integrationen
I din Tajo-dashboard:
- Gå till Inställningar > Integrationer
- Välj Brevo i listan
- Ange din Brevo API-nyckel
- Ställ in synkroniseringsinställningarna
{ "brevo_api_key": "xkeysib-your-api-key-here", "sync_frequency": "real-time", "sync_contacts": true, "sync_orders": true, "sync_events": true, "loyalty_attributes": [ "LOYALTY_POINTS", "LOYALTY_TIER", "TOTAL_SPENT", "LAST_PURCHASE" ]}Steg 2: Synkronisering av kunddata
Konfigurera kontaktsynkronisering
Ställ in automatisk kontaktsynkronisering så att kunddatan alltid är aktuell:
// Sync customer on registrationasync function syncCustomerToBrevo(customer) { const brevoData = { email: customer.email, attributes: { FIRSTNAME: customer.firstName, LASTNAME: customer.lastName, PHONE: customer.phone, LOYALTY_ID: customer.loyaltyId, LOYALTY_POINTS: customer.points, LOYALTY_TIER: customer.tier, SIGNUP_DATE: customer.createdAt, TOTAL_SPENT: customer.totalSpent, PREFERRED_CATEGORIES: customer.categories, BIRTHDAY: customer.birthday }, listIds: [getListForTier(customer.tier)] };
const response = await fetch('https://api.brevo.com/v3/contacts', { method: 'POST', headers: { 'Content-Type': 'application/json', 'api-key': process.env.BREVO_API_KEY }, body: JSON.stringify(brevoData) });
return response.json();}Synkronisering av köphändelser
Synka köp automatiskt för att utlösa lojalitetskampanjer:
// Sync order completionasync function syncOrderToBrevo(order, customer) { // Create order in Brevo const orderData = { id: order.id, email: customer.email, products: order.items.map(item => ({ id: item.productId, name: item.name, quantity: item.quantity, price: item.price, category: item.category })), revenue: order.total, date: order.createdAt };
await fetch('https://api.brevo.com/v3/ecommerce/orders', { method: 'POST', headers: { 'Content-Type': 'application/json', 'api-key': process.env.BREVO_API_KEY }, body: JSON.stringify(orderData) });
// Create loyalty event const eventData = { email: customer.email, event: 'Purchase Completed', properties: { order_id: order.id, amount: order.total, points_earned: order.pointsEarned, loyalty_tier: customer.tier, tier_upgraded: order.tierUpgraded, products: order.items.map(i => i.name).join(', ') } };
await fetch('https://api.brevo.com/v3/events', { method: 'POST', headers: { 'Content-Type': 'application/json', 'api-key': process.env.BREVO_API_KEY }, body: JSON.stringify(eventData) });}Steg 3: Sätt upp automatiserade kampanjer
Välkomstkampanj för nya kunder
Skapa en automatiserad välkomstserie för nya medlemmar i lojalitetsprogrammet:
{ "campaign_name": "Tajo Loyalty Welcome Series", "trigger": { "event": "Contact Created", "conditions": { "LOYALTY_ID": "exists", "SIGNUP_DATE": "today" } }, "emails": [ { "delay": "immediate", "template_id": 101, "subject": "Welcome to Tajo Loyalty! Here's your {{params.welcome_bonus}} points bonus", "params": { "welcome_bonus": "500", "loyalty_tier": "Bronze", "next_tier_points": "1000" } }, { "delay": "3 days", "template_id": 102, "subject": "Don't forget to use your {{params.welcome_bonus}} bonus points!" }, { "delay": "1 week", "template_id": 103, "subject": "Here's how to earn points faster with Tajo" } ]}Kampanj vid uppgradering av nivå
Uppmärksamma nivåuppgraderingar automatiskt:
// Webhook handler for tier upgradesapp.post('/webhook/tier-upgrade', (req, res) => { const { customer, previousTier, newTier } = req.body;
const campaignData = { email: customer.email, template_id: getTierUpgradeTemplate(newTier), params: { customer_name: customer.firstName, new_tier: newTier, previous_tier: previousTier, new_benefits: getTierBenefits(newTier), points_balance: customer.points } };
// Send congratulations email sendBrevoEmail(campaignData);
// Add to tier-specific list addToBrevoList(customer.email, getTierListId(newTier));
res.status(200).json({ success: true });});Steg 4: Spårning av lojalitetshändelser
Viktiga händelser att följa
Sätt upp spårning av följande centrala lojalitetshändelser:
const loyaltyEvents = { // Account Events 'Account Created': { properties: ['signup_source', 'referral_code', 'welcome_bonus'] }, 'Profile Updated': { properties: ['updated_fields', 'marketing_consent'] },
// Purchase Events 'Purchase Completed': { properties: ['order_total', 'points_earned', 'loyalty_tier', 'products'] }, 'Product Returned': { properties: ['return_reason', 'points_deducted', 'refund_amount'] },
// Loyalty Events 'Points Earned': { properties: ['points_amount', 'earning_reason', 'total_balance'] }, 'Points Redeemed': { properties: ['points_used', 'reward_type', 'remaining_balance'] }, 'Tier Upgraded': { properties: ['previous_tier', 'new_tier', 'upgrade_benefits'] },
// Engagement Events 'Email Opened': { properties: ['campaign_type', 'subject_line', 'device'] }, 'Reward Browsed': { properties: ['reward_category', 'reward_name', 'points_required'] }, 'Referral Made': { properties: ['referral_method', 'referee_email', 'referral_bonus'] }};Så implementerar du händelsespårningen
class TajoBrevoEventTracker { constructor(apiKey) { this.apiKey = apiKey; this.baseUrl = 'https://api.brevo.com/v3'; }
async trackEvent(customerEmail, eventName, properties = {}) { const eventData = { email: customerEmail, event: eventName, properties: { timestamp: new Date().toISOString(), source: 'tajo_platform', ...properties } };
try { const response = await fetch(`${this.baseUrl}/events`, { method: 'POST', headers: { 'Content-Type': 'application/json', 'api-key': this.apiKey }, body: JSON.stringify(eventData) });
if (!response.ok) { throw new Error(`Event tracking failed: ${response.statusText}`); }
return await response.json(); } catch (error) { console.error('Brevo event tracking error:', error); throw error; } }
// Convenience methods for common events async trackPurchase(customer, order) { return this.trackEvent(customer.email, 'Purchase Completed', { order_id: order.id, order_total: order.total, currency: order.currency, points_earned: order.pointsEarned, loyalty_tier: customer.tier, items_count: order.items.length, first_purchase: customer.orderCount === 1 }); }
async trackTierUpgrade(customer, previousTier) { return this.trackEvent(customer.email, 'Tier Upgraded', { previous_tier: previousTier, new_tier: customer.tier, points_balance: customer.points, benefits_unlocked: getTierBenefits(customer.tier), upgrade_date: new Date().toISOString() }); }}Steg 5: Segmenteringsstrategi
Kundsegment
Skapa riktade segment i Brevo för personligt anpassade kampanjer:
const loyaltySegments = [ // Tier-based segments { name: "Bronze Members", conditions: { LOYALTY_TIER: "Bronze" }, campaigns: ["tier_upgrade_promotion", "engagement_boost"] }, { name: "Silver Members", conditions: { LOYALTY_TIER: "Silver" }, campaigns: ["premium_offers", "early_access"] }, { name: "Gold Members", conditions: { LOYALTY_TIER: "Gold" }, campaigns: ["vip_treatment", "exclusive_rewards"] }, { name: "Platinum Members", conditions: { LOYALTY_TIER: "Platinum" }, campaigns: ["luxury_experiences", "personal_offers"] },
// Behavior-based segments { name: "High Spenders", conditions: { TOTAL_SPENT: ">1000" }, campaigns: ["luxury_catalog", "big_spender_rewards"] }, { name: "Frequent Shoppers", conditions: { PURCHASE_FREQUENCY: "weekly" }, campaigns: ["convenience_offers", "bulk_discounts"] }, { name: "At-Risk Customers", conditions: { LAST_PURCHASE: ">90 days" }, campaigns: ["win_back", "special_incentives"] }, { name: "Birthday Month", conditions: { BIRTHDAY: "this_month" }, campaigns: ["birthday_specials", "bonus_points"] }];Steg 6: Testning och övervakning
Checklista för test av integrationen
- Kontaktsynkronisering: Nya kunder dyker upp i Brevo
- Ordersynkronisering: Köp utlöser händelser korrekt
- Händelsespårning: Alla lojalitetshändelser registreras
- Kampanjtriggers: Automatiska mejl skickas som de ska
- Segmentering: Kunder flyttas korrekt mellan listor
- Webhook-leverans: Synkroniseringen i realtid fungerar tillförlitligt
Sätt upp övervakning
// Health check endpointapp.get('/integration/health', async (req, res) => { const checks = { brevo_api: await checkBrevoConnection(), webhook_delivery: await checkWebhookDelivery(), event_tracking: await checkEventTracking(), campaign_triggers: await checkCampaignTriggers() };
const allHealthy = Object.values(checks).every(check => check.status === 'ok');
res.status(allHealthy ? 200 : 503).json({ status: allHealthy ? 'healthy' : 'degraded', checks, timestamp: new Date().toISOString() });});Felsökning av vanliga problem
API-hastighetsgränser
Brevo har hastighetsgränser, så bygg in logik för nya försök:
async function makeBrevoRequest(url, options, retries = 3) { try { const response = await fetch(url, options);
if (response.status === 429) { const retryAfter = response.headers.get('Retry-After') || 60; await new Promise(resolve => setTimeout(resolve, retryAfter * 1000)); return makeBrevoRequest(url, options, retries - 1); }
return response; } catch (error) { if (retries > 0) { await new Promise(resolve => setTimeout(resolve, 5000)); return makeBrevoRequest(url, options, retries - 1); } throw error; }}Problem med datasynkronisering
Bevaka och lös synkroniseringskonflikter:
// Sync conflict resolutionasync function resolveSyncConflict(tajoData, brevoData) { // Use most recent timestamp as source of truth const tajoUpdated = new Date(tajoData.updatedAt); const brevoUpdated = new Date(brevoData.modifiedAt);
if (tajoUpdated > brevoUpdated) { // Update Brevo with Tajo data await updateBrevoContact(brevoData.id, tajoData); } else { // Update Tajo with Brevo data await updateTajoCustomer(tajoData.id, brevoData); }}Nästa steg
- Sätt upp webhooks för synkronisering i realtid
- Skapa e-postmallar för lojalitetskampanjer
- Konfigurera SMS-automatisering för brådskande aviseringar
- Sätt upp analys för att följa resultaten
Support och resurser
- Support för integrationen: [email protected]
- Brevos API-dokumentation: api.brevo.com
- Kodexempel i repo: github.com/tajo/brevo-integration
- Kontakta supporten: /se/contact