یکپارچه‌سازی CRM و ERP با فروشگاه؛ معماری و عملیات

یک سفارش ثبت می‌شود؛ فروشگاه موجودی را کم می‌کند، ERP پیام را نمی‌گیرد، CRM همان سفارش را دوباره می‌سازد و اپراتور هم Refund را از پنل درگاه انجام می‌دهد. نتیجه می‌تواند فروش کالای ناموجود، فاکتور تکراری یا بازپرداخت دوباره باشد. مشکل از «وصل‌نبودن نرم‌افزارها» نیست؛ از تعریف‌نشدن مالک داده، وضعیت سفارش و رفتار سیستم هنگام شکست است.

یکپارچه‌سازی CRM و ERP با فروشگاه اینترنتی پروژه نصب Connector نیست. این کار طراحی یک زنجیره عملیاتی است که باید بداند هر واقعیت کجا ساخته می‌شود، با چه شناسه‌ای حرکت می‌کند، Retry چه اثری دارد و اختلاف داده چگونه کشف و اصلاح می‌شود. در این راهنما، از تصمیم و Data contract تا معماری، امنیت، مهاجرت و عملیات روزانه پیش می‌رویم.

CRM، ERP و فروشگاه دقیقاً چه نقشی دارند؟

CRM تعاملات، سرنخ، فرصت فروش، رضایت ارتباطی و تاریخچه رابطه با مشتری را مدیریت می‌کند. ERP معمولاً مالک بخشی از عملیات مالی، حسابداری، خرید، کالا و منابع سازمان است. فروشگاه نیز تجربه Catalog، سبد، Checkout و ثبت سفارش آنلاین را ارائه می‌دهد. اما مرز واقعی به محصول و فرایند سازمان بستگی دارد؛ نام نرم‌افزار به‌تنهایی مالکیت داده را تعیین نمی‌کند.

در فروشگاه بزرگ‌تر، OMS برای چرخه سفارش، PIM برای اطلاعات محصول، WMS برای عملیات انبار، درگاه برای تراکنش و 3PL برای حمل نیز حضور دارند. اگر این نقش‌ها را به زور داخل «CRM یا ERP» جا دهید، مدل مبهم می‌شود.

قابلیتسیستم محتملپرسش مالکیت
هویت و ترجیح ارتباطی مشتریCRM / Identity / Consent serviceکدام سیستم Merge و لغو رضایت را نهایی می‌کند؟
نام، ویژگی و رسانه محصولPIM / ERP / Commerceنسخه قابل انتشار و تاریخ اثر کجا تأیید می‌شود؟
موجودی فیزیکی و قابل فروشWMS / ERP / OMSOn-hand، Reserved و Available-to-promise چه تفاوتی دارند؟
سفارش و وضعیت آنOMS / CommerceState machine و شماره مرجع نهایی متعلق به کجاست؟
تراکنش پرداختGateway / Payment serviceمنبع حقیقت موفقیت پرداخت Callback تأییدشده است یا Redirect مرورگر؟
فاکتور و سند مالیERP / Accountingچه رویدادی سند را قطعی، باطل یا اصلاح می‌کند؟
Pick، Pack و ShipmentWMS / 3PLکد رهگیری و وضعیت تحویل از کدام منبع پذیرفته می‌شود؟
تحلیل و گزارشWarehouse / BIآیا گزارش از رخداد عملیاتی ساخته می‌شود یا دیتابیس تولید را تغییر می‌دهد؟

«منبع واحد حقیقت» به معنی یک دیتابیس برای همه‌چیز نیست؛ یعنی برای هر واقعیت، یک مالک و قاعده حل تعارض روشن وجود دارد.

آیا اکنون به یکپارچه‌سازی CRM و ERP نیاز دارید؟

یکپارچگی همیشه ارزشمند نیست. اگر روزانه ده سفارش دارید و یک مسئول با Export کنترل‌شده، تطبیق و ثبت را درست انجام می‌دهد، اتوماسیون پیچیده ممکن است هزینه و ریسک بیشتری بسازد. ابتدا درد عملیاتی و حجم تغییر را اندازه بگیرید.

