---
title: "Кросспостинг Instagram в Telegram через n8n | Nodbot"
source_url: "https://nodbot.ru/workflows/instagram-telegram-crosspost/"
canonical_url: "https://nodbot.ru/workflows/instagram-telegram-crosspost/"
language: "ru"
content_type: "WorkflowTemplate"
section: "workflows"
generated_at: "2026-05-30"
word_count_source: 957
---

# Кросспостинг Instagram в Telegram через n8n: посты без ручной публикации

## AI summary

Workflow для контент-команды: получить публикацию Instagram через Graph API или входной webhook, очистить caption, проверить дедупликацию, подготовить Telegram-сообщение с media_url и отправить его в канал без повторов.

## Best used for

Полноценный Problem/Solution-мануал для внедрения в n8n: импортировать workflow JSON, настроить API, выполнить production-тесты и передать решение команде.

## Table of contents

- Проблема: почему ручной кросспостинг Instagram в Telegram ломает контент-план
- Архитектура workflow Instagram → n8n → Telegram
- Контракт входных данных публикации
- Code Node: очистка caption, hashtags и dedupe key
- Готовый workflow JSON
- Пошаговая настройка Instagram Graph API и Telegram канала
- Тесты перед production
- Production-риски кросспостинга
- Полезные ссылки и смежные workflow
- Критерии готовности

## Key topics

- Instagram Graph API
- Telegram Bot API
- crossposting
- dedupe
- content automation

## Source outline

