ГлавнаяБлогОтложенный постинг
🕒 Каналы и чаты · по документации

Отложенный постинг в Telegram: как работает очередь

Отложенное сообщение хранится на сервере Telegram, в отдельной очереди каждого чата. Приложение можно закрыть, телефон — выключить: отправит сервер. Механика приехала в схему в слое 105, который так и называется — «Scheduled messages, Cloud themes». Бот поставить сообщение в эту очередь не может: на попытку прилетает ошибка SCHEDULE_BOT_NOT_ALLOWED с описанием «Bots cannot schedule messages». Отложку на десять секунд вперёд сервер отправляет сразу. У отложенного сообщения есть флаг from_scheduled, по которому его видно в истории. Ниже — вся механика по первоисточнику, включая допустимые интервалы повтора и то, чего в документации нет.

Что такое отложенный постинг в Telegram

С точки зрения человека это две секунды удержания кнопки отправки и выбор даты. С точки зрения протокола — одно необязательное поле. В методах messages.sendMessage и messages.sendMedia есть schedule_date: будущая метка времени в формате UNIX. Положили её в запрос — сообщение не ушло получателю, а встало в очередь на сервере и отправится само в указанный момент.

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

Дальше сервер отбивает три события. Сразу — updateNewScheduledMessage с тем самым id из очереди. В назначенное время — обычный апдейт о новом сообщении с флагом from_scheduled. И тут же updateDeleteScheduledMessages: запись вымыло из очереди. В последнем апдейте приезжают сразу два списка — id в очереди и настоящие id отправленных сообщений, по одинаковым позициям.

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

В машиночитаемом справочнике ошибок лежит код SCHEDULE_BOT_NOT_ALLOWED, описание к нему — «Bots cannot schedule messages». Закреплён он за тремя методами: отправка текста, отправка медиа и пересылка. Иносказаний тут нет.

С другой стороны то же самое подтверждается отсутствием. Я прогрепал справочник Bot API целиком: слова schedule_date там нет ни одного вхождения. Ни у sendMessage, ни у одного другого метода отправки параметра расписания просто не существует.

Практическое следствие. Всё, что продаётся как «автопостинг ботом», отложкой Telegram не пользуется — не может. Такой сервис держит у себя таймер и в нужную минуту дёргает обычный sendMessage. Разница видна сразу: пропал сервис, упала сеть, кончился хостинг — пост не выйдет. У штатной отложки очередь на серверах Telegram, и её не касается ничего из этого.

Раз ботовый токен закрыт, остаётся клиент, работающий от лица человека, — тот же userbot, на котором держатся парсинг и рассылки. Чем он отличается от бота, разобрано в материале про ботов в чате. Под расписание в телеграмме нужен живой аккаунт, токен из @BotFather тут бесполезен.

Что будет, если поставить отложку на десять секунд вперёд

Сообщение уйдёт сразу. Формулировка в документации точная: если schedule_date меньше чем на десять секунд в будущем, сообщение отправляется немедленно и порождает обычный апдейт о новом сообщении — без очереди и без from_scheduled.

Мелочь, но она ломает схемы вида «поставлю на пять секунд, чтобы выглядело отложенным». Ниже десяти секунд отложки просто не существует.

Как отправить сообщение, когда человек появится в сети

У Telegram есть отдельный режим, про который знают куда меньше, чем про обычную отложку. Вместо даты в schedule_date кладётся особая метка 0x7FFFFFFE — это максимальное 32-битное значение минус единица. Работает только в личных чатах.

  • Собеседник онлайн прямо сейчас — сообщение уходит немедленно, минуя очередь.
  • Собеседник офлайн — сообщение встаёт в очередь с этой же меткой и отправляется автоматически, когда он вернётся в сеть.
  • Собеседник скрыл время последнего входа — сервер отвечает SCHEDULE_STATUS_PRIVATE: «Can't schedule until user is online, if the user's last seen timestamp is hidden by their privacy settings». Сообщение не отправляется и в очередь не встаёт.