نشانهشاهد لازمپاسخ محتمل
Oversell یا لغو به‌علت موجودینرخ سفارش ناموجود و تأخیر Syncرزرو، ATP و همگام‌سازی سریع موجودی
ثبت دستی تکراریساعت کار، خطا و Reworkجریان سفارش به ERP با کنترل Idempotency
پشتیبانی بدون دید سفارشزمان پاسخ و انتقال بین تیم‌هانمای Read-only وضعیت معتبر در CRM
اختلاف مالیتفاوت Order، Payment، Invoice و RefundLedger و Reconciliation روزانه
کمپین اشتباهپیام پس از لغو رضایت یا خریدمالکیت Consent و Event معتبر Lifecycle
فقط علاقه به «Real-time»هیچ SLO یا زیان تأخیر تعریف نشدهابتدا SLA و ارزش تأخیر را تعیین کنید

Baseline را با تعداد سفارش، Peak، نرخ خطای دستی، زمان پردازش، اختلاف موجودی، Refund، تماس پشتیبانی و Contribution ثبت کنید. اگر مسئله اصلی در Pick/Pack و ارسال است، راهنمای مدیریت انبار، Fulfillment و ارسال ابتدا مدل عملیاتی را روشن می‌کند.

از Journey و Failure شروع کنید، نه از API

یک مسیر عمودی انتخاب کنید: مثلاً «ثبت سفارش تا تحویل» یا «مرجوعی تا بازپرداخت». سپس State، مالک، ورودی، خروجی، شکست و اقدام انسانی هر گام را ثبت کنید. فهرست Endpointها بدون این نقشه فقط نشان می‌دهد چه چیزی ممکن است، نه اینکه چه چیزی باید رخ دهد.

Journey: سفارش پرداخت‌شده تا ارسال
Trigger: payment.confirmed
Owner of order state: OMS
Inputs: order_id, payment_id, amount, currency, version
Effects: reserve/confirm inventory → create ERP order → release to WMS
Failure policy: retry bounded → quarantine → human review
Reconciliation: payment ↔ order ↔ invoice ↔ shipment
SLO: 99% orders released to warehouse within 5 minutes
Guardrails: no duplicate invoice, no negative ATP, no shipment before confirmation

برای ارزیابی عمومی API، Webhook، Batch، امنیت و خروج از Vendor، راهنمای یکپارچه‌سازی سایت چارچوب مکملی ارائه می‌کند. این مقاله روی مرزهای خاص CRM، ERP و Commerce تمرکز دارد.

ماتریس Source of Truth بسازید

برای هر Entity و حتی هر Field، «مالک نوشتن» را تعیین کنید. دوطرفه‌کردن Sync به‌طور پیش‌فرض تصمیم خطرناکی است. اگر شماره تلفن در فروشگاه و CRM هم‌زمان ویرایش شود، کدام برنده است؟ آیا Last-write-wins با ساعت‌های ناهماهنگ قابل اعتماد است؟ آیا اپراتور باید Conflict را ببیند؟

دادهمالک پیشنهادی نمونهجهت انتشارقاعده تعارض
SKU و واحد کالاERP/PIMبه Commerce و WMSویرایش خارج از مالک رد یا Flag شود
قیمت پایهERP/Pricingبه CommerceEffective_at و Currency اجباری
موجودی قابل فروشOMS/WMSبه CommerceVersion بالاتر؛ Snapshot برای بازیابی
سفارشOMS/Commerceبه ERP، CRM و WMSOrder ID پایدار؛ ایجاد فقط یک‌بار
وضعیت پرداختPayment serviceبه OMS و ERPتأیید Server-to-server و Amount match
رضایت بازاریابیConsent/CRMبه ابزارهای ارساللغو جدیدتر فوراً مقدم است
وضعیت حملWMS/3PLبه OMS، CRM و مشتریTransition مجاز و Event time
Refund مالیPayment/ERP با Orchestratorبه OMS و CRMReference و Idempotency مستقل

CRM برای «دید ۳۶۰ درجه» لازم نیست مالک کپی همه داده‌ها باشد. اغلب یک نمای ترکیبی یا Read model با حداقل فیلدهای لازم امن‌تر و تازه‌تر است. داده خام رفتار مرور نیز فقط با هدف، رضایت و دوره نگهداشت روشن وارد CRM شود.

