MAATRIX / Блог / VPS для бота рассылок: лимиты, очереди и антиспам

VPS для бота рассылок: лимиты, очереди и антиспам

VPS для бота рассылок: лимиты, очереди и антиспам честно
Блог MAATRIX · 2026-07-07

Рассылочный бот — это не «залить базу и жать кнопку». Платформы жёстко ограничивают темп, а за спам банят и бота, и сервер. Разберём, как рассылать легально: очередь на Redis, соблюдение лимитов, корректная обработка ошибок и обязательная отписка.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Честно о лимитах и антиспаме

Сразу о главном: массовая рассылка незнакомым людям — это спам, за который платформы блокируют без разговоров. 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
sudo systemctl enable --now redis-server
python3 -m venv ~/mailer/.venv && source ~/mailer/.venv/bin/activate
pip install redis aiogram

Наполнение очереди — id всех подписчиков:

import redis
r = redis.Redis()
for uid in subscriber_ids:
    r.rpush('broadcast:queue', uid)

Воркер с контролем темпа

Воркер берёт получателей из очереди и шлёт с паузой, удерживая лимит. Простой троттлинг — не чаще ~25 сообщений в секунду, с запасом от потолка.

import asyncio, redis
r = redis.Redis()
RATE = 25  # сообщений в секунду, с запасом

async def worker(bot, text):
    while True:
        item = r.lpop('broadcast:queue')
        if item is None:
            break
        uid = int(item)
        try:
            await bot.send_message(uid, text)
        except Exception as e:
            handle_error(uid, e)
        await asyncio.sleep(1 / RATE)

Обработка 429, блокировок и отписок

Три типовые ситуации при рассылке, которые нужно обрабатывать явно:

  • 429 / FloodWait — притормозить на retry_after секунд и вернуть получателя в очередь.
  • Forbidden (bot blocked) — пользователь заблокировал бота; пометить как неактивного и больше не слать.
  • Chat not found — аккаунт удалён; вычистить из базы.
from aiogram.exceptions import TelegramRetryAfter, TelegramForbiddenError
try:
    await bot.send_message(uid, text)
except TelegramRetryAfter as e:
    await asyncio.sleep(e.retry_after)
    r.rpush('broadcast:queue', uid)   # вернуть в очередь
except TelegramForbiddenError:
    mark_inactive(uid)                # заблокировал бота

Регулярная чистка базы от заблокировавших и удалённых аккаунтов повышает доставляемость и снижает нагрузку.

Запуск и устойчивость

Воркер рассылки держим под systemd — большая рассылка идёт долго, и процесс должен пережить сетевые сбои. Очередь в Redis гарантирует, что после рестарта рассылка продолжится с места остановки, а не начнётся заново.

[Unit]
Description=Broadcast worker
After=network-online.target redis-server.service

[Service]
User=mailer
WorkingDirectory=/home/mailer/mailer
ExecStart=/home/mailer/mailer/.venv/bin/python worker.py
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now mailer
journalctl -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 для бота рассылок

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Частые вопросы

Какой лимит на рассылку в Telegram?

Ориентир — около 30 сообщений в секунду суммарно и не чаще одного в секунду одному чату. При превышении API возвращает 429 с полем retry_after.

Можно ли рассылать по купленной базе?

Нет. Это спам: Telegram банит ботов по жалобам, а данные людей без согласия использовать нельзя. Рассылайте только подписавшимся через вашего бота.

Зачем очередь на Redis для рассылки?

Она держит темп в пределах лимита и сохраняет прогресс: после перезапуска воркер продолжит с места остановки, а не начнёт рассылку заново.