مقدمة: لماذا تحتاج إلى بوت رسائل دورية؟

تشغيل قنوات أو مجموعات تيليجرام بشكل احترافي يتطلب إرسال محتوى منتظم – سواء كان نشرات إخبارية، تذكيرات، أو تحديثات آلية. بدلاً من إرسال كل رسالة يدويًا، يتيح لك بوت تيليجرام جدولة رسائل دورية تضمن الاستمرارية دون تدخل بشري. يبدأ كل هذا مع BotFather، البوت الرسمي لإدارة البوتات، لكن من المهم أن تفهم حدوده: BotFather لا يرسل رسائل ولا يدير جدولة – إنه فقط أداة إنشاء وتكوين. سنشرح في هذا الدليل كيف تنشئ بوتًا عبر BotFather، ثم تُعد خادمًا أو خدمة سحابية لإرسال الرسائل المجدولة، مما يوفر وقتك ويحافظ على انتظام المحتوى.

1. ما هو BotFather وكيف تنشئ بوتًا؟

BotFather هو بوت تيليجرام رسمي يُستخدم لإنشاء بوتات جديدة وإدارة إعداداتها. لا يحتاج إلى صلاحيات خاصة – يكفي أن تبدأ محادثة معه في تيليجرام. بعد الإنشاء، ستحصل على رمز API (Token) يمثل هوية البوت. هذا الرمز هو مفتاح التحكم في البوت عبر واجهة برمجة التطبيقات (API)، وهو الأساس الذي ستبني عليه كل الإرساليات اللاحقة.

خطوات إنشاء بوت عبر BotFather

  1. افتح تيليجرام وابحث عن @BotFather أو افتح الرابط t.me/botfather.
  2. أرسل الأمر /newbot.
  3. سيطلب BotFather اسمًا للبوت (أي اسم يظهر للمستخدمين)، ثم اسم مستخدم فريد ينتهي بـ bot (مثال: MyPeriodicBot).
  4. بعد التأكيد، سترسل رسالة تحتوي على رمز API (مثال: 123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11).
  5. احفظ الرمز فورًا – لن تتمكن من رؤيته مرة أخرى من BotFather دون إعادة الإنشاء. يمكنك لاحقًا استخدام الأمر /mybots → اختيار البوت → API Token لتجديد الرمز.

تحذير: لا تشارك رمز API مع أي شخص؛ فهو يمنح سيطرة كاملة على البوت. تعامل معه ككلمة مرور رئيسية.

2. الحد الأساسي: BotFather لا يرسل رسائل دورية

بعد إنشاء البوت عبر BotFather، قد يعتقد البعض أن البوت يمكنه جدولة الرسائل تلقائيًا، لكن هذا غير صحيح. BotFather هو مجرد لوحة إدارة تسمح لك بتعيين الصورة الشخصية، الأوامر، وصف البوت، ومجالات أخرى. الإرسال الفعلي يتطلب خادمًا أو خدمة خارجية تتصل بواجهة تيليجرام API باستخدام رمز البوت. باختصار: مسار العمل النموذجي هو BotFather → إنشاء البوت → الحصول على Token → خادم خارجي لجدولة الإرسال. في الأقسام التالية نشرح الجزء الثاني بالتفصيل.

3. تجهيز البوت للرسائل الدورية: الإعدادات الأساسية عبر BotFather

قبل الانتقال إلى الجدولة، يُستحسن تهيئة البوت ليكون صديقًا للمستخدم. استخدم BotFather لتعيين الأوامر التي يمكن للمستخدمين استخدامها (مثل /start، /help) عبر الأمر /setcommands. أرسل قائمة بالأوامر كما يلي:

start - بدء المحادثة help - تعليمات الاستخدام status - معرفة حالة الخدمة

كما يمكنك ضبط الصورة الشخصية (/setuserpic) والوصف (/setdescription) ليظهر عند البحث عن البوت. هذه الخطوات تحسن تجربة المستخدم ولكنها غير ضرورية للجدولة، إلا أنها تزيد من احترافية البوت وتجذب التفاعل.

4. طرق إرسال رسائل دورية من خادم خارجي

لإرسال رسائل في أوقات محددة، تحتاج إلى بيئة حوسبة (سيرفر، حاسوب شخصي، أو خدمة سحابية) تشغل سكريبتًا يستدعي واجهة تيليجرام API. تتنوع هذه الطرق حسب تكلفتك وخبرتك التقنية، وسنستعرض أبرزها:

4.1 استخدام Cron على خادم Linux VPS

إذا كنت تملك خادمًا (مثل DigitalOcean أو AWS EC2)، يمكنك كتابة سكريبت بلغة Python أو Node.js وإضافته إلى crontab. مثلاً، سكريبت Python بسيط يستخدم مكتبة requests لإرسال رسالة عبر API. هذه الطريقة توفر تحكمًا كاملًا ومناسبة للمشاريع طويلة الأمد.

#!/usr/bin/env python3
import requests

