Ниже разобран путь поста от текста и картинки до опубликованной записи, а конвейер на нашей стороне — очередь, планировщик, предохранители и журнал — работает по-настоящему: можно нажать и посмотреть, что ответит сервер.
Сразу о главном, чтобы не тратить ваше время. Сданных проектов на Meta Graph API у нас пока нет — вместо выдуманного кейса мы собрали этот стенд. Реальную публикацию в чужой Instagram показать невозможно: она требует Advanced Access на разрешение instagram_content_publish, который Meta выдаёт после App Review, а это недели и решение не наше.
Поэтому живое здесь — всё, что на нашей стороне: очередь, планировщик, шесть предохранителей и журнал. Последний шаг конвейера работает в режиме dry-run: вместо запроса к graph.facebook.com он пишет в журнал точный запрос, который ушёл бы. Ни одного «успешно опубликовано» там, где ничего не публиковалось.
Соберите пост и поставьте его в очередь. Предохранители считаются на сервере, а не в браузере — их нельзя обойти правкой этой страницы. Планировщик заберёт задачу, когда наступит время, и напишет в журнал каждый шаг с настоящей меткой времени.
Instagram не принимает пост одним запросом. Публикация всегда двухшаговая: сначала создаётся медиа-контейнер, потом отдельной командой он публикуется. Между ними — ожидание, и именно там ломается большинство самописных интеграций.
| Что вернул Meta | Класс | Поведение конвейера |
|---|---|---|
| status_code = IN_PROGRESS | повторяем | Контейнер ещё обрабатывается. Ждём с нарастающей паузой (1 → 2 → 4 с) и спрашиваем снова. Публиковать раньше времени — гарантированная ошибка. Это поведение можно увидеть в стенде выше, выбрав «контейнер обрабатывается дольше». |
| status_code = ERROR / EXPIRED | останавливаемся | Контейнер испорчен или протух — повторять его бессмысленно. Задача уходит в «нужен человек», очередь идёт дальше, пост не теряется. |
| Лимит запросов исчерпан | повторяем | Meta считает запросы по скользящему окну. Отступаем, ждём и продолжаем — вместо того чтобы долбить API и получить блокировку приложения. |
| Исчерпан лимит публикаций (50 за 24 ч) | откладываем | Документированный потолок Instagram на аккаунт. Свой счётчик держим заведомо ниже, чтобы упереться в него у себя, а не у Meta. |
| OAuthException, код 190 | зовём человека | Токен недействителен или истёк. Повтор только сожжёт лимит и ничего не починит: нужен перевыпуск долгоживущего токена руками. Очередь встаёт, приходит уведомление. Тоже можно проверить в стенде выше. |
| Сеть отвалилась на середине | безопасно | Худший случай в любой автопубликации — отправить пост дважды. Поэтому creation_id сохраняется до публикации, а повтор с тем же текстом в коротком окне блокируется предохранителем. |
Это неочевидная часть, из-за которой отчёты «было — стало» через полгода обычно оказываются невозможными.
Метрика follower_count отдаётся Instagram лишь за последние 30 дней. Спросить «сколько было в марте» в июле уже не у кого.
Показы, охват и сохранения доступны в узком окне после публикации. Не забрали вовремя — цифры исчезли навсегда.
Раз в сутки складываем срез в свою базу. Через год у вас есть история, которой у самого Instagram уже нет.
-- срез аккаунта: снимается ежесуточно, строка в день CREATE TABLE account_snapshot ( captured_at TIMESTAMP, -- когда сняли, UTC account TEXT, -- какой аккаунт followers INTEGER, -- 🔴 у Meta живёт 30 дней, у нас — всегда reach_1d INTEGER, profile_views INTEGER ); -- срез поста: чаще в первые дни, потом реже CREATE TABLE post_snapshot ( captured_at TIMESTAMP, media_id TEXT, -- тот самый id из шага media_publish published TIMESTAMP, reach INTEGER, saves INTEGER, -- сохранения: главный сигнал полезности comments INTEGER, likes INTEGER ); -- расписание: +1 ч, +24 ч, +7 дн после публикации, дальше раз в месяц -- и ежедневный срез аккаунта в 04:00 — вне зависимости от публикаций
Самый честный страх при автоматизации соцсетей — что система однажды опубликует не то, не туда или сто раз подряд. Разбираем по пунктам, что этому мешает. Все шесть проверок — те же самые, что срабатывают в стенде выше.
Пост уходит в очередь только с явной отметкой «утверждено». Черновик, сгенерированный текст, правка задним числом — всё это ждёт человека. Автопубликация без подтверждения не включается вообще, даже по вашей просьбе «пусть само».
Публиковать можно только туда, что внесено в конфиг заранее. Опечатка в имени аккаунта или подмена в данных не приведут к посту в чужой ленте — задача просто не пройдёт.
У Instagram потолок 50 публикаций в сутки на аккаунт. Наш счётчик стоит заметно ниже: упереться лучше в свой предохранитель, чем в чужую блокировку.
Длина до 2200 символов, не больше 30 хэштегов, пустой текст не пропускается. Это правила самого Instagram — нарушение означает отказ уже после отправки.
Один и тот же текст в коротком окне блокируется. Классическая авария автопостинга — сеть моргнула, скрипт повторил, в ленте два одинаковых поста — здесь не проходит.
Ссылка должна быть публичной и на https, иначе Meta не заберёт файл. Проверяем до постановки в очередь, а не после падения на середине.
Короткий список, который обычно узнают уже после оплаты. Лучше прочитать сейчас.
Если механика подходит — вот соседние стенды и способ проверить нас на своей задаче.
Та же порода задач с другой стороны: события, расписание, сегменты и отправка без ручного участия. Полезно, если нужна связка «пост вышел — дальше письмо или сообщение».
Открыть стендПолсотни стендов, каждый открывается и работает: боты и AI-агенты, интеграции и CRM, магазины, дизайн. Там же видно, как мы обычно размечаем «это живое, а это схема».
Смотреть всеО данных на этой странице. Ни одного скриншота чужого аккаунта, ни одной цифры охватов, ни одного отзыва здесь нет — у нас их нет, а выдумывать мы не станем. Аккаунты @guardlabs.demo и @client.main в форме — условные имена для проверки предохранителей, ни один реальный профиль этим стендом не затрагивается. Идентификаторы контейнера и поста в журнале сгенерированы на нашем сервере и помечены как dry-run: запросы к Meta не отправляются, потому что App Review не пройден. Живое на странице — очередь, планировщик, предохранители, повторы и журнал: отдельный сервис на сервере Guard Labs. Страница сделана как ответ на конкретный вопрос заказчика «а вы это уже делали» — и как честная замена кейсу, которого у нас пока нет.