رفتن به محتوای اصلی
👋 سطح: مبتدی · رایگان

سورس ربات خوش‌آمدگویی بله

ساده‌ترین ربات بله؛ به کاربر خوش‌آمد می‌گوید و هر پیامش را تکرار می‌کند. بهترین نقطهٔ شروع برای فهمیدن ساختار یک ربات بله با پایتون.

طراحی و کدنویسی: به‌روزرسانی: زبان: Python 3حجم کد: حدود ۹۰ خطمجوز: آزاد (CC0)

پاسخ کوتاه

ربات خوش‌آمدگویی بله یک برنامهٔ پایتون حدوداً ۷۰ خطی است که با کتابخانهٔ requests به API بله (tapi.bale.ai) وصل می‌شود، با روش long polling پیام‌های جدید را می‌گیرد، به دستور /start پیام خوش‌آمد می‌فرستد و هر متن دیگری را عیناً برمی‌گرداند. هیچ فریم‌ورک یا وابستگی دیگری لازم ندارد.

ربات خوش‌آمدگویی بله چطور کار می‌کند؟

وقتی کاربر دستور /start را بزند، ربات به او خوش‌آمد می‌گوید و بعد از آن هر پیام متنی که بفرستد، همان را برایش تکرار می‌کند (echo). همین چند خط، اسکلت همهٔ ربات‌های بله است: گرفتن پیام، تصمیم‌گیری، ارسال پاسخ. اگر این را بفهمی، سه ربات بعدی این مجموعه را هم راحت می‌فهمی.

زبان: پایتون ۳
وابستگی: فقط requests
اجرا: long polling (بدون دامنه و SSL)
هزینه: رایگان

آموزش راه‌اندازی ربات خوش‌آمدگویی بله در ۵ قدم

این مراحل را به‌ترتیب انجام بده تا ربات روی سیستم خودت یا سرور بالا بیاید. زمان تقریبی: ۱۰ دقیقه.

از ربات BotFather داخل بله یک ربات جدید بساز و توکن آن را کپی کن.
پایتون ۳ را نصب کن و در ترمینال دستور pip install requests را اجرا کن.
فایل bot.py را باز کن و مقدار TOKEN را با توکن رباتت جایگزین کن.
دستور python bot.py را اجرا کن تا ربات روشن شود.
داخل بله ربات خودت را باز کن، /start بزن و یک پیام بفرست تا پاسخ echo را ببینی.

کل سورس ربات خوش‌آمدگویی بله (کپی یا دانلود کن)

این همان کدی است که داخل فایل ZIP هم هست. می‌توانی مستقیم از اینجا کپی کنی. فقط یادت باشد مقدار TOKEN را با توکن رباتت عوض کنی.

bot.py
# -*- coding: utf-8 -*-
# ------------------------------------------------------------
#  ربات خوش‌آمدگویی بله
#  طراحی و کدنویسی: سروش مقدمی — فیلتور (filtori.com)
# ------------------------------------------------------------
#  این ربات ساده‌ترین نمونهٔ ممکنه:
#   - به دستور /start یک پیام خوش‌آمد می‌فرسته
#   - هر پیام متنی کاربر رو دوباره براش می‌فرسته (echo)
#  فقط با کتابخانهٔ requests نوشته شده و هیچ وابستگی دیگه‌ای نداره.
#
#  آموزش کامل و تصویری:
#     https://filtori.com/bale-bot-source/welcome-bot/
#  نیاز به نسخهٔ حرفه‌ای و اختصاصی داری؟ زنگ بزن: 09122874862
#  یا بیا تلگرام ما: https://t.me/filtori
# ------------------------------------------------------------

import time
import requests

# ۱) توکن رباتت رو از @BotFather داخل بله بگیر و اینجا بذار.
TOKEN = "توکن_ربات_خودت_را_اینجا_بگذار"

# آدرس پایهٔ API بله (شبیه تلگرام کار می‌کنه)
BASE = f"https://tapi.bale.ai/bot{TOKEN}"


def send_message(chat_id, text):
    """ارسال یک پیام متنی به کاربر."""
    url = f"{BASE}/sendMessage"
    data = {"chat_id": chat_id, "text": text}
    try:
        requests.post(url, json=data, timeout=15)
    except requests.RequestException as error:
        # اگر اینترنت سرور قطع بود، خطا رو چاپ می‌کنیم و ربات نمی‌خوابه.
        print("خطا در ارسال پیام:", error)


def get_updates(offset):
    """گرفتن پیام‌های جدید با روش long polling."""
    url = f"{BASE}/getUpdates"
    # offset یعنی «از این شمارهٔ آپدیت به بعد» تا پیام تکراری نگیریم.
    params = {"offset": offset, "timeout": 30}
    try:
        response = requests.get(url, params=params, timeout=40)
        return response.json()
    except requests.RequestException as error:
        print("خطا در دریافت پیام‌ها:", error)
        return {"ok": False, "result": []}


def main():
    print("ربات خوش‌آمدگویی فیلتور روشن شد... (برای خاموش‌کردن Ctrl+C بزن)")
    offset = 0  # شمارهٔ آخرین آپدیتی که پردازش کردیم

    while True:
        updates = get_updates(offset)

        if not updates.get("ok"):
            time.sleep(2)  # اگر خطا بود، کمی صبر کن و دوباره امتحان کن
            continue

        for update in updates.get("result", []):
            # همیشه offset رو یک واحد جلوتر از آخرین آپدیت می‌بریم.
            offset = update["update_id"] + 1

            message = update.get("message")
            if not message:
                continue  # آپدیت‌هایی که پیام متنی نیستن رو رد می‌کنیم

            chat_id = message["chat"]["id"]
            text = message.get("text", "")

            if text == "/start":
                send_message(
                    chat_id,
                    "سلام 👋 به ربات ما خوش اومدی!\n"
                    "هر چیزی بنویسی همون رو برات برمی‌گردونم.\n"
                    "این ربات با ❤️ توسط فیلتور ساخته شده: filtori.com",
                )
            elif text:
                # پاسخ echo : عین حرف کاربر رو تکرار می‌کنیم
                send_message(chat_id, f"گفتی: {text}")

        # رعایت محدودیت بله: بیشتر از ۲ پیام در ثانیه به یک چت نفرست.
        time.sleep(0.5)


