کاربران را عضو میکند و به شما اجازه میدهد به همه یکجا پیام، خبر و تخفیف بفرستید؛ فقط مدیر ربات اجازهٔ ارسال همگانی دارد.
سوال یا راهنمایی لازم داری؟ از صفحهٔ تماس با ما بپرس.
هر کاربری که ربات را /start کند به لیست مشترکها اضافه میشود و فقط مدیر ربات میتواند با دستور «send/ متن پیام» یک اطلاعیه، خبر یا تخفیف را یکجا برای همهٔ مشترکها بفرستد. لیست مشترکها در فایل ذخیره میشود.
این مراحل را بهترتیب انجام بده تا ربات روی سیستم خودت یا سرور بالا بیاید. داخل فایل ZIP یک راهنمای README هم هست.
این همان کدی است که داخل فایل ZIP هم هست. فقط یادت باشد مقدار TOKEN را با توکن رباتت عوض کنی.
# -*- coding: utf-8 -*-
# ------------------------------------------------------------
# ربات اطلاعرسانی و ارسال همگانی تلگرام
# طراحی و کدنویسی: سروش مقدمی — فیلتور (filtori.com)
# ------------------------------------------------------------
# با این ربات میتونی به همهٔ کسایی که ربات رو استارت کردن
# یکجا پیام (اطلاعیه، تخفیف، خبر) بفرستی:
# - هر کاربری /start بزنه، به لیست مشترکها اضافه میشه
# - فقط «ادمین» میتونه با دستور /send متن_پیام به همه پیام بده
# لیست مشترکها در فایل subscribers.txt ذخیره میشه.
#
# ⚠️ نکته: ربات تلگرام باید روی سروری اجرا بشه که به
# api.telegram.org دسترسی داره.
#
# آموزش کامل:
# https://filtori.com/telegram-bot-source/broadcast-bot/
# نسخهٔ اختصاصی با پنل مدیریت و زمانبندی؟ 09122874862
# تلگرام ما: https://t.me/filtori
# ------------------------------------------------------------
import time
import requests
TOKEN = "توکن_ربات_خودت_را_اینجا_بگذار"
BASE = f"https://api.telegram.org/bot{TOKEN}"
# ------------------------------------------------------------
# chat_id عددی خودت رو اینجا بذار تا فقط تو بتونی پیام همگانی بفرستی.
# چطور chat_id خودت رو پیدا کنی؟ ربات رو /start کن و یک پیام بفرست؛
# در ترمینال، chat_id چاپ میشه (خط print پایین).
# ------------------------------------------------------------
ADMIN_CHAT_ID = 123456789 # <-- این عدد رو با chat_id خودت عوض کن
SUBSCRIBERS_FILE = "subscribers.txt"
# تلگرام اجازه میده تا حدود ۳۰ پیام در ثانیه به کاربران مختلف بفرستی؛
# برای اینکه خطای 429 نگیریم، بین هر ارسال کمی مکث میذاریم.
SEND_DELAY = 0.05
def send_message(chat_id, text):
url = f"{BASE}/sendMessage"
try:
requests.post(url, json={"chat_id": chat_id, "text": text}, timeout=15)
except requests.RequestException as error:
print("خطا در ارسال پیام:", error)
def get_updates(offset):
url = f"{BASE}/getUpdates"
params = {"offset": offset, "timeout": 30}
try:
return requests.get(url, params=params, timeout=40).json()
except requests.RequestException as error:
print("خطا در دریافت پیامها:", error)
return {"ok": False, "result": []}
def load_subscribers():
"""خواندن لیست chat_id مشترکها از فایل."""
try:
with open(SUBSCRIBERS_FILE, "r", encoding="utf-8") as file:
return set(line.strip() for line in file if line.strip())
except FileNotFoundError:
return set()
def add_subscriber(chat_id):
"""اضافهکردن یک مشترک جدید (اگر قبلاً نبوده)."""
subscribers = load_subscribers()
if str(chat_id) not in subscribers:
with open(SUBSCRIBERS_FILE, "a", encoding="utf-8") as file:
file.write(f"{chat_id}\n")
def broadcast(text):
"""ارسال یک پیام به همهٔ مشترکها."""
subscribers = load_subscribers()
sent = 0
for chat_id in subscribers:
send_message(chat_id, text)
sent += 1
time.sleep(SEND_DELAY) # رعایت محدودیت نرخ ارسال تلگرام
return sent
def handle(chat_id, text):
if text == "/start":
add_subscriber(chat_id)
send_message(
chat_id,
"سلام 👋 عضو کانال اطلاعرسانی ما شدی!\n"
"از این به بعد خبرها و تخفیفها رو همینجا برات میفرستیم.\n"
"— فیلتور (filtori.com)",
)
return
if text.startswith("/send"):
if chat_id != ADMIN_CHAT_ID:
send_message(chat_id, "فقط مدیر ربات میتواند پیام همگانی بفرستد.")
return
payload = text[len("/send"):].strip()
if not payload:
send_message(chat_id, "متن پیام را بعد از دستور بنویس:\n/send سلام به همه!")
return
count = broadcast(payload)
send_message(chat_id, f"پیام برای {count} مشترک ارسال شد ✅")
return
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 = update["update_id"] + 1
message = update.get("message")
if not message:
continue
chat_id = message["chat"]["id"]
text = message.get("text", "")
print("پیام از chat_id:", chat_id, "->", text)
if text:
handle(chat_id, text)
time.sleep(0.5)
if __name__ == "__main__":
main()
با چند تغییر کوچک، ربات را مخصوص کسبوکار خودت کن.
پیام خوشآمد بعد از /start را در تابع handle با متن برند خودت عوض کن.
مقدار SEND_DELAY را کمتر از 0.04 نکن تا تلگرام خطای 429 (ارسال بیش از حد) ندهد.
اگر میخواهی قبل از دریافت محتوا کاربر عضو کانالت شود، ربات عضویت اجباری را ببین.
اگر ربات اجرا نشد، اول پیام خطای ترمینال را با این جدول مقایسه کن. اگر خطایت اینجا نبود، از صفحهٔ تماس با ما بپرس.
| پیام خطا | علت | راهحل |
|---|---|---|
401 Unauthorized | توکن اشتباه است یا فاصلهٔ اضافه دارد. | توکن را دوباره از BotFather کپی کن و بین دو علامت نقلقول بگذار. |
409 Conflict | یک نسخهٔ دیگر از ربات در حال اجراست یا روی ربات وبهوک تنظیم شده. | نسخهٔ دیگر را خاموش کن. اگر قبلاً وبهوک گذاشتهای، آدرس api.telegram.org/bot<TOKEN>/deleteWebhook را یک بار باز کن. |
| Timeout یا ConnectionError | سرور به api.telegram.org دسترسی ندارد. | ربات را روی سروری اجرا کن که به تلگرام دسترسی دارد؛ روی بیشتر هاستهای داخل ایران این آدرس باز نیست. |
ModuleNotFoundError: requests | کتابخانهٔ requests نصب نشده. | دستور pip install -r requirements.txt یا pip install requests را اجرا کن. |
429 Too Many Requests | در زمان کوتاه پیام زیادی ارسال شده. | بین ارسالها مکث بگذار؛ تلگرام حدود ۳۰ پیام در ثانیه اجازه میدهد. |
| ربات در گروه جواب نمیدهد | Privacy Mode ربات روشن است. | در BotFather دستور /setprivacy را بزن و آن را Disable کن، یا ربات را ادمین گروه کن. |
با python bot.py ربات تا وقتی ترمینال باز است کار میکند. برای اجرای دائمی روی سرور لینوکس (Ubuntu/Debian)، فایلها را در پوشهٔ /opt/mybot بگذار و یک سرویس systemd بساز تا ربات بعد از خطا یا ریاستارت سرور خودش دوباره روشن شود.
[Unit]
Description=Filtori Telegram Bot
After=network-online.target
[Service]
WorkingDirectory=/opt/mybot
ExecStart=/usr/bin/python3 /opt/mybot/bot.py
Environment=PYTHONUNBUFFERED=1
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
sudo nano /etc/systemd/system/mybot.service # متن بالا را اینجا بگذار
sudo systemctl daemon-reload
sudo systemctl enable --now mybot # روشنکردن + اجرای خودکار بعد از ریاستارت
journalctl -u mybot -f # دیدن لاگها
راهاندازی روی سرور برایت سخت است؟ نصب و راهاندازی را به ما بسپار.
درخواست راهاندازیاین سورس برای یادگیری و شروع کار عالی است. وقتی ربات قرار است هر روز با مشتری واقعی کار کند، معمولاً به دیتابیس، پنل مدیریت، امنیت بیشتر و پشتیبانی نیاز دارد. تیم فیلتور همین ربات اطلاعرسانی و ارسال همگانی تلگرام را اختصاصی و متناسب با فرآیند کسبوکارت میسازد.
| امکان | سورس رایگان | نسخهٔ اختصاصی |
|---|---|---|
| ذخیرهسازی | فایل CSV/TXT | دیتابیس |
| پنل مدیریت | — | ✓ |
| پرداخت آنلاین | — | ✓ |
| اتصال به سایت / CRM | — | ✓ |
| نصب و پشتیبانی | خودت | تیم فیلتور |
برای امنیت، ربات فقط به chat_id مدیر (ADMIN_CHAT_ID) اجازهٔ ارسال همگانی میدهد تا کاربران عادی نتوانند به همه پیام بدهند.
تلگرام تا حدود ۳۰ پیام در ثانیه اجازه میدهد؛ در کد بین هر ارسال کمی مکث گذاشته شده تا خطای ۴۲۹ نگیرید.
بله، نسخهٔ حرفهای با زمانبندی و پنل مدیریت را فیلتور برایتان میسازد.
از صفحهٔ تماس با ما در filtori.com/contact پیام بدهید یا با شمارهٔ ۰۹۱۲۲۸۷۴۸۶۲ تماس بگیرید؛ اگر نسخهٔ اختصاصی همین ربات را برای کسبوکارتان بخواهید هم همین مسیر را استفاده کنید.
اگر در راهاندازی گیر کردی، یا میخواهی همین ربات برای کسبوکارت نصب و شخصیسازی شود، از صفحهٔ تماس با ما پیام بده.