شناسه مشترک و Data Contract

اتصال بدون شناسه پایدار، اختلاف را فقط سریع‌تر می‌کند. ایمیل یا تلفن کلید مناسبی برای سفارش نیست: تغییر می‌کند، ممکن است مشترک باشد و قالب‌های مختلف دارد. برای Customer، Product/SKU، Order، Order line، Payment، Invoice، Shipment، Return و Refund شناسه مستقل و جدول Cross-reference داشته باشید.

{
  "event_id": "01J...",
  "event_type": "commerce.order.paid.v2",
  "occurred_at": "2026-08-11T10:14:22Z",
  "producer": "payment-service",
  "correlation_id": "checkout_8f2...",
  "entity_id": "order_104872",
  "entity_version": 7,
  "currency": "IRR",
  "amount_minor": 248000000,
  "data": { "payment_id": "pay_..." }
}

قرارداد باید نوع، اجباری/اختیاری‌بودن، Enum، واحد، Currency، منطقه زمانی، Nullable، محدودیت طول، PII classification، Version و مثال داشته باشد. استاندارد CloudEvents یک Envelope بی‌طرف از Vendor برای شناسه، منبع، نوع و زمان رخداد پیشنهاد می‌کند؛ استفاده از آن جای تعریف معنای کسب‌وکاری Payload را نمی‌گیرد.

ریال، تومان، تاریخ و متن فارسی

در ایران، مقدار نمایشی «تومان» و مقدار API «ریال» را با یک Flag مبهم جابه‌جا نکنید. واحد پول و مقیاس عدد باید صریح باشند و Total از جمع Line، تخفیف، مالیات و ارسال Reconcile شود. زمان را در UTC ذخیره و نمایش را با Asia/Tehran انجام دهید. تاریخ شمسی فقط Presentation باشد مگر Contract واقعاً آن را مشخص کرده باشد. ی/ک، نیم‌فاصله، ارقام فارسی/لاتین، تلفن با کد کشور و آدرس چندخطی را با Fixture واقعی تست کنید.

Sync، Webhook یا Batch؟

«Real-time» یک روش واحد نیست. هر جریان بر اساس Latency budget، حجم، تحمل ناسازگاری و رفتار شکست انتخاب می‌شود.

الگومناسب برایریسککنترل لازم
API هم‌زماناستعلام کوتاه یا Validation لازم در Requestزنجیره وابستگی، Timeout و کندی CheckoutTimeout، Circuit breaker، Cache و Fallback
Webhookاعلان تغییر از SaaS یا درگاهتکرار، ترتیب نامطمئن و جعلSignature، Timestamp، Inbox، Queue و Fetch canonical
Event/Queueتغییرات حجیم و DecoupledEventual consistency و عملیات پیچیدهIdempotency، Ordering scope، DLQ و Replay
Batch/FileBackfill، Catalog بزرگ و تطبیق دوره‌ایتأخیر و Partial loadChecksum، Manifest، Watermark و Atomic publish
CDC/Outboxانتشار قابل اتکای تغییر مالک دادهSchema coupling و LagCommitted rows، Offset، Version و Idempotent consumer

برای Checkout، وابستگی هم‌زمان به CRM معمولاً لازم نیست؛ کندی CRM نباید خرید را متوقف کند. سفارش را در مالک خود ثبت و انتشار را صف‌بندی کنید. در مقابل، تأیید قیمت یا مجازبودن روش پرداخت ممکن است پیش از تعهد، پاسخ معتبر بخواهد. معماری رویدادمحور مزایا و هزینه‌های عملیاتی دارد؛ راهنمای Event-Driven، Outbox و Saga این Trade-off را عمیق‌تر بررسی می‌کند.

Point-to-point، Connector، iPaaS یا لایه سفارشی؟

