یک ربات کوچک نشسته که با یک سیم ساده به یک چرخ‌دنده وصل شده، نماد برقراری اتوماتیک بین دو سیستم

اتصال n8n به ووکامرس: راهنمای گام‌به‌گام

اتصال n8n به ووکامرس یعنی ساختن یک کلید API از ووکامرس و وصلش کردن به n8n — یا با گره‌ی آماده‌ی WooCommerce Trigger (ساده‌ترین راه)، یا با ساخت دستی وب‌هوک. بعدش می‌تونی هر اتفاقی توی فروشگاهت (سفارش جدید، تغییر موجودی، تموم موجودی) رو به تلگرام، شیت، یا هرجای دیگه‌ای وصل کنی.

اگه تا حالا دنبال یک افزونه‌ی واسط بودی که فقط نصف کاری رو انجام می‌ده، اینجا فرق می‌کنه. ووکامرس یک REST API کامل داره که هر کاری رو از سفارش گرفته تا تغییر موجودی انبار انجام می‌ده.

راه اول (پیشنهادی): گره‌ی WooCommerce Trigger داخل n8n

n8n یک گره‌ی اختصاصی به اسم WooCommerce Trigger داره که خودش webhook رو توی ووکامرس می‌سازه و مدیریت می‌کنه — برای بیشتر کاربرا این راه ساده‌تره. کافیه یک کلید Consumer Key/Secret بسازی و این گره رو اضافه کنی — خود نود ریکویست می‌فرسته و webhook رو در ووکامرس می‌سازه — نیازی به رفتن دستی به بخش Webhooks ووکامرس نیست. رویدادها برای سفارش، مشتری، محصول و کوپن هستن و برای هرکدوم سه حالت ساخته‌شدن، به‌روزرسانی و حذف داری (مثلاً order.created و order.updated).

پیش‌نیاز: پرمالینک‌های وردپرس رو از حالت «Plain» خارج بیار. WooCommerce Trigger برای کار کردن نیاز به پرمالینک تمیزدار داره؛ اگه پرمالینک‌ها روی حالت پیش‌فرض «ساده» مونده، اول از تنظیمات ← پیوندهای یکتا عوضش کن.

راه دوم (جایگزین): ساخت دستی وب‌هوک

اگر می‌خوای روی یک URL مشخص خودت کنترل کامل داشته باشی یا می‌خوای بین چند سیستم به یک endpoint واحد برسونی، می‌تونی از گره‌ی Webhook n8n به‌صورت دستی استفاده کنی. توی ووکامرس (تنظیمات → پیشرفته → Webhooks) یک وب‌هوک جدید بساز و آدرس URL رو بزار لینکی که n8n بهت می‌ده.

webhook چه داده‌ای برات می‌فرسته؟ نمونه Payload سفارش

وقتی یک وب‌هوک (چه از WooCommerce Trigger، چه دستی) فعال می‌شه، ووکامرس بدنه‌ی درخواست POST رو با یک شی‌ء JSON از سفارش پر می‌کنه. این یک نمونه‌ی خلاصه‌شده از فیلدهای پرکاربردشه — ساختار کامل و همه‌ی فیلدها در مستندات رسمی REST API ووکامرس هست:

{
  "id": 4821,
  "status": "processing",
  "currency": "IRT",
  "date_created": "2026-09-21T14:32:07",
  "total": "1250000",
  "billing": {
    "first_name": "سارا",
    "last_name": "محمدی",
    "phone": "09121234567",
    "email": "sara@example.com"
  },
  "line_items": [
    {
      "name": "دوره آموزشی خودکارسازی",
      "product_id": 512,
      "quantity": 1,
      "total": "1250000"
    }
  ]
}

