فرض کنید یک پرداخت انجام شده، سفارش جدیدی ثبت شده یا وضعیت یک درخواست در یک سرویس دیگر تغییر کرده است. اگر سیستم شما مجبور باشد هر چند ثانیه یک‌بار از آن سرویس بپرسد «اتفاق جدیدی افتاده؟»، هم منابع زیادی مصرف می‌شود و هم طراحی سیستم پیچیده‌تر خواهد شد. Webhook برای حل همین مسئله استفاده می‌شود.

تعریف ساده: Webhook روشی است که یک سیستم هنگام وقوع یک رویداد، به‌صورت خودکار اطلاعات را به آدرس مشخصی در سیستم دیگر ارسال می‌کند.

Webhook چیست؟

Webhook یک روش ارتباطی مبتنی بر رویداد است.

یعنی به‌جای اینکه سیستم شما دائماً وضعیت یک سرویس دیگر را بررسی کند، آن سرویس هنگام وقوع یک اتفاق مشخص، خودش درخواست HTTP را به آدرس شما ارسال می‌کند.

ارسال آنی اطلاعات
مبتنی بر رویداد
کاهش درخواست اضافی
مناسب اتوماسیون
ارتباط سیستم‌ها
اجرای عملیات خودکار

Webhook چگونه کار می‌کند؟

برای استفاده از Webhook معمولاً یک URL در سیستم دریافت‌کننده تعریف می‌شود.

سرویس ارسال‌کننده این URL را ذخیره می‌کند و زمانی که رویداد موردنظر رخ دهد، اطلاعات آن رویداد را به این آدرس می‌فرستد.

وقوع رویداد ← ساخت Payload ← ارسال Webhook ← دریافت در سرور ← اجرای عملیات

برای مثال بعد از پرداخت موفق، سرویس پرداخت می‌تواند اطلاعات تراکنش را به یک Endpoint در سایت شما ارسال کند.

تفاوت Webhook و API چیست؟

API

  • سیستم شما درخواست را شروع می‌کند
  • برای دریافت اطلاعات باید Query ارسال شود
  • برای عملیات مستقیم مناسب است
  • کنترل درخواست دست سیستم فراخواننده است

Webhook

  • سرویس مقابل درخواست را شروع می‌کند
  • اطلاعات هنگام رخداد ارسال می‌شوند
  • برای Notification و Automation مناسب است
  • بر اساس Event اجرا می‌شود
API معمولاً یعنی «من از تو اطلاعات می‌خواهم»، Webhook یعنی «اگر اتفاقی افتاد، خودت به من خبر بده».

Polling چیست و چه تفاوتی با Webhook دارد؟

در Polling سیستم شما در فاصله‌های زمانی مشخص از سرویس دیگر وضعیت جدید را سؤال می‌کند.

برای مثال:

سؤال وضعیت ← پاسخ ← چند ثانیه انتظار ← سؤال مجدد

اگر تغییرات کم باشند، تعداد زیادی از این درخواست‌ها ممکن است بی‌نتیجه باشند.

Webhook در چنین شرایطی کارآمدتر است، چون فقط زمانی درخواست ارسال می‌شود که اتفاقی افتاده باشد.

یک مثال ساده از Webhook

فرض کنید یک فروشگاه اینترنتی دارید و شرکت حمل‌ونقل وضعیت بسته را تغییر می‌دهد.

بدون Webhook ممکن است سایت مجبور باشد مرتباً بپرسد:

وضعیت مرسوله شماره 1234 چیست؟

اما با Webhook، سرویس حمل‌ونقل هنگام تغییر وضعیت، خودش اطلاعات جدید را برای سایت ارسال می‌کند.

تحویل به پست ← Webhook ← بروزرسانی سفارش ← ارسال پیامک مشتری

Payload در Webhook چیست؟

Payload همان اطلاعاتی است که داخل درخواست Webhook ارسال می‌شود.

در بسیاری از سرویس‌ها این اطلاعات با فرمت JSON ارسال می‌شوند.

مثلاً یک Webhook پرداخت ممکن است شامل موارد زیر باشد:

شماره تراکنش
مبلغ
وضعیت
شماره سفارش
زمان پرداخت
شناسه درگاه

Webhook Endpoint چیست؟

Endpoint آدرسی از سرور شماست که درخواست Webhook را دریافت می‌کند.

مثلاً:

https://example.com/webhooks/payment

