RSS в webhook: как отправлять новые записи на URL

Обновлено 13 октября 2026 8 мин. чтения

Чтобы отправлять записи RSS в webhook, нужен инструмент, который проверяет ленту по расписанию, находит новые записи и отправляет каждую из них на ваш URL с помощью HTTP POST. Правило Feeder «Отправить на Webhook» делает это для любого количества лент, с фильтрами по ключевым словам и повторными попытками. То же можно настроить в инструментах автоматизации Zapier, Make, IFTTT и n8n или с помощью небольшого скрипта на собственном сервере.

Как отправлять RSS в webhook

СпособПодходит дляЧто нужно знать
Правило Feeder «Отправить на Webhook»Множества лент, фильтров по ключевым словам и единого формата JSON для всех лентВходит в Feeder Professional. Подробности ниже.
Zapier, Make, IFTTT или n8nПередачи каждой записи в другие приложения без написания кодаПоля нужно сопоставить самостоятельно. У каждого инструмента свои тарифы и ограничения.
СкриптРазработчиков, которым нужен полный контрольСкрипт нужно разместить на сервере, запускать по расписанию и отслеживать, что уже было отправлено.

Как работает правило Feeder «Отправить на Webhook»

«Отправить на Webhook» является одним из действий в правилах Feeder. Создайте правило, в разделе Что должно произойти? выберите Отправить на Webhook, вставьте URL конечной точки и укажите ленты, папки или Все ленты, за которыми нужно следить. Добавьте ключевые слова, если хотите отправлять только некоторые записи. После этого Feeder будет отправлять на указанный URL каждую новую запись, которая соответствует условиям.

В статье Создание собственных интеграций с помощью Webhook приведены все шаги и снимки экрана, а в анонсе запуска показано правило в действии. Сведения на этой странице взяты из кода, который отправляет webhook-запросы.

Что Feeder отправляет в webhook

Для каждой записи отправляется HTTP-запрос POST с телом JSON и следующими заголовками:

POST /hooks/rss HTTP/1.1
Content-Type: application/json
User-Agent: Feeder-Webhooks/1.0
X-Feeder-Signature: sha256=<HMAC-SHA256 of the body, in hex>

Ниже приведено тело запроса для записи из блога Feeder, поле content сокращено. Feeder отправляет его одной строкой, здесь оно разбито на несколько строк для удобства чтения.

{
  "version": "2023-06-26",
  "message_id": "3f1c9a52-7e4b-4d0a-9b6e-2c8d51f0a7e4",
  "post": {
    "id": "aff2424a-abc9-11f1-afb3-1a21cf3a468a",
    "title": "Feed your AI",
    "url": "https://feeder.co/blog/1208-feed-your-ai",
    "published": "2026-09-08T20:19:59Z",
    "content": "\u003cp\u003eWith Feeder's MCP server, you can connect Feeder to your AI client of choice.\u003c/p\u003e",
    "audio_url": null,
    "image_url": "https://uploads.feedercdn.com/8XSXZN92WHeb2d17f3440d-feedyourai-1024x538.png"
  },
  "feed": {
    "id": "21f058e947",
    "source_url": "https://feeder.co/blog.rss",
    "public_url": "https://feeder.co/blog",
    "title": "Feeder.co",
    "favicon": "https://icons.feedercdn.com/feeder.co"
  }
}
ПолеЧто содержит
versionВерсию формата: 2023-06-26.
message_idНовый идентификатор для каждого сообщения. При повторной отправке того же сообщения он не меняется, поэтому вы можете отсеивать дубликаты.
post.idИдентификатор записи в Feeder.
post.titleЗаголовок записи.
post.urlСсылка на запись на сайте.
post.publishedДата и время публикации в формате временной метки RFC 3339 либо null.
post.contentЗапись в формате HTML, полученном из ленты: полная статья или краткое содержание.
post.audio_urlСсылка на MP3-файл, прикреплённый к записи, например на выпуск подкаста, либо null.
post.image_urlСсылка на изображение, прикреплённое к записи, или на первое изображение в её содержимом, либо null.
feed.idКраткий идентификатор ленты в Feeder.
feed.source_urlАдрес ленты.
feed.public_urlАдрес сайта, которому принадлежит лента.
feed.titleНазвание ленты.
feed.faviconАдрес значка сайта.

В поле content символы <, > и & передаются как \u003c, \u003e и \u0026. Это допустимый формат JSON, любой JSON-парсер преобразует их обратно в HTML.