Третий пункт упирается в чужие настройки, и повлиять на него вы никак не можете. У Telegram четырнадцать ключей приватности, и «был в сети» среди них работает по правилу взаимности: скрыл своё время — перестал видеть чужое. Как это устроено целиком, разобрано в статье про настройки приватности. Для отложки вывод простой: доля базы, до которой этот режим вообще не дотянется, — это ровно те люди, кто спрятал последний вход, и их количество вы заранее не знаете.

Можно ли повторять отложенное сообщение по расписанию

Можно, и список интервалов закрытый. За повтор отвечает поле schedule_repeat_period — интервал в секундах, через который сервер сам переставит сообщение на новый срок, отбив ровно те же апдейты, как если бы вы отправили его заново.

ИнтервалЗначение в секундах
Каждый день86 400
Каждую неделю7 × 86 400
Раз в две недели14 × 86 400
Раз в месяц30 × 86 400
Раз в три месяца91 × 86 400
Дважды в год182 × 86 400
Раз в год365 × 86 400
Только в тестовом дата-центре60 и 300

Произвольного интервала нет: «каждые три часа» или «по будням» протоколом не предусмотрено. Повтор нельзя навесить на альбом и на пересылку нескольких сообщений разом — документация оговаривает это отдельно. Сама возможность повтора в первоисточнике отнесена к платной подписке, поэтому в бесплатном аккаунте поля вы не увидите.

Строчка про 60 и 300 секунд — находка для тех, кто такое отлаживает. Ждать сутки, чтобы проверить ежедневный повтор, не нужно: в тестовом дата-центре тот же механизм крутится с минутным шагом. Что такое тестовая среда Telegram и как в неё попасть, разобрано в отдельном материале.

Что можно сделать с уже поставленной очередью

Очередь — не чёрный ящик, у неё пять методов. Клиент видит её целиком и может править.

МетодЧто делает
messages.getScheduledHistoryотдаёт всю очередь отложки конкретного чата
messages.getScheduledMessagesотдаёт конкретные сообщения из очереди по их id
messages.sendScheduledMessagesвымывает сообщения из очереди и отправляет их прямо сейчас
messages.deleteScheduledMessagesудаляет из очереди, не отправляя
messages.editMessageменяет текст, медиа и саму дату отправки

У последнего есть своя ошибка — SCHEDULE_DATE_INVALID, «Invalid schedule date provided». Любопытно, за какими двумя методами она закреплена: за редактированием сообщения и за phone.createGroupCall. Второй — про запланированные видеочаты: у них своя дата и та же проверка на её вменяемость.

Почему видео в большой канал уходит через ту же очередь

Отправка видео в крупный чат автоматически запускает серверную обработку — генерацию дополнительных качеств. И на время обработки сообщение кладётся в ту же очередь отложки, хотя никакой отложки вы не ставили. У него поднимается флаг video_processing_pending, а в поле даты лежит не время отправки, а расчётное время окончания конвертации.

Со стороны Bot API это описано ещё жёстче. В справочнике у поля с идентификатором сообщения стоит оговорка: «в отдельных случаях (например, сообщение с видео, отправленное в большой чат) сервер может автоматически поставить сообщение в очередь вместо немедленной отправки; в таких случаях это поле будет равно 0, и сообщение непригодно к использованию, пока не будет реально отправлено». То есть бот, залив видео в крупный канал, получает message_id = 0 и не может ни закрепить пост, ни ответить на него, ни отредактировать, пока Telegram не досчитает.

Если скрипт постинга падает именно на видео и именно в больших каналах — вот причина, и она задокументирована. Что показывает и чего не показывает штатная статистика Telegram-канала, разобрано отдельно.

Видно ли, что сообщение было отложенным

Видно. В объекте сообщения есть флаг from_scheduled с описанием в одну строку: «Whether this is a scheduled message». Рядом, во второй группе флагов, лежит offline — он ставится, когда сообщение ушло из-за заранее заданного сценария отправителя, например как автоответ или служебное приветствие. В Bot API у того же признака имя is_from_offline, и формулировка там прямая: сообщение отправлено неявным действием.

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