این مسیر باید درخواست را دریافت، اعتبارسنجی و سپس بر اساس نوع رویداد پردازش کند.

Webhook در پرداخت آنلاین

یکی از کاربردهای مهم Webhook، سیستم‌های پرداخت آنلاین است.

در بعضی سرویس‌ها، وضعیت پرداخت یا تسویه از طریق Webhook به سیستم شما اعلام می‌شود.

پرداخت مشتری ← تأیید درگاه ← Webhook ← ثبت تراکنش ← تغییر وضعیت سفارش
دریافت Webhook به‌تنهایی نباید بدون بررسی امنیتی باعث تغییر وضعیت مالی سفارش شود.

Webhook در CRM

CRM می‌تواند با Webhook به سرویس‌های مختلف متصل شود.

مثلاً با ثبت مشتری جدید، اطلاعات آن به یک سیستم دیگر ارسال شود.

ثبت Lead ارسال اطلاعات سرنخ جدید به سرویس فروش.
تغییر مرحله فروش اجرای عملیات هنگام تغییر وضعیت فرصت فروش.
خرید مشتری بروزرسانی خودکار اطلاعات مالی مشتری.
پشتیبانی ایجاد تیکت هنگام وقوع یک رویداد خاص.

Webhook و سامانه پیامکی

بعضی سرویس‌های پیامکی از Webhook برای اعلام وضعیت ارسال پیام استفاده می‌کنند.

در این حالت سیستم می‌تواند متوجه شود پیام:

ارسال شده
تحویل شده
ناموفق بوده
رد شده

و نتیجه را داخل گزارش‌های خودش ثبت کند.

Webhook در اتوماسیون کسب‌وکار

Webhook یکی از ابزارهای مهم برای اتصال مراحل مختلف یک فرآیند است.

مثلاً:

ثبت فرم ← Webhook ← ایجاد مشتری ← ساخت تسک ← ارسال پیامک

بدون اینکه یک کاربر مجبور باشد همه این مراحل را دستی انجام دهد.

Event در Webhook چیست؟

هر Webhook معمولاً برای یک یا چند Event تعریف می‌شود.

نمونه Eventها:

  • order.created
  • payment.success
  • payment.failed
  • ticket.created
  • customer.updated
  • invoice.paid

نام دقیق Eventها به سرویس مورد استفاده بستگی دارد.

امنیت Webhook چرا مهم است؟

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

برای همین معمولاً از روش‌هایی مانند:

Signature
Secret Key
Timestamp
HTTPS
IP Validation
ثبت Log

استفاده می‌شود.

هیچ Webhook مالی یا حساس نباید فقط به داده ورودی اعتماد کند.

Webhook Signature چیست؟

یکی از روش‌های رایج امنیت، امضای درخواست است.

سرویس ارسال‌کننده با استفاده از یک Secret مشخص، Signature تولید می‌کند و همراه درخواست می‌فرستد.

سرور دریافت‌کننده نیز Signature را دوباره محاسبه کرده و آن را با مقدار دریافت‌شده مقایسه می‌کند.

اگر دو مقدار یکسان نباشند، درخواست نباید معتبر در نظر گرفته شود.

چرا یک Webhook ممکن است چند بار ارسال شود؟

سرویس ارسال‌کننده ممکن است پاسخ مناسب دریافت نکند و تصور کند درخواست قبلی ناموفق بوده است.

در این شرایط ممکن است همان Event دوباره ارسال شود.

Handler باید Idempotent باشد؛ یعنی دریافت چندباره یک Event نباید باعث چند بار انجام شدن عملیات مالی یا حساس شود.

Retry در Webhook چیست؟

اگر سرور دریافت‌کننده در دسترس نباشد، بسیاری از سرویس‌ها بعداً دوباره تلاش می‌کنند.

ارسال Webhook ← خطا ← انتظار ← Retry

تعداد Retry و فاصله آن‌ها به سیاست سرویس ارسال‌کننده بستگی دارد.

سرور باید چه پاسخی به Webhook بدهد؟

معمولاً سرویس ارسال‌کننده انتظار دارد سرور شما در مدت کوتاهی یک HTTP Status موفق برگرداند.

بهتر است عملیات سنگین داخل همان درخواست انجام نشود.

در سیستم‌های بزرگ‌تر می‌توان Event را ابتدا ذخیره کرد و پردازش اصلی را به Queue سپرد.

