المستوى المطلوب: مبتدئ
في آخر هذا الدليل هيكون عندك بوت تيليجرام بيبعت رسالة على موبايلك خلال ثانية لو القرص بتاع سيرفرك قرّب يمتلئ، بصفر تكلفة وبأقل من 30 سطر Python. مش محتاج خبرة DevOps ولا سيرفر إضافي.
اعمل بوت تيليجرام يبعتلك تنبيهات السيرفر بـ Python
المشكلة باختصار
أغلب المشاريع الصغيرة بتكتشف الأعطال متأخر. القرص بيمتلئ، الـ database بتقف عن الكتابة، والموقع بيرجّع أخطاء. انت بتعرف لمّا عميل يشتكي، يعني بعد ساعة أو ساعتين من بداية المشكلة.
الحل التقليدي خدمات مراقبة مدفوعة أو رسائل SMS. بس للمشروع اللي لسه بادئ، ده تعقيد وتكلفة قبل وقتهم. تيليجرام بيحل ده مجانًا: عندك API رسمي بسيط، والرسالة بتوصل على موبايلك في ثانية.
إيه هو البوت أصلًا؟ (مثال أولًا)
تخيّل إن عندك صاحب بيشتغل بوّاب في عمارة. انت اللي بتقوله: "لو حد دخل بعد منتصف الليل، اتصل بيا". هو مش بياخد قرارات لوحده، بس عنده رقم تليفون ثابت وبينفّذ التعليمة اللي اتفقتوا عليها. بوت تيليجرام بالظبط كده: حساب ليه "رقم" ثابت اسمه token، وانت اللي بتبرمجه يبعتلك رسالة لمّا يحصل شرط معين.
علميًا: البوت حساب تيليجرام بيتحكم فيه برنامج بدل إنسان، عبر واجهة برمجية اسمها Bot API. البرنامج بيكلّم سيرفرات تيليجرام بطلبات HTTP عادية (GET و POST) ويبعت رسائل لأي محادثة عنده صلاحية الوصول ليها.
الخطوات: من الصفر لأول رسالة
- افتح تيليجرام ودوّر على BotFather (الحساب الرسمي بعلامة التوثيق الزرقا).
- ابعتله الأمر
/newbot، اختار اسم واسم مستخدم ينتهي بـbot. - هيرجّعلك token بالشكل ده:
123456789:AAH...xyz. ده مفتاح التحكم، خبّيه كويس. - ابعت أي رسالة للبوت بتاعك من حسابك الشخصي (لازم تبدأ المحادثة الأول).
- هات الـ
chat_idبتاعك من الأمر ده في الترمينال:
# بدّل TOKEN بالـ token اللي جالك من BotFather
curl "https://api.telegram.org/botTOKEN/getUpdates"
# دوّر في النتيجة على: "chat":{"id":987654321 ...}
# الرقم ده هو chat_id بتاعك
الكود: بوت تنبيهات حقيقي
دلوقتي عندك حاجتين: الـ token والـ chat_id. الكود ده بيعمل دالة بسيطة بتبعت رسالة، وبعدين بيستخدمها في فحص مساحة القرص.
import requests
import shutil
TOKEN = "123456789:AAH...xyz" # من BotFather
CHAT_ID = "987654321" # من getUpdates
def send_alert(text):
url = f"https://api.telegram.org/bot{TOKEN}/sendMessage"
payload = {"chat_id": CHAT_ID, "text": text}
r = requests.post(url, data=payload, timeout=10)
r.raise_for_status()
return r.json()
def check_disk(path="/", threshold=85):
total, used, free = shutil.disk_usage(path)
percent = used / total * 100
if percent >= threshold:
gb_free = free / (1024 ** 3)
send_alert(
f"تحذير: القرص على {path} وصل {percent:.0f}% "
f"(المتبقي {gb_free:.1f} جيجا)"
)
if __name__ == "__main__":
check_disk()
جرّبه يدويًا الأول علشان تتأكد إنه شغّال. نزّل قيمة threshold مؤقتًا لـ 1 وشغّل السكربت، المفروض توصلك رسالة على طول. لو وصلت، رجّعها لـ 85 وانت مطمئن.
خلّيه يشتغل لوحده كل ربع ساعة
السكربت دلوقتي بيتشغّل مرة وبس. علشان يفحص باستمرار، استخدم cron على لينكس. افتح crontab -e وضيف السطر ده:
# يفحص القرص كل 15 دقيقة
*/15 * * * * /usr/bin/python3 /opt/alerts/disk_alert.py
كده انت عملت أوتوميشن كامل: السكربت بيفحص، ولو في مشكلة بيبعت، ولو كله تمام بيفضل ساكت. ده بالظبط السلوك اللي عايزه — تنبيه عند الحاجة بس.
الأرقام والتكلفة
Bot API مجاني بالكامل. حد الإرسال الرسمي حوالي 30 رسالة في الثانية، و20 رسالة في الدقيقة للمجموعة الواحدة — أكتر بكتير من احتياج أي تنبيهات سيرفر عادية. زمن وصول الرسالة عمليًا أقل من ثانية. قارن ده بـ SMS عبر مزود زي Twilio بتكلفة تقريبية 0.0075 دولار للرسالة؛ لو بتبعت 200 تنبيه في الشهر، ده فرق بين صفر و18 دولار سنويًا على حاجة واحدة صغيرة. في فريق صغير على VPS واحد، التنبيه الفوري ده بيقلّل وقت اكتشاف العطل من ساعتين لأقل من دقيقة.
trade-offs لازم تنتبه لها
- الاعتماد على تيليجرام: لو تيليجرام محجوب في بلدك أو عند سيرفرك، التنبيه مش هيوصل. بتكسب البساطة والمجانية، بتخسر ضمان الوصول في كل الشبكات.
- أمان الـ token: أي حد يوصل للـ token يقدر يبعت باسم البوت. متحطهوش في الكود مباشرة في مشروع حقيقي؛ حطّه في متغير بيئة
os.environ["TG_TOKEN"]. - مفيش تصعيد: الرسالة بتوصل وخلاص. لو انت نايم، محدّش هيصحّيك. ده تنبيه، مش نظام on-call.
متى لا تستخدم هذه الطريقة
لو عندك نظام إنتاجي حرج بيتطلب ضمان وصول التنبيه وتصعيد تلقائي لو محدش رد (acknowledgement)، الطريقة دي مش كافية. وقتها روح لأدوات زي PagerDuty أو Opsgenie اللي بتعمل اتصال صوتي وتدوير على المناوبين. كمان لو عندك مئات الخدمات، استخدم Prometheus مع Alertmanager بدل سكربتات متفرقة. الفرضية هنا إن عندك سيرفر أو اتنين وفريق صغير، والهدف تنبيه سريع رخيص مش SLA رسمي.
الخطوة التالية
افتح BotFather دلوقتي واعمل بوت، وشغّل سكربت الـ check_disk بـ threshold=1 علشان تتأكد إن الرسالة بتوصل. أول ما توصلك، ضيف فحص تاني بسيط: استخدام الـ RAM عبر قراءة /proc/meminfo، وابعت لنفسك تنبيه لو عدّى 90%. كل فحص جديد مجرد دالة بتنادي send_alert.
المصادر
- توثيق Telegram Bot API الرسمي:
https://core.telegram.org/bots/api— تفاصيلsendMessageوgetUpdatesوحدود الإرسال. - دليل BotFather الرسمي:
https://core.telegram.org/bots#how-do-i-create-a-bot— خطوات إنشاء البوت والحصول على الـ token. - توثيق Python
shutil.disk_usage:https://docs.python.org/3/library/shutil.html#shutil.disk_usage. - توثيق مكتبة requests:
https://requests.readthedocs.io. - توثيق crontab على لينكس:
https://man7.org/linux/man-pages/man5/crontab.5.html.