انتقل إلى المحتوى

بوت تليجرام بالذكاء الاصطناعي مع Claude أو GPT أو Gemini

أنشئ بوت تليجرام من BotFather، واجعله يجيب بنماذج Claude وGPT وGemini عبر واجهة متوافقة مع OpenAI، مع كود Python مُختبَر وحساب التكلفة.

آخر تحديث: 1 نوفمبر 2026نسخة Markdown

لبناء بوت تليجرام بالذكاء الاصطناعي، أنشئ البوت في @BotFather واحصل على رمزه، ثم شغّل ملف Python قصيرًا يرسل كل رسالة إلى نموذج محادثة ويعيد الإجابة إلى المحادثة. وبمفتاح من 5abeer تصل مكتبة OpenAI إلى نماذج Claude وGPT وGemini بأقل من أسعارها الرسمية، ولا تدفع إلا ثمن التوكنات التي تستهلكها كل إجابة.

ما الذي تحتاج إليه لبناء بوت تليجرام بالذكاء الاصطناعي؟#

  • حساب تليجرام، لإنشاء البوت في @BotFather والحصول على رمزه.
  • مفتاح API من 5abeer لمزوّد النموذج الذي سيستخدمه البوت. يستخدم الكود أدناه النموذج الافتراضي claude-sonnet-5.5، لذلك يحتاج إلى مفتاح Claude. الخطوات في أنشئ مفتاحًا، والأساسيات في ما هو مفتاح API وكيف تحصل على واحد لـ Claude وGPT وGemini.
  • Python 3.10 أو أحدث، مع حزمتين: مكتبة openai الرسمية ومكتبة requests.
  • جهاز أو خادم يبقى يعمل طوال تشغيل البوت.

كيف تحصل على رمز البوت من BotFather؟#

  1. ابدأ بوتًا جديدًا#

    افتح محادثة مع @BotFather في تليجرام وأرسل /newbot.

  2. اختر اسمًا واسم مستخدم#

    الاسم هو ما يراه الناس في المحادثة. أما اسم المستخدم فهو عنوان البوت، كما في t.me/username. ويجب أن يتراوح طوله بين 5 و32 حرفًا، وأن يتكون من حروف لاتينية وأرقام وشرطات سفلية فقط، وأن ينتهي بـ bot، مثل support_helper_bot.

  3. انسخ الرمز#

    يرد BotFather برمز البوت (token). ونصيحة تليجرام واضحة: "Keep your token secure and store it safely, it can be used by anyone to control your bot"، أي احفظ الرمز في مكان آمن، لأن من يملكه يستطيع التحكم في البوت. وإذا تسرّب الرمز، فأرسل /token إلى BotFather لتوليد رمز جديد.

كيف تربط البوت بـ Claude أو GPT أو Gemini؟#

تدعم 5abeer صيغة OpenAI Chat Completions، لذلك يستخدم البوت مكتبة OpenAI الرسمية بتغييرين فقط: عنوان الأساس والمفتاح. ويصل الكود نفسه إلى نماذج Claude وGPT وGemini، ولا يتغير إلا معرّف النموذج ومزوّد المفتاح. والانتقال من أي خدمة أخرى متوافقة مع OpenAI يتم بالتغيير نفسه، كما في بديل OpenRouter بأسعار أقل من الرسمي.

متوافق مع OpenAIhttps://api.5abeer.ai/v1Authorization: Bearer <KEY>
متوافق مع Anthropichttps://api.5abeer.aix-api-key: <KEY>
Geminihttps://api.5abeer.ai/v1betax-goog-api-key: <KEY>

قبل تشغيل البوت، أرسل طلبًا تجريبيًا واحدًا بمفتاحك. فإذا جاء الرد، فالمفتاح والنموذج جاهزان. والصيغة مشروحة في Chat Completions.

curl --request POST "https://api.5abeer.ai/v1/chat/completions" \
  --header "Authorization: Bearer $KHABEER_API_KEY" \
  --header "Content-Type: application/json" \
  --data '{"model":"claude-sonnet-5.5","messages":[{"role":"user","content":"اكتب فكرة منتج في سطر واحد"}]}'
الرد
{
  "id": "chatcmpl-9f2",
  "object": "chat.completion",
  "model": "claude-sonnet-5.5",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "مرحبًا! كيف أساعدك اليوم؟"
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 21,
    "completion_tokens": 12,
    "total_tokens": 33
  }
}

المفتاح يُقرأ من متغير البيئة ⁦KHABEER_API_KEY⁩، فلا يظهر في الكود.

كيف يبدو البوت كاملًا؟#

البوت كله ملف Python واحد. يعتمد على الاستطلاع الطويل (long polling)، فلا يحتاج إلى نطاق أو شهادة أو منفذ مفتوح. ولا يجيب إلا المحادثات التي تسمح بها.

