Задача: следить за контентом конкурентов
Заказчику нужно было наблюдать за контентом конкурентов в Telegram-чатах, чтобы учитывать найденное в дальнейших действиях. Для этого — выбирать источники и задавать, какие сообщения представляют интерес.
Я реализовал отбор по правилам: человек определяет, где и что искать, программа проверяет сообщения. Оценивать найденное и решать, как использовать эту информацию, остаётся заказчику.
Что я сделал
Сам разработал обработку сообщений, правила отбора, хранение настроек, фоновые задачи и действия с найденными сообщениями. Реализовал работу с несколькими Telegram-аккаунтами и связанными с ними чатами.
Для веб-панели использовал готовую библиотеку Flask-Admin: подключил, настроил и адаптировал её под проект. Через панель можно выбирать чаты, менять условия отбора и управлять задачами — эти настройки не нужно задавать в коде.
Как устроен отбор
Работу системы можно объяснить на варианте с сохранением в Google Sheets. Он реализован в проекте, но не обязательно был выбран заказчиком.
Схема процесса
Человек выбирает чаты, текстовые условия и сохранение в Google Sheets. Программа периодически читает текст или подпись. Если все условия пройдены и нет стоп-фрагментов, выполняется сохранение; иначе действие не запускается. Это вариант реализации, а не описание настроек клиента
- Человек задаёт источники и правила. Выбирает чаты, указывает нужные фрагменты текста и стоп-фрагменты, задаёт действие для подходящих сообщений.
- Программа периодически читает выбранные чаты. Проверяет текст последних сообщений или подписи к вложениям. Это периодическая проверка, а не мгновенная реакция на публикацию и не сбор полного архива.
- Проверяет условия отбора. Включающие условия ищут заданные фрагменты без учёта регистра, а стоп-фрагменты отсеивают нежелательные совпадения. Сообщение должно пройти все заданные условия; совпадение со стоп-фрагментом его исключает.
- Выполняет выбранное действие. В варианте с Google Sheets передаёт в таблицу текст или подпись, имя пользователя автора при наличии и сформированную ссылку на сообщение. Если условия не пройдены, действие не выполняется.
Так подходящие сообщения могут собираться вне переписки — в таблице для дальнейшего просмотра. Возможность перейти к оригиналу по ссылке зависит от наличия публичного имени у чата.
Также реализовал учёт уже найденных сообщений по чату и задаче: он нужен, чтобы при повторном чтении не запускать действие для того же совпадения.
Что человек контролирует в панели
В панели можно вести аккаунты и чаты, менять правила и выбранное действие, включать и выключать задачи. В списке задач видны название, условия запуска, действие и активность. Панель служит для настройки работы; в показанном варианте сами найденные сообщения сохраняются в Google Sheets.
Для простой задачи выбирается одно действие. Сохранение в таблицу не запускает автоматически отправку сообщений.
Отдельно в проекте предусмотрена рекламная отправка в тематические чаты, в том числе по времени. Это дополнительная функция, а не обязательное продолжение отбора или работы с таблицей.
Результат
Получился инструмент с настраиваемыми источниками, текстовыми правилами и действиями. Человек управляет тем, какие сообщения искать и что делать при совпадении, а программа выполняет периодическую проверку.
Исходники передал; систему запустили на сервере и проверили. По моим данным на момент передачи, она работала.
Результат проекта — реализованный и запущенный инструмент отбора. Он проверяет заданные фрагменты текста, а не анализирует смысл контента или стратегию конкурентов.
Технологии
Python, Pyrogram, SQLAlchemy, Flask / Flask-Admin, APScheduler, gspread / Google Sheets.