Чтобы отправлять записи 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 раз:
| Попытка | Задержка после предыдущей попытки |
|---|---|
| 2 | 5 секунд |
| 3 | 30 секунд |
| 4 | 1 минута |
| 5 | 5 минут |
| 6 | 10 минут |
| 7 | 30 минут |
| 8 | 30 минут |
| 9 | 30 минут |
После девятой попытки, примерно через 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 года:
| Инструмент | Триггер | Действие | Полезно знать |
|---|---|---|---|
| Zapier | RSS by Zapier: Новая запись в ленте или Новые записи в нескольких лентах | Webhooks by Zapier: POST | |
| Make | RSS: Отслеживать записи RSS-ленты | HTTP: Выполнить запрос | Модуль RSS читает RSS- и Atom-ленты. |
| IFTTT | RSS 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 бесплатно