شما در حال مطالعه نسخه آفلاین یکی از مطالب «مجله فرادرس» هستید. لطفاً توجه داشته باشید، ممکن است برخی از قابلیتهای تعاملی مطالب، مانند امکان پاسخ به پرسشهای چهار گزینهای و مشاهده جواب صحیح آنها، نمایش نتیجه آزمونها، پاسخ تشریحی سوالات، پخش فایلهای صوتی و تصویری و غیره، در این نسخه در دسترس نباشند. برای دسترسی به نسخه آنلاین مطلب، استفاده از کلیه امکانات آن و داشتن تجربه کاربری بهتر اینجا کلیک کنید.
وب هوک (Webhook) پیام خودکاری است که در صورت وقوع یک رویداد به وسیله اپلیکیشنها ارسال میشود و در برنامه نویسی وب کاربرد دارد. Webhook حاوی یک بسته اطلاعاتی (Payload) است که به یک آدرس منحصربفرد (URL) ارسال میشود. وب هوک تقریباً همیشه روش بهتری نسبت به سرکشی کردن (Polling) به حساب میآید. Webhook بسیار شبیه به نوتیفیکیشنپیامک عمل میکند. در این مطلب، سعی شده است به طور کامل به این سئوال که وب هوک چیست پاسخ و تمام مسائل مربوط به آن با بیانی ساده و روان توضیح داده شود.
برای درک بهتر اینکه وب هوک چیست بهتر است دانش ابتدایی پیرامون HTTP وجود داشته باشد. بنابراین، در ابتدای مطلب «وب هوک (WebHook) چیست» به شرح مختصری درباره HTTP پرداخته شده است.
HTTP چیست ؟
HTTP سرنامی برای عبارت «Hypertext Transfer Protocol» که ترجمه فارسی آن، «پروتکل انتقال ابرمتن» یا «منشور انتقال ابرمتن» است. یک پروتکل، در واقع استانداردی برای برقرای ارتباط است. درست مثل وقتی که در یک ملاقات اولیه، فردی خودش را به فرد دیگری معرفی میکند. HTTP پروتکلی است که نحوه انتقال داده (انتقال ابر متن | انتقال Hypertext) را در برنامههایی مثل یک مرورگر وب تعیین میکند.
میلیونها وب سرور (Web Server) از میلیاردها وبسایت میزبانی میکنند. تمامی وب سرورها درست مثل مرورگرهای وب به زبان HTTP ارتباط برقرار میکنند.
درخواست HTTP چیست ؟
زمانی که یک مرورگر قصد واکشی داده را از وب سرور داشته باشد، درخواستی برای دریافت آن داده با استفاده از HTTP ارسال میکند. به چنین تقاضایی «درخواست HTTP» یا «HTTP Request» گفته میشود. یک وب سرور میتواند از حجم عظیمی از دادهها میزبانی کند. بنابراین، در درخواست HTTP باید جزئیات کاملی در خصوص داده درخواستی وجود داشته باشد. پروتکل HTTP نحوه درخواست داده از جانب کلاینت را تعیین میکند.
درخواستهای GET و POST دو نوع از درخواستهای HTTP هستند. در اصل، GET برای واکشی و دریافت دادهها از سرور و POST برای درج یا بهروزرسانی دادهها در سرور استفاده میشوند. اکنون زمان آن فرا رسیده است که به سوال «وب هوک چیست» پاسخ داده شود.
وب هوک چیست ؟
وب هوک یکی از روشهایی است که به وسیله آن، وباپلیکیشنها میتوانند با هم در ارتباط باشند. با استفاده از وب هوک میتوان از APIهای شخص ثالث در پروژه توسعه اپلیکیشن استفاده کرد. وب هوک این امکان را فراهم میکند که هر گاه یک رویداد (Event) اتفاق افتاد، دادههای آنی (Real-Time) از یک اپلیکیشن به اپلیکیشن دیگر ارسال شوند. برای درک بهتر اینکه وب هوک چیست ابتدا بهتر است مفهوم رویداد شرح داده شود.
رویدادها اعمال برانگیخته (trigger) شده توسط انسانها در یک اپلیکیشن هستند. برای مثال، با کلیک کردن روی گزینه افزودن به سبد خرید، ارسال پیام به شخص دیگر یا سر زدن به یک صفحه وب خاص، همگی رویدادهای برانگیخته شده توسط افراد هستند. دادههایی به این رویدادها مرتبط هستند.
برای مثال، وقتی یک گزینه به سبد خرید اضافه میشود، برچسب زمانی (Timestamp)، نام آن گزینه و قیمت آن احتمالاً بخشی از دادههایی هستند که به دنبال آن رویداد تولید میشوند. در تلگرام، وقتی پیغامی به یک بات ارسال میشود، برچسب زمانی، شناسه کاربری، شناسه پیام مربوطه و محتوای پیام، همگی جزء دادههایی هستند که تولید میشوند. برای درک بهتر اینکه وب هوک چیست، بهتر است با چند مثال آغاز کرد.
تعریف وب هوک با چند مثال
در این بخش از مطلب «وب هوک چیست»، مثالهایی برای درک بهتر اینکه وب هوک چیست ارائه شده است. ابتدا به مثال رستوران پرداخته میشود.
برای مثال، فرض میشود صاحب یک رستوران اپلیکیشنی با استفاده از Foursquare API (یک API بر بستر دادههای مکانی) برای پایش زمان ورود مشتریان به رستورانش ساخته باشد. در حالت ایدهآل، صاحب رستوران میخواهد این امکان را داشته باشد که به محض ورود یک مشتری، بتواند با خطاب قرار دادن نام وی و یک نوشیدنی رایگان از او استقبال کند.
کاری که یک وب هوک انجام میدهد به این صورت است که در صورت ورود یک مشتری، صاحب رستوران بلافاصله از طریق Foursquare مطلع خواهد شد و در نتیجه، در زمان وقوع این رویداد، صاحب رستوران میتواند هر عملیات و پردازش مورد نظر را در اپلیکیشن خود اجرا کند. بنابراین، دادهها بر بستر وب (HTTP) از اپلیکیشنی که رویداد در آنجا اتفاق افتاده به اپلیکیشن دریافت کننده ارسال میشوند. اپلیکیشن دریافت کننده، دادهها را میگیرد و بسته به نوع سرویس و کاری که باید انجام شود، پردازش لازم را روی دادهها انجام میدهد. در ادامه، مفهوم وب هوک به صورت بصری نمایش شده است.
این انتقال داده، بر بستر وب و از طریق «URL وب هوک» اتفاق میافتد. URL همان نشانی اینترنتی (Uniform Resource Locator) است. یک URL وب هوک به وسیله اپلیکیشن دریافت کننده (سیستم B) فراهم میشود و مثل یک شماره تلفن عمل میکند. وقتی یک رویداد رخ میدهد، سیستم A از طریق این شماره تلفن با سیستم B تماس میگیرد.
البته، این ساز و کار نسبت به شماره تلفن کمی پیچیدهتر است. چرا که، دادههای مربوط به یک رویداد، در قالب JSON یا XML به آدرس وب هوک (URL وب هوک) ارسال میشوند که به آن «بسته اطلاعاتی» یا همان «Payload» گفته میشود. در ادامه به عنوان مثال، یک URL وب هوک به همراه بسته اطلاعاتی در حال انتقال، ارائه شده است.
مثال لنگرگاه
در این بخش، تصویری از یک لنگرگاه برای روشن شدن نحوه عملکرد وب هوک ارائه شده است. ابتدا، یک جرثقیل محفظه باری را از یک کشتی بلند میکند و آن را روی جایگاه بارگیری قرار میدهد. از آنجا، هر کسی که در حال کنترل لنگرگاه باشد، میتواند تعیین کند که چه کاری با محموله انجام شود. به عنوان مثال، محفظه بار باید برداشته شده و روی کشتی دیگری قرار داده شود.
حالا اگر جرثقیل به عنوان وب هوک در نظر گرفته شود و دو کشتی درواقع، دو اپلیکیشن مختلف و جایگاه بارگیری نیز، URL وباپلیکیشن مورد نظر باشند، وب هوک داده را از اپلیکیشن شماره یک واکشی میکند و آن را به URL وباپلیکیشن میفرستد. از آنجا میتوان انتخاب کرد که آن دادهها به اپلیکیشن شماره دو فرستاده شوند یا هر کار دیگری با آنها انجام داده شود. در واقع، محفظه بار در مالکیت URL وباپلیکیشن است و بنابراین، وباپلیکیشن میتواند آن را وارسی (Inspect) یا ارسال کند.
اکنون، به کمک مثالهایی که ارائه شد، درکی از اینکه وب هوک چیست بدست آمد. بهتر است این سئوال پرسیده شود که چرا از وب هوک استفاده میشود؟ در ادامه، سعی شده به این سئوال پاسخ داده شود.
چرا از وب هوک استفاده می شود ؟
برای درک بهتر دلیل استفاده از وب هوک، باز هم توضیحات لازم در قالب مثالهایی ارائه شده است. در ادامه مطلب «وب هوک چیست»، مثالی در خصوص استفاده از وب هوک برای ارتباط خودکار یک سایت عضویت با سرویس خدمات پرداخت جهت بهروزرسانی وضعیت پرداخت مشتریان ارائه شده است.
اگر تصور شود یک وب سایت خدمات خاصی را تنها به اعضای ثبتنام شده ارائه میدهد (سایت عضویت | Membership Site)، هر بار که یک مشتری از طریق یک درگاه پرداخت (مثل آپ)، مبلغی را برای استفاده از خدمات سایت پرداخت میکند، صاحب سایت ناچار است اطلاعات پرداخت را به صورت دستی در برنامه مدیریت اعضا (Membership Management Application) وارد و ثبت کند. این کار برای این انجام میشود که مشتری بتواند پس از پرداخت و ثبتنام، وارد سایت شده و از خدمات آن استفاده کند.
دلیل استفاده از وب هوک در سایت عضویت
در صورت افزایش تعداد اعضای سایت، ثبت اطلاعات پرداخت هر مشتری به صورت دستی، به یک فرآیند بسیار ملالآور تبدیل میشود و منطقی به نظر نمیرسد. بنابراین، اگر اپلیکیشن ارائه دهنده خدمات پرداخت و برنامه عضوگیری میتوانستند به صورت خودکار با هم در ارتباط باشند، آن وقت هر کسی که پرداخت را از طریق ارائه دهنده خدمات پرداخت انجام میداد، به صورت خودکار به عنوان یک عضو در سایت عضویت اضافه میشد. استفاده از یک وب هوک، یکی از روشهای انجام چنین کاری است.
اگر فرض شود که ارائه دهنده خدمات پرداخت و نرمافزار مدیریت اعضا، هر دو انضمام (integration) وب هوک را داشته باشند، آنگاه امکان تنظیم انضمام اپلیکیشن ارائه دهنده خدمات برای ارسال خودکار اطلاعات پرداخت مشتری در هر رویداد پرداخت وجود خواهد داشت.
مثال استفاده از وب هوک در نرمافزار بازاریابی ایمیل
وب هوک ابزار فوقالعادهای است که روال کار را بسیار آسان میکند و از حجم کارها میکاهد. این محبوبیت به این معنا است که میتوان بسیاری از وباپلیکیشنهایی را که در حال استفاده هستند به وب هوک تجهیز کرد. برای مثال، اتصال نرمافزار بازاریابی از طریق ایمیل (Email Marketing Software) با سایر برنامههای کاربردی از طریق یک وب هوک میتواند قابلیتهای بسیاری را فراهم کند. این قابلیتها در ادامه فهرست شدهاند.
دلایل استفاده از وب هوک در نرمافزار بازاریابی ایمیل
میتوان از وب هوک برای اتصال یک درگاه پرداخت به سامانه بازاریابی ایمیل استفاده کرد تا هرگاه پرداختی انجام میشود، کاربر یک ایمیل دریافت کند.
میتوان از وب هوک برای همگامسازی دادههای کاربر در سایر برنامهها استفاده کرد. برای مثال، اگر یک کاربر نشانی ایمیل خود را تغییر دهد، میتوان اطمینان یافت که این تغییر در سامانه ارتباط مشتریان (CRM) نیز اعمال میشود.
همچنین، میتوان از وب هوک برای ارسال اطلاعات در مورد رویدادهایی که در پایگاهدادههای خارجی (External Database) یا انبار داده (پایگاهداده تحلیلی | Data Warehouse) اتفاق میافتند، جهت تحلیل بیشتر استفاده کرد. از جمله این پایگاهدادهها میتوان Redshift آمازون یا Big Query گوگل را نام برد.
در ادامه، برای درک بیشتر اینکه وب هوک چیست سعی شده است تا با جزئیات بیشتری نحوه عملکرد وب هوک توضیح داده شود.
نگاهی دقیقتر به وب هوک
یک وب هوک این امکان را برای خدمات شخص ثالث (Third-Party Services) فراهم میکند تا بهروزرسانیهای لازم را به اپلیکیشن مشتری ارسال کند. این بهروزرسانیها، به وسیله برخی رویدادها یا فعالیتها (actions) توسط ارائه دهنده وب هوک (Webhook Provider) برانگیخته و از طریق درخواستهای HTTP به اپلیکیشن مشتری نشانده (ارسال | Push) میشوند. وقتی درخواست دریافت شد، اپلیکیشن مشتری با منطق مختص خود آن درخواست را مدیریت میکند. به عنوان مثال، یک ایمیل ارسال میکند یا دادهها را در پایگاهداده خود ذخیره میکند.
اگر باز هم به مثال پرداخت رجوع شود و این بار قصد ارسال ایمیل خودکار در صورت وقوع رویداد پرداخت ناموفق وجود داشته باشد، میتوان از یک وب هوک به صورتی که در ادامه شرح داده شده است، با هدف تسهیل فرآیند استفاده کرد.
یک اپلیکیشن عضویت از مشتری که ثبتنام کرده درخواست پرداخت میکند، اما پرداخت ناموفق است.
اپلیکیشن عضویت، یک وب هوک در اپلیکیشن ارائه دهنده خدمات پرداخت تنظیم کرده تا بهروزرسانیهای لحظهای از پرداختهای ناموفق را به وب سرور اپلیکیشن عضویت ارسال کند. بنابراین، ارائهدهنده خدمات پرداخت اعلان (نوتیفیکیشن | Notification) پرداخت ناموفق را از طریق پروتکل HTTP به اپلیکیشن عضویت ارسال میکند.
اپلیکیشن عضویت درخواست HTTP را دریافت میکند و آن را تحلیل (Parse) کرده و به مشتری یک ایمیل در این خصوص ارسال میکند.
مثالهای بیشتر از موارد استفاده وب هوک
در این بخش از مطلب وب هوک چیست مثالهای بیشتری از موارد استفاده وب هوک فهرست شده است.
وقتی فردی در توئیتر یک شرکت را (به اصطلاح) Mention میکند، آن شرکت میخواهد پیامی به کانال اشارات اجتماعی (Social Mentions) در پیامرسان Slack ارسال شود.
یک توسعهدهنده از یک پروژه متنباز در گیتهاب میزبانی میکند. وقتی فردی مشکلی را گزارش میکند، آن توسعهدهنده میخواهد پیامی با مضمون «در اسرع وقت با شما تماس گرفته خواهد شد» به آن فرد ارسال کرده و یک نوتیفیکیشن نیز به کانال «مشکلات گیتهاب» در Discord برای تیم توسعه فرستاده شود.
ممکن است بسیاری از افراد از APIها استفاده کرده باشند و احتمالاً به این مسئله فکر کنند که میتوان همه این کارها را با API انجام داد و چرا نیاز به استفاده از وب هوک وجود دارد؟ بنابراین، در ادامه مطلب «وب هوک چیست»، تفاوت میان API و وب هوک و همچنین، دلیل استفاده از هر یک از این دو بیان شده است.
وب هوک با API چه فرقی دارد ؟
موارد استفاده آنها بسیار مشابه است، اما تفاوت اساسی میان API و وب هوک در نحوه دریافت دادهها است. در مورد APIها، داده از ارائه دهنده خدمات واکشی (Pull) میشود. اما، وب هوک به ارائه دهنده خدمات اجازه میدهد دادهها را به سمت سرویس گیرنده ارسال (Push) کند. معمولاً به وب هوک و API (واسط برنامهنویسی اپلیکیشن) با هم اشاره میشود. بسیاری از سرویسها امکان استفاده از هر دو آنها را برای انتقال داده به داخل اپلیکیشنها فراهم میکنند.
با وجود اینکه با استفاده از هر دو آنها میتوان به هدف مورد نظر دست یافت، API و وب هوک با هم متفاوت هستند. همانطور که بیان شد، وب هوک تنها یکی از روشهایی است که برنامههای کاربردی مختلف برای ارتباط با یکدیگر استفاده میکنند و روش دیگر نیز، از طریق یک API است.
واکشی در مقابل نشاندن
در مورد API، دادهها از طریق یک فرآیند «Polling» منتقل میشوند. Polling یعنی، برنامه مربوطه برای تطبیق داده جدید درخواستهایی را در فواصل خاصی به یک سرور API میفرستد. بر خلاف آن، یک وب هوک امکان ارسال داده به اپلیکیشن (یعنی «Push») را به محض وقوع یک رویداد فراهم میکند. به همین دلیل است که بعضاً به وب هوک، «API معکوس» (Reverse API) هم گفته میشود. APIها، برای بهروز ماندن باید به صورت دورهای داده را از سرور واکشی (Pull) کنند. اما، با استفاده از وب هوک، سرور میتواند داده را در همان لحظهای که رویداد اتفاق افتاده به برنامه بنشاند (Push کند).
مثالی برای درک بهتر تفاوت وب هوک و API
برای درک بهتر، در یک مثال دنیای واقع، میتوان نحوه عملکرد API را به شخصی تشبیه کرد که پشت سر هم با یک خرده فروش تماس میگیرد تا از موجود شدن یک کفش مدل جدید مطلع شود. اما، در مورد وب هوک، به این صورت خواهد بود که مشتری از خرده فروش میخواهد که هر زمان کفش مورد نظرش موجود شد، به وی اطلاع دهد. بنابراین واضح است که استفاده از وب هوک منطقیتر باشد. همچنین، میتوان دریافت که استفاده از وب هوک منابع کمتری را اشغال میکند.
واکشی دادهها از یک API در اکثر مواقع به خوبی کار میکند. در واقع، بسیاری از اپلیکیشنها فقط API ارائه میدهند و از سرویس وب هوک پشتیبانی نمیکنند. بنابراین، ممکن است استفاده از API تنها گزینه ممکن باشد. به هر حال، واکشی داده از API معایبی دارد که در ادامه فهرست شدهاند.
اتلاف وقت: اپلیکیشن مربوطه، حتی در زمانی که دادهای برای واکشی از سرویس وجود نداشته باشد، به طور مرتب درخواست ارسال میکند.
بروز تأخیر: اپلیکیشن باید برای اطمینان از دریافت آخرین دادههای بهروزرسانی شده، به طور مرتب به API درخواست ارسال کند. اگر برنامهای نیاز به دادههای زمان واقع (Real-Time Data) داشته باشد، حتی درخواستهای مرتب در فواصل یک دقیقهای هم بسیار کند است و تأخیر قابل ملاحظهای به وجود میآید.
همانطور که در تصویر بالا مشاهده میشود، با وجود اینکه تنها یک رویداد در ساعت یک بعدازظهر اتفاق افتاده است، با استفاده از یک API باید درخواستهای مکرر به ارائهدهنده خدمات برای دریافت داده جدید فرستاده شود.
چرا دیرکرد انتقال اطلاعات مشکل ساز است ؟
امروزه میزان استفاده از سرویسهای شخص ثالث (Third-Party) در اپلیکیشنها بیشتر شده است و تصمیمگیریها براساس دادههای فراهم شده از سرویسهای شخص ثالث انجام میشود. بنابراین، ارائه سرویس وابستگی شدیدی به بهروز بودن این دادهها دارد. در ادامه، برای درک بهتر تفاوت وب هوک و API از مثال ارائه دهنده خدمات پرداخت (شخص ثالث) استفاده شده است.
مثال خدمات پرداخت با استفاده از API
اگر از یک ارائه دهنده خدمات شخص ثالث برای پذیرش پرداختها در یک وباپلیکیشن استفاده شود و ایمیلهای حسابداری از طریق یک ابزار مستقل دیگر ارسال شوند، وقتی تأخیر ۳۰ روزه در پرداخت فاکتور (پرداخت فاکتور در اپلیکیشن خدمات پرداخت انجام میشود) اتفاق میافتد، سامانه حسابداری، ایمیلی بابت دیرکرد پرداخت ارسال میکند. وباپلیکیشن، هر یک ساعت دادههای مربوط به پرداختها را به داخل سامانه حسابداری واکشی میکند.
اگر یک مشتری فاکتوری را پرداخت کند، سامانه حسابداری تا وقتی که دادهها همگامسازی (Sync) نشوند، از پرداخت مشتری مطلع نخواهد شد و ممکن است ایمیل تاخیر با وجود اینکه مشتری پرداخت را انجام داده، ارسال شود. بنابراین، به احتمال زیاد مشتری از این بابت خشنود نخواهد شد.
مثال خدمات پرداخت با استفاده از وب هوک
در همان لحظه پرداخت فاکتورها توسط مشتریان، اپلیکیشن خدمات پرداخت یک رویداد وب هوک به سامانه حسابداری ارسال میکند و وباپلیکیشن مربوطه (سرویس دهنده اصلی) اطلاعات مشتریان را به محض پرداخت بهروزرسانی میکند. سامانه حسابداری سرویس دهنده اصلی همیشه بهروزترین اطلاعات پرداختی را در اختیار دارد و در نتیجه، ایمیل تاخیر به اشتباه ارسال نخواهد شد.
بنابراین، ممکن است این سئوال به وجود آید که اگر استفاده از وب هوک آسانتر است، منابع کمتری اشغال میکند و از API سریعتر است، اصلاً چرا از API استفاده میشود؟
اصلا چرا API ؟
مشخص شد که درخواست برای بهروزرسانیها از جانب API میتواند منابع را به طور غیرضروری مصرف کند و به بروز تأخیر در تبادل داده میان اپلیکیشنهای یک محصول منجر شود. پس چرا همچنان از API استفاده میشود؟
دلایل این که APIها هنوز محبوب هستند، در ادامه فهرست شده است.
همه برنامهها از انضمام وب هوک پشتیبانی نمیکنند و گاهی API تنها امکان در دسترس است.
گاهی، هر رویدادی (جایگشت | Permutation) که باعث تغییر یک شیٔ میشود، بهطور مستقل دارای اهمیت نیست. بلکه، نتیجه نهایی مورد نظر است.
برای اعمال تغییرات، به API نیاز است. وب هوک تنها میتواند اپلیکیشن را در خصوص وقوع یک رویداد مطلع سازد و اعلانهای یک طرفه را از ارائه دهنده وب هوک ارسال کند. اما، برای اعمال تغییرات بر اساس اطلاعات جدید آن رویداد، باید از یک API استفاده شود.
یک بسته اطلاعات در وب هوک، ممکن است حاوی همه اطلاعات مورد نیاز درباره یک رویداد نباشد. به عبات دیگر، وب هوک حاوی داده است اما همیشه حاوی فراداده نیست. وب هوک ها معمولاً پیامهای کوتاه ارسال میکنند. به عنوان مثال در مورد اینکه یک کاربر فعالیت X را انجام داده اطلاعرسانی میکنند. اغلب، این پیامها حاوی فرادادههای مفید بیشتری در مورد کاربر یا آن رویداد نیستند. اما معمولاً میتوان یک API را برای چنین فرادادههایی جستجو (Query) کرد.
در نتیجه، APIها همچنان کاربردی و مفید هستند. به همین دلیل است که بسیاری از اپلیکیشنها هم از وب هوک و هم از API پشتیبانی میکنند.
چه زمانی از وب هوک، چه زمانی از API و چه زمانی از هر دو استفاده کنیم ؟
اگر یک برنامه کاربردی نسبتاً پیچیده در حال ساخت باشد، احتمال بالایی وجود دارد که لازم باشد از هر دو آنها استفاده شود. باید زمان کافی جهت مطالعه مستندات توسعهدهندگان سرویسهای شخص ثالث صرف شود تا نحوه صحیح دریافت داده از آن سرویس (یعنی استفاده از API یا وب هوک) مشخص شود. اگر آن مستندات دارای مثالها یا کدهای نمونه کافی نباشند، میتوان از مطالب و آموزشهای مجلات آنلاین استفاده کرد.
StackOverflow میتواند به رفع مشکلات رایجی که خدمات دهنده شخص ثالث در خصوص آنها مستنداتی ارائه نکرده، مفید واقع شود. قبل از شروع به کدنویسی، بهتر است سایر اپلیکیشنهایی را که با استفاده از انضمامهای API یا Webhook مربوطه ساخته شدهاند، در گیتهاب مورد بررسی قرار گیرند. به طور کلی، اگر هدف فقط انتقال داده میان دو سرویس باشد، وب هوک انتخاب بهتری است.
راهاندازی وب هوک چگونه است؟
برای راهاندازی یک وب هوک، به یک روند سه مرحلهای نیاز است. این سه مرحله شامل دریافت URL، مرتبط کردن URL با اپلیکیشن و انتخاب نوع رویداد است.
در ادامه، این سه مرحله به صورت فهرستوار ارائه شده است.
دریافت URL وب هوک از اپلیکیشنی که قصد ارسال داده به آن وجود دارد.
استفاده از آن URL در بخش وب هوک اپلیکیشنی که قصد دریافت داده از آن وجود دارد.
انتخاب نوع رویدادهایی که قرار است اپلیکیشن در مورد آنها اطلاعات ارسال کند.
چطور میتوان درخواستهای وب هوک را پردازش کرد؟
برای پردازش درخواستهای وب هوک در اپلیکیشن خود، باید تنظیماتی انجام شود که در ادامه فهرست شده است.
ایجاد یک URL (نقطه انتهایی | Endpoint) که به صورت عمومی در دسترس باشد. ارائه دهنده سرویس وب هوک باید بتواند از طریق این URL درخواستهای HTTP ارسال کند.
یک کد شخصیسازی شده در اپلیکیشن که در واکنش به درخواستهای HTTP جدید ارسال شده به این نقطه انتهایی، اجرا میشود. برای مثال، ارسال اعلانها به ایمیل، بهروزرسانی یک پایگاهداده یا فراخوانی یک API دیگر از جمله مواردی است که میتواند در پاسخ به درخواستهای HTTP دریافتی انجام شوند. حتی میتوان یک درخواست HTTP دیگر به یک سیستم دیگر فرستاد و در عمل یک وب هوک دیگر ایجاد کرد.
اکثر فراهمکنندگان وب هوک، رویدادها را با استفاده از یک درخواست HTTP POST با بسته اطلاعاتی JSON ارسال میکنند. در ادامه و به عنوان مثال، کد مربوط به یک درخواست HTTP در اپلیکیشن خدمات پرداخت Stripe ارائه شده است.
گاهی اوقات، ارائه دهندگان وب هوک رویدادها را با استفاده از نوع بسته اطلاعاتی متفاوتی ارسال میکنند. این بستههای اطلاعاتی ممکن است از نوع XML یا URL با فرم داده کدگذاری شده باشند. همچنین به ندرت، از یک درخواست HTTP GET با دادههای کدگذاری شده در مسیر (Path) یا پارامترهای Query String استفاده میشود. اگر فرد کدنویسی مدیریت درخواستهای HTTP را انجام داده باشد، میتواند رویدادهای وب هوک را پردازش کند.
چگونه میتوان یک وب هوک را آزمایش و عیبیابی کرد؟
در زمان راهاندازی و اضافه کردن یک وب هوک، امکان بروز مشکلات بسیاری وجود دارد.
ممکن است هیچ درخواستی در نقطه پایانی تعیین شده دریافت نشود و نیاز به یافتن دلیل آن وجود داشته باشد.
فراهم کننده وب هوک هیچ رویداد Webhook نمونهای در مستندات خود ارائه نکرده باشد. بنابراین، نیاز به تولید مثالهایی (اغلب بستههای اطلاعاتی JSON) برای استفاده در زمان نوشتن و آزمایش کُد وجود دارد.
برخی از وب هوکها حجم درخواستهای زیادی ارسال میکنند. در زمان تنظیم اولیه نقطه پایانی برای دریافت درخواستهای وب هوک، ممکن است حجم بیش از انتظار دریافت شود و اپلیکیشن تحت بار زیاد از کار بیوفتد.
وب هوک رایگان
RequestBin سرویسی است که به کاربران اجازه میدهد درخواستهای HTTP را برای نظارت و عیبیابی اپلیکیشنها و انضمامهای وب هوک دریافت و تحلیل کنند. RequestBin میتواند در خصوص مشکلات ذکر شده در بالا و سایر مسائل مربوط به عیبیابی کارگشا باشد.
اگر قصد آزمایش سرویسی وجود داشته باشد که دادههای حساس را عبور میدهد، ابتدا باید در تنظیمات فراهم کننده وب هوک به دنبال ویژگیها و امکاناتی برای ارسال دادههای آزمایشی بود. همچنین، RequestBin راههایی را برای محافظت از دادهها ارائه میکند که در ادامه فهرست شدهاند.
ایجاد یک نقطه انتهایی خصوصی (نیاز به ثبتنام دارد)
استفاده از URL نقطه انتهایی پیشفرض ایمن (HTTPS)
پاک کردن رویدادهای ارسالی به نقطه انتهایی پس از پایان عملیات آزمایش
راهاندازی وب هوک بات تلگرام
در حال حاضر، دو روش برای پردازش بهروزرسانیهای بات در تلگرام پشتیبانی میشود؛ getUpdates و setWebhook. دستور getUpdates یک مکانیزم واکشی است و setWebhook به روش push انجام میشود. اگرچه مفهوم یک وب هوک تقریباً ساده است، راهاندازی هر یک از اجزاء (Component) برای بسیاری از افراد ممکن است دردسرساز باشد.
همانطور که بیان شد، مزیتهای بسیاری در استفاده از یک وب هوک وجود دارد و به محض وقوع یک بهروزرسانی در این روش، تلگرام آن را جهت پردازش به بات مورد نظر ارسال میکند. برای اطمینان از این که بتوان از وب هوک برای بات تلگرام استفاده کرد، برخی نیازمندیها وجود دارد که در ادامه به آنها پرداخته خواهد شد.
وب هوک تلگرام چیست ؟
تنظیم یک وب هوک به این معناست که یک موقعیت (Location) در قالب URL برای تلگرام فراهم شود تا بات تلگرامی مورد نظر بتواند از طریق این URL از بهروزرسانیها مطلع شود. باید بتوان به آن URL متصل شد و بهروزرسانیها را به آن ارسال کرد.
به بیان ساده، برای ایجاد یک بات با استفاده از وب هوک باید دو امکان را فراهم کرد که در ادامه فهرست شده است.
یک مجوز ورود (Entry Pass): نمیتوان به راحتی به دادههای یک اپلیکیشن دیگر دست یافت. توسعهدهندگان به راهی برای ردیابی افرادی که به اپلیکیشن آنها در بکاند دسترسی پیدا میکنند نیاز دارند. برای این کار، توسعهدهندگان کلیدهای منحصربفردی را به هر شخصی میدهند که قصد ورود به اپلیکیشنشان را در خارج از واسط کاربری اصلی داشته باشد. بنابراین، باید چنین کلیدی را برای راهاندازی وب هوک بات از تلگرام دریافت کرد.
یک جایگاه بارگیری (Loading Dock): وقتی دسترسی به اپلیکیشن دیگر ایجاد شد، میتوان شروع به دریافت داده از آن کرد. اما برای این کار، نیاز به داشتن یک جایگاه بارگیری و یا محلی برای دریافت آن دادهها وجود دارد. این جایگاه بارگیری، همان URL وباپلیکیشن است. در صورتی که یک جایگاه بارگیری وجود نداشته باشد، اپلیکیشن نمیتواند هیچ دادهای را تخلیه کند. با رسیدن دادهها به آن جایگاه، میتوان هر کاری که لازم باشد با دادهها انجام داد. میتوان داده را وارسی یا دستکاری کرد، میتوان آن را به اپلیکیشن دیگری انتقال داد و یا حتی آن را به اپلیکیشن منبع بازفرستاد.
یک گواهینامه (Certificate) پشتیبانی شده، غیر wildcard تأیید شده و یا خود امضا شده (Self-Signed) فراهم شود.
استفاده از یک CN یا SAN که با دامنهای که در تنظیمات تأمین شده، همخوانی داشته باشد.
همه گواهینامههای رده میانی (Intermediate) را برای تکمیل زنجیره تایید تأمین کند.
تنظیم وب هوک برای بات تلگرام
به منظور تنظیم بات جهت پاسخ دادن به درخواستهای کاربران تلگرام، باید به صورت دستی برای درخواست بهروزرسانیها به API بات اقدام کرد و یا میتوان از یک وب هوک استفاده کرد تا در زمان وقوع یک بهروزرسانی، وب هوک فراخوانی شود.
برای دیدن فیلم آموزش مقدماتی ساخت ربات تلگرام با پایتون (Python) + اینجا کلیک کنید.
ساخت ربات تلگرام با وب هوک چگونه است ؟
ساخت ربات با وب هوک شامل هفت گام دریافت مجوز مورد، تنظیم گوگل Spreadsheet، ایجاد URL، ذخیره لینکها، راهاندازی وبهوک، راهآندازی پیامرسانی و تنظیم درخواست POST است. در این بخش از مطلب «وب هوک چیست» شیوه ساخت بات تلگرام شخصی تعاملی تنها با استفاده از Google Spreadsheet، آموزش داده شده است.
بات نهایی محصولی خواهد بود که میتواند به پیامها پاسخ بدهد. شش گام برای ساخت بات تلگرام با استفاده از وب هوک وجود دارد.
گام اول: دریافت مجوز ورود
همانطور که در بخش نیازمندیها بیان شد، ابتدا نیاز به یک مجوز ورود یا همان کلید منحصربفرد وجود دارد. در اپلیکیشنهای غیر تجاری (Non-Commercial)، ممکن است نیاز به درخواست مجوز ورود به صورت دستی وجود داشته باشد. اما، خوشبختانه در تلگرام یک راه بسیار ساده برای دریافت این کلیدهای مجوز یا توکنهای تأیید اعتبار وجود دارد. باید این کلیدها را از Botfather دریافت کرد. مراحل دریافت توکن تأیید اعتبار از Botfather فهرست شده است.
باید در تلگرام Botfather را جستجو کرد (botfather@).
ارسال نام بات مورد نظر به Botfather
دریافت توکن تأیید اعتبار
گام دوم: راهاندازی Google Spreadsheet
پس از دریافت توکن تأیید اعتبار، باید یک صفحه Google Spreadsheet را باز کرد و به قسمت Tools > Script Editor رفت. کدها در اینجا نوشته خواهند شد.
گام سوم: ایجاد یک URL وباپلیکیشن
برای دریافت دادهها از تلگرام به URL وباپلیکیشن نیاز است. خوشبختانه، گوگل برای انتشار وب اولیکیشنها روش سادهای را از طریق ویرایشگر کُد (Script Editor) فراهم کرده است. وقتی یک اسکریپت منتشر میشود، یک URL وباپلیکیشن منحصربفرد دریافت میشود.
بنابراین، باید دکمه Publish را در ویرایشگر اسکریپت Google Spreadsheet زد. باید در تصویر زیر توجه شود که هر بار کاری منتشر میشود، نسخه آن همیشه باید روی گزینه New قرار داده شود. ایمیل باید مربوط به فردی باشد که اپلیکیشن را اجرا میکند و سطح دسترسی نیز باید روی گزینه «anyone, even anonymous» قرار داده شود.
گام چهارم: ذخیره تمام لینکها در متغیرها
اکنون، با داشتن یک اجازه ورود و یک جایگاه بارگذاری، زمان ساخت وب هوک فرا رسیده است. بنابر مستندات مربوط به API بات تلگرام، تمام queryها به API تلگرام باید به شکل «https://api.telegram.org/bot<token>/METHOD_NAM» ارائه شوند. حالا، تمام لینکهای مورد نیاز باید در متغیرها ذخیره شوند تا بتوان بعداً به آنها ارجاع داد:
برای راهاندازی یک وب هوک، باید یک تابع برای فراهم کردن امکان واکشی داده از تلگرام با استفاده از توکن دریافت شده از Botfather نوشته شود. این داده باید مستقیماً به URL وباپلیکیشن فرستاده شود. میتوان کد زیر را کپی و در Spreadsheet الصاق کرد و دکمه Publish را زد.
وقتی کُد منتشر و مستقر شود، ممکن است جهت تأیید اعتبار اپلیکیشن برای دسترسی به دادهها در گوگل سئوال پرسیده شود:
باید به مرور مجوزها ادامه و اجازه دسترسی داده شود.
گام ششم: راهاندازی پیامرسانی
بات مورد نظر، قبل از امکان ارسال پیام به یک فرد، باید اطلاعاتی در خصوص دو مسئله داشته باشد:
بات به چه کسی پیام خواهد فرستاد؟ یک شناسه گفتگو (Chat ID) لازم است.
محتوای پیام چیست؟ باید یک پیغام برای ارسال به بات تحویل داده شود.
باید دو مورد ذکر شده در بالا را به عنوان پارامترهایی به تابع ارسال پیام (sendMessage) اضافه کرد. بنابراین تابع sendMessage به صورت زیر تعریف میشود که میتوان آن را برای استفاده کپی کرد.
بنابر گفته توسعهدهندگان تلگرام، تمامی درخواستهای داده (Query) به API تلگرام باید از طریق یک درخواست HTTPS ارسال شود. همچنین، این توسعهدهندگان متذکر شدهاند که تنها از درخواستهای POST و GET پشتیبانی میشود. درخواست GET یعنی شخصی سعی دارد دادهها را واکشی کند و درخواست POST یعنی شخصی سعی دارد داده ارسال کند.
مسئله مهم اینجا است که باید یک تابع برای ارسال درخواستهای POST به تلگرام نوشته شود تا بتوان هر بار که شخصی با بات مورد نظر مکالمه میکند، پاسخ لازم را ارسال کرد. کد این تابع به نام doPost در ادامه آمده است.
گوگل کاربران Apps Script خود را ملزم میکند که در زمان انتشار یک وباپلیکیشن، یک تابع doGet یا doPost را اضافه کنند.
متغیر e در تابع doPost نمایانگر دادهای است که از یک رویداد ایجاد شده توسط انسان در داخل اپلیکیشنی که وب هوک به آن وصل شده به وجود آمده است. در این مورد، آرگومان e حاوی تمام دادههایی خواهد بود که در زمان ارسال پیغام توسط یک شخص به بات تلگرام ایجاد میشود. و شناسه گفتگو نیز از همین طریق به دست میآید. نحوه عملکرد بات تلگرام و وب هوک در ادامه فهرست شده است.
وقتی کاربری با بات تلگرام گفتگو میکند، یک رویداد اتفاق افتاده است. این رویداد منجر به تولید دادههایی میشود که با آرگومان «e» نشان داده میشوند.
وب هوک آرگومان e را به صورت خودکار به یک URL وباپلیکیشن ارسال میکند.
وقتی e به URL وباپ میرسد، وباپ باید یک درخواست POST به تلگرام بفرستد و از تلگرام درخواست کند یک پیغام به کاربر ارسال کند.
اگر چه، امکان ارسال پیام با ملزومات ناقص وجود ندارد. داشتن شناسه گفتگو و متن پیامی که تلگرام باید ارسال کند ضروری است.
تابع doPost شناسه گفتگو را در اختیار دارد، اما ابتدا باید آرگومان e را تجزیه کرده تا بتواند محل آن دادهها را مشخص کند.
بعد از تعیین محل دادهها، اکنون هر دو نیازمندی لازم یعنی شناسه گفتگو و متن پیام توسط تابع doPost و به همراه یک تابع sendMessage به تلگرام ارسال میشود. و این مسئله باعث میشود یک پیغام برای ارسال و پاسخگویی به کاربر برانگیخته (Trigger) شود. بنابراین درخواست تکمیل شده و بات به درستی عمل میکند.
جمعبندی
وب هوک بخش مهمی از وب محسوب میشود و روز به روز محبوبیت آن بیشتر میشود. وب هوک برای اپلیکیشنها این امکان را فراهم میکند که دادهها را بلافاصله و به صورت یکپارچه به یکدیگر منقل کنند. همچنین، اگرچه وب هوک مشابه API است، این دو نقشهای متفاوتی را برعهده دارند و هر کدام در جایگاه مناسب قابل استفاده است.
بهترین راه برای درک وب هوک این است که افراد شخصاً آن را به کار گیرند و یک ارتباط وب هوک میان اپلیکیشنهای خود ایجاد کنند تا نحوه کارکرد آن را متوجه شوند. در مطلب «وب هوک (WebHook) چیست؟ — به زبان ساده»، سعی شد تا حد امکان به سئوال اساسی «وب هوک چیست» پاسخ و تمامی مسائل مربوط به وب هوک پوشش داده شود. از جمله موارد مهم، میتوان به تفاوت وب هوک با API و نحوه ساخت ربات تلگرام با وب هوک اشاره کرد.
بابک خوشنویس دانشآموخته کارشناسی ارشد رشته علوم کامپیوتر گرایش علوم تصمیم و مهندسی دانش است. او به حوزههای هوش مصنوعی، لینوکس و برنامه نویسی علاقه دارد و به عنوان دبیر تحریریه علوم کامپیوتر مجله فرادرس فعالیت داشته است.
۸ دیدگاه برای «وب هوک (WebHook) چیست؟ – به زبان ساده»
مجید
عالی بود و کمک فراوانی کرد
آیا امکان بر عکسش هم هستن از کانال به ورد پرس وب هوک کرد؟؟؟؟؟؟؟؟
پوریا نوید
با سلام و احترام؛
با توجه به مسئله و هدفی که دارید، ممکن است در برخی موارد بتوان این کار را انجام داد.
از همراهی شما با مجله فرادرس سپاسگزاریم.
امیر
سلام وقت بخیر من نرم افزار حسابداری رو به وکامرس متصل کردم و برای اتصال از وب هوک استفاده کردیم ولی هر 1 روز درمیان ارتباط غیر فعال میشه باید دستی فعال کنیم چطور میشه این مشکل رو برطرف کنیم
با سپاس
مهدی
بسیار ممنون. واقعا روان و کاربردی بود
بابک خوشنویس
با سلام و احترام؛
صمیمانه از همراهی شما با مجله فرادرس و ارائه بازخورد سپاسگزاریم.
برای شما آرزوی سلامتی و موفقیت داریم.
فریدون
مطلب خوبی بود ،یعنی عالی بود فقط وقتی سعی می کند همه چیر رو به فارسی برگردونید حتی اگه تو پرانتز مقدار درستش هم درج بشه ،مطلب شهید می شه به نظر بنده نیازی نیست اینقد هم به فارسی رو پاس بداریم
مهدی پیشگوی
خیلی عالی بود. ممنون
رحیم
خیلی طولانی بود ولی بازم ممنون از تهیه کننده این مطلب
شما در حال مطالعه نسخه آفلاین یکی از مطالب «مجله فرادرس» هستید. لطفاً توجه داشته باشید، ممکن است برخی از قابلیتهای تعاملی مطالب، مانند امکان پاسخ به پرسشهای چهار گزینهای و مشاهده جواب صحیح آنها، نمایش نتیجه آزمونها، پاسخ تشریحی سوالات، پخش فایلهای صوتی و تصویری و غیره، در این نسخه در دسترس نباشند. برای دسترسی به نسخه آنلاین مطلب، استفاده از کلیه امکانات آن و داشتن تجربه کاربری بهتر اینجا کلیک کنید.
عالی بود و کمک فراوانی کرد
آیا امکان بر عکسش هم هستن از کانال به ورد پرس وب هوک کرد؟؟؟؟؟؟؟؟
با سلام و احترام؛
با توجه به مسئله و هدفی که دارید، ممکن است در برخی موارد بتوان این کار را انجام داد.
از همراهی شما با مجله فرادرس سپاسگزاریم.
سلام وقت بخیر من نرم افزار حسابداری رو به وکامرس متصل کردم و برای اتصال از وب هوک استفاده کردیم ولی هر 1 روز درمیان ارتباط غیر فعال میشه باید دستی فعال کنیم چطور میشه این مشکل رو برطرف کنیم
با سپاس
بسیار ممنون. واقعا روان و کاربردی بود
با سلام و احترام؛
صمیمانه از همراهی شما با مجله فرادرس و ارائه بازخورد سپاسگزاریم.
برای شما آرزوی سلامتی و موفقیت داریم.
مطلب خوبی بود ،یعنی عالی بود فقط وقتی سعی می کند همه چیر رو به فارسی برگردونید حتی اگه تو پرانتز مقدار درستش هم درج بشه ،مطلب شهید می شه به نظر بنده نیازی نیست اینقد هم به فارسی رو پاس بداریم
خیلی عالی بود. ممنون
خیلی طولانی بود ولی بازم ممنون از تهیه کننده این مطلب