SMM Planner – это автоматический планировщик постов для трёх социальных сетей:
Telegram, ВКонтакте и Одноклассники.
Программа читает расписание из Google‑таблицы,
публикует тексты и изображения по заданному времени, обрабатывает ошибки,
повторяет неудачные публикации и удаляет посты по расписанию или вручную.
- ✅ Публикация текстов и картинок (поддерживаются прямые URL и локальные пути)
- ✅ Отложенный постинг (колонка
Дата публикации) - ✅ Удаление постов по расписанию (колонка
Дата удаления) или мгновенно (флагУдалить) - ✅ Ручной повтор неудачных постов через статус
Повтор - ✅ Мультиаккаунтность для VK (разные токены и группы в одной таблице)
- ✅ Автоматические повторные попытки при ошибках (счётчик ошибок)
- ✅ Логирование всех действий в консоль и файл
smm_planner.log
- Python 3.10 (проверено на 3.10; более новые версии могут работать, но не тестировались)
- python-telegram-bot == 13.15 (синхронная версия, более новые 20.x несовместимы)
- Аккаунты в Telegram (бот и канал), VK (сервисный ключ и группа),
- OK.ru (приложение, токен, секретный ключ)
- Google Sheets (бесплатно) и сервисный аккаунт Google (для доступа к таблице)
Склонируйте репозиторий
git clone https://github.com/ваш_пользователь/smm-planer.git
cd smm-planerСоздайте виртуальное окружение с Python 3.10
# Windows
py -3.10 -m venv venv
# Linux/macOS
python3.10 -m venv venvАктивируйте окружение
# Windows
venv\Scripts\activate.bat
# Linux/macOS
source venv/bin/activateУстановите зависимости
pip install -r requirements.txt
Файл requirements.txt должен содержать:requirements.txt
python-telegram-bot==13.15
requests==2.31.0
python-dotenv==1.0.0
gspread==6.2.1
google-auth>=2.0.0
Программа не создаёт таблицу автоматически. Вам нужно вручную сделать копию готового шаблона.
👉 Создать свою копию таблицы
Примечание: Замените ВАШ ID ШАБЛОНА на реальный ID вашей публичной таблицы-шаблона. Таблица должна иметь доступ «Все, у кого есть ссылка – Читатель».
Таблица содержит два листа с фиксированными индексами 0 и 1.
Лист 0 (основной) – посты
Обязательные колонки (порядок не важен):

Колонка Назначение
Дата публикации Формат ДД.ММ.ГГГГ ЧЧ:ММ. Если пусто или уже прошла – пост публикуется сразу.
Пост Текст или URL текстового файла.
Картинка URL или локальный путь к изображению (опционально).
TG Отправит / VK Отправить / OK Отправить стоит галочка – запланировать публикацию, не стоит галочка – отключить.
TG Статус/ VK Статус / OK Статус Заполняется автоматически: Ожидание, Опубликовано, Ошибка, Удалено
TG id пост … Идентификаторы опубликованных постов (заполняются автоматически).
TG Счетчи ошибок … Количество неудачных попыток.
TG Ошибка … Текст последней ошибки.
Удалить стоит галочка – удалить пост (при соблюдении условий).
Дата удаления Удалить в указанное время (формат ДД.ММ.ГГГГ ЧЧ:ММ).
VK Аккаунт Имя аккаунта из листа «Аккаунты» (если пусто – используется VK_KEY из .env).
Важно: Не меняйте названия колонок! Программа обращается к ним именно так.
Лист 1 (аккаунты) – мультиаккаунты VK
Колонка Описание

