# Бот для автопостинга в Telegram-канал: как настроить отложенные посты

https://netrun.io/blog/bot-avtoposting-v-kanal

_5 октября 2026 г. · 6 мин чтения_

> Бот для автопостинга в Telegram-канал — это программа, которая добавлена в администраторы канала с правом публикации и сама отправляет посты в нужное время. Отложенной отправки в Bot API нет, поэтому расписание живёт в коде бота: в библиотеке вроде APScheduler или node-cron либо в простом цикле, который раз в минуту проверяет очередь постов. Очередь стоит хранить в файле или базе SQLite, а время задавать с явным часовым поясом, потому что серверы обычно работают по UTC. Чтобы посты выходили без пропусков, бот должен работать круглосуточно — например, на хостинге вроде Netrun с тарифом Pro.

- В Telegram Bot API нет отложенной отправки, поэтому бот публикует пост в момент вызова sendMessage, а расписание задаётся в коде.
- Чтобы бот мог публиковать в канал, его добавляют в администраторы канала с правом публикации сообщений.
- Публичный канал в коде бота указывается как @имя_канала, а приватный — числовым идентификатором, который начинается с -100.
- Серверы обычно работают по UTC, поэтому пост, назначенный на 9:00 без часового пояса, в Москве выйдет в 12:00.
- Очередь постов, которая хранится только в памяти программы, пропадает при каждом перезапуске бота.

Вести канал и каждый день публиковать посты вручную утомительно, поэтому рано или поздно появляется мысль: пусть бот выкладывает посты сам по расписанию. Идея правильная, но есть нюанс, о который спотыкаются почти все. У Telegram-ботов нет кнопки «отправить позже», как в приложении: бот отправляет сообщение ровно тогда, когда его код вызывает метод отправки. Значит, расписание должно жить внутри самого бота, а бот — работать постоянно.

