Cách gửi RSS đến webhook

Cập nhật 13 Tháng mười, 2026 Đọc trong 10 phút

Để gửi RSS đến webhook, bạn cần một công cụ kiểm tra nguồn tin theo lịch, phát hiện bài viết mới và gửi từng bài đến URL của bạn bằng HTTP POST. Quy tắc Gửi đến Webhook của Feeder thực hiện việc này cho nhiều nguồn tin, đồng thời hỗ trợ lọc từ khóa và tự động thử gửi lại. Bạn cũng có thể dùng các công cụ tự động hóa như Zapier, Make, IFTTT, n8n hoặc viết một đoạn script ngắn chạy trên máy chủ của mình.

Có những cách nào để gửi RSS đến webhook?

CáchPhù hợp khiLưu ý
Quy tắc Gửi đến Webhook của FeederCần xử lý nhiều nguồn tin, lọc theo từ khóa và dùng cùng một định dạng JSON cho mọi nguồnCó trong gói Feeder Professional. Xem thông tin chi tiết bên dưới.
Zapier, Make, IFTTT hoặc n8nMuốn chuyển tiếp từng bài viết sang ứng dụng khác mà không cần viết mãBạn cần tự ánh xạ các trường dữ liệu. Mỗi công cụ có các gói và giới hạn riêng.
ScriptLập trình viên muốn toàn quyền kiểm soátBạn phải tự lưu trữ, lên lịch chạy và theo dõi những nội dung đã gửi.

Quy tắc Gửi đến Webhook của Feeder hoạt động như thế nào?

Gửi đến Webhook là một trong các hành động trong mục Quy tắc của Feeder. Tạo quy tắc, chọn Gửi đến Webhook trong mục Hành động sẽ diễn ra là gì?, dán URL endpoint rồi chọn các nguồn tin, thư mục hoặc Tất cả nguồn tin cần theo dõi. Thêm từ khóa nếu bạn chỉ muốn nhận một số bài viết. Sau đó, Feeder sẽ gửi từng bài viết mới khớp điều kiện đến URL của bạn.

Tự xây dựng tích hợp bằng Webhook hướng dẫn đầy đủ từng bước kèm ảnh chụp màn hình, còn bài viết ra mắt minh họa cách hoạt động của quy tắc. Thông tin trên trang này dựa trên mã gửi webhook.

Feeder gửi gì đến webhook?

Feeder gửi một yêu cầu HTTP POST cho mỗi bài viết, kèm nội dung JSON và các header sau:

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>

Đây là nội dung mẫu cho một bài viết từ blog Feeder, trong đó trường content đã được rút gọn. Feeder gửi nội dung trên một dòng, ở đây nội dung được tách dòng cho dễ đọc.

{
  "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"
  }
}
TrườngNội dung
versionPhiên bản định dạng: 2023-06-26.
message_idID mới cho mỗi thông điệp. Nếu gửi lại cùng một thông điệp, ID vẫn giữ nguyên để bạn có thể bỏ qua nội dung trùng lặp.
post.idID của bài viết trong Feeder.
post.titleTiêu đề bài viết.
post.urlLiên kết đến bài viết trên trang web.
post.publishedThời điểm bài viết được đăng, ở định dạng dấu thời gian RFC 3339 hoặc null.
post.contentNội dung bài viết ở dạng HTML, theo dữ liệu nguồn tin cung cấp. Đây có thể là toàn bộ bài viết hoặc bản tóm tắt.
post.audio_urlĐường dẫn MP3 đính kèm bài viết, chẳng hạn tập podcast, hoặc null.
post.image_urlĐường dẫn đến hình ảnh đính kèm bài viết, hoặc hình ảnh đầu tiên trong nội dung, hoặc null.
feed.idID rút gọn của nguồn tin trong Feeder.
feed.source_urlĐịa chỉ nguồn tin.
feed.public_urlTrang web liên kết với nguồn tin.
feed.titleTiêu đề nguồn tin.
feed.faviconĐịa chỉ biểu tượng của trang web.

Trong content, các ký tự <, > và & được gửi dưới dạng \u003c, \u003e và \u0026. Đây là JSON hợp lệ, và mọi trình phân tích JSON đều chuyển chúng trở lại thành HTML.

