Автопостинг RSS в Telegram: пошаговая настройка 2026

Автопостинг RSS в Telegram: пошаговая настройка 2026
Коротко. Настройка автопостинга RSS в Telegram-канал — это пять конкретных шагов: провести аудит фида, выбрать стек (свой бот, IFTTT/Zapier/Make или управляемый инструмент типа Autogram), подобрать частоту опроса под реальный ритм публикаций, дедуплицировать по GUID до того, как Bot API вообще увидит payload, и оформить каждый айтем в MarkdownV2 с аккуратным превью ссылки. Слой AI-переписи сверху превращает поток в читабельный дайджест.
Хотите запустить RSS в Telegram за пять минут без своего воркера? Попробуйте Autogram бесплатно.
Предварительные требования
Photo by Michael Dupuis on Pexels
Прежде чем подключать фид к каналу, проверьте, что готово:
- Рабочий URL RSS- или Atom-фида. Вы либо владелец источника (блог, подкаст, внутренний статус-фид), либо имеете явное разрешение на синдикацию. Хот-линковка чужого фида без разрешения — сначала копирайт, потом SEO: пара «канал ↔ домен» в графах синдикации бьёт по обеим сторонам.
- Telegram-канал и бот, который в нём админ. Создайте бота через @BotFather, добавьте в канал, выдайте права админа с разрешением Postiti (Posting messages). Без админа каждое отправление возвращает
Bad Request: chat not foundилиForbidden. - Постоянное хранилище для «последний увиденный айтем». Достаточно плоского файла или ключа в Redis — нужно где-то помнить, какие GUID уже отправлены, иначе повторное чтение фида зальёт канал последними 20 айтемами.
- Bot API токен вне git. Держите в env-переменной, секрет-сторе или в
.env, который не коммитится. Утечки токенов в коммитах вычитываются скрейперами за часы.
Если есть сомнения, валидный ли фид — прогоните URL через W3C Feed Validation Service. Невалидный фид ломает парсеры так, что это похоже на сетевую ошибку, и съедает по часу на отладку каждый раз.
Шаг 1 — Сделайте аудит фида до того, как ему доверять
Самый быстрый способ запустить сломанный RSS-в-Telegram — пропустить аудит. Половина продакшен-инцидентов, которые я отлаживал в этой интеграции, оказывались квирками источника, а не багами Telegram.
- Вытяните фид руками:
curl -sS <feed-url> | xmllint --format -и перечитайте. Убедитесь, что в каждом айтеме есть<guid>(или<id>для Atom) — без стабильного GUID на айтем нечем дедуплицировать, и вы будете дублить. - Зафиксируйте типичную частоту выхода айтемов. Блог, который публикует дважды в неделю, требует опроса раз в 6–12 часов; новостная лента с 200 айтемами в день — раз в 2–5 минут. Чаще — жжёт квоту впустую; реже — теряет айтемы, потому что фид обрезается до последних N.
- Проверьте формат
<pubDate>. RFC 822 (RSS) и RFC 3339 (Atom) оба валидны; некоторые фиды шлют «творческие» даты вроде «Fri, 22 Apr 2026 14:00 GMT+0:00», которые строгие парсеры отвергают. Берите толерантный парсер или нормализуйте при чтении. - Посмотрите, какой HTML лежит в теле айтема. Telegram принимает узкое подмножество MarkdownV2 / HTML —
<table>,<iframe>, инлайн-скрипты, большинство тегов с атрибутами надо выкидывать. Место, где это нужно найти — аудит, а не первый продакшен-сенд в три ночи. - Проверьте
<enclosure>/media:contentна наличие изображений. Если фид тащит изображения, лучше использоватьsendPhotoвместоsendMessageдля богатого превью. Если нет —sendMessageсdisable_web_page_preview: falseсамый дешёвый путь, потому что Telegram сам заберёт Open Graph картинку с URL статьи.
Честный десятиминутный аудит экономит неделю тикетов «почему бот трижды запостил один и тот же айтем».
Шаг 2 — Выберите правильный стек: нативно vs third-party vs управляемый
Конфигураций RSS-в-Telegram три. Выбирайте по команде, а не по хайпу:
| Стек | Время настройки | Стоимость на айтем | Кастомизация | Кому подходит |
|---|---|---|---|---|
Свой бот-воркер (Python feedparser + python-telegram-bot, на VPS / cron) | 2–6 часов | Бесплатно (ваш хостинг) | Полная | Инженерным командам, которые уже держат воркеры; единичным внутренним фидам |
| IFTTT / Zapier / Make / n8n | 15–30 мин на фид | $5–$50/мес на ~1k айтемов | Низкая–средняя (шаблонная) | Маркетинг-командам без разработчиков; малому количеству фидов |
| Управляемый Telegram-инструмент (Autogram, ManyBot, Posterly) | 5–10 мин | Включено в плоский тариф | Средняя–высокая, зависит от тула | Мультиканальным паблишерам, AI-rewrite кейсам, тем кто не хочет нянчиться с воркерами |
Несколько острых углов:
- RSS-триггер IFTTT опрашивает раз в ~15 минут минимум и тихо теряет айтемы, если источник пишет чаще. Для активных новостных лент IFTTT теряет материал.
- Zapier и Make тарифицируют по таскам. Фид на 50 айтемов в день — это 1500 тасков в месяц на одну мовы. Тариф Zapier Starter это съедает за один фид.
- n8n — лучший self-hosted вариант, если у вас уже есть Docker; цепочка «RSS Read → Telegram → Set (для дедупликации)» укладывается в 4 ноды.
- Свой воркер самый дешёвый на масштабе, но вы владеете всем: фейловер, рестарт после креша, MarkdownV2 escape, фолбек изображений — всё. Что значит «владеть всем», расписано в гайде по массовой рассылке в Telegram.
- Управляемые тулы меняют стоимость на айтем на ноль ops и время настройки. Правильный ответ, если вы предпочитаете заниматься контентом, а не
systemd-юнитами.
Сайд-бай-сайд no-code вариантов — в сравнении no-code автоматизации Telegram.
Шаг 3 — Настройте частоту опроса и дедуплицируйте без жалости
Photo by Christina Morillo on Pexels
Опрос и дедупликация — два рычага, которые отличают рабочий пайплайн от шумного. Налажаете — либо шлёте дубли, либо теряете новости.
- Интервал опроса — половина медианного интервала между публикациями фида. Если фид выходит в среднем раз в 20 минут — опрашивайте раз в 10. Даёт запас без жжения квоты. Никогда не опрашивайте чаще раза в 60 секунд для одного фида — источник расценит это как злоупотребление и заблочит.
- Всегда шлите условный GET. Заголовки
If-Modified-SinceиIf-None-Matchна каждом опросе; ответ 304 — бесплатный и в большинстве источников не засчитывается в квоту. Хосты фидов, чувствительные к трафику, тихо троттлят, если вы этого не делаете. - Дедуплицируйте по GUID, не по URL и не по заголовку. Некоторые фиды ротируют URL (трекерские параметры меняются ежедневно), другие переиспользуют заголовки (еженедельные рекапы). Элемент
<guid>— единственное, что спецификация гарантирует стабильным. - Сохраняйте GUID между рестартами. Бот, который перезапустился и забыл, что уже отправил, перепостит всё текущее окно фида — обычно последние 20–50 айтемов. Подписники видят это как спам и отписываются пачками. Достаточно одной строки SQLite-таблицы.
- Добавьте защиту «максимальный возраст». На первом запуске постите только айтемы моложе, скажем, 24 часов. Иначе в первый день канал зальёт историческим окном и алгоритм научится подавлять ваши сообщения.
- Ограничьте количество айтемов на цикл. Если фид стрельнул (новостной источник после события), 200 сообщений за 30 секунд триггернут телеграмный лимит 1 сообщение/сек на канал и глобальный 30 сообщений/сек. Кэп — 5 сообщений на цикл, остальное дождётся следующего цикла.
Псевдокод цикла:
seen = load_seen_guids() # set[str], персистентный на диск
feed = feedparser.parse(URL, modified=last_modified, etag=last_etag)
if feed.status == 304:
return
new_items = [e for e in feed.entries if e.id not in seen and is_recent(e, hours=24)]
for item in new_items[:5]: # запас на rate limit
send_to_telegram(item)
seen.add(item.id)
save_seen_guids(seen)
save_etag(feed.etag, feed.modified)
Это и весь цикл. Всё остальное — ретраи, экспоненциальный бэкофф, dead-letter — добавляется сверху.
Шаг 4 — Форматирование: энтити, превью и работа с изображениями
Дефолтный форматер RSS-в-Telegram вставляет заголовок и ссылку. Подписники такое игнорируют. Формат, который реально кликают — это заголовок + 1–3 предложения тела + превью ссылки + (где уместно) изображение.
- Чистите HTML из
<description>/<content:encoded>перед отправкой. Берите парсер вродеbleachилиhtml2text; никогда не парсите HTML регулярками — рано или поздно вы заэкранируете энтити не так и отправите наполовину сломанный<a>-тег в канал. - Обрезайте тело до ~280 символов и добавляйте
…. Длинные сообщения Telegram сворачивают превью ссылки, а именно оно обычно и цепляет глаз. - Экранируйте спецсимволы MarkdownV2. Список:
_*[]()~`>#+-=|{}.!. Пропустите один —sendMessageотдастBad Request: can't parse entities. Полный дебаг-гайд по этому фейлу — в спецификации MarkdownV2 от Telegram. - Выберите правильный метод отправки:
- Изображения нет, тело короткое →
sendMessageсdisable_web_page_preview: false. Telegram сам заберёт Open Graph и покажет карточку. - Тело длинное, есть изображение →
sendPhotoсcaption(лимит 1024 символа). Превью ссылки обрезается, зато изображение инлайн. - Несколько изображений на айтем →
sendMediaGroup(макс. 10). Подпись крепится только к первому айтему в группе.
- Изображения нет, тело короткое →
- Добавляйте маленький футер атрибуции. Что-то вроде
via [Название источника](https://source.example.com)— это честно и не позволяет читателю воспринять контент как «оригинальный», что часто ведёт к жалобам. Бонус: посты перестают иметь вид метки «Переслано», которая душит охват.
Образец MarkdownV2-payload:
*Новый релиз — Postgres 18\\.0*
Postgres 18 выходит со skip\\-scan индексами и новым протоколом фейловера логической репликации\\. Wire\\-протокол совместим с libpq 17\\.
[Прочитать полный анонс](https://www.postgresql.org/docs/release/18.0/) · via [Postgres News](https://www.postgresql.org/about/newsarchive/)
Обратите внимание: каждая . , ( ) - экранирована — да, даже внутри скобок URL.
Шаг 5 — Расписание, маршрутизация и AI-дайджест
Photo by Brett Jordan on Pexels
Когда базовый пайплайн поехал, три апгрейда быстро себя окупают:
- Тихие часы на канал. B2B-аудитория читает Telegram в 09:00–22:00 по локальному времени. Посты в 04:00 учат подписников мутить канал. Айтемы, пришедшие ночью, надо буферить в утренний бурст в 09:00 (с кэпом на 5 — см. Шаг 3).
- Роутинг по каналам по тематике. Если синдицируете один фид в несколько ниш, маршрутизируйте по тегу категории — никогда не лейте одинаковые айтемы везде. Audience-overlap аудит важнее количества айтемов.
- AI-перепись. Прогоняйте каждый айтем через модель с компактным промптом — «Подытожь в 2 предложениях, начни с конкретного факта, не с рамки». Выход короче, читабельнее и не несёт характерного «синдицированного» духа. Держите отдельный счёт расходов на перепись, чтобы знать реальную экономику на айтем.
Autogram закрывает шаги 1–5 нативно без воркера. Вы вставляете URL фида, выбираете канал (или несколько), переключаете режим bare forward ↔ AI rewrite, задаёте окна публикаций — а платформа уже сама опрашивает, дедуплицирует, экранирует MarkdownV2, делает фолбеки на изображения и шлёт с учётом rate-limit. Та же примитива планирования, что тащит ручной контент, прогоняет RSS-айтемы через ту же очередь публикаций — нет двух cadence-движков, которые надо держать в голове. Внутренний пайплайн опрашивает каждый фид и дедуплицирует по GUID, так что всплеск никогда не задвоит посты, и доставляет не более одного нового айтема за запланированный запуск на канал, чтобы оставаться внутри per-chat envelope Telegram.
Если вы хотите держать воркер сами — псевдокод из Шага 3 плюс правила Шага 4 дают паритет за выходные. Смысл гайда — чтобы вы знали, какой именно обмен делаете.
Частые ошибки
- Без дедупликации по GUID. Перепостит всё окно фида после каждого рестарта. Лекарство: персистентный сет увиденных GUID.
- Опрос раз в минуту для фида «раз в день». Жжёт 1400 бесполезных опросов в день — самый быстрый способ получить IP-бан от источника. Лекарство: cadence — половина медианного интервала публикаций.
- Пропуск экранирования MarkdownV2.
sendMessageмолча возвращает 400 в скриптах, которые не проверяют ответ, так что канал просто стихнет. Лекарство: экранировать всегда и ассертитьok: true. - Постинг изображений по URL без проверки размера. Telegram кэпит
sendPhotoна 5 MB по URL (лимит 10 MB действует только при загрузке через multipart). Больше —Bad Request: file is too big. Лекарство: HEAD-запрос, фолбек наsendMessageс превью ссылки, если сверх лимита. - Забыть per-channel rate limit на бурстовых фидах. Фид, который скинул 50 айтемов за минуту (новостной источник после события), на 31-м триггернёт 429
RetryAfterи тихо потеряет остальное. Лекарство: cap-per-cycle + очередь + ретрай поRetryAfter.
Связанное чтение
- Массовая рассылка в Telegram: гайд для опытных — операционный плейбук для любого пайплайна, который шлёт больше нескольких сотен айтемов в день, с паттернами очереди, ретрая и DLQ.
- No-code автоматизация Telegram: Zapier vs Make vs ManyBot vs Autogram — матрица no-code стеков из Шага 2 с реальной экономикой на айтем.
- Автопостинг в Telegram без метки «Переслано» — почему RSS-репосты с видом форварда душат охват и какие именно фиксы форматирования это лечат.
- Лимиты Telegram Bot API на масштабе — конкретные числа за правилом «cap items per cycle» из Шага 3, с примерами
RetryAfter-логов.
FAQ
Какой интервал опроса правильный для Telegram RSS-бота?
Половина медианного интервала публикаций фида, с полом в 60 секунд и потолком в 24 часа. Блог, который пишет дважды в неделю — раз в 6–12 часов; новостная лента с 200 айтемами в день — раз в 2–5 минут. Всегда парьте с условным GET (If-Modified-Since / If-None-Match), чтобы неизменные опросы возвращались 304 и не съедали квоту.
Можно ли слать RSS-айтемы как фото в Telegram?
Да — используйте sendPhoto, когда у айтема есть пригодное изображение (до 5 MB по URL — или до 10 MB при multipart-загрузке, JPEG или PNG, ландшафтная ориентация читается лучше всего). Для нескольких изображений — sendMediaGroup шлёт до 10 в одном пакете. Если изображения нет или оно большое, фолбек на sendMessage с disable_web_page_preview: false — и пусть Open Graph фетчер Telegram рисует превью.
Как дедуплицировать RSS-айтемы, чтобы не постить одну и ту же статью дважды?
Сохраняйте сет увиденных <guid> (или Atom <id>) на диск или в key-value store и проверяйте belonging перед каждой отправкой. Не дедуплицируйте по URL или заголовку — фиды ротируют трекерские параметры и переиспользуют заголовки в еженедельных рекапах. На каждом рестарте перезагружайте сет; без персистентности вы снова отправите всё окно фида в следующий раз, когда воркер перезапустится.
Можно ли добавить AI-суммаризацию к Telegram RSS-боту?
Да, и для высокообъёмных фидов это обычно окупается. Прогоняйте тело каждого айтема через модель с узким промптом «Два предложения. Начни с конкретного факта, не с рамки» и шлите перепись вместо сырого описания. Следите за стоимостью на айтем — на 100 айтемах в день дешёвая модель — это несколько долларов в месяц; дорогая — несколько сотен.
Почему мой Telegram RSS-бот после рестарта снова шлёт дубли?
Потому что сет увиденных GUID живёт в памяти и чистится при рестарте. Перенесите его на диск (SQLite, плоский JSON, Redis — что-нибудь персистентное) и загружайте при старте. Заодно сохраните ETag и Last-Modified с последнего успешного опроса — чтобы трюк с условным GET тоже пережил рестарты.
Мне нужен сервер под воркер для RSS-в-Telegram, или есть no-code вариант?
Работают оба пути. No-code (IFTTT, Zapier, Make, n8n или управляемый инструмент типа Autogram) выводит в прод за 5–30 минут без сервера; нативный бот-воркер — больше времени на настройку, зато полный контроль и ниже стоимость на айтем на масштабе. Решение в основном зависит от количества фидов и того, насколько кастомное форматирование нужно — см. таблицу в Шаге 2.
Итог
Автопостинг RSS в Telegram — это пять конкретных шагов, не магия: аудит фида, выбор стека, правильный cadence, дедупликация по GUID и нормальное форматирование в MarkdownV2 с адекватным фолбеком на изображения. Первая версия займёт выходные, если писать воркер самому, или минут десять — если отдать управляемому инструменту. Autogram делает опрос, дедупликацию, форматирование, rate-limit и AI-перепись в одном месте — вставили URL фида, выбрали канал, готово.
Image credits
- Hero: Photo by Michael Dupuis on Pexels.
- Inline #1: Photo by Christina Morillo on Pexels.
- Inline #2: Photo by Brett Jordan on Pexels.
Похожие посты

Как добавить Telegram Mini App в канал: монетизация без кода в 2026
Пошаговое руководство: как подключить Telegram Mini App к каналу и принимать Stars-оплату от подписчиков — без единой строки кода.

TON в фиат для владельцев каналов: вывод через Fragment
Пошаговое руководство по выводу дохода Telegram-канала — TON с рекламы и звёзд — через Fragment, конвертации на бирже и зачислению на банковский счёт.

Возврат Telegram Stars: как на самом деле работает refundStarPayment
Когда возвращать Telegram Stars, как вызывать refundStarPayment, почему нет частичных возвратов, обработка /paysupport и чистая сверка в учёте.
Подпишитесь на рассылку
Получайте последние советы по росту Telegram, стратегии автоматизации и обновления платформы прямо на почту.
Или подпишитесь на наш Telegram-канал