ثبت Log برای Webhook

Webhookها معمولاً در پس‌زمینه اجرا می‌شوند، بنابراین بدون Log پیدا کردن خطا دشوار خواهد بود.

بهتر است اطلاعاتی مثل:

  • زمان دریافت
  • نوع Event
  • شناسه Event
  • وضعیت پردازش
  • پاسخ سیستم
  • خطای احتمالی

ثبت شوند.

Webhook و Queue

اگر تعداد Eventها زیاد باشد، بهتر است درخواست دریافت‌شده سریع تأیید شود و پردازش اصلی بعداً انجام شود.

Webhook ← ثبت Event ← Queue ← Worker ← اجرای عملیات

این معماری باعث می‌شود سرویس در ترافیک بالا پایدارتر باشد.

چه زمانی از Webhook استفاده کنیم؟

Webhook زمانی انتخاب خوبی است که لازم باشد سیستم شما سریع از وقوع یک رویداد در سیستم دیگر مطلع شود.

پرداخت اعلام وضعیت تراکنش یا تسویه.
CRM اطلاع از تغییرات مشتری یا فرصت فروش.
فروشگاه همگام‌سازی سفارش و ارسال.
تیکتینگ اجرای عملیات بعد از ایجاد یا پاسخ تیکت.
پیامک دریافت Delivery Report.
اتوماسیون شروع خودکار مرحله بعدی فرآیند.

آیا API و Webhook می‌توانند همزمان استفاده شوند؟

بله؛ در واقع این یکی از متداول‌ترین معماری‌ها است.

برای مثال سایت ابتدا از طریق API یک تراکنش ایجاد می‌کند و بعد نتیجه تغییرات آن را از طریق Webhook دریافت می‌کند.

API Request ← ایجاد عملیات ← تغییر وضعیت ← Webhook ← بروزرسانی سیستم
یکپارچه‌سازی سیستم‌ها با وب مرتضی

سیستم‌ها وقتی ارزش بیشتری دارند که بتوانند با یکدیگر صحبت کنند.

در WebMorteza می‌توان API و Webhook سرویس‌های مختلف مانند پرداخت، پیامک، CRM، فروشگاه و نرم‌افزارهای سازمانی را به یکدیگر متصل کرد و فرآیندهای دستی را به عملیات خودکار تبدیل کرد.

Webhook API Integration Payment CRM Automation Queue
درخواست اتصال سرویس‌ها

سؤالات متداول درباره Webhook

Webhook همان API است؟

خیر. در API معمولاً سیستم شما درخواست را آغاز می‌کند، اما Webhook هنگام وقوع یک Event از سمت سرویس دیگر ارسال می‌شود.

آیا Webhook نیاز به HTTPS دارد؟

برای سیستم‌های واقعی و مخصوصاً اطلاعات حساس، استفاده از HTTPS بسیار مهم است.

اگر Webhook دو بار دریافت شود چه اتفاقی می‌افتد؟

سیستم باید به شکلی طراحی شود که Event تکراری باعث اجرای دوباره عملیات حساس نشود.

Webhook برای پرداخت مناسب است؟

بله، اما درخواست باید اعتبارسنجی شود و برای عملیات مالی کنترل‌های امنیتی مناسب وجود داشته باشد.

Webhook بهتر است یا Polling؟

اگر سرویس امکان Webhook داشته باشد و نیاز به اطلاع سریع از تغییرات وجود داشته باشد، معمولاً Webhook درخواست‌های غیرضروری کمتری ایجاد می‌کند.

جمع‌بندی

Webhook یکی از ساده‌ترین راه‌ها برای واکنش خودکار سیستم‌ها به رویدادها است.

به‌جای اینکه نرم‌افزار دائماً وضعیت سرویس‌های دیگر را بررسی کند، سرویس مقابل می‌تواند هنگام وقوع یک اتفاق، اطلاعات لازم را مستقیماً ارسال کند.

اگر امنیت، Retry، ثبت Log و جلوگیری از Eventهای تکراری درست طراحی شوند، Webhook می‌تواند بخش مهمی از معماری اتوماسیون و یکپارچه‌سازی سیستم‌ها باشد.

API برای درخواست کردن است؛ Webhook برای باخبر شدن از اتفاقی که رخ داده.

مرتضی قاسم پور

گفت‌وگو درباره این مطلب

۰ دیدگاه