توی n8n، بعد از گره‌ی WooCommerce Trigger، این فیلدها زیر $json در دسترسن — مثلاً {{ $json.billing.phone }} برای شماره موبایل مشتری یا {{ $json.line_items[0].name }} برای اسم اولین محصول خریداری‌شده. برای سفارش‌های چندمحصولی، line_items یک آرایه‌ست؛ اگه می‌خوای هر محصول رو جدا پردازش کنی (مثلاً برای گزارش فروش تفکیکی)، از گره‌ی Split Out روی همین فیلد استفاده کن.

کار با endpoint‌های مفید REST ووکامرس

اگر به‌جای Trigger دنبال خواندن/نوشتن دستی هستی — مثلاً برای گزارش‌گیری دوره‌ای — از همین اندپوینت‌ها مستقیم داخل HTTP Request استفاده کن:

  • لیست سفارشات یک بازه‌ی زمانی: GET /wp-json/wc/v3/orders?after=2026-09-01T00:00:00
  • موجودی یک محصول خاص با SKU: GET /wp-json/wc/v3/products?sku=SKU123
  • تغییر وضعیت سفارش (مثلاً بعد از تأیید ارسال): PUT /wp-json/wc/v3/orders/{id}

ووکامرس هر درخواست رو با یک امضای دیجیتال در هدر X-WC-Webhook-Signature می‌فرسته و این امضا رو می‌شه سمت مقصد بررسی کرد تا مطمئن شد درخواست واقعاً از ووکامرس اومده — وقتی از وب‌هوک دستی n8n استفاده می‌کنی، خودت باید این امضا رو دستی چک کنی — n8n انجامش نمی‌ده. امضا یک HMAC-SHA256 از بدنه‌ی درخواسته که با Secret همون وب‌هوک (نه Consumer Secret) ساخته و base64 می‌شه؛ این Secret رو موقع ساخت وب‌هوک توی ووکامرس خودت تعیین می‌کنی.

نکته‌ی مهم: ووکامرس بعد از ۵ شکست پیاپی وب‌هوک رو خاموش می‌کنه

اگر سرور n8n تو پنج بار پیاپی به یک وب‌هوک پاسخی غیر از 2xx، 301 یا 302 بده، ووکامرس خودش وب‌هوک رو غیرفعال (Disabled) می‌کنه. این یعنی اگر سرور n8n در حال راه‌اندازی یا داون پایین بوده و چندتا سفارش از دستش رفته، ووکامرس دیگه تلاش نمی‌کنه دوباره ارسال کنه — باید دستی از قسمت WooCommerce > Settings > Advanced > Webhooks دوباره فعالش کنی. برای همین بعد از هر داونی طولانی یا دپلوی جدید n8n، حتماً برو وضعیت وب‌هوک‌ها رو چک کن.

چه اتفاقی می‌افته اگه اینترنت بین‌المللی قطع بشه؟

قطعی اینترنت بین‌الملل برای کسب‌وکارهای ایرانی یک واقعیته، ولی اثرش روی این اتصال به این بستگی داره که فروشگاه و n8n کجا میزبانی می‌شن. اگه هر دو داخل ایران باشن، وب‌هوک از مرز رد نمی‌شه و قطعی بین‌الملل روش اثری نداره. اگه یکی داخل و یکی خارج باشه (مثلاً فروشگاه روی هاست ایرانی و n8n روی سرور خارج یا نسخه‌ی ابری n8n)، توی بازه‌ی قطعی همه‌ی وب‌هوک‌ها شکست می‌خورن.

این شکست‌ها روی همون آستانه‌ی ۵ شکست پیاپی حساب می‌شن — یعنی یک قطعی چندساعته می‌تونه به‌تنهایی وب‌هوک رو غیرفعال کنه، حتی وقتی خود n8n و خود ووکامرس هیچ مشکلی ندارن. بده‌بستان رو هم در نظر بگیر: اگه n8n رو برای فرار از این مشکل داخل ایران بذاری، توی قطعی، فراخوانی‌های خود n8n به سرویس‌های خارجی (مثل OpenAI یا API تلگرام) از کار می‌افتن. پس جای n8n رو بر اساس این انتخاب کن که کدوم بخش ورک‌فلوت حیاتی‌تره.