Platform Всегда VK (пока поддерживается только VK) Name Уникальное имя аккаунта (например main_vk) Token Сервисный ключ ВКонтакте Channel/Group ID группы (положительное число) Другие платформы (TG, OK) пока не поддерживают мультиаккаунтность.
Создайте сервисный аккаунт Google и скачайте credentials.json (инструкция).
В вашей скопированной таблице нажмите «Настройки доступа» → «Включить доступ по ссылке» → выберите «Редактор».
Добавьте в список пользователей email сервисного аккаунта (поле client_email из credentials.json) с правами «Редактор».
Без этого оркестратор не сможет обновлять статусы и ID постов.
Откройте свою таблицу. В адресной строке скопируйте строку между /d/ и /edit. Пример: https://docs.google.com/spreadsheets/d/1A2B3C.../edit → ID = 1A2B3C...
🔐 Настройка переменных окружения (.env) Создайте в корне проекта файл .env со следующим содержимым (замените значения своими):
# Google Sheets
SPREADSHEET_ID=ваш идентификатор_таблицы
CREDENTIALS_PATH=credentials.json
# Telegram
TG_BOT_TOKEN=1234567890:ABCdefGHIJKLMNO
TG_CHANNEL_ID=@my_channel
# VK (fallback, используется если в строке не указан VK Аккаунт)
VK_KEY=ваш сервисный_ключ
VK_GROUP_ID=123456789 # положительное число
# OK.ru
OK_APPLICATION_KEY=ваш application_key
OK_ACCESS_TOKEN=токен доступа
OK_SECRET_KEY=секретный ключ
OK_GROUP_ID=группа id
Незнакомые переменные можно оставить пустыми – соответствующая платформа будет отключена.
-
Создайте бота у @BotFather в Telegram.
- Отправьте команду
/newbot - Придумайте имя и username бота (должен заканчиваться на
...bot) - После создания BotFather выдаст токен (например,
1234567890:ABCdefGHIJKLMNO)
- Отправьте команду
-
Получите
TG_CHANNEL_ID:- Создайте канал (или используйте существующий)
- Добавьте бота в канал как администратора
- Для публичного канала используйте его username с
@(например,@my_channel) - Для приватного канала получите числовой ID (можно через бота
@get_id_bot
или переслав любое сообщение из канала в@userinfobot). ID будет выглядеть как-1001234567890
-
Создайте группу (сообщество) ВКонтакте.
ID группы – это числовой идентификатор из URL:https://vk.com/club123456789→ ID =123456789 -
Получите сервисный токен VK (ключ доступа):
- Перейдите на vkhost.github.io или официальное приложение VK
- Выберите приложение Kate Mobile или создайте своё Standalone-приложение на vk.com/dev
- Авторизуйтесь и скопируйте access_token из адресной строки после
access_token= - Токен нового поколения начинается с
vk1.a.– он полностью подходит
Важно: Для публикации в группе токен должен иметь права на
photos,wall,groups.
- Создайте приложение на ok.ru/dev
- В настройках приложения получите:
OK_APPLICATION_KEY(идентификатор приложения)OK_SECRET_KEY(секретный ключ)
- Получите
OK_ACCESS_TOKEN:- Используйте OAuth-схему (инструкция в документации OK.ru)
- Можно через сторонние сервисы (например, vkhost.github.io не поддерживает OK)
- Либо в настройках приложения включите "Прямой доступ" и сгенерируйте токен
OK_GROUP_ID– числовой ID вашей группы (из URL страницы)
Если какой-то токен не нужен (вы не используете платформу),
оставьте соответствующую переменную в .env пустой – оркестратор отключит эту платформу.
(разовый запуск, автоперезапуск, настройка службы) описана в отдельном файле:
👉 RUN_WINDOWS.md
На Linux / macOS bash source venv/bin/activate python core.py Программа начнёт опрашивать таблицу каждые 10 секунд (интервал задаётся константой POLL_INTERVAL в core.py).
Все события дублируются в консоль и в файл smm_planner.log.
Не загружаются VK аккаунты (0 загружено) Проверьте второй лист таблицы:
колонка Platform = VK (заглавными)
колонки Name, Token, Channel/Group заполнены
у таблицы есть доступ для сервисного аккаунта (чтение)
📝 Лицензия MIT – используйте, модифицируйте, распространяйте свободно.
🎓 Цель проекта Код написан в образовательных целях на курсе dvmn.org по веб-разработке.