میلچیمپ
Mailchimp
اتوماسیون ایمیل مارکتینگ، مدیریت Audience، کمپینهای ایمیلی، Segmentation و گزارشگیری در Mailchimp
نمای کلی
نود Mailchimp چیست؟
نود Mailchimp امکان اتصال و خودکارسازی فرآیندهای ایمیل مارکتینگ و بازاریابی را در n8n فراهم میکند. Mailchimp یک پلتفرم جامع بازاریابی است که شامل Email Marketing، Audience Management، Campaign Builder، Automation، Landing Pages و Analytics میشود.
قابلیتهای کلیدی:
- مدیریت Audiences/Lists: ایجاد، ویرایش، حذف و لیست Audienceها (لیست مخاطبین)
- مدیریت Members: افزودن، بهروزرسانی، حذف و جستجوی اعضای لیست
- مدیریت Campaigns: ایجاد، ارسال، زمانبندی و حذف کمپینهای ایمیلی
- Tags: مدیریت تگها برای دستهبندی مخاطبین
- Segments: ایجاد و مدیریت سگمنتها برای هدفگیری دقیق
- Templates: مدیریت قالبهای ایمیل
- Reports: دریافت گزارش عملکرد کمپینها
- Automations: مدیریت اتوماسیونهای بازاریابی
- Merge Fields: مدیریت فیلدهای سفارشی Audience
- A/B Testing: ایجاد و مدیریت تستهای A/B
Mailchimp Trigger:
- دریافت webhook هنگام subscribe/unsubscribe شدن مخاطب
- Trigger بر اساس تغییر پروفایل مخاطب
- دریافت رویدادهای مربوط به Campaign (ارسال، باز شدن، کلیک)
- Trigger بر اساس email bounced یا cleaned
محدودیتهای API:
- همه پلنها: حداکثر ۱۰ درخواست همزمان
- Rate Limit: حداکثر ۱۰ درخواست در ثانیه
- Batch Operations: حداکثر ۵۰۰ عملیات در هر batch
- Export: حداکثر ۲۰ درخواست export در روز
- List Size: بسته به پلن Mailchimp (Free: تا ۵۰۰ مخاطب)
احراز هویت
احراز هویت Mailchimp
روش ۱: API Key (توصیه شده برای سادگی)
API Key سادهترین و رایجترین روش اتصال به Mailchimp است.
#### مراحل دریافت API Key:
- 1به اکانت Mailchimp خود وارد شوید
- 2روی آیکون پروفایل کلیک کنید → Account & billing
- 3به بخش Extras > API keys بروید
- 4روی Create A Key کلیک کنید
- 5نام API Key را تنظیم کنید (مثل: "n8n Integration")
- 6API Key را کپی کنید
#### فرمت API Key:
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-usXX**نکته مهم**: بخش انتهایی (-usXX) نشاندهنده Data Center شماست. مثلاً -us21 یعنی سرور شما us21 است.
#### تنظیم در n8n:
- 1Credentials > Mailchimp API
- 2API Key را وارد کنید
- 3Test Connection بزنید
- 4اگر اتصال موفق بود، لیست Audienceها نمایش داده میشود
روش ۲: OAuth2
OAuth2 برای اپلیکیشنهایی که به نمایندگی از کاربران مختلف عمل میکنند مناسبتر است.
#### مراحل تنظیم OAuth2:
- 1به **Mailchimp Developer Portal** بروید:
developer.mailchimp.com - 2روی Register An App کلیک کنید
- 3اطلاعات App را تنظیم کنید:
- App Name: نام اپلیکیشن
- App Description: توضیحات
- Redirect URL: آدرس callback n8n
- 1Client ID و Client Secret را کپی کنید
#### تنظیم در n8n:
- 1Credentials > Mailchimp OAuth2 API
- 2Client ID و Client Secret را وارد کنید
- 3روی Connect کلیک کنید
- 4در پنجره باز شده، اکانت Mailchimp خود را تایید کنید
Data Center (سرور):
Mailchimp API URL شامل Data Center است:
https://<dc>.api.mailchimp.com/3.0/Data Center از انتهای API Key شما استخراج میشود:
- API Key:
abc123-us21→ Data Center:us21 - API URL:
https://us21.api.mailchimp.com/3.0/
نکات امنیتی:
- API Key را در جایی امن نگهداری کنید
- از API Key فقط برای یک integration استفاده کنید
- API Keyهای استفاده نشده را غیرفعال کنید
- هرگز API Key را در کد یا Repository قرار ندهید
- برای دسترسی محدود، از OAuth2 با scopes مشخص استفاده کنید
- به صورت دورهای API Keyها را rotate کنید
عملیاتهای موجود
audience-get
دریافت اطلاعات کامل یک Audience (لیست مخاطبین) شامل نام، آمار اعضا، تنظیمات Campaign و اطلاعات Contact. هر اکانت Mailchimp میتواند چندین Audience داشته باشد.
audience-list
دریافت لیست تمام Audienceها (لیستهای مخاطبین) در اکانت. شامل آمار کلی هر Audience مانند تعداد اعضا، نرخ باز شدن و کلیک.
member-add
افزودن مخاطب جدید به یک Audience. شامل تنظیم وضعیت اشتراک (subscribed, unsubscribed, pending, cleaned)، Merge Fields سفارشی، تگها و تنظیمات زبان.
member-update
ویرایش اطلاعات یک مخاطب موجود در Audience. میتوانید Merge Fields، وضعیت اشتراک، تگها و سایر اطلاعات را بهروزرسانی کنید. از MD5 hash ایمیل به عنوان شناسه استفاده میشود.
member-remove
حذف دائمی یک مخاطب از Audience. این عملیات برگشتناپذیر است. برای لغو اشتراک بدون حذف، از Update Member با status: unsubscribed استفاده کنید.
campaign-create
ایجاد کمپین ایمیلی جدید. انواع کمپین: Regular (معمولی)، Plaintext (متنی ساده)، Absplit (تست A/B) و RSS (خوراک RSS). شامل تنظیمات Audience هدف، موضوع، فرستنده و ردیابی.
campaign-send
ارسال فوری یک کمپین آماده به Audience هدف. کمپین باید قبلاً ایجاد شده و محتوای آن تکمیل شده باشد. پس از ارسال، کمپین قابل ویرایش نیست.
campaign-get
دریافت اطلاعات کامل یک کمپین شامل تنظیمات، وضعیت، آمار و محتوا. مفید برای بررسی وضعیت کمپین قبل از ارسال یا دریافت آمار پس از ارسال.
campaign-list
دریافت لیست کمپینها با امکان فیلتر بر اساس نوع، وضعیت، تاریخ و Audience. شامل صفحهبندی و مرتبسازی.
campaign-delete
حذف دائمی یک کمپین. فقط کمپینهایی که هنوز ارسال نشدهاند (وضعیت save یا paused) قابل حذف هستند. کمپینهای ارسال شده قابل حذف نیستند.
campaign-schedule
زمانبندی ارسال کمپین در تاریخ و ساعت مشخص. امکان استفاده از Send Time Optimization (بهترین زمان ارسال بر اساس رفتار مخاطب) و Timewarp (ارسال بر اساس منطقه زمانی مخاطب).
tag-manage
افزودن یا حذف تگها از یک مخاطب. تگها برای دستهبندی و سگمنتبندی مخاطبین استفاده میشوند. میتوانید چندین تگ را همزمان مدیریت کنید.
segment-create
ایجاد Segment جدید در یک Audience برای هدفگیری گروه خاصی از مخاطبین. Segmentها میتوانند استاتیک (لیست ثابت) یا داینامیک (بر اساس شرایط) باشند.
segment-list
دریافت لیست Segmentهای یک Audience شامل نام، نوع (static/saved)، تعداد اعضا و شرایط فیلتر.
template-list
دریافت لیست قالبهای ایمیل موجود در اکانت. شامل Templateهای سفارشی و Templateهای آماده Mailchimp. هر Template شامل نام، نوع، تاریخ ایجاد و تصویر پیشنمایش است.
report-get
دریافت گزارش کامل عملکرد یک کمپین ارسال شده شامل نرخ باز شدن (Open Rate)، نرخ کلیک (Click Rate)، Bounceها، Unsubscribeها، آمار لینکها و مقایسه با میانگین صنعت.
automation-list
دریافت لیست اتوماسیونهای تنظیم شده در Mailchimp. شامل Welcome Series، Abandoned Cart، Birthday Emails و سایر اتوماسیونها با وضعیت فعال/غیرفعال.
merge-field-list
دریافت لیست Merge Fields (فیلدهای سفارشی) تعریف شده در یک Audience. Merge Fields برای ذخیره اطلاعات اضافی مخاطبین مانند نام، شماره تلفن، آدرس و فیلدهای سفارشی کسبوکار استفاده میشوند.
کاربردهای متداول
کاربردهای رایج
۱. خبرنامه خودکار با محتوای داینامیک
ارسال خبرنامه هفتگی با محتوای جدید سایت به صورت کاملاً خودکار.
Schedule (هر هفته شنبه ساعت 10:00)
-> HTTP Request (دریافت آخرین مقالات از API سایت)
-> Code (ساخت محتوای HTML ایمیل)
title: "خبرنامه هفتگی - هفته {{$now.weekNumber}}"
articles: [آخرین 5 مقاله]
-> Mailchimp (campaign-create)
type: regular
listId: "abc123"
subject: "خبرنامه هفتگی: ${articles[0].title}"
fromName: "تیم محتوا"
-> HTTP Request (تنظیم محتوای HTML کمپین)
PUT /campaigns/{{$json.id}}/content
html: {{$json.newsletterHTML}}
-> Mailchimp (campaign-send)
campaignId: {{$json.id}}
-> Telegram (اعلان: خبرنامه ارسال شد)۲. ثبت خودکار Lead از فرم وبسایت
هر بار که فرمی در سایت پر شود، مخاطب جدید در Mailchimp اضافه و در لیست مناسب دستهبندی شود.
Webhook (فرم تماس سایت)
-> IF (email exists in Mailchimp)
-> Mailchimp (member-update)
mergeFields: {FNAME: "{{$json.name}}", PHONE: "{{$json.phone}}"}
tags: [{name: "Website Lead", status: "active"}]
-> Else
-> Mailchimp (member-add)
listId: "main-list"
email: {{$json.email}}
status: "pending" // double opt-in
mergeFields: {FNAME: "{{$json.name}}", PHONE: "{{$json.phone}}"}
tags: ["Website Lead", "{{$json.source}}"]
-> Telegram (اعلان: Lead جدید از سایت)۳. Lead Nurturing اتوماتیک (پرورش سرنخ)
سریال ایمیلهای آموزشی برای مخاطبین جدید که به تدریج آنها را به مشتری تبدیل میکند.
Mailchimp Trigger (subscribe جدید)
-> Mailchimp (tag-manage)
tags: [{name: "Nurture-Step-1", status: "active"}]
-> Wait (3 روز)
-> Mailchimp (campaign-create + send)
subject: "آشنایی با محصولات ما"
segment: "Nurture-Step-1"
-> Mailchimp (tag-manage)
tags: [{name: "Nurture-Step-1", status: "inactive"},
{name: "Nurture-Step-2", status: "active"}]
-> Wait (5 روز)
-> Mailchimp (campaign-create + send)
subject: "داستان موفقیت مشتریان ما"
-> Wait (7 روز)
-> Mailchimp (campaign-create + send)
subject: "پیشنهاد ویژه برای شما"
// شامل کد تخفیف اختصاصی۴. ایمیل سبد خرید رها شده (Abandoned Cart)
وقتی مشتری سبد خرید را بدون پرداخت رها میکند، ایمیل یادآوری ارسال شود.
Webhook (سبد خرید رها شده - از فروشگاه)
-> Wait (1 ساعت)
-> HTTP Request (بررسی: آیا پرداخت انجام شده؟)
-> IF (پرداخت نشده)
-> Mailchimp (member-update)
mergeFields: {CART_ITEMS: "{{$json.items}}", CART_TOTAL: "{{$json.total}}"}
tags: [{name: "Abandoned Cart", status: "active"}]
-> Mailchimp (campaign-create)
subject: "سبد خرید شما منتظر شماست!"
previewText: "محصولات انتخابی شما هنوز موجود هستند"
-> Mailchimp (campaign-send)
-> Wait (24 ساعت)
-> IF (هنوز پرداخت نشده)
-> Mailchimp (campaign-create + send)
subject: "۱۰٪ تخفیف ویژه برای تکمیل خرید شما"۵. Welcome Series (سریال خوشآمدگویی)
مجموعه ایمیلهای خوشآمدگویی برای اعضای جدید.
Mailchimp Trigger (new subscriber)
-> Mailchimp (tag-manage)
tags: [{name: "Welcome Series", status: "active"}]
-> Mailchimp (campaign-create + send)
subject: "به خانواده ما خوش آمدید! *|FNAME|*"
template: welcome-email-template
-> Wait (2 روز)
-> Mailchimp (campaign-create + send)
subject: "راهنمای شروع سریع"
-> Wait (4 روز)
-> Mailchimp (campaign-create + send)
subject: "آیا سوالی دارید؟ ما اینجاییم"
-> Wait (7 روز)
-> Mailchimp (report-get)
// بررسی آیا ایمیلها باز شدهاند
-> IF (هیچ ایمیلی باز نشده)
-> Mailchimp (member-update)
tags: [{name: "Inactive New", status: "active"}]۶. Segmentation هوشمند بر اساس رفتار خرید
دستهبندی خودکار مخاطبین بر اساس تاریخچه خرید.
Schedule (هر روز ساعت 6:00)
-> Database (مشتریان با خرید در 30 روز اخیر)
-> Loop
-> IF (totalPurchases > 10,000,000)
-> Mailchimp (tag-manage)
tags: [{name: "VIP Customer", status: "active"},
{name: "High Value", status: "active"}]
-> ELSE IF (totalPurchases > 2,000,000)
-> Mailchimp (tag-manage)
tags: [{name: "Regular Customer", status: "active"}]
-> ELSE IF (lastPurchase < 90 days ago)
-> Mailchimp (tag-manage)
tags: [{name: "At Risk", status: "active"}]
-> Mailchimp (member-update)
mergeFields: {LAST_BUY: "{{$json.lastPurchaseDate}}", TOTAL: "{{$json.totalSpent}}"}
-> Wait (200ms)۷. A/B Testing خودکار
اجرای تست A/B و انتخاب خودکار برنده.
Schedule (شروع کمپین)
-> Mailchimp (campaign-create)
type: "absplit"
listId: "main-list"
// تنظیمات A/B:
// Version A: subject "تخفیف ویژه برای شما"
// Version B: subject "فرصت محدود: ۲۰٪ تخفیف"
// Winner criteria: open_rate
// Test size: 20% (هر گروه 10%)
// Wait time: 4 hours
-> Mailchimp (campaign-send)
-> Wait (6 ساعت)
-> Mailchimp (report-get)
-> Code (تحلیل نتایج)
winnerSubject, openRateA, openRateB
-> Telegram (گزارش: "نتیجه A/B: Version {{winner}} برنده شد")
-> Google Sheets (ذخیره نتایج A/B برای تحلیل آینده)۸. همگامسازی CRM با Mailchimp
مخاطبین CRM را با Mailchimp هماهنگ نگه دارید.
Schedule (هر ساعت)
-> HubSpot/Database (مخاطبین تغییر یافته)
-> Loop
-> IF (مخاطب در Mailchimp وجود دارد)
-> Mailchimp (member-update)
mergeFields: {FNAME, LNAME, COMPANY, PHONE}
tags: بر اساس lifecycle stage
-> Else
-> Mailchimp (member-add)
status: subscribed
mergeFields: {FNAME, LNAME, COMPANY}
tags: ["CRM Sync", "{{$json.source}}"]
-> Wait (100ms) // رعایت Rate Limit۹. تحلیل و گزارش عملکرد کمپینها
گزارش هفتگی عملکرد ایمیل مارکتینگ.
Schedule (هر یکشنبه ساعت 20:00)
-> Mailchimp (campaign-list)
status: sent
sortField: send_time
sortDir: DESC
count: 10
-> Loop
-> Mailchimp (report-get)
campaignId: {{$json.id}}
-> Code (تحلیل و خلاصهسازی)
totalSent, avgOpenRate, avgClickRate
bestCampaign, worstCampaign
unsubscribeRate, bounceRate
-> Slack (ارسال گزارش به #marketing)
"گزارش هفتگی ایمیل مارکتینگ:
ایمیلهای ارسالی: {{totalSent}}
نرخ باز شدن: {{avgOpenRate}}%
نرخ کلیک: {{avgClickRate}}%
بهترین کمپین: {{bestCampaign}}"
-> Google Sheets (ذخیره آمار هفتگی)۱۰. ایمیل تولد و مناسبتها
ارسال ایمیل تبریک تولد با کد تخفیف اختصاصی.
Schedule (هر روز ساعت 8:00)
-> Mailchimp (segment-create)
conditions: {
match: "all",
conditions: [{
field: "BIRTHDAY",
op: "is",
value: "{{$today.format('MM/DD')}}"
}]
}
-> Mailchimp (campaign-create)
subject: "تولدت مبارک *|FNAME|*! هدیه ویژه برای تو"
previewText: "کد تخفیف ۲۵٪ مخصوص روز تولدت"
segmentId: {{$json.segmentId}}
-> Mailchimp (campaign-send)
-> Database (ثبت کد تخفیف تولد)۱۱. پاکسازی لیست و بهبود Deliverability
پاکسازی دورهای مخاطبین غیرفعال برای بهبود نرخ تحویل ایمیل.
Schedule (هر ماه)
-> Mailchimp (segment-create)
name: "Inactive 6 Months"
conditions: {
match: "all",
conditions: [
{field: "last_open", op: "greater", value: "180"},
{field: "last_click", op: "greater", value: "180"}
]
}
-> Mailchimp (campaign-create + send)
subject: "دلمان برایتان تنگ شده! آیا هنوز علاقهمندید؟"
segment: "Inactive 6 Months"
-> Wait (14 روز)
-> Code (بررسی: چه کسانی ایمیل را باز نکردند)
-> Loop (مخاطبین بیپاسخ)
-> Mailchimp (member-update)
status: "unsubscribed"
tags: [{name: "Cleaned - Inactive", status: "active"}]
-> Telegram (گزارش: "{{count}} مخاطب غیرفعال پاکسازی شد")۱۲. ایمیلهای E-commerce خودکار
ایمیلهای خودکار بر اساس رویدادهای فروشگاهی.
Webhook (رویداد فروشگاه)
-> Switch (نوع رویداد)
Case "order_completed":
-> Mailchimp (member-update)
mergeFields: {LAST_ORDER: "{{$json.orderId}}", ORDER_TOTAL: "{{$json.total}}"}
tags: [{name: "Customer", status: "active"}, {name: "Lead", status: "inactive"}]
-> Wait (7 روز)
-> Mailchimp (campaign-create + send)
subject: "نظر شما درباره خرید اخیرتان"
Case "product_viewed":
-> Mailchimp (member-update)
mergeFields: {VIEWED_ITEM: "{{$json.productName}}"}
-> Wait (24 ساعت)
-> IF (خرید انجام نشده)
-> Mailchimp (campaign-create + send)
subject: "محصولی که بررسی کردید هنوز موجود است"
Case "review_submitted":
-> Mailchimp (tag-manage)
tags: [{name: "Reviewer", status: "active"}]
-> Mailchimp (campaign-create + send)
subject: "ممنون از نظرتان! کد تخفیف بعدی شما"نکات حرفهای
نکات حرفهای
۱. از Merge Tags برای شخصیسازی استفاده کنید
Merge Tags محتوای ایمیل را برای هر مخاطب شخصیسازی میکنند:
*|FNAME|* -> نام مخاطب
*|LNAME|* -> نام خانوادگی
*|EMAIL|* -> آدرس ایمیل
*|LIST:NAME|* -> نام Audience
*|DATE:d/m/Y|* -> تاریخ امروز
*|UNSUB|* -> لینک لغو اشتراک (الزامی)
*|LIST:ADDRESS|* -> آدرس فیزیکی (الزامی)
*|ARCHIVE|* -> لینک نسخه وبنکته: همیشه fallback تعیین کنید: *|FNAME|fallback:دوست عزیز|*
۲. MD5 Hash برای شناسایی Member
Mailchimp API از MD5 hash ایمیل (lowercase) به عنوان subscriber_hash استفاده میکند:
// در Code node:
const crypto = require('crypto');
const email = items[0].json.email.toLowerCase().trim();
const subscriberHash = crypto.createHash('md5').update(email).digest('hex');
// استفاده: /lists/{listId}/members/{subscriberHash}۳. از Upsert (PUT) بجای Create (POST) استفاده کنید
PUT endpoint همزمان create و update انجام میدهد و خطای Member Exists نمیدهد:
PUT /lists/{listId}/members/{subscriberHash}
Body: {
email_address: "user@example.com",
status_if_new: "subscribed", // وضعیت اگر مخاطب جدید باشد
merge_fields: {FNAME: "Ali"}
}۴. Segmentation بر اساس Engagement
مخاطبین فعال و غیرفعال را جدا کنید:
{
"match": "all",
"conditions": [
{
"condition_type": "Aim",
"field": "aim-open",
"op": "open",
"value": "last_campaign_5"
}
]
}سگمنتهای مفید:
- باز کرده ۳ کمپین اخیر: Engaged
- باز نکرده ۵ کمپین اخیر: Disengaged
- کلیک کرده: High Intent
- هرگز باز نکرده: Inactive
۵. بهترین زمان ارسال ایمیل
Mailchimp Send Time Optimization بهترین زمان را تعیین میکند:
// فعالسازی Timewarp:
campaign-schedule
timewarp: true
scheduleTime: "2024-03-15T10:00:00Z"
// ایمیل ساعت 10 صبح محلی هر مخاطب ارسال میشودبهترین ساعات ارسال (به وقت ایران):
- B2B: ساعت ۱۰-۱۱ صبح، سهشنبه و چهارشنبه
- B2C: ساعت ۲۰-۲۱، پنجشنبه و جمعه
- خبرنامه: ساعت ۸-۹ صبح، شنبه
۶. A/B Testing موثر
عناصر قابل تست:
Subject Line: "تخفیف ۲۰٪" vs "فرصت محدود"
From Name: "نام شرکت" vs "نام شخص"
Send Time: صبح vs عصر
Content: طولانی vs خلاصه
CTA Button: "خرید کنید" vs "مشاهده محصولات"
Preview Text: با preview vs بدون previewقوانین A/B Testing:
- فقط یک متغیر را تغییر دهید
- حجم نمونه کافی (حداقل ۱۰۰۰ مخاطب در هر گروه)
- زمان کافی برای نتیجهگیری (حداقل ۴ ساعت)
۷. Tags vs Segments vs Groups
Tags:
- برای دستهبندی داخلی توسط تیم
- مخاطب نمیبیند
- مناسب: "VIP", "Lead Source: Google", "Campaign: Summer"
Segments:
- فیلتر داینامیک بر اساس شرایط
- بهروزرسانی خودکار
- مناسب: "خرید بالای ۵ میلیون", "فعال در ۳۰ روز اخیر"
Groups:
- دستهبندی توسط مخاطب
- مخاطب خودش انتخاب میکند
- مناسب: "علاقهمند به فناوری", "خبرنامه هفتگی"۸. بهبود Deliverability (نرخ تحویل)
1. از Double Opt-in استفاده کنید:
status: "pending" بجای "subscribed"
2. لیست را منظم پاکسازی کنید:
- حذف bounced emails
- حذف مخاطبین ۶ ماه غیرفعال
3. SPF, DKIM و DMARC را تنظیم کنید
4. از دامنه ایمیل حرفهای استفاده کنید:
بهتر: info@yourdomain.com
بدتر: yourbrand@gmail.com
5. Subject Line spam trigger نداشته باشد:
اجتناب: "رایگان!", "فوری!", "!!!!", "همه حروف بزرگ"۹. Batch Operations برای عملیات حجیم
بجای درخواست تکتک، از Batch API استفاده کنید:
POST /batches
Body: {
operations: [
{
method: "PUT",
path: "/lists/{listId}/members/{hash1}",
body: "{...}"
},
{
method: "PUT",
path: "/lists/{listId}/members/{hash2}",
body: "{...}"
}
// تا 500 عملیات در هر batch
]
}نکات:
- حداکثر ۵۰۰ عملیات در هر batch
- نتیجه را با GET /batches/{batchId} بررسی کنید
- برای import هزاران مخاطب ایدهآل است
۱۰. Content Template با متغیرهای داینامیک
ساخت Template با محتوای متغیر:
<h1>سلام *|FNAME|fallback:دوست عزیز|*!</h1>
*|IF:MEMBERSHIP="premium"|*
<p>محتوای ویژه اعضای Premium</p>
*|ELSE:|*
<p>برای مشاهده محتوای کامل، عضو Premium شوید</p>
*|END:IF|*
*|IF:BIRTHDAY|*
<p>تولدت مبارک!</p>
*|END:IF|*۱۱. Campaign Content تنظیم کردن
بعد از ایجاد کمپین، محتوا را جداگانه تنظیم کنید:
// روش 1: HTML مستقیم
PUT /campaigns/{campaignId}/content
Body: {
html: "<html>محتوای ایمیل</html>"
}
// روش 2: استفاده از Template
PUT /campaigns/{campaignId}/content
Body: {
template: {
id: 12345,
sections: {
"body_content": "<p>محتوای سفارشی</p>"
}
}
}۱۲. Error Handling حرفهای
Mailchimp (member-add)
-> Success: ادامه Workflow
-> Error 400 (Member Exists):
-> Mailchimp (member-update) // بجای add، update کن
-> Error 429 (Rate Limit):
-> Wait (5s) -> Retry
-> Error 401 (Unauthorized):
-> Telegram Alert (مشکل API Key!)
-> Error 400 (Compliance):
-> Log (مخاطب compliance state - skip)۱۳. Webhook Events Mailchimp
رویدادهای قابل Subscribe:
subscribe -> مخاطب جدید subscribe شد
unsubscribe -> مخاطب لغو اشتراک کرد
profile -> پروفایل مخاطب تغییر کرد
cleaned -> ایمیل cleaned شد (bounce سخت)
upemail -> آدرس ایمیل تغییر کرد
campaign -> کمپین ارسال شد۱۴. محدودیتهای مهم Mailchimp
API Rate Limit: 10 درخواست همزمان / 10 req/sec
Batch Operations: 500 عملیات هر batch
Audience (Free): حداکثر 500 مخاطب
Audience (Standard): حداکثر 100,000 مخاطب
Subject Line: حداکثر 150 کاراکتر
Preview Text: حداکثر 150 کاراکتر
Campaign Name: حداکثر 100 کاراکتر
Tags per member: نامحدود
Segments per list: تا 500
Merge Fields: حداکثر 80 فیلد سفارشی
Template HTML: حداکثر 500KB۱۵. Compliance و قوانین ایمیل مارکتینگ
1. همیشه لینک Unsubscribe داشته باشید (*|UNSUB|*)
2. آدرس فیزیکی شرکت الزامی است (*|LIST:ADDRESS|*)
3. از Double Opt-in استفاده کنید
4. لیست خریداری شده Import نکنید
5. به درخواست Unsubscribe فوراً عمل کنید
6. اطلاعات فرستنده (From) واقعی باشد
7. Subject Line گمراهکننده نباشد
8. قوانین GDPR و CAN-SPAM را رعایت کنید۱۶. Google Analytics Tracking
ردیابی کمپینها در Google Analytics:
campaign-create:
tracking: {
google_analytics: "summer_sale_2024"
}
// لینکها با UTM parameter اضافه میشوند:
// ?utm_source=mailchimp&utm_medium=email&utm_campaign=summer_sale_2024۱۷. Pagination برای دریافت همه دادهها
Mailchimp pagination با offset و count:
Set (offset = 0, allMembers = [])
-> Loop
-> Mailchimp API (GET /lists/{id}/members?count=100&offset={{offset}})
-> Code (اضافه به allMembers)
-> IF (total_items > offset + 100)
-> Set (offset += 100)
-> Back to Loop
-> Else: خروجرفع مشکلات
رفع مشکلات رایج
خطای 401 Unauthorized
علت: API Key نامعتبر یا Data Center اشتباه
راهحل
- API Key را مجدداً از Mailchimp کپی کنید
- مطمئن شوید پسوند Data Center صحیح است (مثل -us21)
- API Key را در Account > Extras > API Keys بررسی کنید
- اگر API Key غیرفعال شده، یک Key جدید بسازید
- در n8n، Credential را ویرایش و مجدداً Test کنید
خطای 400 Bad Request - Invalid Resource
علت: دادههای ارسالی نامعتبر
راهحل
- فرمت ایمیل را بررسی کنید (باید معتبر باشد)
- Merge Field نامها باید دقیقاً مطابق تعریف در Audience باشند
- مقادیر فیلدها باید با نوع تعریف شده مطابقت داشته باشند
- برای فیلدهای DATE فرمت MM/DD/YYYY استفاده کنید
- برای ADDRESS فیلد، فرمت صحیح: {addr1, city, state, zip, country}
خطای 400 - Member Exists
علت: ایمیل قبلاً در Audience وجود دارد
راهحل
- ابتدا بررسی کنید آیا مخاطب وجود دارد:
GET /lists/{listId}/members/{md5(email)}- اگر وجود دارد از member-update استفاده کنید
- یا از PUT (upsert) بجای POST استفاده کنید:
PUT /lists/{listId}/members/{md5(email)}
// اگر وجود دارد update و اگر نه create میکندخطای 400 - Compliance: Member in Compliance State
علت: مخاطب قبلاً unsubscribe کرده و طبق قوانین نمیتوان resubscribe کرد
راهحل
- مخاطبی که خودش unsubscribe کرده را نمیتوانید با API دوباره subscribe کنید
- این محدودیت قانونی CAN-SPAM و GDPR است
- مخاطب باید خودش از طریق فرم مجدداً subscribe کند
- از status: "pending" استفاده کنید تا double opt-in ارسال شود
- مخاطبین cleaned هم قابل resubscribe نیستند
خطای 429 Too Many Requests
علت: محدودیت Rate Limit
راهحل
- Mailchimp اجازه حداکثر ۱۰ درخواست همزمان میدهد
- Wait node بین درخواستها اضافه کنید (حداقل 200ms)
- از Batch Operations برای عملیات حجیم استفاده کنید
- header Retry-After را بررسی و رعایت کنید
- در حلقهها:
Loop -> Mailchimp -> Wait (300ms) -> Nextخطای 404 Resource Not Found
علت: شناسه Audience، Campaign یا Member اشتباه است
راهحل
- List ID (Audience ID) را از Audience > Settings بررسی کنید
- Campaign ID را از URL کمپین در Mailchimp بخوانید
- برای Member، شناسه MD5 hash ایمیل (lowercase) است:
const md5Hash = require('crypto').createHash('md5')
.update(email.toLowerCase()).digest('hex');- Audience حذف یا آرشیو نشده باشد
کمپین ارسال نمیشود (Campaign cannot be sent)
علت: کمپین ناقص است
راهحل
- محتوای HTML یا Template حتماً تنظیم شده باشد
- فیلدهای الزامی: subject, from_name, reply_to
- Audience هدف باید حداقل یک subscriber داشته باشد
- لینک Unsubscribe (*|UNSUB|*) باید در محتوا وجود داشته باشد
- آدرس فیزیکی شرکت (*|LIST:ADDRESS|*) باید تنظیم شده باشد
- از Checklist API استفاده کنید:
GET /campaigns/{id}/send-checklistMerge Tags کار نمیکنند
علت: نام Merge Field اشتباه یا تعریف نشده
راهحل
- لیست Merge Fields را بررسی کنید:
GET /lists/{listId}/merge-fields- نام Merge Tag دقیقاً مطابق تعریف باشد (حساس به حروف بزرگ/کوچک)
- Merge Tagها در محتوا با فرمت *|TAG_NAME|* استفاده میشوند
- برای Merge Field سفارشی ابتدا آن را در Audience Settings تعریف کنید
- مقدار فیلد باید قبل از ارسال کمپین تنظیم شده باشد
Webhook/Trigger دریافت نمیشود
علت: تنظیمات Webhook نادرست
راهحل
- در Mailchimp به Audience > Settings > Webhooks بروید
- مطمئن شوید URL n8n webhook صحیح و publicly accessible است
- رویدادهای مورد نظر را تیک بزنید:
- Subscribes, Unsubscribes, Profile Updates, Email Changed, Cleaned
- آدرس webhook باید HTTPS باشد
- Webhook URL n8n باید در حالت Production (نه Test) فعال باشد