TOKEN = '123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11'
CHAT_ID = '@my_channel_username'  # أو رقم معرف المحادثة
MESSAGE = 'هذه رسالة دورية من بوتي!'

url = f'https://api.telegram.org/bot{TOKEN}/sendMessage'
payload = {'chat_id': CHAT_ID, 'text': MESSAGE}
response = requests.post(url, data=payload)
print(response.json())

ضع السكريبت في مسار مثل /usr/local/bin/periodic_message.py، ثم أضف مهمة في crontab: crontab -e وأضف سطرًا مثل 0 9 * * * /usr/bin/python3 /usr/local/bin/periodic_message.py لإرسال الرسالة يوميًا في الساعة 9 صباحًا. يمكنك تعديل توقيت cron ليناسب جدولك الزمني تمامًا.

4.2 خدمات السحابة المجدولة (Cloud Schedulers)

إذا كنت لا تريد صيانة خادم، استخدم خدمات مثل AWS Lambda + CloudWatch Events أو Google Cloud Scheduler لتنفيذ السكريبت بلا خادم (Serverless). على سبيل المثال، يمكن كتابة دالة AWS Lambda بلغة Python تُطلقها قاعدة زمنية (مثل cron expression)، وتقوم بإرسال رسالة إلى تيليجرام. تذكر تعيين المتغيرات البيئية بشكل آمن (Token، Chat ID) في لوحة التحكم، مما يلغي الحاجة لإدارة الخادم يدويًا.

4.3 استخدام GitHub Actions

هذه الطريقة مجانية لحد معقول ومناسبة للتجارب والمشاريع الصغيرة. أنشئ مستودعًا خاصًا (أو عامًا مع احتياطات أمنية)، وأضف Workflow YAML يحتوي على جدولة cron (مثل schedule: - cron: '0 8 * * 1'). في الخطوات، استخدم إجراء (Action) يرسل طلب HTTP إلى تيليجرام. لكن كن حذرًا: قد يُكشف Token في سجلات العمل إذا لم تستخدم Secrets. أفضل ممارسة هي تخزين Token كـ Secret في المستودع.

4.4 بوتات وسيطة من جهات ثالثة

توجد بوتات تتيح جدولة الرسائل دون برمجة (مثل @SchedulerBot أو @TimerBot)، لكنها تعتمد على خوادم خارجية وقد تشارك بياناتك. الأفضل دائمًا استخدام حل خاص للحفاظ على التحكم في بياناتك وجدولتها. استخدم هذه البوتات فقط للتجارب السريعة أو المحتوى غير الحساس.

5. أمثلة عملية وتفاصيل إضافية

لنفترض أنك تدير قناة تعليمية تضم 5000 مشترك، وتريد إرسال سؤال يومي في الساعة 10 صباحًا. باستخدام الخادم السابق، يمكن تعديل السكريبت لسحب المحتوى من ملف CSV يتضمن عمودًا للرسالة وعمودًا للوقت. مثال: يمكن استخدام مكتبة pandas لقراءة الجدول ومقارنة الوقت الحالي مع موعد الإرسال. أضف أيضًا معالجة أخطاء بسيطة (مثل إعادة المحاولة بعد 5 ثوانٍ في حالة فشل الاتصال) لضمان وصول الرسائل.

6. أفضل الممارسات للرسائل الدورية

  • احترام حدود معدل الإرسال (Rate Limits): تيليجرام يسمح بحوالي 30 رسالة في الثانية لكل بوت. للقنوات الكبيرة، استخدم sendMessage مع تجنب الإرسال المتزامن. وزع الإرسال على فترات قصيرة إذا لزم الأمر.
  • استخدام Chat ID ثابت: إما اسم مستخدم القناة (مثل @channel) أو المعرف الرقمي (مثل -1001234567890). تأكد من أن البوت هو مسؤول في القناة لإرسال الرسائل، وإلا ستحصل على خطأ 403.
  • تسجيل الأخطاء (Logging): سجل الاستجابات من API لمراقبة الفشل. استخدم مكتبة logging في بايثون لحفظ الأخطاء في ملف.
  • أمان Token: لا تخزن Token في كود مفتوح أو سكريبتات عامة. استخدم متغيرات بيئية أو خدمات إدارة الأسرار مثل GitHub Secrets أو AWS Secrets Manager.
  • اختبار الجدولة: اختبر السكريبت يدويًا أولاً، ثم جدولة مع فاصل زمني قصير (مثل كل 5 دقائق) للتحقق من الاستقرار قبل التشغيل النهائي.

7. متى لا تستخدم بوت رسائل دورية

