Plank help · updated 2026-08-24

Публикация в Instagram

Подключите профессиональный аккаунт Instagram через официальный API Meta, чтобы ассистент публиковал посты, карусели, Reels и Stories — со всеми ловушками, из-за которых эта настройка идёт медленно.

Agents: fetch the raw markdown of this page at /ru/help/connecting-instagram.md

Публикация в Instagram

Ассистент может публиковать в Instagram через официальный API Meta — посты, карусели, Reels и Stories, — а также читать профиль, комментарии и сообщения.

Настраивать вручную не нужно. Попросите ассистента в чате («подключи наш Instagram, чтобы ты мог публиковать»), и он соберёт скрипт публикации и проведёт вас по тем шагам, которые можете сделать только вы. Эта страница написана для вас обоих: ассистент запрашивает её по адресу https://plank.md/help/connecting-instagram.md перед началом, чтобы подключение прошло чисто, а не через один из тупиков ниже.

Отведите 20 минут и сначала прочитайте раздел «Перед началом». Это самое капризное подключение в Plank. Не потому, что какой-то шаг сложен, а потому что Meta даёт вам три похожих числа, два похожих по названию API и сценарий отказа, в котором всё выглядит работающим, но ничего не происходит. Всего этого можно избежать, проверив три вещи заранее.

Перед началом

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

1. Аккаунт должен быть профессиональным — Business или Creator. Личный аккаунт вообще не может публиковать через API. Тип меняется в Instagram: Настройки → Тип аккаунта и инструменты.

2. Аккаунт должен быть связан с Facebook-страницей. Вот это болезненно. Если связи нет, API Meta попросту не видит аккаунт: экраны авторизации всё равно появляются, вы всё подтверждаете, а аккаунт молча отсутствует в результатах. Диагностировать нечего, потому что об ошибке никто не сообщает.

Как связать:

  • В Instagram: Редактировать профиль → Общедоступная информация о компании → Страница, создайте страницу или выберите существующую.
  • Или в Meta Business Suite: Настройки → Аккаунты → Аккаунты Instagram → Добавить → Подключить ресурсы.

3. Знайте, как вы входите в Instagram. Ответьте на это до всего остального — от этого зависит весь путь:

Как вы входитеКакой API нужен
Через Facebook (пароля Instagram у вас может и не быть)Instagram API with Facebook Login — обычный случай, о нём и вся эта страница
Напрямую логином и паролем InstagramInstagram API with Instagram Login — другой поток с другими названиями разрешений

Скажите ассистенту, какой вариант ваш. Ошибка здесь означает пройти всю настройку дважды.

Три ID приложения — прочитайте до того, как копировать любое число

Одно приложение Meta показывает вам три разных числовых ID в трёх разных местах, и они невзаимозаменяемы. Это самая частая причина провала настройки.

IDГде находитсяДля чегоЧто будет при ошибке
Meta App IDApp settings → BasicFacebook Login, Graph API Explorer
Instagram App IDСтраница продукта InstagramТолько для потока Instagram LoginInvalid App ID либо вход, который завершается и ничего не спрашивает
Threads App IDСтраница продукта ThreadsТолько Threads — см. Публикация в ThreadsТо же самое

Когда у вас просят «app ID», имеется в виду Meta App ID из App settings → Basic. Если ассистент дал ссылку авторизации, а страница просто вас логинит и на этом всё — ни запроса разрешений, ни перенаправления, — почти наверняка взят не тот из этих трёх.

Шаг 1 — Создайте приложение Meta

  1. Откройте developers.facebook.com/apps и нажмите Create App.
  2. Выберите тип приложения Business.
  3. Назовите так, чтобы потом узнать, например «Acme Instagram».
  4. Добавьте продукт Instagram и выберите API setup with Facebook login.

Это всё, что нужно. Продукт Facebook Login for Business добавлять и поле App Domains заполнять не требуется — они относятся к потоку с редиректом, которого следующий шаг намеренно избегает.

Шаг 2 — Получите access token