Webhook được kích hoạt khi nào?

  • Chỉ với bài viết mới. Quy tắc áp dụng cho các bài viết Feeder tìm thấy sau khi bạn lưu quy tắc. Những bài viết đã có sẵn sẽ không được gửi.
  • Mỗi bài viết được gửi một lần. Mỗi bài viết khớp điều kiện tạo thành một yêu cầu riêng. Feeder không gộp nhiều bài viết vào cùng một yêu cầu. Nếu trang web chỉnh sửa bài viết sau đó và Feeder nhận ra thay đổi, phiên bản đã chỉnh sửa cũng sẽ được gửi.
  • Ngay sau lần kiểm tra nguồn tin tiếp theo. Với Professional, Feeder kiểm tra nguồn tin mặc định mỗi 10 phút. Bạn có thể đặt một nguồn tin cập nhật thường xuyên tối đa mỗi phút. Xem Feeder kiểm tra nguồn tin bao lâu một lần.
  • Chỉ gửi bài viết khớp điều kiện. Nếu có từ khóa, chỉ bài viết khớp từ khóa mới được gửi. Nếu không, mọi bài viết mới đều được gửi. Bài viết bị ẩn bởi quy tắc Lọc bài viết hoặc Bộ lọc trùng lặp sẽ không được gửi.

Nếu endpoint của tôi ngừng hoạt động thì sao?

Feeder chờ phản hồi tối đa 60 giây. Mã trạng thái 2xx được tính là gửi thành công. Nếu endpoint trả về lỗi, chẳng hạn 404 hoặc 500, hoặc không phản hồi, Feeder sẽ thử gửi lại, tối đa thêm 8 lần:

Lần thửThời gian chờ sau lần thử trước
25 giây
330 giây
41 phút
55 phút
610 phút
730 phút
830 phút
930 phút

Sau lần thử thứ chín, khoảng 1 giờ 47 phút tính từ lần đầu tiên, Feeder sẽ ngừng gửi bài viết đó. Mỗi lần gửi không thành công sẽ xuất hiện trong nhật ký lỗi của quy tắc. Mở quy tắc rồi chọn Mở nhật ký lỗi. Nếu bạn thay đổi URL của quy tắc trong khi đang chờ thử gửi lại, các lần thử tiếp theo sẽ gửi đến URL mới. Gửi tin nhắn thử chỉ gửi một lần và không thử lại.

Endpoint của tôi cần làm gì?

  • Phản hồi nhanh. Trả về mã trạng thái 2xx trước, sau đó mới xử lý các việc tốn thời gian để đảm bảo phản hồi trong vòng 60 giây.
  • Bỏ qua nội dung trùng lặp. Nếu máy chủ đã xử lý thông điệp nhưng phản hồi quá chậm, Feeder sẽ gửi lại. Hãy lưu các giá trị message_id hoặc post.id mà bạn đã nhận.
  • Dùng địa chỉ cuối cùng. URL cần có đường dẫn, chẳng hạn https://example.com/hooks/rss, và phải trỏ đến máy chủ trên internet công cộng. Feeder không gửi đến địa chỉ mạng cục bộ hoặc riêng tư. Đồng thời, tránh chuyển hướng: sau chuyển hướng 301, 302 hoặc 303, yêu cầu sẽ đến dưới dạng GET và không có nội dung JSON.
  • Kiểm tra chữ ký. Bất kỳ ai biết URL đều có thể gửi yêu cầu đến đó, vì vậy chỉ tin cậy các yêu cầu có X-Feeder-Signature hợp lệ. Phần tiếp theo hướng dẫn cách kiểm tra.

Làm sao kiểm tra yêu cầu có được gửi từ Feeder không?

Feeder ký mọi yêu cầu bằng webhook secret của quy tắc. Để tìm giá trị này, mở quy tắc, bật Nâng cao, sao chép Webhook Secret rồi lưu quy tắc. Header X-Feeder-Signature chứa sha256= theo sau là HMAC-SHA256 của nội dung yêu cầu, ở dạng hex và được tạo bằng secret đó.

Để kiểm tra, hãy tính HMAC tương tự trên nội dung thô trước khi phân tích JSON, sau đó so sánh hai giá trị theo cách có thời gian thực thi không phụ thuộc dữ liệu. Trong 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 "")

Ở đây, body là nội dung yêu cầu ở dạng byte. Từ chối yêu cầu nếu from_feeder trả về False. Các lần gửi lại được ký bằng secret hiện tại của quy tắc, vì vậy nếu bạn đổi secret thì giá trị mới cũng được dùng cho các lần gửi lại.

Feeder có thể gửi bản tổng hợp đến webhook không?

Không. Gửi đến Webhook gửi một yêu cầu cho mỗi bài viết ngay khi Feeder tìm thấy bài đó. Để tạo bản tổng hợp, bạn có ba cách:

  • Tự gom nhóm ở phía bạn. Lưu từng bài viết endpoint nhận được, rồi gửi bản tóm tắt theo lịch của bạn.
  • Dùng email tổng hợp. Với Plus và Professional, Feeder có thể gửi email tổng hợp hằng ngày, hằng tuần hoặc hằng tháng cho các nguồn tin bạn chọn. Xem Nhận thông báo khi có bài viết mới.
  • Xuất bản nguồn tin. Với Professional, xuất bản một thư mục hoặc bộ sưu tập thành nguồn tin RSS hoặc JSON, rồi để công cụ của bạn đọc theo lịch riêng. Xem Cách xuất bài viết dưới dạng nguồn tin RSS và JSON.