گزینهمزیتمحدودیتFit
Connector بومیراه‌اندازی سریع و پشتیبانی VendorMapping و Failure policy محدودجریان استاندارد و حجم کم/متوسط
Point-to-pointساده برای یک اتصالبا رشد سیستم‌ها N×N و شکنندهموقت، محدود و با مالک روشن
iPaaSOrchestration، Mapping و مانیتورینگ آمادههزینه، Lock-in، محدودیت Runtime و دادهچند SaaS با الگوهای نسبتاً استاندارد
Integration service سفارشیکنترل Contract، Reliability و Securityهزینه ساخت و On-callدامنه متمایز و ریسک/حجم بالا
Hybridتفکیک Commodity از جریان بحرانیGovernance چند ابزاراغلب سازمان‌های در حال رشد

تصمیم را بر اساس Coverage سناریو، Limit API، Bulk/Delta، Webhook، Sandbox، Log، Replay، Data residency، Security، SLA، قیمت در Peak، Export و Exit بگیرید. فهرست برندهای مشهور، پاسخ معماری نیست. یک Pilot با داده نماینده اجرا کنید و Vendor را با خرابی واقعی بسنجید.

چرخه سفارش را State machine طراحی کنید

سفارش فقط «جدید، ارسال‌شده، تمام‌شده» نیست. Payment، Inventory، Fulfillment و مالی Lifecycleهای جدا دارند که باید با قانون به هم متصل شوند. پرداخت موفق لزوماً به معنی موجودی قطعی نیست و ارسال‌شدن لزوماً به معنی تحویل یا درآمد حفظ‌شده نیست.

Order: draft → placed → awaiting_payment → paid
      → allocated → released → shipped → delivered
      ↘ cancelled / partially_cancelled

Return: requested → approved → received → inspected
        → refund_authorized → refunded / rejected

Invalid transitions:
shipped → awaiting_payment
refunded → refund_authorized again
cancelled → released without explicit reopen command

هر Transition باید Actor، Preconditions، Event، Side effects و Compensation داشته باشد. Partial shipment، Split payment، قیمت تغییرکرده، Backorder، لغو بخشی، Return بخشی، RTO و Refund ناموفق را در طراحی اولیه بگنجانید. برای اجرای جزئیات Order automation، راهنمای اتوماسیون فروشگاه الگوی State machine، Inbox/Outbox و Reconciliation را شرح می‌دهد.

موجودی: On-hand با Available-to-promise یکی نیست

کم‌کردن موجودی در لحظه ایجاد سفارش کافی نیست. باید بدانید چه زمانی Reserve می‌کنید، Reservation چه TTL دارد، پرداخت ناموفق چه زمانی آن را آزاد می‌کند و Fulfillment از کدام Location انجام می‌شود.

ATP = On-hand
    - Reserved valid
    - Safety stock
    - Damaged / quarantine
    + Confirmed inbound allowed by promise policy

Update موجودی باید Version یا Sequence داشته باشد تا Event دیررس مقدار جدید را عقب نبرد. Snapshot دوره‌ای برای بازیابی و Event برای تغییر سریع می‌توانند کنار هم باشند. Negative inventory، Reservation منقضی، Stock divergence و Oversell را مانیتور کنید.

هویت مشتری و Consent را جدا از سفارش نگه دارید

Guest checkout، چند ایمیل، شماره تلفن تغییرکرده، خرید شرکتی و حساب مشترک خانواده باعث می‌شوند Merge ساده بر اساس ایمیل خطرناک باشد. یک Customer ID داخلی، Evidence اتصال شناسه‌ها و فرایند Merge/Unmerge قابل ممیزی لازم است.

خرید، رضایت برای پیام بازاریابی نیست. Purposeهای تراکنشی، پشتیبانی و بازاریابی را جدا کنید. لغو رضایت باید با Timestamp و Source به ابزارهای ارسال برسد و در شکست Sync، Fail-safe باشد. تحلیل سگمنت، RFM، CLV و Churn نیز پس از کیفیت Identity و سفارش معنا پیدا می‌کند؛ تحلیل داده مشتریان فروشگاه این لایه را پوشش می‌دهد.

Reliability: «دقیقاً یک‌بار» را وعده ندهید