Это тот шаг, который действительно работает, и он проще, чем кажется. Поток с редиректом и callback вы использовать не будете (см. «Почему не ссылка для входа» ниже).

  1. Откройте Graph API Explorer.
  2. В поле Meta App выберите только что созданное приложение — по его Meta App ID.
  3. Установите версию API v26.0.
  4. В качестве типа токена выберите User Access Token.
  5. Добавьте разрешения:
    • pages_show_list
    • pages_read_engagement
    • instagram_basic
    • instagram_content_publish
    • instagram_manage_comments
    • instagram_manage_insights
    • instagram_manage_contents — нужно, только если хотите, чтобы ассистент мог удалять публикации
  6. Нажмите Generate Access Token и подтвердите в открывшемся окне Facebook. Выберите страницу, связанную с вашим аккаунтом Instagram.
  7. Скопируйте токен и пришлите его ассистенту.

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

Токен — это живой доступ. Любой, у кого он есть, может публиковать от вашего имени, пока токен не истечёт (около 60 дней). Он сохраняется внутри рабочего пространства, поэтому им может воспользоваться каждый, у кого есть доступ к этому пространству. Если токен оказался там, где не хотелось бы, создайте новый в Explorer — старый перестанет быть актуальным.

Если instagram_manage_contents не предлагается

Это относительно новое разрешение, и его может потребоваться запросить: App Review → Permissions and Features, найдите его и нажмите Request advanced access. Обратите внимание на написание: instagram_manage_contents, во множественном числе. Разрешения instagram_manage_content не существует, и поиск в единственном числе ничего не находит.

Прежде чем тратить время на App Review ради него, прочитайте раздел «Удаление публикаций сейчас работает ненадёжно» ниже: разрешение выдаётся нормально, но endpoint удаления Meta на момент последней проверки падал в любом случае.

Почему не ссылка для входа?

Кажется, что «вход через Facebook» — самый чистый способ. Это не так, и отказ происходит так, что съедает уйму времени:

  • Facebook Login for Business возвращает токен во фрагменте URL — в части после #. Страница callback её прочитать не может, поэтому после выбора аккаунта поток просто… останавливается. Ни ошибки, ни завершённого подключения, ни повода что-то сообщить.
  • Кроме того, нужен отдельный продукт Facebook Login for Business, а также точное совпадение настроек App Domains (App settings → Basic) и Valid OAuth Redirect URIs. Расхождение всплывает как «Can't load URL: the domain of this URL isn't included in the app's domains» — звучит совсем не о том и ровно там, где проблему с настройками ожидаешь меньше всего.

Путь через Graph API Explorer обходит всё это. Если ассистент предлагает ссылку авторизации, вполне нормально ответить: «давай лучше через Graph API Explorer».

Шаг 3 — Публикация

Просите обычными словами: «опубликуй это изображение в Instagram с такой подписью», «выложи эти пять экранов как Stories». Ассистент всегда сначала делает пробный прогон, показывая, что именно будет опубликовано, прежде чем что-то уйдёт.

Что важно знать: Instagram не принимает загрузку файлов через API. Meta скачивает медиа по публичной ссылке, поэтому каждому изображению или видео сначала нужен публичный URL. Ассистент делает это сам: публикует файл из рабочего пространства и передаёт Meta прямую ссылку — материалы остаются в Plank, а не уходят на сторонний хостинг.

Лимиты, которые стоит знать

Публикаций за 24 часа100
Элементов в каруселине более 10
Размер изображения Story1080 × 1920
Срок жизни токена~60 дней

Stories ведут себя иначе

  • У Stories нет подписи — текст должен быть частью изображения.
  • Они публикуются по одной, по порядку. Ассистент дожидается завершения каждой перед отправкой следующей, поэтому нумерованная серия сохраняет последовательность.
  • Опубликованную Story нельзя отредактировать. Исправление означает удалить её и выложить замену, поэтому изображения стоит просмотреть до публикации.
  • Держите смысловое содержимое подальше от краёв — интерфейс Instagram перекрывает верх и низ экрана.

Удаление публикаций сейчас работает ненадёжно

По состоянию на 7 августа 2026 года endpoint удаления Meta возвращает внутреннюю ошибку 2207085 даже при выданном instagram_manage_contents и на токене пользователя, и на токене страницы. Это на стороне Meta, ваша настройка это не исправит. Удаляйте через приложение Instagram. Возможно, с тех пор это починили — одна повторная попытка перед откатом к ручному удалению оправданна.