هناك حالات قد لا يكون هذا الحل هو الأنسب، وسنذكر أبرزها مع بدائل مبسطة:

  • إذا كنت تحتاج إلى إرسال فوري (مثل تنبيهات حية) – فالجدولة تسبب تأخيرًا حتى الدورة التالية. في هذه الحالة استخدم Webhooks أو إرسال مباشر عبر API.
  • إذا كان عدد المشتركين قليلًا جدًا والإرسال اليدوي أسهل وأقل تعقيدًا، خاصة للمحتوى غير المتكرر.
  • إذا كانت القناة تحتوي على محتوى حساس ويجب تجنب الخوادم الخارجية غير الموثوقة. الحل محلي بالكامل هو الأكثر أمانًا.
  • إذا كان تكلفة استضافة الخادم تفوق فائدة الأتمتة: ابدأ بالخدمات المجانية مثل GitHub Actions أو Heroku المجاني (مع مراعاة حدود الاستخدام).

8. التحقق من عمل البوت واستكشاف الأخطاء

بعد إعداد الجدولة، اختبر بجولة يدوية: نفذ السكريبت مباشرة وشاهد استجابة API. تأكد من أن البوت لديه صلاحية الإرسال إلى القناة. إذا لم تصل الرسائل، تحقق من النقاط التالية بالترتيب:

  1. صحة Token و Chat ID: تحقق من عدم وجود أخطاء إملائية، وأن Chat ID يبدأ بشرطة للقنوات (مثل -1001234567890).
  2. أن البوت مضاف كمسؤول في القناة (إدارة القناة → المسؤولين → إضافة بوت). بدون صلاحية المسؤول، لا يستطيع البوت الإرسال.
  3. أذونات المجموعة: إذا كان البوت في مجموعة، قد يحتاج صلاحية الحذف أو التعديل، حسب نوع الرسالة.
  4. سجلات الخادم لمعرفة أخطاء HTTP (مثل 403 Forbidden يعني صلاحيات غير كافية، 400 Bad Request يعني خطأ في المعاملات).

الأسئلة الشائعة

هل يمكن لـ BotFather جدولة الرسائل تلقائيًا؟

لا. BotFather ليس أداة جدولة؛ وظيفته الوحيدة إنشاء البوتات وتحرير إعداداتها. الجدولة تحتاج إلى خادم خارجي يستخدم Token البوت، كما هو موضح في الأقسام السابقة.

هل أحتاج إلى مهارات برمجية لإنشاء بوت دوري؟

نعم، بشكل أساسي. تحتاج إلى كتابة سكريبت بسيط بلغة مثل Python أو Node.js، ومعرفة أساسية بنظام cron أو خدمة سحابية. لكن هناك خدمات رسومية (مثل Zapier أو IFTTT) قد تقدم حلاً بدون برمجة، لكنها محدودة في تيليجرام من حيث التخصيص والجدولة المتقدمة.

ماذا لو أردت إرسال رسائل مختلفة في أوقات مختلفة؟

يمكنك جدولة عدة مهام cron مختلفة، أو تعديل السكريبت لقراءة محتوى من ملف جدول زمني (مثل JSON أو CSV). مثلاً اقرأ من CSV يحتوي على حقلين: الوقت والرسالة، ثم أرسل حسب الوقت الحالي. هذا يمنحك مرونة كاملة في المحتوى والمواعيد.

هل يمكن إرسال رسائل دورية إلى مستخدم خاص (وليس قناة)؟

نعم، بشرط أن يكون المستخدم قد بدأ المحادثة مع البوت أولاً (أرسل /start). عندها يمكنك الحصول على chat_id الخاص به وإرسال الرسائل. لكن لا يمكن للبوت بدء محادثة مع مستخدم لأول مرة بسبب قيود تيليجرام لحماية الخصوصية.

كيف أتأكد من أن البوت لا يتوقف عن العمل؟

استخدم خدمة مراقبة (مثل Uptime Robot) تراقب تنفيذ السكريبت، أو أضف منطق إعادة محاولة في السكريبت نفسه (مثل retry بعد 5 ثوانٍ عند فشل الإرسال). للخوادم، تأكد من تشغيل خدمة cron بشكل مستمر، وفكر في إعداد تنبيهات في حالة توقف البوت عن الإرسال.

خلاصة وتوصيات

إعداد بوت تيليجرام لإرسال رسائل دورية يمر بمرحلتين رئيسيتين: إنشاء البوت عبر BotFather (خطوات بسيطة وسريعة) ثم توصيله بآلية جدولة خارجية (تتطلب بعض البرمجة). اختر الطريقة التي تناسب ميزانيتك وخبرتك: cron على خادم شخصي لمن لديه خبرة في Linux، أو خدمة سحابية serverless للبساطة وتقليل الصيانة، أو GitHub Actions للتجارب المجانية مع احتياطات أمنية. اتجاهات مستقبلية: قد نرى دعمًا أفضل للجدولة داخل تيليجرام نفسه في إصدارات لاحقة، أو تكاملًا أسهل مع خدمات بدون خادم. تذكر أن الأمان والتوثيق الجيد يضمن استمرارية عمل البوت. ابدأ الآن بإنشاء بوت تجريبي واختبر جدولة رسالة بسيطة، ثم وسّع الحل حسب احتياجاتك الخاصة – سواء كانت نشرات يومية أو تنبيهات أسبوعية.