Чего в документации нет

Три числа я искал специально и не нашёл. Подставлять вместо них правдоподобные не стану — ниже ровно то, что есть в первоисточнике.

  1. Лимит на количество отложенных сообщений не опубликован. Ошибка SCHEDULE_TOO_MUCH («There are too many scheduled messages») закреплена за пятью методами отправки, то есть потолок точно существует. Значения нет.
  2. Горизонт планирования не опубликован. SCHEDULE_DATE_TOO_LATE— «You can't schedule a message this far in the future». Насколько далеко «this far», не сказано нигде.
  3. В конфиге этих чисел тоже нет. В машиночитаемом конфиге Telegram 228 описанных ключей, и поиск по ним на 29 августа 2026 года не даёт ни одного ключа со словом schedule. Другие лимиты платформы там лежат — они разобраны в статье про лимиты Telegram, — а эти два живут только в виде ошибок.

Что это меняет, если вы ведёте постинг с нескольких аккаунтов

Соберём факты вместе. Отложку ставит человек со своего аккаунта, живёт она на сервере Telegram, интервалы повтора выбираются из закрытого списка, и в истории она помечена флагом. Для одного канала из этого следует «пользуйтесь штатной отложкой и не платите за планировщик». Для десятка площадок и флота аккаунтов — набор рабочих ограничений:

  • Расписание ставится с того аккаунта, который потом и постит. Отдать это боту не выйдет. Значит, аккаунтов под задачу нужно столько же, сколько площадок, и каждый должен быть живым в момент постановки очереди.
  • Один аккаунт — один набор очередей. Потерялся доступ, попал аккаунт в заморозку или ограничение — вместе с ним из работы вышли все его очереди сразу. Как понять причину и что делать, разобрано в статье про ограниченный аккаунт.
  • Массовая постановка отложки — это серия запросов от одного аккаунта. Флуд-лимиты тут работают как на любой другой активности, а заход многими профилями с одного адреса собирает проблемы ровно так же.

Отсюда практическая часть. Живые аккаунты под площадки лежат в каталоге Telegram-аккаунтов — по странам и типам, каждый проверяется вживую в момент выдачи. Разводить их по адресам — резидентными прокси, а если сценарий чувствителен к качеству адреса, мобильными 4G/5G. Чем типы аккаунтов отличаются друг от друга, разобрано в материале про трастовые, физические и авторег.

Что это меняет, если вы собираете аудиторию

Прямо — ничего: отложенное сообщение, когда оно доехало, становится обычным сообщением чата и попадает в ленту как все. Активные писавшие соберутся вместе с ним, потому что это реальная реплика в реальном чате.

Косвенно — ещё один аргумент не судить о чате по одному признаку. Строчка «в чате пишут» перестала означать «в чате сидят люди» ровно в тот момент, когда постинг стало можно поставить на месяц вперёд и уйти. Смотреть стоит на расхождение между списком участников и теми, кто действительно писал за период; для каналов ту же роль играют комментаторы — комментарии остаются обычными сообщениями. Почему пять чатов одного кластера не дают пяти аудиторий, разобрано в материале про пересечение аудиторий.

Что делать прямо сейчас

  1. Откройте очередь своего канала и посмотрите, что в ней лежит. Про забытый пост полугодовой давности вспоминают обычно в момент, когда он выходит.
  2. Проверьте, не платите ли вы за планировщик зря. Если сервис делает только «выложить пост во вторник в 10:00», штатная отложка закрывает это бесплатно и надёжнее.
  3. Не ставьте отложку ближе десяти секунд. Уйдёт немедленно, флага не будет.
  4. Отладку повторов гоняйте в тестовом дата-центре. 60 секунд вместо суток — это разница между «проверил за обед» и «проверил за неделю».
  5. Заложите живой аккаунт на каждую площадку. Ботом расписание не поставить, а один аккаунт на всё — единая точка отказа.

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

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

Как сделать отложенный постинг в Telegram без сторонних сервисов?