Ниже — как подключить бота к каналу, где хранить очередь постов, какой способ расписания выбрать и почему пост, назначенный на девять утра, иногда выходит в полдень. Если бот уже написан и вопрос только в том, где его держать, начните с инструкции о [круглосуточной работе бота](https://netrun.io/blog/telegram-bot-kruglosutochno).

**Способы задать расписание для бота-автопостера**

| Способ | Когда подходит | Что учесть |
| --- | --- | --- |
| Отложенные сообщения в приложении Telegram | Несколько постов в неделю, которые вы и так пишете руками | Это функция приложения для людей, бот так не умеет |
| Цикл с паузой в коде | Один пост в день в одно и то же время | После перезапуска отсчёт начинается заново, легко промахнуться со временем |
| APScheduler (Python) | Несколько расписаний, выражения в духе cron, бот на aiogram или другом фреймворке | Явно укажите timezone; по умолчанию задачи живут в памяти |
| JobQueue в python-telegram-bot | Бот уже написан на python-telegram-bot | Ставится как дополнение job-queue к библиотеке |
| node-cron (Node.js) | Бот на Telegraf, grammY или другой библиотеке для Node.js | У расписания есть опция timezone — используйте её |
| Очередь в SQLite и проверка раз в минуту | Контент-план на недели вперёд, который правят без перепубликации кода | Храните базу в постоянной папке и помечайте отправленные посты |

## 1. Создайте бота и сделайте его администратором канала

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

## 2. Укажите канал в настройках бота

Публичный канал указывается коротким именем вида @имя_канала. У приватного канала имени нет, поэтому нужен числовой идентификатор, который начинается с -100: его можно узнать, например, переслав пост из канала одному из ботов, которые показывают идентификаторы. Имя канала и токен держите в переменных окружения, а не в коде, тогда бота легко переключить на тестовый канал.

## 3. Сложите посты в очередь

Очередь — это список постов с текстом, картинкой, временем публикации и отметкой, отправлен ли пост. Для начала хватит файла JSON, а для контент-плана на недели вперёд удобнее база SQLite. Главное — хранить очередь на диске, а не в памяти программы, и ставить отметку об отправке сразу после успешной публикации: тогда после перезапуска бот не продублирует уже вышедший пост.

## 4. Выберите способ расписания

Самый простой вариант — цикл, который раз в минуту проверяет очередь и публикует всё, чему пришло время. Если расписаний несколько, удобнее библиотека: APScheduler для Python, JobQueue в python-telegram-bot или node-cron для Node.js. Заранее решите, что делать с постами, время которых прошло, пока бот был выключен: опубликовать их при старте или пропустить. В APScheduler за это отвечает настройка misfire_grace_time.

## 5. Укажите часовой пояс явно

Серверы обычно работают по UTC, и время без часового пояса бот понимает именно так: девять утра по UTC — это полдень по Москве. Указывайте пояс прямо в коде: параметр timezone в APScheduler и node-cron, ZoneInfo с поясом Europe/Moscow в Python. Если Python сообщает, что не знает такого пояса, добавьте в requirements.txt пакет tzdata.

## 6. Опубликуйте бота и проверьте на тестовом канале

Заведите закрытый тестовый канал, добавьте туда бота и поставьте пару постов через несколько минут, чтобы увидеть результат сразу. В Netrun нет отдельного планировщика задач вроде cron, и он не нужен: расписание работает внутри бота, а бот работает как постоянная программа. Код загружается архивом, папкой или из GitHub, токен указывается в «Секретах», а очередь в SQLite кладётся в постоянную папку /data, которая переживает обновление кода.

Автопостинг в Telegram-канал собирается из трёх частей: бот с правом публикации, очередь постов на диске и расписание с явным часовым поясом. Самое ненадёжное звено обычно не код, а место, где бот работает: если ноутбук уснул, пост на семь утра не выйдет. В Netrun бот публикуется из кода без настройки сервера, очередь в /data не теряется при обновлениях, а логи показывают каждую публикацию. На бесплатном тарифе бот работает ограниченное время — этого хватит, чтобы проверить расписание, а для ежедневных постов без пропусков нужен Pro. [Попробовать Netrun](https://netrun.io/).

Похожие инструкции: [как запускать код по расписанию](https://netrun.io/blog/zapusk-po-raspisaniyu), [бот, который работает круглосуточно](https://netrun.io/blog/telegram-bot-kruglosutochno), [как не потерять базу SQLite](https://netrun.io/blog/sqlite-pri-publikacii), [хостинг для бота на Python](https://netrun.io/blog/hosting-telegram-bota-na-python).

## Частые вопросы

### Почему пост вышел на три часа позже, чем я поставил?

Почти наверняка расписание работает по UTC, а вы указывали московское время. Сервер понимает девять утра как девять по UTC, а это полдень в Москве. Укажите часовой пояс прямо в коде расписания, и посты начнут выходить вовремя.

### Почему бот не может отправить пост в канал?

Чаще всего бот не добавлен в администраторы канала или у него выключено право публикации сообщений. Вторая частая причина — неверный идентификатор канала: у приватного канала нужен числовой идентификатор с -100 в начале, а не ссылка-приглашение. Точная причина видна в логах бота в тексте ответа Telegram.

### Можно ли запланировать посты в Telegram без постоянно работающего бота?

Вручную — да: в приложении Telegram есть отложенные сообщения, и для пары постов в неделю этого достаточно. Бот так не умеет, в Bot API отложенной отправки нет, поэтому автоматический постинг требует программы, которая работает в момент публикации. Если программа выключена, пост не выйдет.

### Куда пропала очередь постов после обновления бота?

Скорее всего, она хранилась в памяти программы или в файле рядом с кодом, а такие данные пересоздаются при каждой публикации. Держите очередь в постоянной папке: в Netrun это /data, которая переживает обновление кода и перезапуски. Записи об отправленных постах храните там же.

### Можно ли одним ботом вести несколько каналов?

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

### Есть ли запуск по расписанию?

Отдельной настройки расписания в кабинете нет. Расписание делают частью самого приложения: скрипт работает постоянно и сам решает, когда сработать — циклом с паузой или библиотекой расписания. Такой проект считается фоновым скриптом: он не засыпает, поэтому на бесплатном тарифе работает 3 часа, а для постоянной работы нужен тариф Pro.

### Сохранятся ли данные при обновлении кода?

Да, если данные лежат в постоянном хранилище. У обычного проекта это папка /data: всё, что приложение туда сохранило, остаётся при обновлении кода и перезапуске, а посмотреть и скачать файлы можно на вкладке «Данные». Если вы описали сервисы сами в docker-compose, постоянное хранилище — это именованные тома из вашего файла, и папки /data у такого проекта нет. Файлы, записанные мимо хранилища, при следующей публикации создаются заново. Ссылка проекта в любом случае остаётся прежней.

### Что будет с ботом через 3 часа на бесплатном тарифе?

Бот выключится, но код, настройки и секреты останутся на месте — мы ничего не удаляем. Незадолго до выключения мы пришлём предупреждение. Три часа считаются только по работе бота: пока он остановлен, не собрался или упал с ошибкой, время не идёт — можно спокойно чинить код и запускать заново. Подключите тариф Pro, и бот запустится с того же места и будет работать круглосуточно. Новый бот, загруженный после этого, тоже соберётся, но работать не начнёт: бесплатное время считается на аккаунт, а не на каждый проект.
