Все работы

Наблюдение за конкурентами в Telegram: отбор сообщений по правилам

Для бизнеса клиента разработал с нуля инструмент, который проверяет выбранные Telegram-чаты и отбирает сообщения по заданным текстовым условиям. Источники, правила и действия настраиваются через веб-панель.

Задача: следить за контентом конкурентов

Заказчику нужно было наблюдать за контентом конкурентов в Telegram-чатах, чтобы учитывать найденное в дальнейших действиях. Для этого — выбирать источники и задавать, какие сообщения представляют интерес.

Я реализовал отбор по правилам: человек определяет, где и что искать, программа проверяет сообщения. Оценивать найденное и решать, как использовать эту информацию, остаётся заказчику.

Что я сделал

Сам разработал обработку сообщений, правила отбора, хранение настроек, фоновые задачи и действия с найденными сообщениями. Реализовал работу с несколькими Telegram-аккаунтами и связанными с ними чатами.

Для веб-панели использовал готовую библиотеку Flask-Admin: подключил, настроил и адаптировал её под проект. Через панель можно выбирать чаты, менять условия отбора и управлять задачами — эти настройки не нужно задавать в коде.

Как устроен отбор

Работу системы можно объяснить на варианте с сохранением в Google Sheets. Он реализован в проекте, но не обязательно был выбран заказчиком.

Схема процесса

Человек выбирает чаты, текстовые условия и сохранение в Google Sheets. Программа периодически читает текст или подпись. Если все условия пройдены и нет стоп-фрагментов, выполняется сохранение; иначе действие не запускается. Это вариант реализации, а не описание настроек клиента

По заданным правилам подходящее сообщение сохраняется в таблицу, неподходящее не запускает действие. Показан реализованный вариант, не обязательно настройка заказчика
  1. Человек задаёт источники и правила. Выбирает чаты, указывает нужные фрагменты текста и стоп-фрагменты, задаёт действие для подходящих сообщений.
  2. Программа периодически читает выбранные чаты. Проверяет текст последних сообщений или подписи к вложениям. Это периодическая проверка, а не мгновенная реакция на публикацию и не сбор полного архива.
  3. Проверяет условия отбора. Включающие условия ищут заданные фрагменты без учёта регистра, а стоп-фрагменты отсеивают нежелательные совпадения. Сообщение должно пройти все заданные условия; совпадение со стоп-фрагментом его исключает.
  4. Выполняет выбранное действие. В варианте с Google Sheets передаёт в таблицу текст или подпись, имя пользователя автора при наличии и сформированную ссылку на сообщение. Если условия не пройдены, действие не выполняется.

Так подходящие сообщения могут собираться вне переписки — в таблице для дальнейшего просмотра. Возможность перейти к оригиналу по ссылке зависит от наличия публичного имени у чата.

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

Что человек контролирует в панели

В панели можно вести аккаунты и чаты, менять правила и выбранное действие, включать и выключать задачи. В списке задач видны название, условия запуска, действие и активность. Панель служит для настройки работы; в показанном варианте сами найденные сообщения сохраняются в Google Sheets.

Для простой задачи выбирается одно действие. Сохранение в таблицу не запускает автоматически отправку сообщений.

Отдельно в проекте предусмотрена рекламная отправка в тематические чаты, в том числе по времени. Это дополнительная функция, а не обязательное продолжение отбора или работы с таблицей.

Результат

Получился инструмент с настраиваемыми источниками, текстовыми правилами и действиями. Человек управляет тем, какие сообщения искать и что делать при совпадении, а программа выполняет периодическую проверку.

Исходники передал; систему запустили на сервере и проверили. По моим данным на момент передачи, она работала.

Результат проекта — реализованный и запущенный инструмент отбора. Он проверяет заданные фрагменты текста, а не анализирует смысл контента или стратегию конкурентов.

Технологии

Python, Pyrogram, SQLAlchemy, Flask / Flask-Admin, APScheduler, gspread / Google Sheets.

Обсудим вашу задачу?

Коротко опишите, что хотите изменить или создать. Готовое ТЗ не нужно.