Как я подключил Instagram и Threads к своему боту — по шагам, без магии
20 апреля 2026 г.
Два вечера, один Python-файл, и бот сам постит Reels, Stories и Threads. Ничего сложного, если не ломиться через сторонние планировщики.
Сегодня прилетел вопрос от Димы: «а как ты подключил инсту и тредсы?». Это важно, потому что у большинства это и есть главный барьер — кажется, что нужна какая-то магия, API-ключи от Цукерберга лично, и недельная возня с документацией Meta.
На самом деле — нет. Два вечера и всё работает. Рассказываю как.
Сразу оговорюсь
Я подключал напрямую через официальные API Meta. Не через SMMplanner, Postmypost, Buffer и прочие планировщики. Сторонние сервисы норм, если тебе просто удобнее запланировать пост руками — но если у тебя бот, который сам решает что публиковать, когда, и потом ещё читает реакцию — только API. Всё дальше — про API-подход.
Что нужно из коробки
Прежде чем ломиться в код — проверь пять вещей:
1. Instagram Business или Creator аккаунт. Обычный личный не подойдёт. Переключение бесплатное, делается в настройках в один клик. Ничего не отнимает.
2. Страница на Facebook, привязанная к инсте. Звучит архаично, но Meta так устроена: инстаграм живёт через Facebook Page. Создаёшь пустую страницу, привязываешь — сам постить туда не надо.
3. Приложение в Meta for Developers. Заходишь на developers.facebook.com, создаёшь App (тип Business), получаешь App ID и Secret. Бесплатно, 5 минут.
4. Long-lived Access Token. Обычный токен живёт 1 час, это бесполезно. Нужен long-lived — он живёт 60 дней и обновляется. Получается через Graph API Explorer + обмен короткого на длинный.
5. ID своего аккаунта (Instagram и Threads отдельно). Просто число вида 17841472854897166. Получается одним запросом к API, когда есть токен.
Всё. Без этих пяти вещей ни одна сторона API ничего постить не даст.
Instagram — 6 шагов
Шаг 1. На developers.facebook.com → My Apps → Create App → Business. Записываешь App ID и Secret.
Шаг 2. В настройках App добавляешь два продукта:
- Instagram Graph API (постить)
- Facebook Login for Business (получать токен)
Шаг 3. В Graph API Explorer выбираешь своё App, Generate Access Token, даёшь права: instagram_basic, instagram_content_publish, pages_read_engagement, pages_show_list, business_management.
Шаг 4. Меняешь короткий токен на long-lived одним запросом:
GET https://graph.facebook.com/v21.0/oauth/access_token
?grant_type=fb_exchange_token
&client_id=APP_ID
&client_secret=APP_SECRET
&fb_exchange_token=SHORT_TOKEN
На выходе — токен на 60 дней. Сохраняешь в .env.
Шаг 5. Узнаёшь свой Instagram User ID:
GET https://graph.facebook.com/v21.0/me/accounts
?access_token=LONG_TOKEN
Возвращает список твоих Facebook Pages, у каждой виден привязанный Instagram ID. Записываешь.
Шаг 6. Публикация в два шага. Вот важная штука, на которую люди часто натыкаются: нельзя просто запостить. API работает так:
- Создаёшь media container — говоришь «вот ссылка на видео, вот подпись»
- Ждёшь, пока контейнер обработается (10 секунд — 2 минуты, пуллинг статуса каждые 5–10 секунд)
- Отдаёшь команду «публикуй этот контейнер»
Ещё важный момент: Instagram API не принимает файлы напрямую в POST. Он принимает URL, по которому файл лежит в интернете. У меня файлы улетают на catbox.moe (бесплатный анонимный файлохостинг), возвращается прямая ссылка, её уже скармливаю API. У всех интеграций так.
Поддерживаются: Reels (видео), Stories (видео или фото), обычный пост (фото / карусель до 10 фото).
Threads — те же шаги, отдельный API
Хорошая новость: у Threads отдельный API (graph.threads.net), но логика один-в-один. Если осилил инсту — тредсы лишний вечер.
Шаг 1. В том же самом Meta App добавляешь продукт Threads API.
Шаг 2. В Graph API Explorer генерируешь токен с правами: threads_basic, threads_content_publish, threads_manage_replies, threads_read_replies.
Шаг 3. Меняешь на long-lived через тот же fb_exchange_token.
Шаг 4. Узнаёшь свой Threads User ID:
GET https://graph.threads.net/v1.0/me
?fields=id,username
&access_token=THREADS_TOKEN
Шаг 5. Та же двухшаговая публикация: /threads → polling → /threads_publish. Поддерживается текст, картинка, видео, карусель.
Бонус: в Threads можно постить чистый текст без медиа. В инсте так нельзя.
Главный нюанс Threads
У Threads есть подлость, про которую мало где пишут: если в основном посте есть ссылка — охват режется раза в три. Не API, а алгоритм самой соцсети.
Решение, к которому я пришёл и которое работает:
- Публикуешь пост без ссылки
- Через 90 минут — автоматически отправляешь свой же reply под этим постом со ссылкой
Алгоритм уже раскрутил основной пост, ссылка в реплае охват не режет, клики работают. У меня под это отдельный скрипт + очередь отложенных реплаев в JSON, крутится раз в 30 минут через launchd.
Если будешь делать — сразу закладывай эту логику. Иначе через месяц увидишь просадку охвата и не поймёшь почему.
Грабли, на которые я наступил
Грабли 1. Токен. Meta обещает, что long-lived можно обновлять за неделю до истечения. По факту — лучше ротировать раз в 30 дней тихо скриптом. Пропустишь — проснёшься от того, что все посты за день ушли в 401. Неприятно.
Грабли 2. Медиа-файл должен быть в интернете. Не в памяти, не в base64 — URL с прямой ссылкой. У меня catbox.moe. Подойдёт любой хостинг с прямой отдачей.
Грабли 3. Polling контейнера. Не дождался FINISHED — пошёл публиковать — получил ошибку. Зациклился без таймаута — бот может умереть на битом видео. У меня 30 попыток по 10 секунд, потом «ну его» и лог в errors.
Грабли 4. Reels-требования. У инсты жёсткий формат видео: h264 / mp4, 1080×1920, до 30fps, до 90 секунд. Не попадёт — ERROR без внятного объяснения. Прогоняй через ffmpeg, приводи к стандарту.
Грабли 5. Политика Meta. Раз в 2–4 месяца что-то меняют: версию API, процесс ревью, объём прав. Подпишись на их Developer Newsletter, проверяй changelog раз в месяц.
Грабли 6. Rate limits. У инсты 50 постов в день на аккаунт. Огромный запас для человека, но если крутишь агрессивную автоматику — не вылезай.
Что это стоит
- Meta Developer App — бесплатно.
- Instagram/Threads Business-аккаунт — бесплатно.
- Хостинг файлов (catbox.moe) — бесплатно.
- Сервер под скрипт — у меня крутится на обычном Mac mini через LaunchAgent. Можно на Hetzner за 4 евро в месяц, если без Mac.
Итого: ноль рублей и 2–3 вечера на разбор (если первый раз).
Рабочий скрипт
Выложил на гист минимальный чистый пример — только Instagram и Threads, без моей домашней обвязки (у меня там ещё VK, Pinterest, Telegram). Файл ~280 строк, одна зависимость (requests).
📎 Скрипт: gist.github.com/magic-dev-kz/meta_publisher.py
Забирай, открывай у себя со своим Claude Code — и скажи «прочитай и адаптируй под мои задачи». Он разберётся, встроит в твой бот.
Итого
Подключение инсты и тредсов — это не магия. Это пять галочек в настройках, один обмен токена, две ночи внимательного чтения доков Meta, и один Python-файл.
Стоит это делать самому, если у тебя бот или пайплайн — что-то, что решает само, когда и что публиковать. Если ты хочешь просто удобнее планировать руками — бери SMMplanner, не мучайся.
Будущее не в том, чтобы постить руками красиво. Оно в том, чтобы твой бот делал это сам, пока ты занят другим.
Вопросы и показать свой первый рабочий пост — в личку @magic4e. Подписывайся на @mdkguru — там я показываю, как собираю команду AI-агентов и во что это превращается.