شاپیفای
Shopify
اتوماسیون فروشگاه Shopify: مدیریت سفارش، محصول، مشتری، موجودی و ارسال
نمای کلی
نود Shopify یکی از مهمترین نودهای n8n برای اتوماسیون تجارت الکترونیک است. Shopify بزرگترین پلتفرم فروشگاهساز SaaS جهان با بیش از ۴ میلیون فروشگاه فعال است.
قابلیتهای کلیدی:
- مدیریت سفارشات: دریافت، بهروزرسانی، بستن و لغو سفارش
- مدیریت محصولات: ایجاد، ویرایش، حذف و لیست محصولات
- مدیریت مشتریان: ایجاد، ویرایش، حذف و جستجوی مشتریان
- مدیریت موجودی: بررسی، تنظیم و تغییر موجودی انبار
- مدیریت ارسال (Fulfillment): ایجاد، بهروزرسانی و لغو ارسال
- مدیریت مجموعهها (Collections): دستهبندی محصولات
- مدیریت تنوعها (Variants): قیمت، سایز، رنگ و...
- مدیریت تصاویر محصول
- کدهای تخفیف (Discount Codes)
- پیشنویس سفارش (Draft Orders)
- تراکنشهای مالی
Shopify Trigger:
- دریافت رویداد سفارش جدید (orders/create)
- بهروزرسانی محصول (products/update)
- مشتری جدید (customers/create)
- پرداخت انجام شده (orders/paid)
- ارسال انجام شده (fulfillments/create)
- و بیش از ۵۰ رویداد webhook دیگر
اهمیت برای فروشندگان ایرانی:
Shopify یکی از بهترین گزینهها برای فروش بینالمللی فروشندگان ایرانی است. با n8n میتوانید فروشگاه Shopify خود را با سیستمهای داخلی، تلگرام، حسابداری و لجستیک ایرانی یکپارچه کنید. مقایسه با WooCommerce: Shopify مدیریت سرور نمیخواهد، سریعتر setup میشود و Payment gatewayهای بینالمللی دارد.
احراز هویت
احراز هویت Shopify
روش ۱: Custom App (توصیه شده)
#### مرحله ۱: ایجاد Custom App
- 1به Shopify Admin > Settings > Apps and sales channels بروید
- 2روی Develop apps کلیک کنید
- 3اگر برای بار اول است، Allow custom app development را فعال کنید
- 4روی Create an app کلیک کنید
- 5نام اپلیکیشن: مثلاً "n8n Automation"
#### مرحله ۲: تنظیم API Scopes
- 1در تب Configuration روی Configure Admin API scopes کلیک کنید
- 2Scopes مورد نیاز را فعال کنید:
read_orders, write_orders → مدیریت سفارشات
read_products, write_products → مدیریت محصولات
read_customers, write_customers → مدیریت مشتریان
read_inventory, write_inventory → مدیریت موجودی
read_fulfillments, write_fulfillments → مدیریت ارسال
read_draft_orders, write_draft_orders → پیشنویس سفارش
read_price_rules, write_price_rules → کدهای تخفیف
read_shipping, write_shipping → تنظیمات ارسال- 1Save کنید
#### مرحله ۳: نصب و دریافت Token
- 1روی Install app کلیک کنید
- 2Admin API access token را کپی کنید
⚠️ این توکن فقط یکبار نمایش داده میشود!
- 1API key و API secret key را نیز یادداشت کنید
#### مرحله ۴: تنظیم در n8n
- 1در n8n به Credentials > Shopify API بروید
- 2اطلاعات را وارد کنید:
Shop Subdomain: your-store (بدون .myshopify.com)
Access Token: shpat_xxxxxxxxxxxxx- 1Test Connection بزنید
روش ۲: OAuth2
- 1یک Shopify Partner Account بسازید
- 2App جدید در Partner Dashboard ایجاد کنید
- 3Client ID و Client Secret را در n8n وارد کنید
- 4Redirect URL:
https://your-n8n.com/rest/oauth2-credential/callback- 1Connect بزنید و دسترسی بدهید
روش ۳: API Key + Password (Legacy)
⚠️ این روش deprecated شده و برای اپهای جدید توصیه نمیشود.
API Key: your-api-key
Password: your-api-password
Shop: your-store.myshopify.comتنظیم Webhook برای Shopify Trigger:
- 1در n8n یک Shopify Trigger node اضافه کنید
- 2Topic مورد نظر را انتخاب کنید (مثل orders/create)
- 3Workflow را Activate کنید
- 4n8n به صورت خودکار webhook را در Shopify ثبت میکند
نکات امنیتی:
- Access Token را به اشتراک نگذارید
- حداقل Scope لازم را فعال کنید
- از Webhook secret استفاده کنید
- دسترسیها را مرتب بازبینی کنید
- از IP Whitelisting در صورت امکان استفاده کنید
عملیاتهای موجود
order-get
دریافت اطلاعات کامل یک سفارش با شماره سفارش یا ID
order-list
دریافت لیست سفارشات با فیلترهای مختلف
order-update
ویرایش اطلاعات سفارش مانند note، tags و shipping address
order-close
بستن سفارش (Close) پس از تکمیل
order-cancel
لغو سفارش با امکان Refund و Restock
product-create
ایجاد محصول جدید با عنوان، توضیحات، قیمت و تصاویر
product-get
دریافت اطلاعات کامل یک محصول
product-update
ویرایش اطلاعات محصول موجود
product-delete
حذف کامل محصول از فروشگاه
product-list
دریافت لیست محصولات با فیلتر و صفحهبندی
customer-create
ایجاد مشتری جدید در فروشگاه
customer-get
دریافت اطلاعات کامل یک مشتری
customer-update
ویرایش اطلاعات مشتری
customer-delete
حذف مشتری از فروشگاه
inventory-get
بررسی موجودی یک آیتم در لوکیشنهای مختلف
inventory-adjust
افزایش یا کاهش موجودی آیتم
inventory-set
تنظیم مقدار دقیق موجودی آیتم
fulfillment-create
ثبت ارسال سفارش با کد رهگیری
fulfillment-update
بهروزرسانی اطلاعات رهگیری ارسال
fulfillment-cancel
لغو ارسال ثبت شده
کاربردهای متداول
کاربردهای رایج
۱. اعلان سفارش جدید در تلگرام
هر بار که سفارش جدیدی ثبت شود، پیام کاملی با جزئیات به گروه تلگرام مدیران ارسال شود.
Shopify Trigger (orders/create)
→ Code (فرمت فارسی)
→ Telegram (sendMessage)
ChatId: @my_shop_orders
ParseMode: HTML
Text:
<b>سفارش جدید #{{$json.order_number}}</b>
مشتری: {{$json.customer.first_name}} {{$json.customer.last_name}}
ایمیل: {{$json.email}}
مبلغ: {{$json.total_price}} {{$json.currency}}
تعداد آیتم: {{$json.line_items.length}}
محصولات:
{{$json.line_items.map(i => '- ' + i.title + ' x' + i.quantity).join('\n')}}۲. همگامسازی موجودی با سیستم داخلی
هر بار که موجودی محصول در سیستم داخلی تغییر کند، در Shopify هم بهروزرسانی شود.
Webhook (تغییر موجودی انبار)
→ Shopify (inventory-adjust)
inventory_item_id: {{$json.shopify_item_id}}
location_id: {{$json.location_id}}
available_adjustment: {{$json.quantity_change}}
→ IF (موجودی < 5)
→ Telegram (هشدار موجودی کم)۳. ثبت خودکار ارسال با کد رهگیری
وقتی مرسوله در سیستم لجستیک ثبت شد، ارسال در Shopify ثبت شود.
Webhook (ثبت بارنامه از لجستیک)
→ Shopify (fulfillment-create)
orderId: {{$json.shopify_order_id}}
tracking_number: {{$json.tracking_code}}
tracking_company: "پست پیشتاز"
tracking_url: {{$json.tracking_url}}
notify_customer: true
→ Telegram (تایید ارسال)۴. پردازش خودکار سفارشات پرخطر (Fraud Detection)
بررسی سفارشات مشکوک و اعلان به تیم بررسی.
Shopify Trigger (orders/create)
→ IF (risk_level == 'high' OR total > 500)
→ Shopify (order-update) tags: "needs-review"
→ Telegram (هشدار سفارش مشکوک به ادمین)
→ Gmail (ارسال ایمیل به تیم بررسی)
→ Else
→ Shopify (order-update) tags: "auto-approved"۵. گزارش فروش روزانه
ارسال آمار فروش هر شب به گروه مدیران.
Schedule (هر شب ساعت ۲۳)
→ Shopify (order-list)
created_at_min: {{$today.toISO()}}
status: any
→ Code (محاسبه آمار)
const orders = $input.all().map(i => i.json);
const total = orders.reduce((s, o) => s + parseFloat(o.total_price), 0);
const paid = orders.filter(o => o.financial_status === 'paid');
→ Telegram (sendMessage)
Text:
گزارش فروش امروز:
تعداد سفارش: {{$json.count}}
مبلغ کل: {{$json.total}} USD
پرداخت شده: {{$json.paidCount}}
بالاترین سفارش: {{$json.maxOrder}}۶. ایجاد خودکار محصول از Google Sheets
وقتی محصول جدیدی در اسپردشیت اضافه شود، در Shopify ایجاد شود.
Google Sheets Trigger (ردیف جدید)
→ Shopify (product-create)
title: {{$json.title}}
body_html: {{$json.description}}
vendor: {{$json.brand}}
product_type: {{$json.category}}
variants: [{
price: {{$json.price}},
sku: {{$json.sku}},
inventory_quantity: {{$json.stock}}
}]
images: [{src: {{$json.image_url}}}]
status: "active"
→ Google Sheets (بهروزرسانی ستون shopify_id)۷. همگامسازی مشتریان با CRM
وقتی مشتری جدیدی در Shopify ثبت شود، در CRM هم ایجاد شود.
Shopify Trigger (customers/create)
→ HTTP Request (POST به CRM)
Body: {
name: {{$json.first_name}} {{$json.last_name}},
email: {{$json.email}},
phone: {{$json.phone}},
source: "Shopify",
tags: ["shopify-customer"]
}
→ MySQL (ذخیره mapping ID)۸. مدیریت خودکار تخفیفها
ایجاد کد تخفیف برای مشتریان VIP.
Schedule (اول هر ماه)
→ Shopify (customer-list) tags: "vip"
→ Loop
→ HTTP Request (Shopify API: ایجاد discount code)
POST /admin/api/2024-01/price_rules/{id}/discount_codes.json
Body: {"discount_code": {"code": "VIP-{{$json.id}}-{{$now.month}}"}}
→ Gmail (ارسال کد تخفیف به مشتری)۹. پشتیبانگیری از محصولات
ذخیره لیست کامل محصولات به صورت هفتگی.
Schedule (هر یکشنبه)
→ Shopify (product-list) limit: 250
→ Code (تبدیل به CSV)
→ Google Drive (Upload)
Name: shopify_products_{{$now.toFormat('yyyy-MM-dd')}}.csv
Folder: Backups/Shopify
→ Telegram (گزارش بکآپ)۱۰. سیستم بازگشت خودکار (Returns)
وقتی مشتری درخواست بازگشت دهد، سفارش بررسی و پردازش شود.
Webhook (درخواست بازگشت)
→ Shopify (order-get) orderId: {{$json.order_id}}
→ IF (order.created_at > 30 days ago)
→ Telegram (رد درخواست - خارج از مهلت)
→ Else
→ Shopify (order-update) tags: "return-requested"
→ Gmail (ارسال فرم بازگشت به مشتری)
→ Telegram (اعلان به تیم پشتیبانی)۱۱. فروش چند کاناله (Multi-channel)
همگامسازی محصولات بین Shopify و سایت فارسی.
Shopify Trigger (products/update)
→ HTTP Request (بهروزرسانی در سایت فارسی)
PUT /api/products/{{$json.sku}}
Body: {
title_fa: {{$json.metafield_title_fa}},
price_toman: {{$json.price * exchange_rate}},
stock: {{$json.inventory_quantity}}
}۱۲. هشدار محصول تمام شده
وقتی موجودی به صفر برسد اعلان ارسال شود.
Shopify Trigger (inventory_levels/update)
→ IF (available <= 0)
→ Shopify (product-get)
→ Telegram (sendMessage)
Text: "محصول {{$json.title}} تمام شد! SKU: {{$json.sku}}"
→ Google Sheets (ثبت در لیست سفارش مجدد)نکات حرفهای
نکات حرفهای
۱. از Shopify Trigger بجای Polling استفاده کنید
Shopify Trigger (webhook) بسیار سریعتر و بهینهتر از Schedule + API call است. Webhook در لحظه رویداد fire میشود.
۲. Rate Limit Management
Shopify محدودیت ۲ درخواست در ثانیه دارد. بین درخواستها Wait اضافه کنید:
Loop → Shopify API → Wait (600ms) → Next ItemHeader X-Shopify-Shop-Api-Call-Limit تعداد باقیمانده را نشان میدهد.
۳. استفاده از Tags برای مدیریت Workflow
Tags در Shopify بسیار قدرتمند هستند. از آنها برای مدیریت وضعیتها استفاده کنید:
auto-approved, needs-review, vip-customer,
exported-to-erp, fulfilled-partial, return-requested۴. Webhook Topics پرکاربرد
orders/create → سفارش جدید
orders/paid → پرداخت موفق
orders/fulfilled → ارسال کامل
orders/cancelled → لغو سفارش
products/create → محصول جدید
products/update → تغییر محصول
customers/create → مشتری جدید
inventory_levels/update → تغییر موجودی
refunds/create → بازگشت وجه
fulfillments/create → ثبت ارسال
app/uninstalled → حذف اپلیکیشن۵. Pagination برای دریافت همه دادهها
Shopify حداکثر ۲۵۰ آیتم در هر صفحه برمیگرداند. از cursor-based pagination استفاده کنید:
HTTP Request (GET)
URL: /admin/api/2024-01/products.json?limit=250
→ بررسی Link header برای صفحه بعدی
→ page_info parameter برای cursor pagination۶. Metafields برای دادههای سفارشی
از Metafields برای ذخیره دادههای اضافی فارسی استفاده کنید:
Metafield:
namespace: "custom"
key: "title_fa"
value: "عنوان فارسی محصول"
type: "single_line_text_field"۷. Bulk Operations برای عملیات بزرگ
برای بهروزرسانی صدها محصول، از Shopify GraphQL Bulk Operations استفاده کنید. بسیار سریعتر از API REST است.
۸. یکپارچهسازی با لجستیک ایرانی
برای فروشندگانی که از ایران ارسال میکنند:
Shopify (order/create)
→ Code (تبدیل آدرس)
→ HTTP Request (ثبت در پست پیشتاز / تیپاکس / اسنپاکسپرس)
→ Shopify (fulfillment-create) tracking_number + tracking_url۹. مقایسه با WooCommerce
- Shopify: بدون نیاز به سرور، سریعتر، payment بینالمللی
- WooCommerce: کنترل بیشتر، هزینه کمتر، سفارشیسازی بالاتر
- برای فروش بینالمللی: Shopify توصیه میشود
- برای بازار داخلی ایران: WooCommerce با درگاههای ایرانی
۱۰. Error Handling حرفهای
همیشه Error handling داشته باشید:
Shopify Node → Error Workflow:
→ Log Error (MySQL/MongoDB)
→ Telegram (هشدار به ادمین)
→ Retry (برای خطاهای موقت 429, 500, 503)۱۱. تبدیل ارز برای بازار ایران
Shopify (order/create)
→ HTTP Request (نرخ ارز لحظهای)
→ Code:
const priceUSD = parseFloat(order.total_price);
const rate = exchangeRate.USD_IRR;
const priceToman = Math.round(priceUSD * rate / 10);
// ذخیره در سیستم حسابداری ایرانی۱۲. Multi-location Inventory
اگر چند انبار دارید، موجودی هر لوکیشن را جداگانه مدیریت کنید:
GET /admin/api/2024-01/locations.json → لیست انبارها
GET /admin/api/2024-01/inventory_levels.json?location_ids=xxx۱۳. Draft Orders برای سفارشات دستی
برای سفارشات تلفنی یا خاص:
Telegram (دریافت سفارش تلفنی)
→ Shopify (Draft Order Create)
→ Shopify (Draft Order Complete) → تبدیل به سفارش واقعی۱۴. Shopify API Versioning
Shopify هر ۳ ماه نسخه جدید API منتشر میکند. از آخرین نسخه stable استفاده کنید:
2024-01, 2024-04, 2024-07, 2024-10نسخههای قدیمیتر از ۱ سال deprecated میشوند.
۱۵. Monitoring و Analytics
Schedule (هر ساعت)
→ Shopify (order-list) created_at_min: 1h ago
→ Code (محاسبه KPIs)
→ Google Sheets (ذخیره آمار)
→ IF (فروش < threshold)
→ Telegram (هشدار کاهش فروش)۱۶. استفاده از GraphQL Admin API
برای کوئریهای پیچیده، GraphQL بسیار بهینهتر است:
HTTP Request (POST)
URL: https://store.myshopify.com/admin/api/2024-01/graphql.json
Body: {
"query": "{ orders(first: 50, query: \"financial_status:paid\") { edges { node { id name totalPrice } } } }"
}رفع مشکلات
رفع مشکلات رایج
❌ خطای 401 Unauthorized
علت: Access Token نامعتبر یا منقضی شده
راهحل
- Access Token را بررسی و در صورت نیاز regenerate کنید
- مطمئن شوید توکن با
shpat_شروع میشود - اگر از OAuth استفاده میکنید، credential را reconnect کنید
- Shop subdomain را بدون
.myshopify.comوارد کنید
❌ خطای 403 Forbidden
علت: دسترسی API کافی نیست
راهحل
- API Scopes اپلیکیشن را بررسی کنید
- برای سفارشات:
read_ordersوwrite_ordersلازم است - برای محصولات:
read_productsوwrite_productsلازم است - پس از تغییر scopes، اپ را دوباره install کنید
❌ خطای 404 Not Found
علت: Resource پیدا نشد
راهحل
- شناسه سفارش/محصول/مشتری را بررسی کنید
- API version اشتباه نباشد (مثل 2024-01 vs 2024-04)
- محصول حذف یا archived نشده باشد
- Shop subdomain صحیح وارد شده باشد
❌ خطای 422 Unprocessable Entity
علت: دادههای ارسالی نامعتبر
راهحل
- فیلدهای required را بررسی کنید
- فرمت ایمیل معتبر باشد
- قیمت عدد مثبت باشد
- SKU تکراری نباشد
- وزن محصول عددی باشد
- از JSON Validator استفاده کنید
❌ خطای 429 Too Many Requests
علت: محدودیت Rate Limit
راهحل
- Shopify Rate Limit: ۲ درخواست/ثانیه (REST API)
- GraphQL: ۱۰۰۰ cost points/ثانیه
- از Wait Node بین درخواستها استفاده کنید:
Loop → Shopify → Wait (600ms) → Next- header
Retry-Afterرا بررسی کنید - از Bulk Operations برای عملیات بزرگ استفاده کنید
❌ خطای "Webhook creation failed"
علت: n8n نتوانسته webhook ثبت کند
راهحل
- مطمئن شوید n8n از اینترنت قابل دسترس است (public URL)
- Webhook URL نباید localhost باشد
- SSL معتبر لازم است (HTTPS)
- تعداد webhookها محدود است (حداکثر ۵ در هر topic)
- webhookهای قدیمی را پاک کنید
❌ مشکل Inventory Location
علت: Location ID اشتباه
راهحل
- لیست locations را بگیرید:
GET /admin/api/2024-01/locations.json
- هر فروشگاه حداقل یک location دارد
- برای Shopify Plus، چند location پشتیبانی میشود
- مطمئن شوید inventory tracking فعال است
❌ تصاویر محصول آپلود نمیشوند
علت: URL تصویر نامعتبر یا دسترسیپذیر نیست
راهحل
- URL تصویر باید public و HTTPS باشد
- فرمتهای مجاز: JPEG, PNG, GIF, WebP
- حداکثر حجم: ۲۰ مگابایت
- از CDN معتبر استفاده کنید
- تصویر را ابتدا در سرویس ابری آپلود کنید