دو کار عملی بعد از هر قطعی طولانی لازمه: (۱) دستی برو WooCommerce > Settings > Advanced > Webhooks و وضعیت رو به Active برگردون، (۲) سفارش‌هایی که توی بازه‌ی قطعی ثبت شدن ولی هیچ‌وقت به n8n نرسیدن رو با همون اندپوینت GET /wp-json/wc/v3/orders?after=... (که بالاتر گفتیم) بازیابی و دستی پردازش کن. برای کاهش این ریسک، خیلی از تیم‌ها یک Workflow زمان‌بندی‌شده (Cron، مثلاً هر ساعت) به‌عنوان پشتیبان کنار Trigger اصلی نگه می‌دارن — این ورک‌فلو با همون endpoint سفارش‌های اخیر رو چک می‌کنه و هر سفارشی که وب‌هوک ازش جا مونده رو جبران می‌کنه.

چه رویداده‌هایی رو می‌تونی با WooCommerce Trigger بگیری؟

برای سفارش، مشتری، محصول و کوپن، رویدادهای «ساخته شد»، «به‌روز شد» و «حذف شد» رو داری. برای هر رویداد یک WooCommerce Trigger جدا لازمه و n8n برای هرکدوم یک webhook جداگانه توی ووکامرس می‌سازه — مثلاً اگه هم ثبت سفارش و هم به‌روزرسانی سفارش رو می‌خوای، دو WooCommerce Trigger جدا بذار که به یک مسیر مشترک وصل می‌شن.

یک اشتباه رایج: رویدادی به اسم «سفارش تکمیل‌شده» (Order Completed) وجود نداره. هر تغییر وضعیت سفارش از رویداد order.updated می‌آد؛ بعد از Trigger با یک گره‌ی IF روی فیلد status فیلتر کن. توی ووکامرس سفارش پرداخت‌شده وضعیت processing (در حال انجام) می‌گیره، و completed یعنی سفارش ارسال یا تحویل شده.

سه سناریوی واقعی برای شروع

  1. اطلاع فوری سفارش در تلگرام: Trigger روی order.created → گره‌ی Telegram — مبلغ و محصولات رو بلافاصله برای تیم فروش می‌فرسته.
  2. ثبت سفارش در CRM: Trigger روی order.updated → IF (وضعیت = processing) → HTTP Request → ساخت مشتری جدید یا آپدیت رکورد موجود در سیستم CRM.
  3. هشدار موجودی کم: یک Workflow زمان‌بندی‌شده که هر روز موجودی محصولات رو چک می‌کنه و اگه عددی زیر یک آستانه رفت، هشدار می‌فرسته.

سناریوهای ۱ و ۲ با یک WooCommerce Trigger و سناریوی ۳ با یک Schedule Trigger، همراه یک گره‌ی مقصد (Telegram، HTTP Request، ایمیل) قابل پیاده‌سازیه و نیازی به Code Node ندارن.

سناریوی کامل: ثبت خودکار سفارش در CRM