Webhook و Queue ممکن است پیام را تکرار کنند؛ شبکه می‌تواند پاسخ را گم کند؛ Consumer ممکن است پس از انجام اثر و پیش از ثبت موفقیت Crash کند. بنابراین Side effectهای کسب‌وکاری باید Idempotent باشند. مستندات رسمی Stripe Webhooks نیز دریافت رویداد تکراری، پردازش Async و نگهداری Event IDهای پردازش‌شده را جزو بهترین رویه‌ها می‌داند؛ این اصل به Vendor خاص محدود نیست.

Idempotency و Inbox

برای Create order، Issue invoice و Refund کلید کسب‌وکاری مستقل داشته باشید. Consumer باید Event ID و Outcome را در همان مرز تراکنش ثبت کند. Retry با همان Key، نتیجه قبلی را برگرداند و اثر دوم نسازد.

Transactional Outbox

نوشتن سفارش در دیتابیس و انتشار Event دو عملیات جدا هستند. اگر یکی موفق و دیگری شکست بخورد، داده‌ها واگرا می‌شوند. الگوی Transactional Outbox در AWS Prescriptive Guidance تغییر دامنه و رکورد Outbox را در یک تراکنش ثبت و انتشار را جدا می‌کند؛ Consumer همچنان باید تکرار را تحمل کند.

Retry، DLQ و Replay

Retry باید محدود، با Exponential backoff و Jitter باشد. خطای Validation با Retry حل نمی‌شود و باید Quarantine شود. DLQ قبرستان پیام نیست: Owner، SLA، ابزار Inspect/Correct/Replay و ثبت اثر Replay لازم دارد. Replay باید همان Idempotency و Authorization مسیر عادی را طی کند.

Ordering و داده دیررس

Ordering جهانی معمولاً پرهزینه و غیرضروری است؛ ترتیب را در Scope سفارش یا SKU تعریف کنید. Entity version، Event time و Processing time را جدا نگه دارید. اگر `order.shipped.v8` پیش از `order.paid.v7` رسید، Transition نامعتبر نباید کورکورانه اعمال شود.

Reconciliation؛ شبکه ایمنی یکپارچه‌سازی

حتی معماری خوب هم اختلاف خواهد داشت. Reconciliation یک Job موقت بعد از Launch نیست؛ کنترل دائمی مالی و عملیاتی است. حداقل این مجموعه‌ها را مقایسه کنید:

  • Orderهای Paid در درگاه بدون Order متناظر؛
  • Orderهای Paid بدون Invoice یا Allocation؛
  • جمع Order lines با Invoice، Discount، Shipping و Tax؛
  • Refund در Payment بدون Credit note یا وضعیت Return؛
  • Shipment تحویل‌شده بدون تغییر سفارش؛
  • SKU/Price/Inventory نسخه متفاوت بین مالک و Storefront؛
  • Consent لغوشده‌ای که در ابزار ارسال فعال مانده است.

هر اختلاف باید Severity، Owner، Root cause، اصلاح داده، اصلاح سیستم و Audit trail داشته باشد. داشبورد «۱۰۰٪ Sync موفق» اگر داده گمشده را نمی‌بیند، آرامش کاذب می‌سازد.

امنیت API و Webhook

اتصال ERP مسیر پرقدرتی به قیمت، موجودی، مالی و اطلاعات مشتری است. یک Token مشترک با دسترسی کامل، Blast radius را بزرگ می‌کند. OWASP API Security Top 10 2023 ریسک‌هایی مانند Broken object/function authorization، مصرف نامحدود منابع، فهرست ناقص API و اعتماد ناامن به APIهای ثالث را برجسته می‌کند.

  • برای هر Integration هویت Workload، Scope و Least privilege جدا بسازید.
  • Webhook را با Signature روی Raw body، Timestamp و پنجره Replay بررسی کنید.
  • Secret را در Vault نگه دارید، Rotate کنید و هرگز در Log یا Payload نفرستید.
  • Object-level و Function-level authorization را Server-side کنترل کنید.
  • Rate limit، اندازه Payload، Schema و Allowlist نوع Event را اعمال کنید.
  • PII، Token پرداخت، قیمت خرید و یادداشت داخلی را از Event غیرضروری حذف کنید.
  • Log ممیزی برای تغییر Mapping، Replay، Override و دسترسی اضطراری بسازید.
  • Dependency و API مصرفی Vendor را Inventory و نسخه‌های منقضی را رصد کنید.