bot.py
import os
import time

import requests
from openai import OpenAI

TELEGRAM = "https://api.telegram.org/bot" + os.environ["TELEGRAM_BOT_TOKEN"]
client = OpenAI(api_key=os.environ["KHABEER_API_KEY"], base_url="https://api.5abeer.ai/v1")
MODEL = os.environ.get("BOT_MODEL", "claude-sonnet-5.5")
# Chat ids that may use the bot, comma-separated. "*" opens it to everyone.
ALLOWED = {x.strip() for x in os.environ.get("ALLOWED_CHAT_IDS", "").split(",") if x.strip()}

SYSTEM = "You are a helpful assistant. Answer briefly, in plain text, in the user's language."
GREETING = "Hi! Send me a question"
SORRY = "Sorry, I could not answer right now. Try again in a minute"
MAX_HISTORY = 10  # messages kept per chat: the last 5 questions and answers
history = {}


def telegram(method, **params):
    r = requests.post(f"{TELEGRAM}/{method}", json=params, timeout=60)
    r.raise_for_status()
    return r.json()["result"]


def send(chat_id, text):
    # Telegram accepts up to 4096 characters per message, so long answers go in parts.
    for i in range(0, len(text), 4000):
        telegram("sendMessage", chat_id=chat_id, text=text[i : i + 4000])


def handle(message):
    chat_id = message["chat"]["id"]
    text = message.get("text")
    if not text:
        return
    if "*" not in ALLOWED and str(chat_id) not in ALLOWED:
        print(f"ignored chat {chat_id}: add it to ALLOWED_CHAT_IDS")
        return
    if text.startswith(("/start", "/reset")):
        history.pop(chat_id, None)
        send(chat_id, GREETING)
        return
    telegram("sendChatAction", chat_id=chat_id, action="typing")
    past = history.get(chat_id, [])
    question = {"role": "user", "content": text}
    try:
        reply = client.chat.completions.create(
            model=MODEL,
            messages=[{"role": "system", "content": SYSTEM}, *past, question],
            max_tokens=1000,
        )
        answer = (reply.choices[0].message.content or "").strip()
    except Exception as error:
        print(f"model error: {error}")
        answer = ""
    if not answer:
        send(chat_id, SORRY)
        return
    history[chat_id] = (past + [question, {"role": "assistant", "content": answer}])[-MAX_HISTORY:]
    send(chat_id, answer)


def main():
    offset = 0
    while True:
        try:
            updates = telegram("getUpdates", offset=offset, timeout=50, allowed_updates=["message"])
        except requests.RequestException as error:
            print(f"telegram error: {error}")
            time.sleep(5)
            continue
        for update in updates:
            offset = update["update_id"] + 1
            if "message" in update:
                try:
                    handle(update["message"])
                except Exception as error:
                    print(f"update {update['update_id']} failed: {error}")


if __name__ == "__main__":
    main()

اختبرنا هذا الملف في 2026-11-01 على Python 3.11 مع مكتبة openai بالإصدارين 2.32 و3.42، أمام بدائل محلية لتليجرام وللواجهة، برمز ومفتاح وهميين.

كيف تشغّله وتمنع الغرباء من استخدامه؟#

يستطيع أي شخص يعرف اسم مستخدم البوت أن يراسله، وكل إجابة تُدفع من رصيدك. لذلك لا يجيب البوت إلا معرّفات المحادثات المدرجة في ALLOWED_CHAT_IDS، ولا يجيب أحدًا إذا كانت القائمة فارغة.

macOS / Linux
pip install openai requests
export TELEGRAM_BOT_TOKEN="YOUR_BOT_TOKEN"
export KHABEER_API_KEY="YOUR_5ABEER_API_KEY"
python3 bot.py
Windows
pip install openai requests
$env:TELEGRAM_BOT_TOKEN="YOUR_BOT_TOKEN"
$env:KHABEER_API_KEY="YOUR_5ABEER_API_KEY"
python bot.py
  1. شغّل البوت وأرسل إليه أي رسالة من حسابك في تليجرام.
  2. تطبع الطرفية السطر ignored chat 123456789: add it to ALLOWED_CHAT_IDS وفيه معرّف محادثتك الحقيقي.
  3. أوقف البوت، واضبط ALLOWED_CHAT_IDS على هذا المعرّف بالطريقة نفسها التي ضبطت بها المفتاح، ثم شغّله من جديد.

افصل بين المعرّفات بفاصلة إنجليزية ,. والقيمة * تفتح البوت للجميع، لذلك ضع حد إنفاق على المفتاح أولًا.

