GODRICH

Marketing Automation Basics: 9 Workflow RSS

n8n là công cụ tự động hóa không cần code, nối các app lại với nhau. Bạn làm marketing hay PR, tìm marketing automation basics vì chán mở chục trang tin mỗi

Tự chạy · bấm ô để tới mục đó · cả 9 trong một zip

Chín mục này được sắp xếp theo đúng trình tự mà một thói quen theo dõi tin tức thật sự sẽ lớn dần lên. Bắt đầu từ việc lấy một nguồn (01), rồi đến hai cách gộp nhiều nguồn (02 nối liền một mạch, 03 đếm riêng theo từng nguồn), thu hẹp lại theo hai cách (04 theo từ khóa, 05 theo ngày), làm gọn kết quả theo hai cách (06 loại trùng, 07 dựng thành bảng), rẽ nhánh theo điều kiện một lần (08), và cuối cùng gói tất cả thành thứ chạy một mình mỗi ngày (09). Một đội ngũ thường thêm dần từng thứ theo đúng thứ tự này khi chuyển từ kiểm tra tin bằng tay sang tự động hóa.

01Đọc RSS cơ bản

Thay vì mở trang web để kiểm tra bài mới, node RSS Read lấy nguyên danh sách bài viết mới nhất, rồi node Set chỉ giữ lại tiêu đề, link và ngày đăng. Đây là dạng dùng khi bạn theo dõi một blog yêu thích hay mới bước đầu học automation — bản đơn giản nhất trước khi thêm gì khác.

RSS ReadSet → title/link/pubDateV2 실행 확인
{
  "name": "Keep Fields",
  "type": "n8n-nodes-base.set",
  "typeVersion": 3.5,
  "parameters": {
    "mode": "manual",
    "assignments": {
      "assignments": [
        { "name": "title", "value": "={{ $json.title }}", "type": "string" },
        { "name": "link", "value": "={{ $json.link }}", "type": "string" },
        { "name": "pubDate", "value": "={{ $json.pubDate }}", "type": "string" }
      ]
    }
  }
}

02Gộp hai nguồn RSS, mới nhất trước

Hai node RSS Read đọc hai trang khác nhau, node Merge ở chế độ append nối hai luồng lại thành một, rồi Sort xếp bài mới nhất lên đầu. Khi cần xem tin từ nhiều báo trong một chỗ hoặc theo dõi blog đối thủ cùng lúc, một nguồn thôi là không đủ nữa.

RSS Read ×2Merge appendSort desc → V2 실행 확인
{
  "name": "Merge Append",
  "type": "n8n-nodes-base.merge",
  "typeVersion": 3.2,
  "parameters": {
    "mode": "append",
    "numberInputs": 2
  }
}

03Tóm tắt số lượng theo nguồn

Nếu mục 02 trộn hai nguồn thành một luồng, mục này giữ chúng tách riêng: hai node Aggregate gộp tiêu đề theo từng nguồn, rồi node Code dựng một object tóm tắt gồm số lượng và 3 tiêu đề tiêu biểu mỗi nguồn. Khi cần so sánh sản lượng theo nguồn hay làm nguyên liệu cho báo cáo tuần, đếm riêng hợp lý hơn trộn chung.

RSS Read ×2Aggregate ×2 → Merge by positionCode 요약 → V2 실행 확인
{
  "name": "Build Summary",
  "type": "n8n-nodes-base.code",
  "typeVersion": 2,
  "parameters": {
    "jsCode": "const bbc = $json.bbcTitles || [];\nconst ars = $json.arsTitles || [];\nconst summary = {\n  bbc: { count: bbc.length, titles: bbc.slice(0, 3) },\n  ars: { count: ars.length, titles: ars.slice(0, 3) }\n};\nreturn [{ json: { summary } }];"
  }
}

04Lọc theo từ khóa, giữ top N

Node Filter chỉ giữ bài có tiêu đề chứa một từ khóa (không phân biệt hoa thường), rồi Limit cắt còn top 3. Khi mục tiêu là chỉ nhận thông báo về chủ đề quan tâm và giảm nhiễu, thu hẹp trước rồi mới gửi hợp lý hơn gửi hết rồi lọc sau.

