🛑 Главная ловушка Meta*: Контексты

Meta* жестко разделяет Личные приложения (привязанные к странице разработчика) и Бизнес-приложения (привязанные к Meta* Business Manager / Business Portfolio).

Если вы создаете приложение из-под бизнес-аккаунта клиента или компании, оно не будет отображаться в вашем стандартном выпадающем списке на developers.facebook.com и в Graph API Explorer, пока вы не добавите свой личный аккаунт в Роли этого приложения или не переключите фильтр на конкретное бизнес-портфолио.

// ВНИМАНИЕ

Никогда не используйте временные токены из Graph API Explorer в боевых воркфлоу n8n: они живут от 1 до 60 дней. Для стабильной работы нужен System User внутри Business Manager.

📋 Шаг 0. Пре-требования: Подготовка аккаунтов (Чек-лист для владельца)

Прежде чем инженер начнет создавать приложение и генерировать токены в n8n, владелец бизнеса или администратор обязан подготовить активы:

Актив Что необходимо настроить
1 Личный профиль FB* с 2FA Аккаунт администратора должен быть реальным, без ограничений и банов, и на нем обязана быть включена двухфакторная аутентификация (2FA). Без 2FA Meta* блокирует доступ к функциям разработчика.
2 Meta* Business Manager Создано Бизнес-портфолио компании на business.facebook.com.
3 Публичная страница Facebook* Создана Страница компании (не личный профиль и не закрытая группа) и добавлена в активы (Настройки бизнеса / Аккаунты / Страницы).
4 Instagram* в Бизнес-режиме Личный аккаунт Instagram* переключен на Бизнес или Авторский (В приложении Instagram*: Настройки / Тип аккаунта / Переключиться на профессиональный).
5 Связка FB* + Instagram* Критически важно: зайти в Meta* Business Suite / Настройки / Бизнес-активы / Аккаунты Instagram*. Нажать «Добавить аккаунт Instagram*», пройти авторизацию и связать его со Страницей Facebook*. Без этой физической связки Graph API не увидит Instagram* ID.

⚙️ Шаг 1. Правильное создание приложения Meta*

  1. Переходим на портал developers.facebook.com.
  2. Нажимаем Создать приложение (Create App).
  3. ⚠️ Важно: На первом шаге выбора сценария спускаемся в самый низ и выбираем тип Другое (Other).
  4. На следующем шаге выбираем тип Бизнес (Business) (для работы с Instagram* Graph API и страницами компаний).
  5. В панели управления созданного приложения добавляем продукты: Facebook* Login for Business и Instagram* Graph API.

🔑 Шаг 2. Получение «вечного» токена (System User)

Токены, сгенерированные через стандартный Graph API Explorer, «сгорают» максимум через 60 дней. Чтобы ваши n8n-воркфлоу не останавливались ночью из-за невалидной авторизации, создается Системный пользователь:

  1. Заходим в Meta* Business Suite / Настройки компании (шестеренка) / Системные пользователи (System Users).
  2. Нажимаем Добавить и создаем пользователя с ролью Администратор (Admin).
  3. Выбираем созданного системного пользователя и нажимаем Подключить объекты (Assign Assets).
  4. Обязательно выдаем ему полный доступ (управление) к трем объектам:
    • вашему Приложению;
    • нужной Публичной странице Facebook*;
    • подключенному Аккаунту Instagram*.
  5. Нажимаем кнопку Сгенерировать новый токен (Generate New Token).
  6. В появившемся окне выбираем созданное приложение и отмечаем галочками необходимые права (Scopes):
    • pages_manage_posts - публикация и управление постами на странице Facebook*;
    • pages_read_engagement - чтение реакций и охватов;
    • instagram_basic - базовый доступ к профилю Instagram*;
    • instagram_content_publish - прямая публикация фото, каруселей и Reels;
    • business_management - управление связанными бизнес-активами.
  7. Копируем полученный длинный токен (System User Access Token). Этот токен не имеет срока давности и сохраняется в переменные окружения n8n.
// РАЗРАБОТКА И АВТОМАТИЗАЦИЯ N8N

Создание отказоустойчивых контентных фабрик требует четкой архитектуры очередей, обработки ошибок и мониторинга квот Meta* API. Если вам нужно внедрить надежный автопостинг или AI-агентов в ваш проект - пишите: @websansay. Свежие разборы n8n-пайплайнов доступны в Telegram-канале хаба.

📘 Шаг 3. Публикация в Facebook* через n8n