كيف يعمل الكود؟#

  • الاستطلاع الطويل: ينتظر getUpdates الرسائل الجديدة مدة تصل إلى 50 ثانية. ويخبر offset تليجرام بالتحديثات التي عولجت، فلا يُجاب عن أي منها مرتين.
  • حالة الكتابة: يعرضها تليجرام مدة تصل إلى 5 ثوانٍ، أو حتى يصل الرد.
  • الذاكرة: يحتفظ البوت بآخر 10 رسائل في كل محادثة ويرسلها مع كل سؤال، فتعمل أسئلة المتابعة. ويمحو /start أو /reset ذاكرة المحادثة، وكذلك إعادة التشغيل.
  • الإجابات الطويلة: يقبل تليجرام 4096 حرفًا في الرسالة، لذلك يرسل البوت الإجابة الأطول على أجزاء من 4000 حرف.
  • النص العادي: لا يضبط البوت parse_mode، ويطلب موجّه النظام نصًا عاديًا، لذلك نادرًا ما تظهر رموز Markdown في الإجابات.
  • الأخطاء: تعيد المكتبة المحاولة مرتين من تلقاء نفسها عند تجاوز حد المعدل أو انتهاء المهلة أو أخطاء الخادم. وإذا فشل الطلب بعد ذلك، يسجّل البوت الخطأ ويرسل اعتذارًا قصيرًا بدلًا من أن يتوقف.
  • يحدّد max_tokens=1000 طول الإجابة في نماذج Claude وGemini، وتتجاهله نماذج GPT، كما في المعاملات.

كيف تُبقي البوت يعمل؟#

لا يحتاج الاستطلاع الطويل إلا إلى اتصالات صادرة، فيكفيه أي جهاز يبقى يعمل: خادم سحابي صغير أو خادم منزلي أو حاوية. شغّله تحت مدير خدمات مثل systemd، أو اضبط للحاوية سياسة إعادة تشغيل، ليعود البوت بعد أي عطل أو إعادة تشغيل للجهاز.

شغّل نسخة واحدة لكل رمز، لأن نسختين تستطلعان البوت نفسه تتنافسان على الرسائل نفسها. وإذا توقف البوت مدة، يحتفظ تليجرام بالتحديثات التي لم تُسلَّم مدة تصل إلى 24 ساعة، ويلحق بها البوت عند عودته.

والطريقة الأخرى لاستقبال الرسائل هي webhook: يرسل تليجرام كل تحديث إلى عنوان HTTPS الخاص بك. اضبطه بـ setWebhook على المنفذ 443 أو 80 أو 88 أو 8443. وأضف secret_token وتحقّق من الترويسة X-Telegram-Bot-Api-Secret-Token في كل طلب. وما دام webhook مضبوطًا لا يعمل getUpdates، ويعيدك deleteWebhook إلى الاستطلاع.

ما الحدود التي يضعها تليجرام؟#

Telegram Bot API، الإصدار 10.3، راجعناه في 2026-11-01:

الحدالقيمة
النص في الرسالة الواحدةمن 1 إلى 4096 حرفًا
الرسائل إلى محادثة واحدةتجنّب أكثر من رسالة في الثانية؛ الدفعات الكثيفة تنتهي بأخطاء 429
الرسائل إلى مجموعة واحدةلا أكثر من 20 رسالة في الدقيقة
الرسائل إلى مستخدمين كثيريننحو 30 رسالة في الثانية، ما لم تدفع مقابل بث أسرع
الملفات التي ينزّلها البوتحتى 20 ميجابايت
الملفات التي يرسلها البوتحتى 50 ميجابايت
التحديثات التي لم تُسلَّمتُحفظ مدة تصل إلى 24 ساعة

وحد المجموعات هو الأهم لبوت الذكاء الاصطناعي، فالإجابة الطويلة التي تُرسل على ثلاثة أجزاء تُحسب ثلاث رسائل.

كم يكلّف بوت تليجرام بالذكاء الاصطناعي؟#

لا يتقاضى تليجرام نفسه شيئًا عن رسائل البوت العادية. وتقول أسئلته الشائعة إن "by default, bots are able to message their users at no cost"، أي إن البوتات تراسل مستخدميها دون تكلفة افتراضيًا. ولا يتقاضى نجوم تليجرام (Telegram Stars) إلا عن البث المدفوع فوق المعدل العادي. فالتكلفة إذن هي الخادم وتوكنات النموذج.

يرسل كل سؤال موجّه النظام وذاكرة المحادثة والرسالة الجديدة. وفي هذا المثال، يجيب البوت عن 3000 سؤال في الشهر، بنحو 1000 توكن إدخال و250 توكن إخراج لكل سؤال:

مثال: تكلفة ⁦Claude Sonnet 5.5⁩

3 مليون توكن إدخال و750 ألف توكن إخراج

سعرنا‏202.50 ج.م‏أقل من السعر الرسمي بنسبة 70%‎
السعر الرسمي‏675.00 ج.م‏