Когда перестало работать

Токены живут около 60 дней, и истёкший токен — обычная причина того, что публикация вдруг перестала проходить. Попросите ассистента обновить его или создайте новый в Graph API Explorer ровно как в шаге 2.

Но не всякий сбой означает переподключение — а переподключение, когда дело не в нём, просто заставит пройти настройку заново:

Что вы видитеЧто это обычно значит
invalid_grant, отозванный доступ или 401, который остаётся после обновленияУчётные данные действительно мертвы — переподключайтесь
403, сообщение о квоте или нехватке разрешенияС подключением всё в порядке, дело в разрешении или лимите
Аккаунт не найденРазорвалась связь с Facebook-страницей — проверьте условие 2

Для ассистента: детали реализации

Выбор потока. Спросите, как пользователь входит в Instagram, до того как что-то предлагать. Вход через Facebook ⇒ Instagram API with Facebook Login (scopes instagram_*, токены с graph.facebook.com/v26.0). Прямые учётные данные Instagram ⇒ Instagram Login (scopes instagram_business_*, graph.instagram.com). Эти два набора scopes невзаимозаменяемы.

Проверьте связь со страницей до любого OAuth. Вызовите /me/accounts с fields=id,name,access_token,instagram_business_account{id,username} и убедитесь, что нужный username действительно присутствует. Если нет — остановитесь и попросите пользователя связать страницу: никакой поток авторизации это не обойдёт, а продолжение выдаёт череду шагов, которые выглядят успешными.

Удалённые поля в Graph API v26. account_type больше нельзя запросить ни внутри вложенного instagram_business_account, ни напрямую у объекта. Запрос этого поля роняет весь вызов. Оно и не нужно: наличие instagram_business_account уже доказывает, что аккаунт профессиональный.

Используйте Page access token для публикации и удаления, а не пользовательский — именно он привязан к бизнес-аккаунту Instagram.

Публикация состоит из двух шагов: создать медиаконтейнер (POST /<ig-user-id>/media), опрашивать его до status_code = FINISHED, затем опубликовать (POST /<ig-user-id>/media_publish с creation_id). Дольше всего готовятся Reels; прежде чем считать контейнер зависшим, дайте примерно минуту. Для каруселей сначала создаются и дожидаются готовности дочерние контейнеры, затем родительский с media_type=CAROUSEL.

Переносы строк в подписи — настоящие, а не литеральный \n. Instagram показывает те символы, которые вы отправили, и подпись, собранная как шелловская строка в двойных кавычках, придёт с видимым обратным слэшем и буквой n посреди поста. Запишите подпись в файл и дайте инструменту прочитать её как есть (jq --rawfile caption /tmp/ig-caption.txt или --data-urlencode "caption@/tmp/ig-caption.txt"); для однострочной — CAPTION=$'Первая строка.\n\nВторая строка.': внутри $'…', и только там, \n — это перенос. В Python "\n" внутри строки уже настоящий перенос; ловушка — шелловская.

Stories: передавайте media_type: STORIES и не отправляйте подпись — подпись в контейнере Story отклоняется. Учитывайте явно заданный mediaType, а не подставляйте изображениям IMAGE по умолчанию.

Публичные URL медиа. Meta скачивает файл сама, поэтому нужен URL, отдающий сырые байты с image- или video-типом содержимого. Опубликуйте файл рабочего пространства и используйте endpoint /download:

https://api.plank.md/public/w/<workspace-slug>/s/<share-token>/download

Проверено: отдаёт content-type: image/png с корректной длиной. Не используйте /content — он возвращает JSON с файлом в виде UTF-8-строки, и Meta это прочитать не может. Перед созданием любого контейнера убедитесь, что каждый URL отдаёт 200 и image-тип содержимого.

Учётные данные лежат в scripts/instagram/token.json внутри рабочего пространства, а на скрипте публикации стоит заголовок @plank-integration, чтобы он появился в боковой панели «Интеграции». См. Скрипты рабочего пространства и боковая панель, а про подключения в целом — Подключение ваших инструментов.

Всегда сначала --dry-run, и никогда не публикуйте без подтверждения пользователем точного текста и медиа.