Кросспостинг Instagram в Telegram через n8n: посты без ручной публикации ¶
Обновлено: 2026-05-30
Импортируйте 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-канал с журналом результата.
Проблема: почему ручной кросспостинг 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.
Критерии готовности ¶
- Один 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-ами и безопасным хранением токенов.
Настроить кросспостинг