شغّل بوت تيليجرام يعمل 24/7 دون توقّف
أوقف تشغيل بوت تيليجرام على جهازك أو على باقة مجانية تنام عند الخمول. شغّله كتطبيق صغير يعمل على مدار الساعة، يعيد تشغيل نفسه عند أيّ تعطّل، ويحفظ رمزه بأمان. تسعير مسبق الدفع، ورصيد تجريبي مجاني بقيمة ٥ دولارات للانطلاق.
بوت تيليجرام لا قيمة له إلا وهو مستيقظ. تشغيله على جهازك يعني أنّه يموت لحظة تُغلق الغطاء. وكثير من الباقات المجانية تُنيم عمليتك بعد دقائق من الخمول، فلا يجد أوّل من يراسله بعد فترة هدوء سوى الصمت. الحلّ أن تشغّل البوت كتطبيق صغير يعمل على مدار الساعة، ويعيد تشغيل نفسه إن تعطّل. وهذا ما يفعله هذا الدليل بالضبط.
لماذا التطبيق داخل حزمة Docker هو المكان الصحيح للبوت
البوت عملية طويلة الأمد، لا موقع يردّ على طلب واحد ثمّ ينصرف. هو يحتاج أن يبقى حيّاً، ويحافظ على اتصاله بتيليجرام، ويعود فوراً بعد أيّ تعثّر. والتطبيق الدائم على alawadi.cloud يمنحك الثلاثة معاً: يعمل بلا انقطاع، وتعيد المنصّة تشغيله تلقائياً إن توقّفت العملية، ويبقى شغّالاً ما دام رصيدك إيجابياً.
كيف يتحدّث البوت إلى تيليجرام
أمامك طريقتان، ويفيدك أن تعرف أيّهما تستخدم:
- long polling (
getUpdates): يسأل بوتك تيليجرام مراراً عن الرسائل الجديدة. كلّ الحركة صادرة، فلا حاجة للبوت برابط عام. هذه أبسط طريقة، وهي المعتمدة في هذا الدليل. - الويب هوك: يدفع تيليجرام التحديثات إلى رابط HTTPS عام تعرضه أنت. إن فضّلته، افتح المنفذ
8080ووجّه الويب هوك إلى نطاقك الفرعي*.alawadi.cloudالذي يحمل شهادة TLS أصلاً.
بالنسبة لمعظم البوتات، يبقى long polling أسهل طريق إلى العمل على مدار الساعة، فابدأ منه.
ما ستحتاجه
- رمز بوت من BotFather في تيليجرام
- كود بوتك (يستخدم هذا الدليل Python، وNode مع Telegraf يعمل بالطريقة ذاتها)
- Docker مثبّت محلياً لبناء الحزمة واختبارها
- حساب على alawadi.cloud: دخول بحساب Google، من دون بطاقة، ورصيد تجريبي مجاني من داخل البوابة
الخطوة ١: بوت بسيط
هذا بوت كامل يعمل بطريقة long polling عبر python-telegram-bot. يقرأ رمزه من متغيّر بيئة، لا من نصٍّ مكتوب داخل الكود:
import os
from telegram import Update
from telegram.ext import Application, CommandHandler, ContextTypes
async def start(update: Update, _: ContextTypes.DEFAULT_TYPE) -> None:
await update.message.reply_text("أهلاً! أعمل على مدار الساعة على alawadi.cloud.")
def main() -> None:
token = os.environ["BOT_TOKEN"] # يُحقن من البوابة، لا يُكتب داخل الكود
app = Application.builder().token(token).build()
app.add_handler(CommandHandler("start", start))
app.run_polling() # استطلاع طويل: مكالمات صادرة فقط
if __name__ == "__main__":
main()ضع python-telegram-bot==21.6 في ملف requirements.txt بجانبه.
الخطوة ٢: ملف Dockerfile
تثبّت الحزمة الاعتماديات وتشغّل البوت بمستخدم غير root، لأنّ المنصّة ترفض تشغيل الحزم بمستخدم root. وبوت الاستطلاع الطويل لا يقدّم HTTP، فلا حاجة له بمنفذ مفتوح:
FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
# التشغيل بمستخدم غير root؛ المنصّة ترفض تشغيل الحزم بمستخدم root
RUN useradd --create-home bot
USER bot
CMD ["python", "bot.py"]ابنِ الحزمة وشغّلها على جهازك برمزك، وتأكّد أنّ البوت يردّ على /start:
docker build -t my-telegram-bot .
docker run --rm -e BOT_TOKEN=your-token-here my-telegram-botالخطوة ٣: أبقِ الرمز سرّاً
لا تدمج رمز بوتك داخل الحزمة، ولا ترفعه إلى Git أبداً. من البوابة، اضبط BOT_TOKEN كمتغيّر بيئة (أو سرّ) على الخدمة، فتحقنه المنصّة عند التشغيل. وإن تسرّب الرمز يوماً، ألغِه من BotFather واضبط قيمة جديدة، دون أيّ إعادة بناء.
الخطوة ٤: انشره ودعه يبقى شغّالاً
افتح Cloud Studio، وأنشئ تطبيقاً، وامنحه اسماً، ووجّهه إلى حزمتك عبر مستودع خاص وGitHub OIDC، وهو مسار النشر التلقائي نفسه المشروح في درس النشر خلال 5 دقائق. وبعد تشغيله:
- يبقى شغّالاً على مدار الساعة، محافظاً على حلقة long polling مع تيليجرام دون أن تلمس شيئاً.
- إن تعطّلت العملية، تعيد المنصّة تشغيلها تلقائياً.
- السجلّات المباشرة في لوحة التحكم تعرض كلّ تحديث يعالجه بوتك، فيصبح تتبّع الأخطاء سهلاً.
شغّل نسخة واحدة فقط
بوت long polling يجب أن يعمل بنسخة واحدة فقط. فإن أجرت نسختان long polling على تيليجرام بالرمز نفسه، تنازعتا على التحديثات وظهرت لك رسالة «Conflict: terminated by other getUpdates request». أبقِ البوت على نسخة واحدة في البوابة؛ فالتوسيع التلقائي وُضِع لتطبيقات الويب التي تعالج طلبات متوازية كثيرة، لا لحلقة long polling واحدة. وإن احتجت سعة أكبر يوماً، انتقل إلى الويب هوك بدل زيادة النسخ.
الخطوة ٥: امنح بوتك ذاكرة (اختياري)
إن احتاج بوتك أن يتذكّر المستخدمين أو النقاط أو الحالة، فأضف قاعدة PostgreSQL مُدارة أو Redis من تبويب قواعد البيانات. يحقن ربطها بيانات الاتصال في بوتك تلقائياً، وتتولّى المنصّة تخزينها ونسخها الاحتياطي. وهو النمط نفسه المعروض في قائمة الإطلاق.
كم يكلّف، وكيف تبدأ
بوت صغير دائم التشغيل قليل التكلفة، ويُخصم استهلاكه من سجلّ رصيد بالدولار مع عرض اختياري بالدولار أو الليرة أو الدرهم أو الدينار الأردني. قدّر تكلفته عبر حاسبة الأسعار، ثم فعّل رصيداً تجريبياً بقيمة 5 دولارات من دون بطاقة. القسائم مسبقة الدفع المسعّرة بالليرة السورية هي وسيلة التعبئة الوحيدة المتاحة؛ ولا تتوفر تعبئة بالبطاقات أو العملات الرقمية حالياً. وإن نفد رصيدك، توقّف البوت توقّفاً هادئاً، وبقيت بياناتك محفوظة ٧ أيام ريثما تعيد التعبئة، فلا شيء يُحذف من تحتك.
أسئلة شائعة
هل أحتاج رابطاً عاماً لبوتي؟
ليس مع long polling. البوت يجري اتصالات صادرة فقط نحو تيليجرام، فلا يحتاج عنواناً وارداً. لا تختر الويب هوك (وتفتح المنفذ 8080) إلا إن أردت تحديداً أن يدفع تيليجرام التحديثات إليك.
هل لن ينام بوتي فعلاً؟
صحيح، لن ينام. التطبيق الدائم ليس باقة مجانية تنام عند الخمول؛ يعمل بلا انقطاع ما دام رصيدك إيجابياً، وتعيد المنصّة تشغيله إن تعطّل.
هل أستطيع تشغيل بوت بلغة Node؟
نعم. تنطبق الخطوات نفسها مع Telegraf أو grammY: اقرأ الرمز من متغيّر بيئة، وشغّل البوت بمستخدم غير root، ثم انشره. لديك سؤال آخر؟ افتح تذكرة دعم في البوابة أو راسل [email protected].
الشركة المطوّرة لمنصّة alawadi.cloud
شركة تبني منصّة سحابية عربية الهوية، من الخوادم الفعلية وصولاً إلى تجربة المطوّرين.