گزارشات زیاد و مشابهی به دست پشتیبانی فنی فراهاست میرسد، مبنی بر اینکه ربات تلگرامی کاربر پس از مدتی فعالیت، خاموش شده و کار نمیکند.
در این مقاله علت مواجه شدن با این موضوع را توضیح داده و سپس راه حل آن را بیان خواهیم کرد.
علت خاموش شدن ربات چیست؟
اولین سوالی که برای کاربران پیش میآید این است که اصلا چرا ربات پس از مدت زمانی کوتاه یا بلند، در حالی که به درستی کار میکرده، خاموش میشود؟
از دلایل خاموش شدن ربات میتوان به موارد زیر اشاره کرد:
۱- خاموش شدن هاست (سرور)
۲- ساسپند شدن هاست
۳- منقضی شدن گواهی ssl دامنه
۴- پر شدن منابع هاست (رم، سیپییو، هارد و یا ...)
۵- عدم ارسال آپدیت از طرف تلگرام
در ادامه به بررسی هر کدام از دلایل فوق و نحوهی رفع مشکل خواهیم پرداخت.
۱- خاموش شدن هاست (سرور)
یکی از دلایل خاموش شدن ربات، خاموش شدن هاستی است که ربات بر روی آن کار میکرده است.
اگر ربات شما خاموش شد، ابتدا بررسی کنید که هاست شما در دسترس است یا خیر.
برای این کار کافی است دامنه خود را در مرورگر باز کنید، اگر دامنه لود شد و محتوای هاست به شما نشان داده شد، یعنی هاست فعال است و کار میکند. در غیر این صورت ممکن است هاست از دسترس خارج شده باشد.
در صورتی که هاست شما خاموش شده است، میبایست برای رفع مشکل با مدیریت فراهاست تماس حاصل کنید.
۲- ساسپند شدن هاست
یکی دیگر از دلایلی که میتواند باعث شود ربات شما به طور ناگهانی خاموش شود، ساسپند شدن هاست شماست.
ساسپند شدن هاست میتواند دلایل مختلفی داشته باشد، از جمله:
- به اتمام رسیدن سرویس شما، که باید سررسید مربوط به سرویس را پرداخت کنید
- پر شدن منابع هاست و یا پهنای باند، که باید سرویس خود را ارتقا دهید
- ساسپند شدن دستی توسط مدیران فراهاست، که باید علت را از مدیریت جویا شوید
۳- منقضی شدن گواهی ssl دامنه
تلگرام آپدیت ربات را به دامنهای ارسال میکند که دارای گواهی ssl باشد.
اگر دامنه شما گواهی ssl نداشته باشد، آپدیت های تلگرام را دریافت نخواهد کرد.
حال اگر ربات شما فعال بوده و پس از مدتی از کار افتاده است، ممکن است علت پایان یافتن گواهی ssl دامنهتان باشد.
برای اینکه مطمئن شوید این گواهی بر روی دامنه شما فعال است یا خیر، کافی است دامنه خود را با پرتکل https باز کنید.
به عنوان مثال اگر دامنه شما example.com است، در مرورگر خود آدرس https://example.com را باز کنید، وجود علامت قفل سبز رنگ در کنار نام دامنه به معنی این است که دامنه شما دارای گواهی ssl میباشد، در غیر این صورت یعنی گواهی ssl دامنه شما منقضی شده است و باید آن را تمدید کنید.
جهت آموزش فعالسازی گواهی ssl میتوانید به این صفحه مراجعه فرمایید.
۴- پر شدن منابع هاست
یکی دیگر از دلایل خاموش شدن ربات میتواند پر شدن منابع هاست باشد.
اگر منابع است شما در ماکسیمم مقدار خود قرار گرفته باشند، طبیعتا هاست از دسترس خارج شده و نمیتواند به آپدیتهای جدید پاسخ دهد.
جهت بررسی منابع خود، وارد Cpanel شده و منابع خود را کنترل کنید، اگر موارد زیر در مقدار ماکسیمم خود قرار داشته باشند، هاست توانایی پاسخ به آپدیت های جدید را نخواهد داشت:
- Disk usage
- Number of processes
- Bandwidth
- CPU usage
- Physical memory usage
- MySql disk usage
- File usage
- Entry processes
- IOPS
- I/O usage
جهت رفع این مشکل باید هاست خود را ارتقا بدهید، البته قبل از ارتقای هاست خود با مدیریت فراهاست صحبت کنید تا مطمئن شوید در سرویسهای قوی تر، منابع بیشتری در اختبار شما قرار خواهد گرفت یا خیر
۵- عدم ارسال آپدیت از طرف تلگرام
شایع ترین علت خاموش شدن ناگهانی ربات، این مورد میباشد.
در این حالت، تلگرام از ارسال آپدیت به دامنهتان خودداری میکند. اما علت انجام این کار چیست؟
نحوهی کارکرد تلگرام در ارسال آپدیتها به این صورت است که آپدیت را به دامنه شما ارسال میکند، و اتصال را نبسته و منتظر واکنش شما نسبت به آپدیت میماند.
اگر شما به درخواست تلگرام هدر ۲۰۰ برگردانید، تلگرام متوجه میشود که شما آپدیت را به درستی دریافت کردهاید و ارسال آن آپدیت را موفقیت آمیز میداند.
به صورت پیشفرض، وقتی اسکریپت شما با موفقیت تا انتها اجرا شود، هدر ۲۰۰ به طور اتوماتیک به درخواست دهنده برگردانده میشود، اما اگر به هر دلیلی ( مثل وجود خطای PHP در اسکریپت) اسکریپت شما تا انتها اجرا نشود، هدر ۲۰۰ به درخواست دهنده برگردانده نخواهد شد و تلگرام این برداشت را دارد که شما آپدیت را دریافت نکرده اید، و بعد از مدت کوتاهی مجدد آپدیت را برای شما ارسال میکند.
همچنین اگر اسکریپت شما مدت زمان زیادی طول بکشد تا اجرا شود، تلگرام اتصال را قطع کرده و مجدد آپدیت را ارسال میکند.
وجود این دو دلیل ( عدم برگرداندن هدر ۲۰۰ به تلگرام و اجرای طولانی مدت اسکریپت ) باعث میشود تا تلگرام آپدیت مورد نظر را مجدد برای شما ارسال کند.
اگر این اتفاق به طور مکرر رخ دهد و آپدیتهای زیادی ایجاد شوند که شما به درستی آنها را دریافت نکرده اید، تلگرام جهت جلوگیری از فشار بر روی سرورهای خود، به طور کلی از ارسال آپدیت به دامنهی شما خودداری کرده و باعث خاموش شدن ربات شما میشود.
برای اینکه متوجه شوید ربات شما آپدیت در انتظار ( آپدیتی که ارسال شده اما توسط شما دریافت نشده و در صف ارسال است ) دارد یا خیر، میتوانید وارد ربات مدیریت وبهوک فراهاست شوید و با ارسال توکن ربات خود، ببینید چه تعداد آپدیت در انتظار دارید.
آدرس ربات: @FaraWebhookBot
پس از ورود به ربات، با انتخاب گزینه "مشاهدهی اطلاعات وبهوک و توکن" و ارسال توکن ربات مورد نظر، اطلاعات وبهوک خود را مشاهده کنید.
مقدار pending_update_count به شما تعداد آپدیتهای در انتظار ربات را نشان خواهد داد.
در صورتی که این مقدار ۰ نباشد، میتوانید با استفاده از گزینهی "پاکسازی آپدیتهای در انتظار"، مقدار این آپدیتها را به صفر برسانید.
با صفر شدن آپدیتهای در انتظار، ربات شما مجددا شروع به کار خواهد کرد.
به خاطر دارید که دو دلیل برای مواجه شدن با این مشکل گفته شد، حال میخواهیم راه حل های کلی رفع این مورد را بیان کنیم، تا هیچ آپدیتی در لیست انتظار نرود و در نتیجه ربات شما خاموش نشود.
الف - عدم برگرداندن هدر ۲۰۰ به تلگرام
برای حل این مشکل، فایل error_log تولید شده در کنار اسکریپت خود را مطالعه کنید و ارورهای گفته شده در این فایل را برطرف کنید.
عمده ترین دلیل عدم ارسال هدر ۲۰۰ مشکلات PHP هستند، که با بررسی اسکریپت قابل رفع شدن میباشند.
همچنین ممکن است ورژن PHP هاست شما با ورژنی که اسکریپت شما بر روی آن میتواند اجرا شود تفاوت داشته باشد، که در این صورت میبایست ورژن PHP هاست خود را تغییر دهید.
ب- اجرا طولانی مدت اسکریپت
گفتیم که اسکریپت شما ممکن است مدت زیادی ( بیشتر از ۱۵ - ۲۰ ثانیه ) برای اجرا شدن به زمان نیاز داشته باشد.
اگر این مورد رخ دهد، تلگرام کانکشن را بسته و مجدد درخواست را ارسال میکند و این در حالی است که شما در حال پردازش درخواست قبلی بودهاید. و این مورد به تکرر اتفاق افتاده و موجب بالا رفتن آپدیت های در انتظار شما و در نتیجه خاموش شدن رباتتان میشود.
برای حل این مشکل، باید خودتان راه حلی بیاندیشید.
یکی از راههای رفع این مشکل این است که شما آپدیت را در فایلی ذخیره کنید، اتصال را پایان دهید و سپس توسط کرونجاب یا هرچیز دیگری آپدیت ذخیره شده را پردازش کنید.
راه حل دیگر این موضوع این است که تاریخ آپدیت را مشاهده کنید و به آپدیتی که تاریخ آن مربوط به گذشته است، پاسخی ارسال نکنید، برای این کار کافیاست این کد را به ابتدای اسکریپت خود اضافه کنید:
$u = json_decode(file_get_contents('php://input'));
if(isset($u->message) || isset($u->edited_message))
if(time()-(($u->message->date)?:($u->edited_message->edit_date))>5)
exit;
البته فراهاست برای رفع این مشکل، اسکریپت مناسبی به طور اختصاصی نوشته است که باعث عدم خاموش شدن ربات شما خواهد شد، که برای خرید این اسکریپت میتوانید به پشتیبانی فراهاست مراجعه فرمایید.
امیدواریم این مطلب برای شما مفید بوده باشد.