این سناریو رو قدم‌به‌قدم باز می‌کنیم، چون بیشترین کاربرد عملی رو داره:

  1. Trigger روی order.updated گذاشته می‌شه و بلافاصله بعدش یک گره‌ی IF که فقط سفارش‌های با status = processing رو عبور می‌ده — یعنی سفارش‌هایی که پرداختشون انجام شده. رویداد order.created کافی نیست، چون سفارش موقع ساخته شدن ممکنه هنوز پرداخت نشده باشه. چون یک سفارش ممکنه چند بار به‌روز بشه، بررسی تکراری‌نبودن (قدم ۴) اینجا ضروریه، نه اختیاری.
  2. یک گره‌ی Edit Fields (Set) بعد از Trigger، فیلدهای لازم رو از payload استخراج می‌کنه: نام مشتری (billing.first_name + billing.last_name)، تلفن، مبلغ و لیست محصولات. حواست باشه total توی payload رشته‌ست نه عدد؛ اگه CRM عدد می‌خواد، تبدیلش کن (راهنمای دستکاری JSON در n8n).
  3. گره‌ی HTTP Request به endpoint «ساخت مخاطب» یا «ساخت معامله» در CRM وصل می‌شه — اکثر CRMها یک endpoint برای ساخت رکورد جدید دارن که همین فیلدهای Set‌شده رو می‌گیره.
  4. قبل از ارسال، بهتره یک بررسی تکراری‌نبودن اضافه کنی — مثلاً جست‌وجوی مشتری با شماره تلفن قبل از ساخت رکورد جدید، تا اگه مشتری قبلاً در CRM بوده، فقط معامله‌ی جدید بهش اضافه بشه نه یک مخاطب تکراری.
  5. اگه HTTP Request خطا برگردوند (مثلاً CRM موقتاً در دسترس نبود)، یک شرط IF روی کد پاسخ می‌تونه پیام رو به تلگرام ادمین بفرسته تا دستی پیگیری بشه.

این الگو (Trigger → Set → HTTP Request → بررسی خطا) دقیقاً همون ساختاریه که برای اکثر اتصال‌های ووکامرس به سیستم‌های بیرونی — نه فقط CRM — استفاده می‌شه.

خطاهای رایج اتصال ووکامرس به n8n

خطاعلتراه‌حل
401 UnauthorizedConsumer Key/Secret اشتباه، یا سطح دسترسی کافی نیستکلید رو دوباره بساز با سطح Read/Write
وب‌هوک غیرفعال شده (بعد از چند بار کار کردن)۵ شکست پیاپی — معمولاً به خاطر داونی n8n یا تغییر URLوضعیت webhook رو در ووکامرس چک کن و دوباره Activeش کن
داده ناقص می‌رسهووکامرس فقط فیلدهای پیش‌فرض رو توی payload می‌فرستهبرای جزئیات بیشتر، بعدش یک درخواست HTTP جداگانه با کلید API بزن

سوال‌های متداول

آیا برای اتصال به n8n باید پلاگین نصب کنم؟
نه. ووکامرس از اول REST API داره و n8n هم گره‌ی اختصاصی داره. فقط کلید API رو بساز.

Webhook بهتره یا Polling (چک دوره‌ای)؟
برای رویدادهای فوری (سفارش جدید، تغییر وضعیت) همیشه Webhook بهتره. Polling رو فقط وقتی بزار که سرورت امکان Webhook بیرونی نداره.

آیا می‌شه محصول رو هم از طریق ووکامرس ساخت؟
آره. از اندپوینت «Products» ووکامرس API می‌تونی موجودی، قیمت یا وضعیت محصول رو از دور به‌روز کنی.

اگه وقت زیادی صرف دیباگ وب‌هوک می‌کنی یا مطمئن نیستی سرور n8n درست تنظیم شده، با تیم خودکارا تماس بگیر. اگه می‌خوای سفارش‌های پرداخت‌شده مستقیم وارد یک CRM بشن که داده‌هاش روی سرور خودته، CRM اختصاصی خودکارا رو ببین. برای پردازش داده‌های ورودی (مثلاً تجزیه‌ی آدرس)، راهنمای دستکاری JSON در n8n رو بخون. اگه هم می‌خوای با خود وردپرس کار کنی (پست، برگه، رسانه)، راهنمای اتصال n8n به وردپرس رو ببین — اونجا احراز هویت با Application Password انجام می‌شه، ولی ووکامرس کلید Consumer Key/Secret خودش رو داره.

نمی‌خواهی خودت بسازی؟ اگه فروشگاهت روی اینستاگرام هم فعاله و دنبال یه راه‌حل آماده برای جواب‌دادن به دایرکت و کامنت می‌گردی، دایرکت هوشمند اینستاگرام رو ببین.

نوشته های مرتبط