AI Automation

Bản tin AI tự động mỗi sáng: gom RSS, GitHub, Jira rồi tóm tắt thành 1 tin nhắn

Tóm tắt

Lịch 7h → lấy dữ liệu (RSS blog công nghệ, release GitHub của repo bạn theo dõi, ticket Jira thay đổi hôm qua) → lọc trùng bằng code → Claude tóm tắt theo 3 mức (cần làm ngay / nên biết / đọc thêm) → gửi một tin nhắn. Làm bằng n8n hoặc claude -p + cron.

Một Technical PM mỗi sáng thường mở 6–8 tab: Jira, GitHub, Sentry, Slack, vài blog công nghệ… chỉ để biết “hôm nay có gì cần xử lý”. Một bản tin AI tự động gom tất cả về một tin nhắn duy nhất lúc 7 giờ sáng, đã được phân loại theo mức độ khẩn — tiết kiệm 20–30 phút mỗi ngày và giảm nguy cơ bỏ sót. Bài này hướng dẫn thiết kế nguồn, prompt, hai cách triển khai (n8n và dòng lệnh) và cách cải thiện theo thời gian.

Kiến trúc

Schedule 7:00 thứ 2–6
  → Thu thập song song: RSS · GitHub releases · Jira · Sentry
  → Code: lọc trùng, lọc theo thời gian (24h), cắt bớt nội dung
  → LLM: tóm tắt + phân loại 🔴🟡🔵, kèm link
  → Gửi Telegram / Slack / email
  → Lưu bản tin vào Sheet/Notion để tra lại

Nguồn gợi ý

NguồnLấy bằngLọc gì
Blog / tin công nghệRSS Read nodeBài trong 24h, từ khoá liên quan stack
Release các repo đang dùngGitHub API hoặc RSS /releases.atomBản mới, đánh dấu “breaking”
Ticket đổi trạng tháiJira API (JQL updated >= -1d)Bị chặn, quá hạn, P1 mới
Lỗi productionSentry / log APILỗi mới hoặc tăng đột biến
Pull requestGitHub APIPR chờ review > 2 ngày

Prompt tóm tắt

Bạn là trợ lý của một Technical PM. Từ dữ liệu dưới đây, viết bản tin tối đa 15 dòng:
🔴 Cần xử lý hôm nay (ticket bị chặn, lỗi production, breaking change)
🟡 Nên biết (release mới, thay đổi đáng chú ý, PR chờ lâu)
🔵 Đọc thêm (tối đa 3 link đáng đọc nhất)
Quy tắc:
- Mỗi dòng có link nguồn.
- Không thêm thông tin ngoài dữ liệu được cung cấp.
- Nếu một mục không có gì, ghi "Không có".

{{collected_json}}

Điểm quan trọng là giới hạn độ dài và cấu trúc cố định. Bản tin dài hơn một màn hình điện thoại sẽ nhanh chóng bị bỏ qua.

Cách 1: n8n

  1. Schedule Trigger 7:00, thứ 2–6.
  2. Các nhánh song song: RSS Read, HTTP Request (GitHub, Jira, Sentry).
  3. Code node: gộp, lọc trùng, cắt mỗi mục còn tiêu đề + 200 ký tự + link.
  4. Node LLM (Anthropic) với prompt trên.
  5. Telegram/Slack node gửi tin; Google Sheets node lưu lại.

Cách 2: dòng lệnh + cron

# crontab: 7h sáng thứ 2–6
0 7 * * 1-5  /opt/digest/collect.sh \
  | claude -p "$(cat /opt/digest/prompt.txt)" \
  | /opt/digest/send-telegram.sh

collect.sh gọi các API bằng curl + jq, xuất JSON gọn; claude -p chạy Claude Code ở chế độ không tương tác; script cuối gửi kết quả qua Telegram Bot API. Ưu điểm: không cần server workflow, dễ đưa vào Git.

Nguyên tắc để bản tin hữu ích

  • Lọc bằng code trước khi gửi cho model: rẻ hơn, nhanh hơn và tóm tắt tốt hơn vì ít nhiễu.
  • Luôn có link nguồn: người đọc kiểm chứng trong một chạm; giảm rủi ro model diễn giải sai.
  • Không để AI bịa: dặn rõ “chỉ dùng dữ liệu được cung cấp”; mục trống thì ghi “Không có”.
  • Lưu lại lịch sử: tra cứu “tuần trước có gì” và đánh giá chất lượng theo thời gian.
  • Chạy khi có lỗi: nếu một nguồn lỗi, vẫn gửi bản tin kèm dòng “Không lấy được dữ liệu Sentry” thay vì im lặng.

Cải thiện sau 2 tuần

  • Hỏi người nhận: dòng nào vô ích? Bỏ nguồn đó hoặc siết bộ lọc.
  • Có mục nào lẽ ra phải 🔴 mà bị xếp 🟡? Thêm định nghĩa hoặc ví dụ vào prompt.
  • Cân nhắc bản tin riêng cho từng vai trò: dev nhận PR/lỗi, PM nhận ticket/rủi ro, lãnh đạo nhận tổng quan tuần.

Áp dụng thế nào?

  • Dev: Bắt đầu với 2 nguồn (GitHub + Sentry), thêm dần. Viết collect.sh sao cho chạy độc lập để debug.
  • Tech Lead: Dùng bản tin như “standup bất đồng bộ” — giảm thời gian họp buổi sáng.
  • PM: Bản tin là nguồn dữ liệu tốt cho báo cáo tuần: gom 5 bản tin ngày, cho AI tóm tắt thành báo cáo tiến độ.

Nguồn & tham khảo

  1. RSS Read node — n8n Docs
  2. Run Claude Code programmatically — Claude Code Docs