Когда срабатывает webhook

  • Только для новых записей. Правило обрабатывает записи, которые Feeder находит после его сохранения. Уже имеющиеся записи не отправляются.
  • Отдельно для каждой записи. Для каждой подходящей записи отправляется отдельный запрос. Feeder не объединяет записи. Если сайт позже изменит запись и Feeder обнаружит это изменение, обновлённая версия тоже будет отправлена.
  • Сразу после следующей проверки ленты. В Professional Feeder по умолчанию проверяет ленты каждые 10 минут, но для отдельной ленты можно настроить проверку раз в минуту. Подробнее: Как часто Feeder проверяет ленты.
  • Только для записей, соответствующих условиям. Если заданы ключевые слова, отправляются только подходящие записи. Если ключевых слов нет, отправляется каждая новая запись. Запись, скрытая правилом Фильтровать записи или Фильтровать дубликаты, не отправляется.

Что произойдёт, если конечная точка недоступна

Feeder ждёт ответа не более 60 секунд. Ответ со статусом 2xx считается успешной доставкой. Если конечная точка отвечает ошибкой, например 404 или 500, либо не отвечает вовсе, Feeder повторяет попытку до 8 раз:

ПопыткаЗадержка после предыдущей попытки
25 секунд
330 секунд
41 минута
55 минут
610 минут
730 минут
830 минут
930 минут

После девятой попытки, примерно через 1 час 47 минут после первой, Feeder прекращает попытки отправить эту запись. Каждая неудачная попытка отображается в журнале ошибок правила: откройте правило и выберите Открыть журнал ошибок. Если изменить URL правила, пока ожидаются повторные попытки, следующие запросы будут отправлены на новый URL. Кнопка Отправить тестовое сообщение отправляет один тестовый запрос без повторных попыток.

Что должна делать конечная точка

  • Быстро отвечать. Сначала верните статус 2xx, а медленную обработку выполните после этого, чтобы уложиться в лимит 60 секунд.
  • Отсеивать дубликаты. Если сервер обработал сообщение, но ответил слишком поздно, при повторной попытке оно будет отправлено ещё раз. Сохраняйте уже полученные значения message_id или post.id.
  • Использовать конечный адрес. URL должен включать путь, например https://example.com/hooks/rss, и вести на сервер в общедоступном интернете. Feeder не отправляет запросы на локальные адреса и адреса частных сетей. Также избегайте перенаправлений: после перенаправления 301, 302 или 303 запрос приходит как GET, без тела JSON.
  • Проверять подпись. Любой, кто знает URL, может отправить на него запрос, поэтому доверяйте только запросам с действительной подписью X-Feeder-Signature. О том, как её проверить, рассказано в следующем разделе.

Как проверить, что запрос пришёл от Feeder

Feeder подписывает каждый запрос секретным ключом webhook из правила. Чтобы найти его, откройте правило, включите Расширенный, скопируйте Секретный ключ Webhook и сохраните правило. Заголовок X-Feeder-Signature содержит sha256=, за которым следует HMAC-SHA256 тела запроса в шестнадцатеричном формате, вычисленный с помощью этого ключа.

Для проверки вычислите такой же HMAC для исходного тела запроса, до разбора JSON, и сравните значения за постоянное время. Пример на Python:

import hashlib, hmac

def from_feeder(body, header, secret):
    expected = "sha256=" + hmac.new(secret.encode(), body, hashlib.sha256).hexdigest()
    return hmac.compare_digest(expected, header or "")

Здесь body означает тело запроса в виде байтов. Отклоняйте запрос, если функция from_feeder возвращает False. Повторные запросы подписываются текущим секретным ключом правила, поэтому при его изменении новые попытки будут использовать уже новый ключ.

Может ли Feeder отправлять в webhook дайджест

Нет. Правило «Отправить на Webhook» отправляет отдельный запрос для каждой записи сразу после того, как Feeder её обнаружит. Чтобы получать дайджест, есть три варианта:

  • Обрабатывать пакет на своей стороне. Сохраняйте полученные конечной точкой записи и отправляйте собственную сводку по расписанию.
  • Использовать сводки по электронной почте. На тарифах Plus и Professional Feeder может отправлять ежедневную, еженедельную или ежемесячную сводку по выбранным лентам. Подробнее: Уведомления о новых записях.
  • Опубликовать ленту. На тарифе Professional опубликуйте папку или подборку как RSS- или JSON-ленту и настройте собственный инструмент на её чтение по расписанию. Подробнее: Как экспортировать записи в RSS- и JSON-ленты.

