Vibe coding

Умный автопостинг для Telegram и Instagram на Flask

В современном SMM ручная публикация контента — это рутина, которая отнимает часы полезного времени. Когда у вас десятки клиентов, сотни постов в месяц и разные платформы, риск ошибок (забыли пост, перепутали время, сбилось форматирование) возрастает в геометрической прогрессии.

Основной функционал

Проект задумывался как универсальный комбайн для контент-менеджеров. Вот его ключевые возможности:

1. Умный импорт контента

Система умеет читать файлы в форматах .docx и .txt. Вам не нужно вводить каждый пост вручную. Достаточно загрузить один документ, где контент разбит по меткам «Блок» или «Пост». Парсер автоматически:
  • Извлекает текст и ссылки на изображения.
  • Разделяет длинные тексты на части, если они превышают лимиты платформ (4096 символов для Telegram и 2200 для Instagram).
  • Добавляет ссылки на Telegram-канал в посты для Instagram (cross-promotion).

2. Автоматическое «причесывание» текста

Система содержит встроенный модуль форматирования, специально настроенный под нишевые объявления (например, автопродажи). Она автоматически:
  • Переносит важные маркеры (🗓 год, 🛣 пробег, 💵 цена) на новые строки.
  • Добавляет пустые строки между смысловыми блоками для лучшей читаемости.
  • Чинит «слипшиеся» эмодзи.

3. Гибкое планирование (Scheduling)

Для каждого канала (Telegram или Instagram) можно настроить индивидуальное расписание:
  • Количество постов: в день или в неделю.
  • Временное окно: например, публиковать только с 09:00 до 21:00.
  • Стратегии очереди: последовательно, случайно или «блоками» (чередование разных категорий контента).
  • Исключения: возможность пропустить конкретные номера постов.

4. Защита от ошибок и дублей

  • MD5-хэширование: Система проверяет текст каждого поста. Если вы случайно попытаетесь загрузить один и тот же контент дважды, дубликат будет отсеян.
  • Коллизии: Алгоритм следит, чтобы посты в одном канале не «наслаивались» друг на друга по времени.

5. Панель управления и уведомления

Централизованный дашборд позволяет видеть статистику по всем проектам и клиентам: сколько постов в очереди, сколько уже опубликовано. Система уведомляет администратора о критических событиях (например, когда контент в канале заканчивается).

Технологический стек

Для обеспечения стабильности и высокой скорости разработки был выбран проверенный стек технологий:
  • Backend: Python 3 + Flask 3.0.0. Легковесный и гибкий фреймворк, идеально подходящий для подобных сервисов.
  • Database: SQLAlchemy (SQLite). Позволяет эффективно управлять сложными связями между клиентами, проектами, каналами и контент-блоками.
  • Telegram Integration: python-telegram-bot (v20.1). Использование последней версии библиотеки с поддержкой asyncio гарантирует надежную доставку сообщений.
  • Document Processing: python-docx для парсинга Microsoft Word файлов.
  • Time Management: pytz для корректной работы с разными часовыми поясами (по умолчанию настроено на Europe/Kiev).
  • Network: httpx для асинхронных HTTP-запросов (например, при работе с Instagram API или загрузке медиа).
  • Frontend: Чистый и функциональный интерфейс на базе шаблонов Flask (Jinja2) и современных CSS-практик.

Как это работает (Workflow)

  1. Создание проекта: Вы добавляете клиента и проект (например, «Автосалон X»).
  2. Настройка каналов: Подключаете Telegram-бота через токен и настраиваете часовой пояс и частоту постинга.
  3. Загрузка файла: Загружаете .docx файл с постами.
  4. Генерация очереди: Система за секунды парсит файл, применяет правила форматирования и распределяет посты по календарной сетке.
  5. Автоматическая отправка: В фоновом режиме (через вебхуки или cron) система отправляет готовые посты точно в назначенное время.

Заключение

Этот проект — не просто скрипт для отправки сообщений. Это полноценная инфраструктура для управления контентом, которая минимизирует ручной труд и позволяет сфокусироваться на качестве стратегии, а не на технической рутине.
Система оптимизирована для работы на облачных хостингах (например, PythonAnywhere), что делает её доступной 24/7 без необходимости держать включенным собственный компьютер.