Filter contains(대소문자 무시)Limit 3V2 실행 확인
{
  "conditions": {
    "options": { "caseSensitive": false, "version": 2 },
    "conditions": [
      {
        "leftValue": "={{ $json.title }}",
        "rightValue": "ai",
        "operator": { "type": "string", "operation": "contains" }
      }
    ],
    "combinator": "and"
  }
}

05Chỉ giữ bài trong N ngày gần đây

Filter so sánh pubDate với thời điểm hiện tại trừ 3 ngày bằng toán tử after của điều kiện dateTime, chỉ giữ bài gần đây. Nếu chỉ cần loại bài cũ khỏi tổng hợp tuần và đảm bảo tính mới, lọc theo ngày thôi là đủ, không cần từ khóa.

Filter dateTime after$now.minus(days:3)V2 실행 확인
{
  "conditions": [
    {
      "leftValue": "={{ $json.pubDate }}",
      "rightValue": "={{ $now.minus({ days: 3 }) }}",
      "operator": { "type": "dateTime", "operation": "after" }
    }
  ],
  "combinator": "and"
}

06Chỉ giữ bài mới qua các lần chạy

Thao tác Remove Items Processed in Previous Executions của Remove Duplicates lọc bỏ các link đã thấy ở lần chạy trước, rồi Set gắn nhãn isNew cho bài mới. Khi mục tiêu là chạy cùng giờ mỗi ngày mà không lặp lại thông báo, lọc trùng trong một lần chạy là chưa đủ — cần nhớ được giữa các lần chạy.

Remove Duplicatesscope: workflowV2 실행 확인
{
  "name": "Remove Seen Links",
  "type": "n8n-nodes-base.removeDuplicates",
  "typeVersion": 2,
  "parameters": {
    "operation": "removeItemsSeenInPreviousExecutions",
    "logic": "removeItemsWithAlreadySeenKeyValues",
    "dedupeValue": "={{ $json.link }}",
    "options": { "scope": "workflow" }
  }
}

07Bản tin dạng bảng HTML

Limit giữ 8 mục đầu tiên, rồi thao tác Convert to HTML Table của node HTML biến chúng thành bảng ngay. Khi cần chèn bảng tin vào nội dung email hay làm widget dashboard, bảng dễ nhìn lướt qua hơn một danh sách trần trụi.

Limit 8HTML convertToHtmlTableV2 실행 확인
{
  "name": "Build Table",
  "type": "n8n-nodes-base.html",
  "typeVersion": 1.2,
  "parameters": {
    "operation": "convertToHtmlTable",
    "options": {
      "capitalize": true,
      "caption": "Fox News latest headlines"
    }
  }
}

08Định tuyến theo từ khóa

Switch chia bài theo từ khóa trong tiêu đề thành 3 nhánh — ai, security (hoặc breach), và còn lại — mỗi nhánh có Set gắn nhãn route, rồi Merge gom lại. Khi cần tự động phân loại gửi theo kênh chủ đề hay định tuyến thông báo với hơn hai kết quả, một node IF là không đủ.

Switch 3 routesfallbackOutput: extraV2 실행 확인
{
  "mode": "rules",
  "rules": {
    "values": [
      {
        "conditions": {
          "conditions": [
            { "leftValue": "={{ $json.title }}", "rightValue": "ai",
              "operator": { "type": "string", "operation": "contains" } }
          ]
        },
        "outputKey": "ai"
      }
    ]
  },
  "options": { "fallbackOutput": "extra", "renameFallbackOutput": "other" }
}

09Gửi bản tin tổng hợp theo lịch

Schedule khởi động mỗi ngày lúc 8:00 (Manual Trigger cũng test được ngay), RSS Read lấy bài mới nhất, Aggregate gộp tiêu đề và link thành mảng, rồi Markdown ghép cặp chúng vào field digest. Muốn dùng thật cho bản tin buổi sáng ở kênh nhóm hay bot thông báo cá nhân, lịch chạy tự động và bước test thủ công cần nằm trong cùng một luồng.

Schedule triggerAtHour 8 + ManualAggregate → MarkdownV2 실행 확인
{
  "name": "Build Digest",
  "type": "n8n-nodes-base.markdown",
  "typeVersion": 1,
  "parameters": {
    "mode": "markdownToHtml",
    "markdown": "={{ '# Daily Digest\\n\\n' + $json.title.map((t, i) => '- [' + t + '](' + $json.link[i] + ')').join('\\n') }}",
    "destinationKey": "digest"
  }
}

