После выхода первой статьи о проекте «Дайджест» мы получили много обратной связи — как от пользователей, так и от коллег из продуктового сообщества. В этом посте рассказываем о функциональных обновлениях, которые мы реализовали в последние месяцы. Все они направлены на повышение стабильности, персонализации и удобства взаимодействия с ботом.

Пользовательские чаты: группировка подписок и управление рассылкой

Мы реализовали возможность создания персональных 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-каналов — попробуйте обновлённый «Дайджест». Теперь с чётким управлением, фильтрами и гибкой логикой доставки.

Комментарии (0)