Skip to main content

ai-festival-campaign-generator

Multi-agent AI marketing automation system that generates complete festival campaigns with n8n, Gemini, and automated delivery

الانتقال إلى التثبيت

معلومات المصدر

المستودع
reason-machines/marketing-skills
آخر نشاط في المصدر
١ أغسطس ٢٠٢٦ في ١٢:٢٦
لغة SKILL.md المكتشفة
الإنجليزية
النجوم
١٠
التفرعات
١

خيارات التثبيت

يُحدَّد Prompt الذي يراجع المصدر أولًا بشكل افتراضي. يمكنك التبديل إلى أمر مباشر أو تنزيل نسخة محلية.

مراجعة ملفات المصدر

اقرأ SKILL.md وأي ملفات مرافقة يعرضها SkillsMP قبل أن تقرر التثبيت.

عرض SKILL.md

SKILL.md
تعليمات المصدر · معاينة للقراءة فقط
name
ai-festival-campaign-generator
description
Multi-agent AI marketing automation system that generates complete festival campaigns with n8n, Gemini, and automated delivery
triggers
["generate a festival marketing campaign","create festival campaign with AI agents","automate festival marketing with n8n","build multi-agent campaign generator","generate festival ads and visuals","create automated marketing workflow for festivals","set up AI campaign automation system","generate complete festival marketing assets"]
# AI Festival Campaign Generator > Skill by [ara.so](https://ara.so) — Marketing Skills collection. This skill enables AI coding agents to work with the AI Festival Campaign Generator, a multi-agent marketing automation system built with n8n that generates complete festival marketing campaigns including copywriting, visual assets, quality assurance, and automated delivery via email. ## What It Does The AI Festival Campaign Generator orchestrates multiple AI agents to: - Research festival context and consumer psychology - Generate multi-channel marketing copy (social media, email, SMS, YouTube) - Create AI-powered visual assets (product images, banners, stories) - Perform campaign quality assurance - Store assets in Google Drive - Log campaigns in Google Sheets - Deliver formatted campaign kits via email ## Architecture Overview The system uses a 4-agent architecture: 1. **Festival Intelligence Agent**: Researches festival, analyzes consumer behavior, recommends offers 2. **Campaign Copywriter Agent**: Generates copy for 10+ marketing channels 3. **AI Visual Generator Agent**: Creates and uploads visual assets to Drive 4. **Campaign QA Reviewer Agent**: Reviews quality and provides deployment score ## Installation ### Prerequisites - n8n instance (self-hosted or cloud) - Google Gemini API key - Google Cloud project with Drive, Sheets, and Gmail APIs enabled - OAuth2 credentials for Google services ### Setup Steps ```bash # Clone the repository git clone https://github.com/Chaitanyaa0406/AI-Festival-Campaign-Generator.git cd AI-Festival-Campaign-Generator ``` ### n8n Workflow Import 1. Open your n8n instance 2. Navigate to Workflows > Import from File 3. Select `workflow/festival-campaign-generator.json` 4. Configure credentials for each service ### Environment Configuration Set up the following environment variables or n8n credentials: ```bash # Gemini API GEMINI_API_KEY=your_gemini_api_key # Google Drive OAuth2 GOOGLE_DRIVE_CLIENT_ID=your_client_id GOOGLE_DRIVE_CLIENT_SECRET=your_client_secret # Google Sheets OAuth2 GOOGLE_SHEETS_CLIENT_ID=your_client_id GOOGLE_SHEETS_CLIENT_SECRET=your_client_secret # Gmail OAuth2 GMAIL_CLIENT_ID=your_client_id GMAIL_CLIENT_SECRET=your_client_secret ``` ## Key Components ### 1. Festival Intelligence Agent **Purpose**: Research festival and generate strategic insights **Gemini Prompt Structure**: ```javascript // n8n Code Node - Festival Research const festivalName = $json.festival_name; const productName = $json.product_name; const brandName = $json.brand_name; const prompt = `You are a Festival Marketing Intelligence Agent. Festival: ${festivalName} Brand: ${brandName} Product: ${productName} Analyze and provide: 1. Festival significance and cultural context 2. Consumer psychology during this festival 3. Emotional triggers and pain points 4. Shopping behavior patterns 5. Recommended offer types (discount %, BOGO, bundles) 6. Trending hashtags (10-15) 7. Best posting times and channels 8. Festival-specific keywords for SEO Format as structured JSON.`; return { json: { prompt: prompt, festivalName: festivalName, productName: productName } }; ``` ### 2. Campaign Copywriter Agent **Purpose**: Generate multi-channel marketing copy **Copy Generation Pattern**: ```javascript // n8n Code Node - Campaign Copy Generation const festivalInsights = $json.festival_insights; const productName = $json.product_name; const brandName = $json.brand_name; const copyPrompt = `You are an Expert Marketing Copywriter. Using these insights: ${JSON.stringify(festivalInsights)} Generate complete campaign copy for: 1. Facebook Ad (Primary Text, Headline, Description) 2. Instagram Ad (Caption with emojis, hashtags) 3. Google Search Ad (3 Headlines, 2 Descriptions) 4. YouTube Script (30-second hook + 2-minute full script) 5. Email Sequence (Subject, Preview, Body HTML for 3 emails) 6. WhatsApp Campaign (Opening message, follow-up, closing) 7. SMS Campaign (160 characters with link) 8. Push Notification (Title + Body under 50 chars) 9. Website Hero Section (Headline, Subheadline, CTA) 10. Influencer Brief (Key points, talking points, hashtags) 11. SEO Keywords (20 long-tail keywords) 12. Content Calendar (7-day posting schedule) Return as structured JSON with each channel as a key.`; return { json: { prompt: copyPrompt, campaign_id: `CAMP_${Date.now()}` } }; ``` ### 3. AI Visual Generator Agent **Purpose**: Generate and store visual assets **Image Generation Integration**: ```javascript // n8n Code Node - Visual Asset Prompts const festivalName = $json.festival_name; const productName = $json.product_name; const brandColors = $json.brand_colors || "vibrant festive colors"; const visualPrompts = { product_visual: `Professional product photography of ${productName} with ${festivalName} themed decorations, ${brandColors}, high quality, marketing shot, clean background`, instagram_story: `Vertical 9:16 Instagram story design for ${festivalName}, featuring ${productName}, bold text overlay with festival offer, ${brandColors}, modern design, attention-grabbing`, ad_banner: `Horizontal advertisement banner 1200x628px for ${festivalName} sale, featuring ${productName}, professional design, ${brandColors}, clear CTA, festival elements` }; return { json: { visuals: visualPrompts, campaign_id: $json.campaign_id } }; ``` **Google Drive Upload Pattern**: ```javascript // n8n Google Drive Node Configuration // After receiving generated images from Gemini/DALL-E // Configure in n8n UI: // - Action: Upload // - Folder: Use expression {{$json.campaign_folder_id}} // - File Name: {{$json.image_type}}_{{$json.campaign_id}}.png // - Binary Data: true // - Binary Property: data // Post-upload processing const driveFiles = $json.files.map(file => ({ name: file.name, url: file.webViewLink, id: file.id })); return { json: { campaign_id: $json.campaign_id, drive_files: driveFiles } }; ``` ### 4. Campaign QA Reviewer Agent **Purpose**: Quality assurance and scoring **QA Evaluation Pattern**: ```javascript // n8n Code Node - QA Review const campaignCopy = $json.campaign_copy; const visualAssets = $json.visual_assets; const festivalInsights = $json.festival_insights; const qaPrompt = `You are a Campaign Quality Assurance Expert. Review this campaign: Copy: ${JSON.stringify(campaignCopy)} Visuals: ${visualAssets.length} assets created Festival Context: ${JSON.stringify(festivalInsights)} Evaluate and score (0-100) on: 1. Festival Relevance (0-20 points) 2. Emotional Impact (0-20 points) 3. CTA Strength (0-15 points) 4. Offer Attractiveness (0-15 points) 5. Copy Quality (0-15 points) 6. Visual-Copy Alignment (0-15 points) Provide: - Total Score (0-100) - Deployment Recommendation (YES/NO/REVISE) - Strengths (3 bullet points) - Improvements (3 bullet points) - Priority Fixes (if score < 80) Return as JSON.`; return { json: { prompt: qaPrompt, campaign_id: $json.campaign_id } }; ``` ### 5. Campaign Logging (Google Sheets) **Sheets Integration Pattern**: ```javascript // n8n Google Sheets Node - Append Row // Configure in n8n UI: // - Operation: Append // - Sheet: Campaign Log // - Columns: Map the following fields const logEntry = { campaign_id: $json.campaign_id, timestamp: new Date().toISOString(), festival_name: $json.festival_name, product_name: $json.product_name, brand_name: $json.brand_name, qa_score: $json.qa_score, deployment_status: $json.deployment_recommendation, drive_folder: $json.drive_folder_url, email_sent: 'YES', channels_covered: 'FB,IG,GG,YT,Email,WA,SMS', created_by: $json.user_email }; return { json: logEntry }; ``` ### 6. Email Delivery **HTML Email Template Pattern**: ```javascript // n8n Code Node - Generate HTML Email const campaignData = $json; const htmlEmail = ` <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <style> body { font-family: Arial, sans-serif; line-height: 1.6; color: #333; } .header { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; padding: 30px; text-align: center; } .content { padding: 30px; max-width: 800px; margin: 0 auto; } .section { margin: 30px 0; padding: 20px; background: #f9f9f9; border-radius: 8px; } .score { font-size: 48px; font-weight: bold; color: #667eea; text-align: center; } .channel { background: white; padding: 15px; margin: 10px 0; border-left: 4px solid #667eea; } .cta-button { background: #667eea; color: white; padding: 15px 30px; text-decoration: none; border-radius: 5px; display: inline-block; } </style> </head> <body> <div class="header"> <h1>🎉 ${campaignData.festival_name} Campaign Ready!</h1> <p>Campaign ID: ${campaignData.campaign_id}</p> </div> <div class="content"> <div class="section"> <h2>📊 Campaign Quality Score</h2> <div class="score">${campaignData.qa_score}/100</div> <p><strong>Status:</strong> ${campaignData.deployment_recommendation}</p> </div> <div class="section"> <h2>✍️ Generated Copy</h2> <div class="channel"> <h3>📘 Facebook Ad</h3> <p><strong>Headline:</strong> ${campaignData.copy.facebook.headline}</p> <p>${campaignData.copy.facebook.primary_text}</p> </div> <div class="channel"> <h3>📸 Instagram Ad</h3> <p>${campaignData.copy.instagram.caption}</p> <p><small>${campaignData.copy.instagram.hashtags}</small></p> </div> <div class="channel"> <h3>📧 Email Subject Lines</h3> <ul> ${campaignData.copy.email_sequence.map(e => `<li>${e.subject}</li>`).join('')} </ul> </div> </div> <div class="section"> <h2>🎨 Visual Assets</h2> <p>All assets uploaded to Google Drive:</p> <a href="${campaignData.drive_folder_url}" class="cta-button"> View Campaign Assets → </a> </div> <div class="section"> <h2>💡 Strategic Insights</h2> <p><strong>Best Posting Times:</strong> ${campaignData.insights.best_times}</p> <p><strong>Recommended Hashtags:</strong></p> <p>${campaignData.insights.hashtags.join(' ')}</p> </div> <div class="section"> <h2>📅 Content Calendar</h2> <pre>${JSON.stringify(campaignData.content_calendar, null, 2)}</pre> </div> </div> </body> </html> `; return { json: { html: htmlEmail, subject: `🎉 ${campaignData.festival_name} Campaign Ready - Score: ${campaignData.qa_score}/100`, to: campaignData.client_email } }; ``` ## Common Workflow Patterns ### Pattern 1: Campaign Trigger via Webhook ```javascript // n8n Webhook Node - POST /generate-campaign { "festival_name": "Diwali", "product_name": "Premium Smartphones", "brand_name": "TechBrand", "brand_colors": "blue and white", "target_audience": "young professionals", "budget_range": "mid-premium", "client_email": "client@example.com", "user_email": "agent@agency.com" } ``` ### Pattern 2: Campaign ID Generation ```javascript // n8n Code Node - Generate Unique Campaign ID const timestamp = Date.now(); const festivalCode = $json.festival_name.substring(0, 3).toUpperCase(); const productCode = $json.product_name.substring(0, 3).toUpperCase(); const campaignId = `${festivalCode}_${productCode}_${timestamp}`; return { json: { ...$json, campaign_id: campaignId, created_at: new Date().toISOString() } }; ``` ### Pattern 3: Gemini API Call Configuration ```javascript // n8n HTTP Request Node - Gemini API // Method: POST // URL: https://generativelanguage.googleapis.com/v1beta/models/gemini-pro:generateContent const requestBody = { contents: [{ parts: [{ text: $json.prompt }]
عرض على GitHub
ملف SKILL.md هذا كبير جدا، لذلك يعرض SkillsMP القسم الاول فقط هنا. عرض على GitHub