Реализация бота для уведомлений и рассылок в мобильном приложении
Telegram-бот как канал рассылки работает лучше email: open rate 70–90% против 20–25%. Но отправить 50 000 сообщений за раз — значит получить бан бота от Telegram за flood. Правильная реализация рассылки требует учёта rate limits и очереди задач.
Ограничения Telegram Bot API, которые нельзя игнорировать
Telegram разрешает отправлять максимум 30 сообщений в секунду для обычного бота и не более 20 сообщений в минуту в один чат. При превышении API возвращает 429 Too Many Requests с полем retry_after.
Значит, 50 000 получателей = минимум ~28 минут чистой отправки при правильном rate limiting. Реализация через простой цикл for с sendMessage упадёт на первой же крупной рассылке.
Правильный подход: очередь задач (Bull + Redis или RabbitMQ). Каждое сообщение — отдельная задача в очереди, воркер обрабатывает их с контролируемой скоростью (25 задач/сек с экспоненциальным backoff при 429).
Архитектура системы рассылок
Сервер: Node.js + Bull Queue + Redis. Администратор через мобильное приложение создаёт рассылку (текст, медиа, сегмент аудитории) → задача попадает в очередь → воркер отправляет с нужной скоростью → статус рассылки обновляется в реальном времени.
Мобильное приложение — панель управления: создание рассылки с rich text редактором, выбор сегментов аудитории, планирование по времени, просмотр статистики (отправлено/доставлено/ошибки).
Сегменты аудитории хранятся в PostgreSQL: теги, активность за последние N дней, язык интерфейса. SQL-запрос формирует список chat_id для конкретного сегмента прямо перед отправкой.
Push-уведомления в мобильном приложении для администратора
Когда рассылка завершена или возникла ошибка (например, бот временно заблокирован), приложение должно уведомить администратора. Это стандартный FCM push:
-
"Рассылка #42 завершена: 48,231 / 50,000 доставлено"— типnormal -
"Ошибка: бот заблокирован пользователями (>30%)— типhigh
На клиенте (Flutter) используем flutter_local_notifications для уведомлений от FCM в foreground состоянии, firebase_messaging для background/terminated.
Аналитика рассылок
Базовая метрика — delivery rate. Telegram не возвращает факт прочтения (нет read receipts для bot messages в личных чатах), но возвращает ошибки: 403 Forbidden — пользователь заблокировал бота, 400 Bad Request: chat not found — пользователь удалил аккаунт.
Эти ошибки автоматически помечают пользователей как неактивных и исключают из следующих рассылок — важно для поддержания чистоты базы.
Разработка полной системы (сервер + мобильное приложение управления) — 3–5 недель. Интеграция модуля рассылок в существующий бот и приложение — 1–2 недели.







