Перейти к содержанию

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

Обновлено: 2026-05-30

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

Импортируйте workflow, замените credentials и прогоните тестовый payload до включения production.

Проблема: ручной перенос постов из Instagram в Telegram приводит к дублям, потерянным ссылкам, ошибкам форматирования и хаосу в контент-плане.

Решение: n8n получает media object, очищает caption, проверяет dedupe key и публикует пост в Telegram-канал с журналом результата.

Схема кросспостинга Instagram в Telegram через n8n
Workflow переносит публикацию в Telegram только после нормализации и проверки на дубли.

Проблема: почему ручной кросспостинг Instagram в Telegram ломает контент-план

Контент-команда часто публикует пост в Instagram, затем вручную копирует текст, картинку и ссылку в Telegram. На малом объёме это терпимо, но при регулярных рубриках появляются ошибки: забыли ссылку, потеряли хэштеги, отправили два раза, перепутали канал или опубликовали черновой caption.

Кросспостинг Instagram в Telegram через n8n решает эту боль: workflow получает media object, чистит caption, проверяет `media_id` на повтор, выбирает формат отправки и пишет результат в журнал. Это не “автопостинг ради автопостинга”, а контролируемая автоматизация контент-дистрибуции.

Архитектура workflow Instagram → n8n → Telegram

НодаРольЧто проверить
Webhook or schedule inputПолучает публикацию InstagramBusiness/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 канала

  1. Проверьте, что аккаунт Instagram является Business или Creator и подключен к Meta app.
  2. Настройте источник media: polling по расписанию через Graph API или внутренний webhook из вашей контент-системы.
  3. Создайте Telegram bot, добавьте его администратором канала и проверьте `chat_id`.
  4. Добавьте таблицу дедупликации: `dedupe_key`, `media_id`, `telegram_message_id`, `sent_at`.
  5. Прогоните тестовый 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 сложно удалить или исправить опубликованный пост.

См. также RSS → Telegram digest, content factory SEO briefs и Telegram alert для ошибок. Официальные документы: Instagram content publishing, Instagram APIs и Telegram Bot API.

Результат кросспостинга Instagram в Telegram через n8n
Журнал публикации показывает media_id, канал, dedupe key и message_id.

Критерии готовности

  1. Один Instagram media_id публикуется в Telegram только один раз.
  2. Caption очищается и не ломает Telegram parse mode.
  3. Token и chat_id не лежат в открытом payload.
  4. Ошибки Graph API и Telegram Bot API уходят в alert.
  5. Есть журнал публикаций с message_id и permalink.
Хотите автоматизировать контент-дистрибуцию?

Nodbot настроит Instagram → Telegram workflow с Graph API, дедупликацией, журналом публикаций, alert-ами и безопасным хранением токенов.

Настроить кросспостинг