Tajo-Brevo इंटीग्रेशन गाइड
यह विस्तृत गाइड आपको अपने Tajo लॉयल्टी प्लेटफ़ॉर्म को Brevo के साथ जोड़ने की पूरी प्रक्रिया बताती है, ताकि आप दमदार, ऑटोमेटेड ग्राहक एंगेजमेंट कैम्पेन बना सकें.
अवलोकन
Tajo-Brevo इंटीग्रेशन आपको यह करने देता है:
- दोनों प्लेटफ़ॉर्म के बीच रियल-टाइम में ग्राहक डेटा सिंक करना
- ग्राहकों के व्यवहार के आधार पर लॉयल्टी कैम्पेन ऑटोमेट करना
- ईमेल, SMS और WhatsApp पर एंगेजमेंट ट्रैक करना
- लॉयल्टी टियर और खरीदारी के व्यवहार के आधार पर ग्राहकों को सेगमेंट करना
- मुख्य लॉयल्टी इवेंट पर व्यक्तिगत मैसेज ट्रिगर करना
पूर्वापेक्षाएं
इंटीग्रेशन शुरू करने से पहले, पक्का करें कि आपके पास ये हैं:
- लॉयल्टी प्रोग्राम कॉन्फ़िगर किया हुआ Tajo अकाउंट
- API एक्सेस वाला Brevo अकाउंट
- दोनों प्लेटफ़ॉर्म के लिए वैध API की
- रियल-टाइम सिंक के लिए सेट किए गए वेबहुक एंडपॉइंट
- सुरक्षित डेटा ट्रांसमिशन के लिए SSL सर्टिफ़िकेट
चरण 1: ऑथेंटिकेशन सेटअप
Brevo API की जनरेट करें
- अपने Brevo अकाउंट में लॉग इन करें
- Account & Plan > API Keys पर जाएं
- Generate a new API key पर क्लिक करें
- इसे “Tajo Integration” नाम दें
- की को कॉपी करके सुरक्षित जगह पर रखें
# Store in environment variablesexport BREVO_API_KEY="xkeysib-your-api-key-here"export TAJO_WEBHOOK_SECRET="your-webhook-secret"Tajo इंटीग्रेशन कॉन्फ़िगर करें
अपने Tajo डैशबोर्ड में:
- Settings > Integrations पर जाएं
- सूची में से Brevo चुनें
- अपनी Brevo API की डालें
- सिंक सेटिंग्स कॉन्फ़िगर करें
{ "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" ]}चरण 2: ग्राहक डेटा सिंक्रोनाइज़ेशन
कॉन्टैक्ट सिंक कॉन्फ़िगरेशन
ग्राहक डेटा को अप-टू-डेट रखने के लिए अपने आप होने वाला कॉन्टैक्ट सिंक सेट अप करें:
// 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();}खरीदारी इवेंट सिंक
लॉयल्टी कैम्पेन ट्रिगर करने के लिए खरीदारी को अपने आप सिंक करें:
// 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) });}चरण 3: ऑटोमेटेड कैम्पेन सेटअप
नए ग्राहकों के लिए वेलकम कैम्पेन
नए लॉयल्टी सदस्यों के लिए अपने आप चलने वाली वेलकम सीरीज़ बनाएं:
{ "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" } ]}टियर अपग्रेड कैम्पेन
टियर अपग्रेड होने पर अपने आप जश्न मनाएं:
// 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 });});चरण 4: लॉयल्टी इवेंट ट्रैकिंग
ट्रैक करने लायक मुख्य इवेंट
इन ज़रूरी लॉयल्टी इवेंट के लिए ट्रैकिंग सेट अप करें:
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'] }};इवेंट ट्रैकिंग लागू करना
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() }); }}चरण 5: सेगमेंटेशन रणनीति
ग्राहक सेगमेंट
व्यक्तिगत कैम्पेन के लिए Brevo में लक्षित सेगमेंट बनाएं:
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"] }];चरण 6: टेस्टिंग और मॉनिटरिंग
इंटीग्रेशन टेस्टिंग चेकलिस्ट
- कॉन्टैक्ट सिंक: नए ग्राहक Brevo में दिखते हैं
- ऑर्डर सिंक: खरीदारी से इवेंट सही तरीके से ट्रिगर होते हैं
- इवेंट ट्रैकिंग: सभी लॉयल्टी इवेंट रिकॉर्ड होते हैं
- कैम्पेन ट्रिगर: ऑटोमेटेड ईमेल ठीक से भेजे जाते हैं
- सेगमेंटेशन: ग्राहक सूचियों के बीच सही तरीके से आते-जाते हैं
- वेबहुक डिलीवरी: रियल-टाइम सिंक भरोसे के साथ काम करता है
मॉनिटरिंग सेटअप
// 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() });});आम समस्याओं का समाधान
API रेट लिमिट
Brevo पर रेट लिमिट लागू होती हैं, इसलिए रिट्राई लॉजिक लागू करें:
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; }}डेटा सिंक की समस्याएं
सिंक के टकराव पर नज़र रखें और उन्हें सुलझाएं:
// 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); }}अगले कदम
- रियल-टाइम सिंक के लिए वेबहुक सेट अप करें
- लॉयल्टी कैम्पेन के लिए ईमेल टेम्पलेट बनाएं
- ज़रूरी सूचनाओं के लिए SMS ऑटोमेशन कॉन्फ़िगर करें
- प्रदर्शन ट्रैक करने के लिए एनालिटिक्स सेट अप करें
सहायता और संसाधन
- इंटीग्रेशन सपोर्ट: [email protected]
- Brevo API डॉक्यूमेंटेशन: api.brevo.com
- सैंपल कोड रिपॉज़िटरी: github.com/tajo/brevo-integration
- सहायता से संपर्क करें: /hi/contact