VK → Telegram + MAX Автопостинг — небольшой надёжный backend-сервис, который следит за стеной сообщества ВКонтакте и публикует каждый новый пост в Telegram-канал и чат MAX. Он обрабатывает текст, фотоальбомы, видео и ссылки и работает без присмотра на VPS через Docker.
Кросс-постинг одного и того же контента в несколько соцсетей — ровно та рутина, которую люди со временем перестают делать аккуратно. Заказчик публиковал сначала во ВКонтакте, а затем вручную перезаливал всё в Telegram и MAX. Посты выходили с опозданием, вложения терялись, а часть обновлений вовсе не доходила. Готовые мосты либо не поддерживали MAX, либо им нельзя было доверить медиа.
Сервис подписывается на Callback API ВКонтакте и реагирует на событие wall_post_new в момент появления поста — без медленного поллинга. Каждый пост нормализуется в текст и набор вложений, после чего рассылается в Telegram и MAX через их Bot API. Слой SQLite фиксирует каждый пост, чтобы ничего не публиковалось дважды, а статус partial позволяет повторить отправку только в ту сеть, где произошёл сбой, не дублируя пост целиком.
Режим VK Callback API (wall_post_new) с резервным поллингом через wall.get
Публикация текста, фотоальбомов, видео и ссылок в Telegram и MAX
Дедупликация в SQLite со статусом partial и автоматической повторной доставкой при сбое
Пропуск закреплённых постов и опциональный пропуск старого бэклога при первом запуске
Структурированные логи (pino) и эндпоинт /health для мониторинга
Деплой через Docker + docker-compose и CI/CD на VPS через GitHub Actions
Процесс разработки
Самым сложным были медиа: ВКонтакте, Telegram и MAX по-разному описывают вложения, а MAX требует загрузить файл до того, как на него сошлётся сообщение. Сервис скачивает медиа во временный каталог, загружает его под каждую платформу и повторяет временные ответы attachment.not.ready. Важен был и регион: Telegram Bot API не всегда доступен у российских VPS-провайдеров, поэтому деплой нацелен на VPS вне РФ.
Результаты
Новые посты ВК появляются в Telegram и MAX за секунды, без ручного труда
Дедупликация и повторы по каждой сети убрали и пропуски, и дубли
Полностью контейнеризирован: одна команда docker compose up поднимает сервис на чистом сервере
Руководство на русском для заказчика сделало систему управляемой без технических навыков
Выводы
Надёжность небольшой интеграции держится на скучных вещах: идемпотентности, обработке частичных сбоев и честном логировании. Модель «опубликовать в N целей и отслеживать каждую независимо» превратила хрупкое зеркало в сервис, который тихо делает свою работу.