Штатно: набрать сообщение и вместо обычной отправки задержать палец на кнопке отправки — появится выбор даты и времени. Под капотом клиент кладёт будущую метку времени в поле schedule_date метода messages.sendMessage или messages.sendMedia, и сообщение уходит в серверную очередь того чата, куда его адресовали. Приложение после этого можно закрыть: ждёт сервер, а не телефон.

Может ли бот поставить сообщение на отложку?

Нет, и это записано прямым текстом. В машиночитаемом справочнике ошибок Telegram есть код SCHEDULE_BOT_NOT_ALLOWED с описанием «Bots cannot schedule messages» — «боты не могут планировать сообщения». Он закреплён за тремя методами: messages.sendMessage, messages.sendMedia и messages.forwardMessages. С другой стороны это подтверждается отсутствием: в справочнике Bot API слова schedule_date нет ни одного вхождения (проверено 29 августа 2026 года). Отложку умеет только клиент, работающий от лица человека.

Что значит «отправить, когда собеседник появится в сети»?

Это отдельный режим: вместо даты в schedule_date передаётся особая метка 0x7FFFFFFE. Работает только в личных чатах. Если человек в этот момент онлайн, сообщение уходит сразу, минуя очередь; если нет — встаёт в очередь и отправляется автоматически, когда он вернётся. Но если собеседник скрыл время последнего входа настройками приватности, сервер отвечает ошибкой SCHEDULE_STATUS_PRIVATE, и сообщение не будет ни отправлено, ни поставлено в очередь.

Можно ли сделать так, чтобы отложенное сообщение повторялось?

Да, для этого есть поле schedule_repeat_period — интервал в секундах, после которого сервер сам переставит сообщение на новый срок. Список допустимых значений закрытый: 86 400 (сутки), 7, 14, 30, 91, 182 и 365 суток в секундах. В тестовом дата-центре дополнительно разрешены 60 и 300 секунд. Повтор нельзя применить к альбому и к пересылке нескольких сообщений сразу, а сама возможность в документации отнесена к платной подписке.

Видно ли со стороны, что сообщение было отложенным?

Да, в объекте сообщения есть флаг from_scheduled с описанием «Whether this is a scheduled message». Рядом лежит флаг offline — он ставится, когда сообщение ушло по заранее заданному сценарию отправителя, например как автоответ или служебное приветствие. В Bot API у того же признака имя is_from_offline. То есть отложка не делает сообщение неотличимым от живого: метка происхождения лежит прямо в объекте и доступна любому клиенту, который читает историю.

Сколько сообщений можно поставить в отложку и на сколько вперёд?

Точные значения в открытой документации не опубликованы. Известно, что ограничения есть: ошибка SCHEDULE_TOO_MUCH означает «слишком много отложенных сообщений», SCHEDULE_DATE_TOO_LATE — «нельзя запланировать сообщение так далеко в будущее». Обе закреплены за пятью методами отправки. Соответствующих ключей в машиночитаемом конфиге нет: поиск по всем 228 описанным ключам на 29 августа 2026 года не даёт ни одного вхождения schedule.

Механика очереди, режим 0x7FFFFFFE, правило десяти секунд, список интервалов повтора и автоматическая обработка видео — со страницы core.telegram.org/api/scheduled-messages. Формулировки ошибок SCHEDULE_BOT_NOT_ALLOWED, SCHEDULE_STATUS_PRIVATE, SCHEDULE_TOO_MUCH, SCHEDULE_DATE_TOO_LATE и SCHEDULE_DATE_INVALID вместе со списками методов — из машиночитаемого справочника ошибок (слой 227). Описания флагов from_scheduled, offline и video_processing_pending — из конструктора message (слой 223). Отсутствие расписания у ботов и оговорка про message_id = 0 — из справочника Bot API. Отсутствие ключей в конфиге проверено по машиночитаемому config.json (слой 225). Всё снято и сверено 29 августа 2026 года.

Аккаунты под постинг по площадкам

Готовые Telegram-аккаунты по странам и типам, от 135 ₽. Каждый проверяется вживую в момент выдачи: коннект через прокси, ограничения, ответ служебного бота.