السعر الرسمي من صفحة المزوّد، بتاريخ 19 أكتوبر 2026.

وهذا سعر التوكن في النموذج الافتراضي:

سعر ⁦Claude Sonnet 5.5⁩ لكل مليون توكن
الإدخال‏30 ج.م‏السعر الرسمي: ‏100 ج.م‏
الإخراج‏150 ج.م‏السعر الرسمي: ‏500 ج.م‏

السعر الرسمي من صفحة المزوّد، بتاريخ 19 أكتوبر 2026.

ولتخفض التكلفة، اختر نموذجًا أصغر من صفحة النماذج واستخدم مفتاحًا لمزوّد ذلك النموذج، أو خفّض MAX_HISTORY أو max_tokens. ويمكنك مقارنة المزوّدين في صفحة الـ API وصفحة Claude API، وأسعار الباقات في صفحة الأسعار.

خصّص للبوت مفتاحًا خاصًا بحد إنفاق، كما في تحكّم في كل مفتاح. وعندما يبلغ المفتاح حده، تفشل الطلبات بالخطأ API_KEY_QUOTA_EXHAUSTED ويرسل البوت اعتذاره، فيتوقف الإنفاق عند الحد الذي وضعته.

كيف تحمي رمز البوت والمفتاح؟#

  • احفظ الاثنين في متغيرات البيئة، ولا تكتبهما في الكود ولا ترفعهما إلى مستودع.
  • استخدم مفتاحًا منفصلًا للبوت، بحد إنفاق، ومع قائمة عناوين IP مسموح بها إذا كان للخادم عنوان ثابت. التفاصيل في تحكّم في كل مفتاح.
  • أبقِ ALLOWED_CHAT_IDS قصيرة ما لم يكن البوت عامًا.
  • إذا تسرّب رمز البوت، فولّد رمزًا جديدًا بـ /token في BotFather. وإذا تسرّب مفتاح API، فعطّله وأنشئ مفتاحًا جديدًا.

أسئلة شائعة#

هل يتقاضى تليجرام مالًا عن رسائل البوت؟#

لا عن الرسائل العادية. يتقاضى تليجرام النجوم فقط عن البث المدفوع فوق المعدل العادي، فتدفع أنت ثمن توكنات النموذج والخادم.

هل يستطيع البوت استخدام GPT أو Gemini بدلًا من Claude؟#

نعم. اضبط BOT_MODEL على معرّف نموذج من صفحة النماذج، واستخدم مفتاحًا لمزوّد ذلك النموذج. فكل مفتاح يغطي مزوّدًا واحدًا، واستدعاء نموذج GPT بمفتاح Claude يعيد الخطأ MODEL_PLATFORM_NOT_ALLOWED.

هل يتذكر البوت المحادثة؟#

يتذكر آخر 10 رسائل في كل محادثة ما دام يعمل. ويمحوها /reset، وكذلك إعادة التشغيل. ولتبقى الذاكرة بعد إعادة التشغيل، احفظ history في ملف أو قاعدة بيانات.

هل يعمل في المجموعات؟#

نعم، بعد إضافة معرّف المجموعة إلى ALLOWED_CHAT_IDS. ووضع الخصوصية مفعّل افتراضيًا: يرى البوت في المجموعة الأوامر الموجّهة إليه والردود على رسائله، لا كل الرسائل. أما البوت الذي يُضاف مشرفًا فيرى كل الرسائل. ولتغيير وضع الخصوصية، استخدم /setprivacy في BotFather، ثم أزل البوت من المجموعة وأضفه من جديد. وفي المجموعة يتشارك كل الأعضاء ذاكرة واحدة.

ماذا يحدث عندما ينفد رصيدي؟#

تفشل الطلبات بالخطأ INSUFFICIENT_BALANCE، ويرد البوت باعتذاره حتى تشحن رصيدك. ويظل يعمل، فيعود إلى الإجابة عندما يعود الرصيد.

كيف أدفع ثمن الـ API؟#

تشحن رصيدك في خبير بأي طريقة من طرق الدفع، وتُخصم طلبات البوت من هذا الرصيد.

هل 5abeer جزء من تليجرام أو OpenAI أو Anthropic أو Google؟#

لا. 5abeer خدمة مستقلة لا تتبع أيًّا منها.

المصادر#

راجعناها في 2026-11-01:

  • Telegram Bot API (الإصدار 10.3): طول الرسالة وgetUpdates وsetWebhook وأحجام الملفات
  • Telegram Bots FAQ: حدود الإرسال وتكلفة البث
  • Telegram Bot Features: BotFather وأسماء المستخدمين والرموز ووضع الخصوصية

ابدأ#

أنشئ مفتاح Claude، وضعه في KHABEER_API_KEY، ثم شغّل البوت.