Cần chuẩn bị gì

Cả 9 mục đều ghi "không cần" ở cột chuẩn bị, nhưng bảng vẫn cần thiết vì n8n bản cũ có thể từ chối typeVersion của một node. Thang điểm đi qua ba mức: V0 (cấu trúc), V1 (đã xác minh import), V2 (đã chạy và xác nhận) — cả 9 mục ở đây đều đạt V2.

Mục Điểm Cần chuẩn bị Phiên bản n8n
01 Đọc RSS cơ bản V2 không cần 2.38.5
02 Gộp hai nguồn RSS, mới nhất trước V2 không cần 2.38.5
03 Tóm tắt số lượng theo nguồn V2 không cần 2.38.5
04 Lọc theo từ khóa, giữ top N V2 không cần 2.38.5
05 Chỉ giữ bài trong N ngày gần đây V2 không cần 2.38.5
06 Chỉ giữ bài mới qua các lần chạy V2 không cần 2.38.5
07 Bản tin dạng bảng HTML V2 không cần 2.38.5
08 Định tuyến theo từ khóa V2 không cần 2.38.5
09 Gửi bản tin tổng hợp theo lịch V2 không cần 2.38.5

Có ba cách để import: dán thẳng đoạn JSON vào canvas n8n bằng Ctrl/Cmd+V, dùng Import from File trong menu canvas để chọn file trong zip, hoặc chạy n8n import:workflow --input=file.json bằng CLI. Sau khi import xong, chỉ cần bấm nút Test workflow ở góc trên bên trái để chạy thử ngay.

Chỗ dễ vỡ nhất

Cái bẫy âm thầm nhất nằm ở mục 06: nếu bạn bật tùy chọn "Include Other Input Fields" của node Set bằng cách đặt nó vào bên trong khối Options, workflow vẫn chạy xong (exit 0), nhưng field title lặng lẽ biến mất, chỉ còn isNew. Thực ra tùy chọn này nằm ở tầng trên cùng của node, ngang hàng với mode và assignments, không phải bên trong Options — đặt sai chỗ thì n8n âm thầm dùng giá trị mặc định (false) mà không báo lỗi. Mật khẩu để mở file zip này là xu26t3qn, giải nén ra sẽ thấy đủ 9 file JSON nằm trong workflows/. Remove Duplicates ở mục 06 còn một bẫy dễ vỡ nữa: vì nó nhớ giữa các lần chạy, chạy thử cùng một workflow nhiều lần liên tiếp sẽ khiến số bài "mới" giảm dần về 0, và khi đó node Set phía sau không chạy nữa nên field isNew biến mất hoàn toàn khỏi kết quả.

FAQ

Dùng được trên n8n cloud không?

Được. Các workflow này không dùng community node hay thông tin đăng nhập gắn với tài khoản nào, nên import thẳng qua menu Import là chạy. Riêng Schedule Trigger ở mục 09 chỉ tự chạy hằng ngày khi workflow được bật Active.

Nếu phiên bản n8n của tôi khác thì sao?

Gặp lỗi typeVersion nghĩa là bạn nên tạo lại node đó trên canvas, export ra để xem giá trị thật, rồi hạ xuống cho khớp mà dùng. File zip này đã xác minh cả import lẫn chạy thử trên n8n 2.38.5 (Node 24).

Không biết code thì có hiểu được phần lọc trùng ở mục 06 không?

Có. Ngoại trừ node Code ở mục 03, tám mục còn lại chỉ dùng node có sẵn của n8n nên dù không biết JavaScript, bạn vẫn làm theo được. Mục 06 cũng chỉ là chọn tùy chọn trên node Remove Duplicates bằng giao diện, chi tiết các tùy chọn có ở tài liệu chính thức của n8n.

Nếu bạn mới làm quen với n8n, danh mục automation có thêm nhiều ví dụ cùng hướng, còn trang giới thiệu ghi rõ trang này kiểm chứng nội dung theo tiêu chuẩn nào.

Nhập mật khẩu file nén

Mật khẩu nằm ngay trong bài viết này. Đọc tới đó bạn sẽ thấy.