Redirect مرورگر مدرک قطعی پرداخت نیست؛ Callback امضاشده و استعلام Server-to-server باید Amount، Currency، Merchant و Reference را تطبیق دهند. راهنمای اتصال امن درگاه پرداخت چرخه Authorize/Capture/Verify/Refund و بازیابی خطا را جداگانه توضیح می‌دهد.

Observability را به Outcome وصل کنید

لاگ «Webhook ۲۰۰ شد» نمی‌گوید سفارش به انبار رسیده است. Correlation ID را از Checkout تا Payment، ERP، WMS و CRM حمل کنید و Telemetry فنی را به وضعیت کسب‌وکار متصل سازید.

لایهSLI نمونههشدار معنادار
TransportSuccess، Latency، Timeout، Rate-limitافزایش خطا یا P95 فراتر از SLO
QueueLag، Age، Backlog، DLQقدیمی‌ترین پیام از حد Journey بیشتر
ContractSchema rejection، Unknown enum/versionProducer تغییر ناسازگار داده است
EntityDuplicate، stale version، conflictOrder/SKU از قاعده مالکیت خارج شده
JourneyPaid→ERP، ERP→WMS، Ship→Notifyدرصد یا زمان گذار از SLO عبور کرده
BusinessOversell، Cancel، Refund، تماس، Marginاثر مشتری/مالی با Release هم‌بسته است

Metric dictionary و اتصال رویدادهای عملیاتی به Warehouse در راهنمای تحلیل داده‌های بازاریابی تکمیل می‌شود. CRM dashboard نباید با Revenue حسابداری یا سفارش مرجوع‌شده اشتباه گرفته شود.

تست‌هایی که قبل از Go-live لازم‌اند

  1. Contract test: نمونه نسخه جاری و قبلی، Field اختیاری، Enum ناشناخته و Payload بزرگ.
  2. Identity test: مهمان، مشتری تکراری، تلفن/ایمیل تغییرکرده، Merge و Unmerge.
  3. Order test: تخفیف، مالیات، ارسال، Variant، Bundle و سفارش جزئی.
  4. Payment test: Timeout، Callback تکراری، Redirect بدون Callback، Amount mismatch و Refund جزئی.
  5. Inventory test: رقابت دو خرید آخرین کالا، Reservation expiry و Event دیررس.
  6. Failure test: ERP قطع، Rate limit، Queue backlog، Poison message و Secret منقضی.
  7. Recovery test: Retry، Replay، DLQ، Reconciliation، Manual override و Rollback.
  8. Load test: Peak واقعی کمپین، Batch Catalog هم‌زمان و Backpressure.
  9. Security test: Signature جعلی، Replay، IDOR/BOLA، Scope اضافی و SSRF.

Fixtureها را با داده فارسی، تومان/ریال، شهرهای مختلف، کالاهای چندانباره و درگاه واقعی Sandbox بسازید. Success path به‌تنهایی معیار پذیرش نیست.

مهاجرت بدون Big Bang

ابتدا Inventory اتصال‌های موجود، فایل‌های دستی، Cron، Plugin، Spreadsheet و Overrideهای اپراتور را ثبت کنید. سپس یک Vertical slice کم‌ریسک را با Shadow read اجرا کنید: سیستم جدید خروجی تولید می‌کند اما هنوز فرمان نهایی نمی‌دهد. اختلاف را با مسیر قدیمی بسنجید.

  1. Backfill با Watermark و Checksum انجام شود.
  2. Dual-run فقط با مالک تصمیم و پایان مشخص باشد؛ دو نویسنده فعال نسازید.
  3. Cutover window، Freeze، Drain queue و Delta sync تعریف شود.
  4. معیار Go/No-go بر اساس Divergence، Error budget و Journey باشد.
  5. Rollback باید داده‌های ایجادشده پس از Cutover را Reconcile کند؛ برگشت Deploy کافی نیست.
  6. پس از Hypercare، مسیر قدیمی، Secret، Cron و دسترسی Legacy واقعاً بازنشسته شوند.

