После выхода первой статьи о проекте «Дайджест» мы получили много обратной связи — как от пользователей, так и от коллег из продуктового сообщества. В этом посте рассказываем о функциональных обновлениях, которые мы реализовали в последние месяцы. Все они направлены на повышение стабильности, персонализации и удобства взаимодействия с ботом.
Пользовательские чаты: группировка подписок и управление рассылкой
Мы реализовали возможность создания персональных Telegram-чатов, в которые автоматически добавляется бот и получает административные права. Это позволяет пользователю:
- создать отдельную группу, например, «новости по работе» или «личные медиа»; 
- привязать к чату определённые каналы; 
- получать дайджесты в рамках выбранного чата; 
- централизованно управлять группой подписок. 
Под капотом: чаты создаются через Telethon (CreateChannelRequest), бот подключается и становится админом (EditAdminRequest), а управление осуществляется через хендлеры на Aiogram. Вся логика хранения реализована на уровне addchat_id в таблице users_subscribes, что позволяет чётко понимать, какие каналы к какому чату относятся.
Round-robin очередь: честная обработка новых подписок
Ранее при высокой нагрузке могло происходить «залипание» — когда у одного активного пользователя десятки новых каналов, и он занимал всё внимание воркеров. Теперь используется round-robin-очередь, в которой сначала обрабатывается по одной подписке от каждого пользователя, затем — по второй и т.д.
Преимущества:
- равномерная обработка каналов; 
- предсказуемое время ожидания; 
- отсутствие приоритетов на основе объёма. 
Технически это реализовано на уровне DAO (AsyncUserSubscribeDAO.get_channels_with_unsent_messages()), который агрегирует подписки и упорядочивает их по числу необработанных сообщений.
Лемматизация в фильтре дублей: борьба с повторяющимися постами
Одна из частых проблем — дублирование новостей в слегка изменённой форме. Теперь мы добавили семантический анализ и лемматизацию в модуль фильтрации:
- Используется модель - spaCy (ru_core_news_sm);
- Все тексты приводятся к базовой форме (леммы); 
- Учитываются только первые строки; 
- Применяется коэффициент схожести ( - similarity > 0.8), чтобы выявить смысловые повторы.
Всё это работает в рамках функции check_similar_news, что позволяет исключать вторичные сообщения и делать дайджест чище. Особенно это актуально для новостных Telegram-каналов, где часто повторяются одни и те же формулировки в течение дня.
Обновление тарифной сетки
Для более прозрачной модели монетизации мы переработали тарифные планы. Теперь структура выглядит так:
| Тариф | Лимит каналов | Фильтр рекламы | Фильтр дублей | Комментарии | 
|---|---|---|---|---|
| Trial | до 10 | ❌ | ❌ | Безлимитен по времени, но с ограничениями | 
| Lite | до 100 | ✅ | ✅ | Базовый платный тариф | 
| Pro | до 300 | ✅ | ✅ | Для активных пользователей | 
| Ultima | до 500 | ✅ | ✅ | Максимальный объём | 
Что это дало на практике
После релиза описанных функций:
- Количество жалоб на дубли снизилось на 47%; 
- Конверсия в платную подписку выросла на 9.1% у активных пользователей. 
Если вы работаете с большим количеством Telegram-каналов — попробуйте обновлённый «Дайджест». Теперь с чётким управлением, фильтрами и гибкой логикой доставки.
 
          