if __name__ == "__main__":
    main()
کل سورس این ربات ↑ — همین حالا کپی یا دانلود کن

کد را خط‌به‌خط بفهم

کپی‌کردن کافی نیست؛ اگر بدانی هر بخش چرا آن‌جاست، می‌توانی ربات را برای کسب‌وکار خودت تغییر بدهی. مهم‌ترین قطعه‌های ربات خوش‌آمدگویی بله:

۱توکن و آدرس پایهٔ API بله

TOKEN = "..."
BASE = f"https://tapi.bale.ai/bot{TOKEN}"

همهٔ درخواست‌ها به آدرس tapi.bale.ai/bot<TOKEN>/متد می‌روند. این دقیقاً همان الگوی Bot API تلگرام است (api.telegram.org/bot<TOKEN>)؛ برای همین هر آموزش ربات تلگرام با پایتون، اینجا هم کار می‌کند.

۲ارسال پیام با sendMessage

requests.post(url, json={"chat_id": chat_id, "text": text}, timeout=15)

متد sendMessage فقط دو فیلد اجباری دارد: chat_id و text. داده را با json= می‌فرستیم تا فارسی درست کدگذاری شود. timeout=15 یعنی اگر ۱۵ ثانیه جواب نیامد، منتظر نمان؛ بدون آن ربات ممکن است تا ابد قفل شود.

۳خطاگیری که ربات را زنده نگه می‌دارد

except requests.RequestException as error:
    print(...)

قطعی اینترنت یا کندی سرور بله نباید ربات را بخواباند. با گرفتن RequestException فقط خطا را چاپ می‌کنیم و حلقه ادامه می‌دهد. این تک‌خط تفاوت رباتی است که هر شب می‌میرد با رباتی که ماه‌ها روشن می‌ماند.

۴گرفتن پیام‌ها با long polling

params = {"offset": offset, "timeout": 30}
requests.get(url, params=params, timeout=40)

getUpdates با timeout=30 به سرور بله می‌گوید «تا ۳۰ ثانیه صبر کن، اگر پیامی آمد فوراً بده». به این می‌گویند long polling؛ نه دامنه می‌خواهد نه SSL و روی لپ‌تاپ خانگی هم اجرا می‌شود. timeout درخواست (۴۰) عمداً کمی بیشتر از timeout سرور (۳۰) است.

۵offset: چرا پیام تکراری نمی‌گیریم؟

offset = update["update_id"] + 1

هر آپدیت یک شمارهٔ یکتا دارد. با فرستادن offset به سرور می‌گوییم «آپدیت‌های قبل از این را تأیید کردم، دیگر نفرست». اگر این خط را جا بیندازی، ربات هر پیام را بی‌نهایت بار جواب می‌دهد.

۶مکث ۰٫۵ ثانیه‌ای

time.sleep(0.5)

بله بیش از حدود ۲ پیام در ثانیه به یک چت را رد می‌کند (خطای ۴۲۹). این مکث کوچک هم از آن جلوگیری می‌کند و هم CPU سرور را آزاد می‌گذارد.

🔁 همین کد روی تلگرام هم اجرا می‌شود: فقط BASE را به https://api.telegram.org/bot{TOKEN} تغییر بده. جدول تفاوت API بله و تلگرام را ببین.

سوال‌های پرتکرار دربارهٔ ربات خوش‌آمدگویی بله

این سورس ربات بله رایگان است؟

بله، این سورس کاملاً رایگان است و می‌توانید بدون ثبت‌نام آن را دانلود، ویرایش و در کسب‌وکار خود استفاده کنید.

برای اجرای این ربات به چه چیزی نیاز دارم؟

فقط به پایتون ۳ و کتابخانهٔ requests. توکن ربات را هم از BotFather در بله می‌گیرید. نه دامنه لازم است، نه سرور؛ روی لپ‌تاپ خودتان هم اجرا می‌شود.

می‌توانم متن خوش‌آمد را تغییر بدهم؟

بله، کافی است متنی که در شرط /start به تابع send_message داده می‌شود را ویرایش کنید. برای ساختن نسخهٔ شخصی‌سازی‌شده بدون کدنویسی، از ربات‌ساز آنلاین فیلتور استفاده کنید.

فرق این کد با ربات تلگرام چیست؟

تقریباً هیچ. API بله کپی سازگار با Bot API تلگرام است؛ فقط آدرس پایه از api.telegram.org به tapi.bale.ai تغییر می‌کند. همین کد با عوض‌کردن یک خط روی تلگرام هم اجرا می‌شود.

طراح و برنامه‌نویس این سورس‌ها · بنیان‌گذار فیلتور

مدیر بخش دیتابیس همراه اول و فعال در توسعهٔ نرم‌افزار از سال ۱۳۹۱؛ با سابقهٔ کار روی سامانه‌های بانکی و پرتراکنش. این سورس‌ها را طوری نوشته که ساده، خوانا و قابل توسعه باشند و مستقیم در کسب‌وکار واقعی استفاده شوند.

راه‌اندازی این ربات برایت سخت شد؟

لازم نیست خودت درگیر شوی. تیم فیلتور این ربات را نصب، شخصی‌سازی و به کسب‌وکارت وصل می‌کند.