مثال اول: فروشگاه لوازم خانگی با دو انبار

ERP مالک SKU و قیمت پایه است، WMS موجودی فیزیکی هر انبار را نگه می‌دارد، OMS رزرو و ATP را محاسبه می‌کند و CRM فقط نمای سفارش و رضایت ارتباطی را دریافت می‌کند. در Checkout، فروشگاه قیمت منتشرشده و روش ارسال را می‌سنجد؛ پس از `payment.confirmed`، OMS رزرو را قطعی و سفارش ERP را با Idempotency key ایجاد می‌کند.

اگر ERP قطع باشد، پرداخت دوباره انجام نمی‌شود؛ سفارش در `paid_waiting_erp` می‌ماند، Queue Retry می‌کند و پس از SLO به اپراتور هشدار می‌دهد. Reconciliation درگاه با OMS، پرداخت بدون سفارش را پیدا می‌کند. اگر WMS فقط یک کالا داشته باشد، Reservation اتمیک مانع فروش دوم می‌شود.

مثال دوم: فروش B2B با اعتبار و قیمت قراردادی

CRM مالک Account، Opportunity و نقش‌های خرید است؛ ERP مالک Credit limit، Contract price و Invoice. فروشگاه B2B باید Account ID را به کاربر مجاز وصل کند و قیمت را با Effective date بگیرد. Quote تأییدشده به Order تبدیل می‌شود، اما تغییر قیمت یا اعتبار پس از تأیید باید Version و Approval جدید بسازد.

نمای CRM می‌تواند وضعیت سفارش و بدهی را نشان دهد، اما نباید Ledger مالی را بازنویسی کند. سفارش بزرگ، پرداخت اعتباری و ارسال جزئی Stateهای متفاوت دارند. Audit trail باید مشخص کند چه کسی Override کرده و مشتری کدام نسخه Quote را پذیرفته است.

ملاحظات ویژه اجرای یکپارچه‌سازی در ایران

  • دسترسی و مجوز: قبل از انتخاب SaaS خارجی، ثبت‌نام، KYC، پرداخت، تمدید، IP restriction، Export و سناریوی تعلیق را با مدرک بسنجید.
  • شبکه: Queue محلی، Buffer، Retry و Replay باید قطعی یا ناپایداری ارتباط بین سایت، ERP ابری و 3PL را تحمل کنند.
  • درگاه و تسویه: Callback، استعلام، شماره مرجع، تسویه و Refund هر PSP را Contract جدا ببینید.
  • ریال و تومان: واحد API، نمایش، حسابداری و گزارش را در Fixture و Reconciliation صریح کنید.
  • تقویم و زمان: UTC برای Event، Asia/Tehran برای عملیات و تبدیل شمسی فقط در لایه نمایش.
  • ERP محلی: وجود API به معنی Delta، Idempotency، Bulk، Webhook یا SLA نیست؛ با سناریوی واقعی Pilot کنید.
  • کانال دستی: سفارش تلفنی یا پیام‌رسان باید Order ID رسمی بگیرد؛ Spreadsheet موازی نباید منبع پنهان حقیقت شود.
  • خروج: Export داده، مستند Mapping، Secret rotation، مالکیت کد و Runbook انتقال را در قرارداد بیاورید.

اگر فروش هم‌زمان در سایت، شعبه، شبکه اجتماعی و Marketplace انجام می‌شود، استراتژی Omnichannel مالکیت Inventory، Customer و Order میان کانال‌ها را در سطح کسب‌وکار تکمیل می‌کند.

نقشه ۹۰روزه پیاده‌سازی

بازهکارخروجی و Gate
روز ۱ تا ۱۵Baseline، Journey، Entity و Integration inventoryScope عمودی، درد کمی‌شده و Owner
روز ۱۶ تا ۳۰Source-of-truth، ID، State و Data contractContract نسخه‌دار و Conflict policy
روز ۳۱ تا ۴۵Proof of concept و ارزیابی Connector/iPaaS/BuildFailure evidence، TCO و Exit
روز ۴۶ تا ۶۰Vertical slice، Queue، Idempotency، Security و TelemetryContract/Failure/Load tests سبز
روز ۶۱ تا ۷۵Shadow run، Backfill و ReconciliationDivergence زیر Threshold
روز ۷۶ تا ۹۰Canary، Cutover محدود و HypercareScale، Hold یا Rollback بر اساس SLO