Для публикации на публичной странице Facebook* исходный токен системного пользователя напрямую не используется: по архитектуре Meta* его нужно обменять на Маркер Страницы (Page Access Token).

1. Получаем Маркер Страницы (GET запрос)

GET https://graph.facebook.com/v25.0/{PAGE_ID}?fields=access_token&access_token={ТОКЕН_СИСТЕМНОГО_ПОЛЬЗОВАТЕЛЯ}

В ответе берем поле access_token - это Page Access Token, который используется для отправки постов от имени страницы.

2. Публикуем пост с картинкой в Facebook* (POST запрос)

curl -X POST "https://graph.facebook.com/v25.0/{PAGE_ID}/photos" \
     -H "Content-Type: application/json" \
     -d '{
           "url": "https://cdn.domain.com/image.jpg",
           "caption": "Текст вашего поста",
           "access_token": "{МАРКЕР_СТРАНИЦЫ}"
         }'

В n8n: создается нода HTTP Request с методом POST, URL https://graph.facebook.com/v25.0/{{ $json.page_id }}/photos и JSON-телом, содержащим прямую ссылку на медиафайл и текст публикации.

📸 Шаг 4. Публикация в Instagram* через n8n

Instagram* Graph API использует исходный токен Системного пользователя и публикует медиа в два обязательных этапа через асинхронные медиа-контейнеры.

01 / DISCOVERY GET Instagram* ID 02 / CONTAINER POST /media (Image) 03 / PUBLISH POST /media_publish
Сквозной пайплайн публикации в Instagram* через n8n HTTP Request ноды

1. Узнаем Instagram* Business Account ID (GET)

GET https://graph.facebook.com/v25.0/{PAGE_ID}?fields=instagram_business_account&access_token={ТОКЕН_СИСТЕМНОГО_ПОЛЬЗОВАТЕЛЯ}

Из ответа берем идентификатор из объекта instagram_business_account.id.

2. Создаем медиа-контейнер (POST)

Картинка или видео должны быть доступны по прямой публичной HTTPS-ссылке без авторизации и HTML-оберток (например, S3-хранилище, CDN или GitHub Raw).

curl -X POST "https://graph.facebook.com/v25.0/{INSTAGRAM_ID}/media" \
     -H "Content-Type: application/json" \
     -d '{
           "image_url": "https://cdn.domain.com/image.jpg",
           "caption": "Текст поста для Instagram*",
           "access_token": "{ТОКЕН_СИСТЕМНОГО_ПОЛЬЗОВАТЕЛЯ}"
         }'

В ответе Meta* возвращает { "id": "178414..." } - это идентификатор контейнера (creation_id).

3. Публикуем контейнер в ленту (POST)

curl -X POST "https://graph.facebook.com/v25.0/{INSTAGRAM_ID}/media_publish" \
     -H "Content-Type: application/json" \
     -d '{
           "creation_id": "{ВАШ_CREATION_ID}",
           "access_token": "{ТОКЕН_СИСТЕМНОГО_ПОЛЬЗОВАТЕЛЯ}"
         }'
// СБОРКА В N8N

В сценарии n8n первая HTTP-нода отправляет запрос на создание контейнера, а следующая нода принимает полученный {{ $json.id }} и сразу триггерит публикацию через эндпоинт /media_publish. Для видео и Reels между шагами рекомендуется добавить ноду Wait (3-10 секунд) для завершения транскодирования на серверах Instagram*.

👻 Шаг 5. Почему никто не видит мои посты? (Эффект Песочницы)

Частая проблема: скрипт или воркфлоу n8n отработал с кодом 200, пост появился в ленте у разработчика, но с других аккаунтов страница выглядит пустой.

Причина: приложение находится в режиме разработки (Development Mode). В этом статусе весь контент, опубликованный через API, виден исключительно администраторам страницы и пользователям, добавленным в раздел «Роли» внутри приложения Meta*.

Как перевести приложение в рабочий режим (Live Mode):

  1. В панели управления приложением перейдите в Настройки / Основное (Basic Settings).
  2. Обязательно укажите действительную ссылку на Политику конфиденциальности (Privacy Policy URL) и категорию бизнеса.
  3. Переключите главный тумблер в верхней шапке из положения «В разработке (Development)» в положение «В эфире (Live Mode)».
// APP REVIEW НЕ ТРЕБУЕТСЯ

Если вы используете приложение только для публикации на страницах и в аккаунтах Instagram* внутри собственного Business Manager (принадлежащих вашей компании или клиенту), проходить долгую и сложную модерацию App Review от Meta* не нужно. Права уровня Business Asset действуют в Live-режиме без дополнительной проверки.