Кросспостинг Instagram в Telegram через n8n: посты без ручной публикации ¶ Обновлено: 2026-05-30 AI summary: Workflow для контент-команды: получить публикацию Instagram через Graph API или входной webhook, очистить caption, проверить дедупликацию, подготовить Telegram-сообщение с media_url и отправить его в канал без повторов. Шаблон для внедрения Скачать workflow JSON Скачать test payload Скопировать curl Импортируйте workflow, замените credentials и прогоните тестовый payload до включения production. Содержание Проблема: почему ручной кросспостинг Instagram в Telegram ломает контент-план Архитектура workflow Instagram → n8n → Telegram Контракт входных данных публикации Code Node: очистка caption, hashtags и dedupe key Готовый workflow JSON Пошаговая настройка Instagram Graph API и Telegram канала Тесты перед production Production-риски кросспостинга Полезные ссылки и смежные workflow Критерии готовности Проблема: ручной перенос постов из Instagram в Telegram приводит к дублям, потерянным ссылкам, ошибкам форматирования и хаосу в контент-плане. Решение: n8n получает media object, очищает caption, проверяет dedupe key и публикует пост в Telegram-канал с журналом результата. Workflow переносит публикацию в Telegram только после нормализации и проверки на дубли. Проблема: почему ручной кросспостинг Instagram в Telegram ломает контент-план ¶ Контент-команда часто публикует пост в Instagram, затем вручную копирует текст, картинку и ссылку в Telegram. На малом объёме это терпимо, но при регулярных рубриках появляются ошибки: забыли ссылку, потеряли хэштеги, отправили два раза, перепутали канал или опубликовали черновой caption. Кросспостинг Instagram в Telegram через n8n решает эту боль: workflow получает media object, чистит caption, проверяет `media_id` на повтор, выбирает формат отправки и пишет результат в журнал. Это не “автопостинг ради автопостинга”, а контролируемая автоматизация контент-дистрибуции. Архитектура workflow Instagram → n8n → Telegram ¶ Нода Роль Что проверить Webhook or schedule input Получает публикацию Instagram Business/Creator account, права Graph API Normalize caption Очищает текст и хэштеги длина Telegram caption, переносы, HTML Check dedupe Ищет media_id в журнале unique key по Instagram media id Send Telegram post Публикует фото/текст chat_id, права бота, формат media Audit result Сохраняет message_id можно найти, что и когда ушло Контракт входных данных публикации ¶ { "instagram_business_account_id": "17841400000000000", "media": { "id": "17900112233445566", "media_type": "IMAGE", "media_url": "https://cdn.example.com/post.jpg", "permalink": "https://www.instagram.com/p/POSTCODE/", "caption": "Новый кейс автоматизации продаж 🚀\n\n#n8n #crm #automation", "timestamp": "2026-05-30T10:00:00+0000" }, "telegram": { "chat_id": "@nodbot_channel", "parse_mode": "HTML" } } Не храните access token в payload или тексте workflow. Для Instagram Graph API используйте credentials или ENV, а в event передавайте только идентификаторы, media_url, caption и permalink. Code Node: очистка caption, hashtags и dedupe key ¶ const input = $json.body ?? $json; const media = input.media ?? input; const captionRaw = String(media.caption ?? '').trim(); const safeCaption = captionRaw .replace(/<[^>]*>/g, '') .replace(/ {3,}/g, ' ') .slice(0, 900); const hashtags = [...captionRaw.matchAll(/#[\p{L}\p{N}_]+/gu)].map(m => m[0].toLowerCase()); const permalink = String(media.permalink ?? '').trim(); const mediaUrl = String(media.media_url ?? '').trim(); const mediaType = String(media.media_type ?? 'IMAGE').toUpperCase(); if (!media.id || !permalink) { throw new Error('Instagram media id and permalink are required'); } const telegramText = `${safeCaption} Источник: ${permalink}`.trim(); return [{ json: { dedupe_key: `instagram:${media.id}`, media_id: media.id, media_type: mediaType, media_url: mediaUrl, permalink, hashtags, telegram: { chat_id: input.telegram?.chat_id, text: telegramText, send_as_photo: mediaType === 'IMAGE' && Boolean(mediaUrl), parse_mode: 'HTML' } } }]; Почему нужен журнал публикаций Schedule workflow может повторно увидеть тот же media object, а ручной повтор webhook может случиться при тестах. Unique key по `instagram:media_id` защищает Telegram-канал от дублей. Готовый workflow JSON ¶ Скачать готовый workflow JSON Скачать тестовый payload { "name": "Nodbot - Instagram to Telegram crosspost with dedupe", "nodes": [ { "name": "Webhook or schedule input", "type": "n8n-nodes-base.webhook", "purpose": "Получить media object из Instagram Graph API или расписания" }, { "name": "Normalize caption and media", "type": "n8n-nodes-base.code", "purpose": "Очистить caption, собрать hashtags и dedupe_key" }, { "name": "Check dedupe", "type": "n8n-nodes-base.postgres", "purpose": "Не публиковать один media_id дважды" }, { "name": "Send Telegram post", "type": "n8n-nodes-base.telegram", "purpose": "Опубликовать фото/текст в канал" }, { "name": "Audit result", "type": "n8n-nodes-base.postgres", "purpose": "Записать media_id, chat_id и message_id" } ], "connections": "Input → Normalize → Dedupe → Telegram → Audit" } Пошаговая настройка Instagram Graph API и Telegram канала ¶ Проверьте, что аккаунт Instagram является Business или Creator и подключен к Meta app. Настройте источник media: polling по расписанию через Graph API или внутренний webhook из вашей контент-системы. Создайте Telegram bot, добавьте его администратором канала и проверьте `chat_id`. Добавьте таблицу дедупликации: `dedupe_key`, `media_id`, `telegram_message_id`, `sent_at`. Прогоните тестовый payload и убедитесь, что повтор не публикуется второй раз. Тесты перед production ¶ curl -X POST "https://YOUR-N8N-DOMAIN/webhook/instagram-telegram-crosspost" \ -H "Content-Type: application/json" \ --data @instagram-telegram-crosspost-payload.json Проверьте пост с фото, длинным caption, несколькими переносами, кириллическими хэштегами, отсутствующим media_url и повторным media_id. Для каждого сценария должен быть понятный результат: публикация, пропуск или alert. Production-риски кросспостинга ¶ Лимиты и права Instagram Graph API. Если token истек или app потерял разрешения, workflow должен отправить alert. Дубли в Telegram. Без durable dedupe один пост может выйти дважды. Сломанный HTML/Markdown. Caption нужно экранировать под выбранный parse mode. Разный смысл аудиторий. Иногда Telegram требует другой CTA, поэтому добавьте ручной override для важных постов. Нет аудита. Без message_id сложно удалить или исправить опубликованный пост. Полезные ссылки и смежные workflow ¶ См. также RSS → Telegram digest , content factory SEO briefs и Telegram alert для ошибок . Официальные документы: Instagram content publishing , Instagram APIs и Telegram Bot API . Журнал публикации показывает media_id, канал, dedupe key и message_id. Критерии готовности ¶ Один Instagram media_id публикуется в Telegram только один раз. Caption очищается и не ломает Telegram parse mode. Token и chat_id не лежат в открытом payload. Ошибки Graph API и Telegram Bot API уходят в alert. Есть журнал публикаций с message_id и permalink. Хотите автоматизировать контент-дистрибуцию? Nodbot настроит Instagram → Telegram workflow с Graph API, дедупликацией, журналом публикаций, alert-ами и безопасным хранением токенов. Настроить кросспостинг

## Test payload

```json
{
  "instagram_business_account_id": "17841400000000000",
  "media": {
    "id": "17900112233445566",
    "media_type": "IMAGE",
    "media_url": "https://cdn.example.com/post.jpg",
    "permalink": "https://www.instagram.com/p/POSTCODE/",
    "caption": "Новый кейс автоматизации продаж 🚀\n\n#n8n #crm #automation",
    "timestamp": "2026-05-30T10:00:00+0000"
  },
  "telegram": {
    "chat_id": "@nodbot_channel",
    "parse_mode": "HTML"
  }
}
```

## Key implementation snippet

```javascript
const input = $json.body ?? $json;
const media = input.media ?? input;
const captionRaw = String(media.caption ?? '').trim();
const safeCaption = captionRaw
  .replace(/<[^>]*>/g, '')
  .replace(/
{3,}/g, '

')
  .slice(0, 900);

const hashtags = [...captionRaw.matchAll(/#[\p{L}\p{N}_]+/gu)].map(m => m[0].toLowerCase());
const permalink = String(media.permalink ?? '').trim();
const mediaUrl = String(media.media_url ?? '').trim();
const mediaType = String(media.media_type ?? 'IMAGE').toUpperCase();

if (!media.id || !permalink) {
  throw new Error('Instagram media id and permalink are required');
}

const telegramText = `${safeCaption}

Источник: ${permalink}`.trim();

return [{
  json: {
    dedupe_key: `instagram:${media.id}`,
    media_id: media.id,
    media_type: mediaType,
    media_url: mediaUrl,
    permalink,
    hashtags,
    telegram: {
      chat_id: input.telegram?.chat_id,
      text: telegramText,
      send_as_photo: mediaType === 'IMAGE' && Boolean(mediaUrl),
      parse_mode: 'HTML'
    }
  }
}];
```

## Importable workflow structure

```json
{
  "name": "Nodbot - Instagram to Telegram crosspost with dedupe",
  "nodes": [
    {
      "name": "Webhook or schedule input",
      "type": "n8n-nodes-base.webhook",
      "purpose": "Получить media object из Instagram Graph API или расписания"
    },
    {
      "name": "Normalize caption and media",
      "type": "n8n-nodes-base.code",
      "purpose": "Очистить caption, собрать hashtags и dedupe_key"
    },
    {
      "name": "Check dedupe",
      "type": "n8n-nodes-base.postgres",
      "purpose": "Не публиковать один media_id дважды"
    },
    {
      "name": "Send Telegram post",
      "type": "n8n-nodes-base.telegram",
      "purpose": "Опубликовать фото/текст в канал"
    },
    {
      "name": "Audit result",
      "type": "n8n-nodes-base.postgres",
      "purpose": "Записать media_id, chat_id и message_id"
    }
  ],
  "connections": "Input → Normalize → Dedupe → Telegram → Audit"
}
```

## Retrieval hints

- Использовать HTML как canonical source.
- Markdown удобен для LLM-ответов, извлечения workflow-контракта, кода и чеклистов.
- Для ссылок пользователю отдавать canonical URL.