Как отправлять RSS в webhook с помощью Zapier, Make, IFTTT или n8n

В каждом из этих инструментов триггер RSS связывается с действием HTTP. Мы проверили названия на сайтах самих инструментов 28 сентября 2026 года:

ИнструментТриггерДействиеПолезно знать
ZapierRSS by Zapier: Новая запись в ленте или Новые записи в нескольких лентахWebhooks by Zapier: POST 
MakeRSS: Отслеживать записи RSS-лентыHTTP: Выполнить запросМодуль RSS читает RSS- и Atom-ленты.
IFTTTRSS Feed: Новая запись в лентеWebhooks: Выполнить веб-запросВ бесплатном плане IFTTT проверяет ленты раз в час, а в Pro и Pro+ каждые 5 минут.
n8nУзел Триггер RSS-лентыУзел HTTP Request с методом POSTЧастоту проверки ленты можно задать в разделе Интервалы опроса.

Эти инструменты станут самым быстрым решением, если вы уже ими пользуетесь. Их также можно сочетать с Feeder: укажите в правиле «Отправить на Webhook» триггер Перехватить Hook в Zapier или узел Webhook в n8n. Тогда Feeder будет следить за лентами и фильтровать записи, а дальнейшую обработку выполнит ваш сценарий.

Как отправлять RSS в webhook с помощью скрипта

Этот скрипт на Python отправляет каждую новую запись одной ленты в ваш webhook. Он сохраняет список уже отправленных записей в файле seen.txt, поэтому каждая запись отправляется один раз. При первом запуске отправляются все записи, которые на тот момент есть в ленте.

import json, pathlib, urllib.request
import feedparser  # pip install feedparser

FEED_URL = "https://example.com/feed.xml"
WEBHOOK_URL = "https://example.com/hooks/rss"
seen_file = pathlib.Path("seen.txt")
seen = set(seen_file.read_text().split()) if seen_file.exists() else set()

for entry in reversed(feedparser.parse(FEED_URL).entries):
    key = entry.get("id") or entry.get("link")
    if not key or key in seen:
        continue
    payload = {"title": entry.get("title"), "url": entry.get("link"), "published": entry.get("published")}
    request = urllib.request.Request(WEBHOOK_URL, data=json.dumps(payload).encode(),
                                     headers={"Content-Type": "application/json"})
    urllib.request.urlopen(request, timeout=30)
    seen.add(key)
    seen_file.write_text("\n".join(seen))

Для работы нужны Python 3 и пакет feedparser (pip install feedparser). Запускайте скрипт по расписанию, например каждые 15 минут через cron: */15 * * * * cd /path/to/folder && python3 rss_to_webhook.py. Если конечная точка ответит ошибкой, скрипт остановится, а при следующем запуске повторит отправку той же записи.

Частые вопросы

Можно ли с помощью правила «Отправить на Webhook» отправлять RSS в webhook Slack, Teams или Discord?

Напрямую нельзя. Feeder отправляет данные в собственном формате JSON, а не в формате сообщений, который ожидают эти приложения. Вместо этого используйте правила Feeder Отправить в Slack, Опубликовать в Microsoft Teams или Отправить в Discord либо добавьте между Feeder и приложением Zapier, Make или n8n.

В какой план Feeder входят webhook

Правило «Отправить на Webhook» входит в Professional. Правила для фильтрации записей, добавления отметок и сохранения записей доступны также в Plus.

Содержит ли webhook полный текст статьи

Он содержит данные, опубликованные в ленте. Поле content включает полный текст статьи, если лента его предоставляет, и краткое содержание, если в ленте есть только оно.

Можно ли проверить конечную точку до сохранения правила

Да. Кнопка Отправить тестовое сообщение отправляет на ваш URL одну настоящую запись из ваших лент. В аккаунте должна быть хотя бы одна лента с записями.

Попробуйте Feeder

Feeder, это RSS-ридер для веба, iOS и Android, с расширениями для Chrome, Firefox и Edge. Бесплатный план позволяет читать до 200 лент без рекламы, с обновлением не чаще чем раз в 30 минут. В Plus можно читать 2 500 лент, обновлять их каждые 5 минут и получать сводки по электронной почте.

Начните пользоваться Feeder бесплатно

Читайте также

Всё ещё нужна помощь?

Наша служба поддержки читает каждое сообщение. Расскажите, что случилось, и мы вам поможем.

Связаться со службой поддержки