چک‌لیست پذیرش و عملیات

  • برای هر Entity و Field بحرانی، مالک نوشتن و حل تعارض مشخص است.
  • شناسه‌های Customer/Order/Payment/Invoice/Shipment/Return پایدار و قابل تطبیق‌اند.
  • State machine، Transition نامعتبر، Partial و Compensation مستند شده‌اند.
  • API/Webhook/Event/Batch بر اساس SLO انتخاب شده، نه شعار Real-time.
  • Idempotency، Inbox/Outbox، Retry، DLQ، Replay و Ordering تست شده‌اند.
  • Reconciliation مالی، سفارش، موجودی، حمل و Consent Owner و SLA دارد.
  • Least privilege، Signature، Replay defense، Secret rotation و Audit فعال‌اند.
  • Correlation، Lag، Divergence و Outcome مشتری/مالی مانیتور می‌شوند.
  • سناریوی قطعی شبکه، Rate limit، Vendor outage و Rollback تمرین شده است.
  • Runbook، RACI، On-call، TCO، Export و Exit در تحویل نهایی وجود دارد.

پرسش‌های متداول یکپارچه‌سازی CRM و ERP با فروشگاه

تفاوت CRM و ERP در فروشگاه اینترنتی چیست؟

CRM رابطه، تعامل، سرنخ و رضایت ارتباطی را مدیریت می‌کند؛ ERP معمولاً عملیات مالی، کالا، خرید و منابع را پوشش می‌دهد. مرز دقیق به معماری کسب‌وکار بستگی دارد و ممکن است OMS، PIM یا WMS مالک بعضی داده‌ها باشند.

از CRM شروع کنیم یا ERP؟

از مسئله شروع کنید. اگر Oversell و پردازش سفارش زیان می‌سازد، جریان Commerce→OMS/ERP/WMS اولویت دارد. اگر پیگیری Lead و پشتیبانی شکسته است، CRM زودتر ارزش می‌دهد. اتصال همه سیستم‌ها در فاز اول الزامی نیست.

آیا همگام‌سازی دوطرفه بهتر است؟

نه لزوماً. Sync دوطرفه تعارض، Loop و ابهام مالکیت می‌سازد. برای هر Field یک مالک نوشتن تعیین کنید و فقط جایی دوطرفه شوید که Use case، Merge rule و Audit روشن دارد.

Webhook یعنی همگام‌سازی دقیقاً یک‌بار؟

خیر. Webhook ممکن است تکراری، دیر یا خارج از ترتیب برسد. Signature، Queue، Inbox، Idempotency، Entity version، Retry محدود و Reconciliation برای پردازش قابل اتکا لازم‌اند.

یکپارچه‌سازی CRM و ERP چقدر زمان می‌برد؟

عدد ثابت معتبری وجود ندارد. تعداد Entity و Journey، کیفیت API، داده Legacy، حجم، الزامات مالی، تست شکست و آمادگی تیم زمان را تعیین می‌کنند. یک Vertical slice را می‌توان زودتر Pilot کرد، اما Rollout کامل باید به شواهد SLO و اختلاف داده وابسته باشد.

جمع‌بندی

یکپارچه‌سازی CRM و ERP با فروشگاه زمانی موفق است که Customer، Product، Inventory، Order، Payment و Finance هرکدام مالک و قرارداد روشن داشته باشند. API سریع بدون Idempotency، Reconciliation و عملیات شکست، فقط خطا را با سرعت بیشتری پخش می‌کند.

یک Journey ارزشمند را انتخاب کنید، State و Source of truth را تثبیت کنید، مسیر را در برابر تکرار و قطعی مقاوم سازید و Outcome واقعی را بسنجید. سپس با Canary و Gate شواهد گسترش دهید. این رویکرد شاید از نصب یک Plugin کندتر به نظر برسد، اما چیزی می‌سازد که در روز شلوغ، Refund و قطعی شبکه نیز قابل اعتماد بماند.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *