چرا ربات تلگرام جواب نمیده؟
رفع مشکل خاموش شدن ربات تلگرامی + آموزش ساخت ربات تلگرام
گزارشات زیاد و مشابهی به دست پشتیبانی فنی فراهاست می رسد، مبنی بر اینکه ربات تلگرامی کاربر پس از مدتی فعالیت، خاموش شده و کار نمی کند. در این مقاله علت مواجه شدن با این موضوع و آموزش ساخت ربات تلگرام با PHP را آورده ایم و سپس راه حل آن را بیان خواهیم کرد.
علت خاموش شدن ربات چیست؟
اولین سوالی که برای کاربران آموزش برنامه نویسی ربات تلگرام پیش می آید این است که اصلا چرا ربات پس از مدت زمانی کوتاه یا بلند، در حالی که به درستی کار می کرده، خاموش می شود؟ از دلایل خاموش شدن ربات می توان به موارد زیر اشاره کرد:
1- خاموش شدن هاست (سرور)
2- ساسپند شدن هاست
3- منقضی شدن گواهی ssl دامنه
4- پر شدن منابع هاست (رم، سی پی یو، هارد و یا …)
5- عدم ارسال آپدیت از طرف تلگرام
در ادامه به بررسی هر کدام از دلایل فوق و نحوه ی رفع مشکل خواهیم پرداخت.
1- خاموش شدن هاست (سرور)
یکی از دلایل خاموش شدن ربات، خاموش شدن هاستی است که ربات بر روی آن کار می کرده است. اگر ربات شما خاموش شد، ابتدا بررسی کنید که هاست شما در دسترس است یا خیر. برای این کار کافی است دامنه خود را در مرورگر باز کنید، اگر دامنه لود شد و محتوای هاست به شما نشان داده شد، یعنی هاست فعال است و کار می کند. در غیر این صورت ممکن است هاست از دسترس خارج شده باشد. در صورتی که هاست شما خاموش شده است، می بایست برای رفع مشکل با مدیریت فراهاست تماس حاصل کنید.
2- ساسپند شدن هاست
یکی دیگر از دلایلی که می تواند باعث شود ربات شما به طور ناگهانی خاموش شود، ساسپند شدن هاست شماست. ساسپند شدن هاست می تواند دلایل مختلفی داشته باشد، از جمله:
- به اتمام رسیدن سرویس شما، که باید سررسید مربوط به سرویس را پرداخت کنید
- پر شدن منابع هاست و یا پهنای باند، که باید سرویس خود را ارتقا دهید
- ساسپند شدن دستی توسط مدیران فراهاست، که باید علت را از مدیریت جویا شوید
3- منقضی شدن گواهی ssl دامنه
تلگرام آپدیت ربات را به دامنه ای ارسال می کند که دارای گواهی ssl باشد. اگر دامنه شما گواهی ssl نداشته باشد، آپدیت های تلگرام را دریافت نخواهد کرد. حال اگر ربات شما فعال بوده و پس از مدتی از کار افتاده است، ممکن است علت پایان یافتن گواهی ssl دامنه تان باشد. برای اینکه مطمئن شوید این گواهی بر روی دامنه شما فعال است یا خیر، کافی است دامنه خود را با پرتکل https باز کنید.
به عنوان مثال اگر دامنه شما example.com است، در مرورگر خود آدرس را باز کنید، وجود علامت قفل سبز رنگ در کنار نام دامنه به معنی این است که دامنه شما دارای گواهی ssl می باشد، در غیر این صورت یعنی گواهی ssl دامنه شما منقضی شده است و باید آن را تمدید کنید.
4- پر شدن منابع هاست
یکی دیگر از دلایل خاموش شدن ربات می تواند پر شدن منابع هاست باشد. اگر منابع است شما در ماکسیمم مقدار خود قرار گرفته باشند، طبیعتا هاست از دسترس خارج شده و نمیتواند به آپدیت های جدید پاسخ دهد.جهت بررسی منابع خود، وارد Cpanel شده و منابع خود را کنترل کنید، اگر موارد زیر در مقدار ماکسیمم خود قرار داشته باشند، هاست توانایی پاسخ به آپدیت های جدید را نخواهد داشت:
Disk usage
Number of processes
Bandwidth
CPU usage
Physical memory usage
MySql disk usage
File usage
Entry processes
IOPS
I/O usage
جهت رفع این مشکل باید هاست خود را ارتقا بدهید، البته قبل از ارتقای هاست خود با مدیریت فراهاست صحبت کنید تا مطمئن شوید در سرویس های قوی تر، منابع بیشتری در اختبار شما قرار خواهد گرفت یا خیر
5- عدم ارسال آپدیت از طرف تلگرام
شایع ترین علت خاموش شدن ناگهانی ربات، این مورد می باشد. در این حالت، تلگرام از ارسال آپدیت به دامنه تان خودداری می کند. اما علت انجام این کار چیست؟ نحوه ی کارکرد تلگرام در ارسال آپدیت ها به این صورت است که آپدیت را به دامنه شما ارسال می کند، و اتصال را نبسته و منتظر واکنش شما نسبت به آپدیت می ماند.
اگر شما به درخواست تلگرام هدر 200 برگردانید، تلگرام متوجه می شود که شما آپدیت را به درستی دریافت کرده اید و ارسال آن آپدیت را موفقیت آمیز می داند. به صورت پیش فرض، وقتی اسکریپت شما با موفقیت تا انتها اجرا شود، هدر 200 به طور اتوماتیک به درخواست دهنده برگردانده می شود، اما اگر به هر دلیلی ( مثل وجود خطای PHP در اسکریپت) اسکریپت شما تا انتها اجرا نشود، هدر 200 به درخواست دهنده برگردانده نخواهد شد و تلگرام این برداشت را دارد که شما آپدیت را دریافت نکرده اید، و بعد از مدت کوتاهی مجدد آپدیت را برای شما ارسال می کند.
همچنین اگر اسکریپت شما مدت زمان زیادی طول بکشد تا اجرا شود، تلگرام اتصال را قطع کرده و مجدد آپدیت را ارسال می کند. وجود این دو دلیل ( عدم برگرداندن هدر 200 به تلگرام و اجرای طولانی مدت اسکریپت ) باعث می شود تا تلگرام آپدیت مورد نظر را مجدد برای شما ارسال کند.
اگر این اتفاق به طور مکرر رخ دهد و آپدیت های زیادی ایجاد شوند که شما به درستی آن ها را دریافت نکرده اید، تلگرام جهت جلوگیری از فشار بر روی سرور های خود، به طور کلی از ارسال آپدیت به دامنه ی شما خودداری کرده و باعث خاموش شدن ربات شما می شود.
برای اینکه متوجه شوید ربات شما آپدیت در انتظار ( آپدیتی که ارسال شده اما توسط شما دریافت نشده و در صف ارسال است ) دارد یا خیر، می توانید وارد ربات مدیریت وبهوک فراهاست شوید و با ارسال توکن ربات خود، ببینید چه تعداد آپدیت در انتظار دارید.
پس از ورود به ربات، با انتخاب گزینه “مشاهده ی اطلاعات وبهوک و توکن” و ارسال توکن ربات مورد نظر، اطلاعات وبهوک خود را مشاهده کنید.
مقدار pending_update_count به شما تعداد آپدیت های در انتظار ربات را نشان خواهد داد.
در صورتی که این مقدار 0 نباشد، می توانید با استفاده از گزینه ی “پاکسازی آپدیت های در انتظار”، مقدار این آپدیت ها را به صفر برسانید.
با صفر شدن آپدیت های در انتظار، ربات شما مجددا شروع به کار خواهد کرد.
به خاطر دارید که دو دلیل برای مواجه شدن با این مشکل گفته شد، حال می خواهیم راه حل های کلی رفع این مورد را بیان کنیم، تا هیچ آپدیتی در لیست انتظار نرود و در نتیجه ربات شما خاموش نشود.
الف – عدم برگرداندن هدر 200 به تلگرام
برای حل این مشکل، فایل error_log تولید شده در کنار اسکریپت خود را مطالعه کنید و ارورهای گفته شده در این فایل را برطرف کنید.
عمده ترین دلیل عدم ارسال هدر 200 مشکلات PHP هستند، که با بررسی اسکریپت قابل رفع شدن می باشند.
همچنین ممکن است ورژن PHP هاست شما با ورژنی که اسکریپت شما بر روی آن می تواند اجرا شود تفاوت داشته باشد، که در این صورت می بایست ورژن PHP هاست خود را تغییر دهید.
ب- اجرا طولانی مدت اسکریپت
گفتیم که اسکریپت شما ممکن است مدت زیادی ( بیشتر از 15 – 20 ثانیه ) برای اجرا شدن به زمان نیاز داشته باشد.
اگر این مورد رخ دهد، تلگرام کانکشن را بسته و مجدد درخواست را ارسال میکند و این در حالی است که شما در حال پردازش درخواست قبلی بوده اید. و این مورد به تکرر اتفاق افتاده و موجب بالا رفتن آپدیت های در انتظار شما و در نتیجه خاموش شدن رباتتان می شود.
برای حل این مشکل، باید خودتان راه حلی بیاندیشید.
یکی از راه های رفع این مشکل این است که شما آپدیت را در فایلی ذخیره کنید، اتصال را پایان دهید و سپس توسط کرون جاب یا هرچیز دیگری آپدیت ذخیره شده را پردازش کنید.