VPS для бота рассылок: лимиты, очереди и антиспам
Рассылочный бот — это не «залить базу и жать кнопку». Платформы жёстко ограничивают темп, а за спам банят и бота, и сервер. Разберём, как рассылать легально: очередь на Redis, соблюдение лимитов, корректная обработка ошибок и обязательная отписка.
Содержание
Честно о лимитах и антиспаме
['Сразу о главном: массовая рассылка незнакомым людям — это спам, за который платформы блокируют без разговоров. Telegram банит ботов за жалобы пользователей, а серверный IP может попасть в чёрные списки. Легальная рассылка идёт только тем, кто сам подписался на бота.', 'Второй ограничитель — темп. Telegram Bot API держит примерно до 30 сообщений в секунду суммарно и не более одного сообщения в секунду одному чату. Превысите — получите ошибку 429 с полем retry_after. Задача сервера — рассылать ровно, а не пачкой.', '- Только opt-in — рассылка тем, кто подписался сам.
- ~30 сообщений/сек — общий лимит Telegram, держите запас.
- Кнопка отписки — обязательна, снижает жалобы и баны.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK и США. Оплата картой РФ и по СБП.
Арендовать VPS для бота рассылокАрхитектура: очередь вместо цикла
['Рассылать в лоб циклом for — путь к 429 и потерянным сообщениям. Правильно: складываем получателей в очередь (Redis) и выгребаем их с контролируемым темпом отдельным воркером. Так рассылка переживёт перезапуск и не превысит лимит.', 'sudo apt update && sudo apt install -y redis-server python3-venv\nsudo systemctl enable --now redis-server\npython3 -m venv ~/mailer/.venv && source ~/mailer/.venv/bin/activate\npip install redis aiogram', 'Наполнение очереди — id всех подписчиков:', "import redis\nr = redis.Redis()\nfor uid in subscriber_ids:\n r.rpush('broadcast:queue', uid)"]
Воркер с контролем темпа
['Воркер берёт получателей из очереди и шлёт с паузой, удерживая лимит. Простой троттлинг — не чаще ~25 сообщений в секунду, с запасом от потолка.', "import asyncio, redis\nr = redis.Redis()\nRATE = 25 # сообщений в секунду, с запасом\n\nasync def worker(bot, text):\n while True:\n item = r.lpop('broadcast:queue')\n if item is None:\n break\n uid = int(item)\n try:\n await bot.send_message(uid, text)\n except Exception as e:\n handle_error(uid, e)\n await asyncio.sleep(1 / RATE)"]
Обработка 429, блокировок и отписок
['Три типовые ситуации при рассылке, которые нужно обрабатывать явно:', '- 429 / FloodWait — притормозить на retry_after секунд и вернуть получателя в очередь.
- Forbidden (bot blocked) — пользователь заблокировал бота; пометить как неактивного и больше не слать.
- Chat not found — аккаунт удалён; вычистить из базы.
from aiogram.exceptions import TelegramRetryAfter, TelegramForbiddenError\ntry:\n await bot.send_message(uid, text)\nexcept TelegramRetryAfter as e:\n await asyncio.sleep(e.retry_after)\n r.rpush('broadcast:queue', uid) # вернуть в очередь\nexcept TelegramForbiddenError:\n mark_inactive(uid) # заблокировал бота", 'Регулярная чистка базы от заблокировавших и удалённых аккаунтов повышает доставляемость и снижает нагрузку.']
Запуск и устойчивость
['Воркер рассылки держим под systemd — большая рассылка идёт долго, и процесс должен пережить сетевые сбои. Очередь в Redis гарантирует, что после рестарта рассылка продолжится с места остановки, а не начнётся заново.', '[Unit]\nDescription=Broadcast worker\nAfter=network-online.target redis-server.service\n\n[Service]\nUser=mailer\nWorkingDirectory=/home/mailer/mailer\nExecStart=/home/mailer/mailer/.venv/bin/python worker.py\nRestart=always\nRestartSec=5\n\n[Install]\nWantedBy=multi-user.target', 'sudo systemctl daemon-reload\nsudo systemctl enable --now mailer\njournalctl -u mailer -f']
Где брать сервер и частые ошибки
['Рассылочному боту важны стабильный аптайм и надёжный IP с хорошей репутацией — с зарубежного адреса Telegram API отвечает ровнее. На тарифах MAATRIX это AMD EPYC + NVMe от $8/мес, root-доступ для systemd и Redis, локации UK и США. Ежедневные бэкапы сохранят базу подписчиков. Оплата картой РФ, СБП, криптой или токеном MAAT.', '- Рассылка не-подписчикам — жалобы и бан бота, спам недопустим.
- Цикл без троттлинга — мгновенный 429 и потеря сообщений.
- Игнор retry_after — усугубляет флуд-лимит и удлиняет паузу.
- Нет очереди — рестарт обнуляет прогресс большой рассылки.
- Нет отписки — рост жалоб и в итоге блокировка.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK и США. Оплата картой РФ и по СБП.
Арендовать VPS для бота рассылокЧастые вопросы
Какой лимит на рассылку в Telegram?
Ориентир — около 30 сообщений в секунду суммарно и не чаще одного в секунду одному чату. При превышении API возвращает 429 с полем retry_after.
Можно ли рассылать по купленной базе?
Нет. Это спам: Telegram банит ботов по жалобам, а данные людей без согласия использовать нельзя. Рассылайте только подписавшимся через вашего бота.
Зачем очередь на Redis для рассылки?
Она держит темп в пределах лимита и сохраняет прогресс: после перезапуска воркер продолжит с места остановки, а не начнёт рассылку заново.