Cách gửi RSS đến webhook bằng Zapier, Make, IFTTT hoặc n8n

Mỗi công cụ kết hợp một bộ kích hoạt RSS với một hành động HTTP. Chúng tôi đã kiểm tra tên các mục này trên trang web của từng công cụ vào ngày 28 tháng 9 năm 2026:

Công cụBộ kích hoạtHành độngLưu ý
ZapierRSS by Zapier: Mục mới trong nguồn tin hoặc Các mục mới trong nhiều nguồn tinWebhooks by Zapier: POSTWebhooks by Zapier là ứng dụng cao cấp, chỉ có trong một số gói Zapier.
MakeRSS: Theo dõi các mục trong nguồn RSSHTTP: Gửi yêu cầuMô-đun RSS đọc được nguồn RSS và Atom.
IFTTTRSS Feed: Mục mới trong nguồn tinWebhooks: Gửi yêu cầu webIFTTT kiểm tra nguồn tin mỗi giờ ở gói miễn phí và mỗi 5 phút ở Pro và Pro+.
n8nNút Kích hoạt nguồn RSSNút Yêu cầu HTTP với phương thức POSTBạn chọn tần suất kiểm tra nguồn tin trong mục Thời gian thăm dò.

Đây là cách nhanh nhất nếu bạn đã dùng một trong các công cụ này. Bạn cũng có thể kết hợp chúng với Feeder: đặt quy tắc Gửi đến Webhook để gửi đến bộ kích hoạt Catch Hook của Zapier hoặc nút Webhook của n8n. Feeder sẽ theo dõi nguồn tin và lọc bài viết, sau đó quy trình tự động của bạn sẽ xử lý tiếp.

Cách gửi RSS đến webhook bằng script

Script Python này gửi từng mục mới trong một nguồn tin đến webhook. Script ghi nhớ các mục đã gửi trong seen.txt, vì vậy mỗi mục chỉ được gửi một lần. Lần chạy đầu tiên sẽ gửi tất cả mục đang có trong nguồn tin tại thời điểm đó.

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))

Script cần Python 3 và gói feedparser (pip install feedparser). Hãy lên lịch chạy, chẳng hạn mỗi 15 phút bằng cron: */15 * * * * cd /path/to/folder && python3 rss_to_webhook.py. Nếu endpoint trả về lỗi, script sẽ dừng và lần chạy tiếp theo sẽ thử gửi lại cùng mục đó.

Câu hỏi thường gặp

Tôi có thể dùng Gửi đến Webhook để gửi RSS đến webhook của Slack, Teams hoặc Discord không?

Không thể gửi trực tiếp. Feeder dùng định dạng JSON riêng, không phải định dạng thông điệp mà các ứng dụng đó yêu cầu. Thay vào đó, hãy dùng quy tắc Gửi đến Slack, Gửi đến Microsoft Teams hoặc Đăng lên Discord của Feeder, hoặc kết nối qua Zapier, Make hay n8n.

Gói Feeder nào có webhook?

Gửi đến Webhook có trong Professional. Các quy tắc lọc, đánh dấu sao hoặc thu thập bài viết cũng dùng được với Plus.

Webhook có bao gồm toàn bộ bài viết không?

Webhook bao gồm nội dung mà nguồn tin cung cấp. Trường content chứa toàn bộ bài viết nếu nguồn tin có cung cấp, hoặc bản tóm tắt nếu nguồn tin chỉ có phần tóm tắt.

Tôi có thể kiểm tra endpoint trước khi lưu quy tắc không?

Có. Gửi tin nhắn thử gửi một bài viết thật từ các nguồn tin của bạn đến URL đã nhập. Tài khoản của bạn cần có ít nhất một nguồn tin chứa bài viết.

Dùng thử Feeder

Feeder là trình đọc RSS trên web, iOS và Android, đồng thời có tiện ích mở rộng cho Chrome, Firefox và Edge. Gói miễn phí theo dõi tối đa 200 nguồn tin, không có quảng cáo và cập nhật nguồn tin thường xuyên tối đa mỗi 30 phút. Plus theo dõi 2.500 nguồn tin, cập nhật thường xuyên tối đa mỗi 5 phút và có thêm email tổng hợp.

Bắt đầu dùng Feeder miễn phí

Đọc tiếp

Bạn vẫn cần trợ giúp?

Đội ngũ hỗ trợ của chúng tôi đọc mọi tin nhắn. Hãy cho chúng tôi biết vấn đề bạn đang gặp phải và chúng tôi sẽ hỗ trợ.

Liên hệ hỗ trợ