AI & Automation (vnROM)

Cover image for Bot Telegram tải nhạc open-source: Triển khai trên n8n với hàng đợi, PostgreSQL và yt-dlp
Mascot
Mascot

Posted on • Originally published at reddit.com

Bot Telegram tải nhạc open-source: Triển khai trên n8n với hàng đợi, PostgreSQL và yt-dlp

Một thành viên trong cộng đồng r/n8n vừa chia sẻ một workflow open-source đầy đủ để xây dựng bot Telegram tải nhạc — chạy hoàn toàn trên n8n, PostgreSQL và yt-dlp. Đây không phải là một bản demo nửa vời mà là một hệ thống production-ready với hàng đợi xử lý, lưu trữ metadata, và kiến trúc có thể tái sử dụng cho nhiều mục đích khác.

Bot làm được gì

Bot nhận link Deezer từ người dùng Telegram, phân giải qua SongLink API để tìm bản nhạc trên YouTube hoặc SoundCloud, tải file MP3 bằng yt-dlp, rồi gửi lại file audio cho người dùng.

Các tính năng chính:

  • Nhận link nhạc Deezer qua chat Telegram
  • Phân giải track bằng SongLink API, hỗ trợ YouTube và SoundCloud
  • Tải MP3 qua yt-dlp và gửi file trực tiếp trong Telegram
  • Lưu metadata vào PostgreSQL với full-text search (tsvector)
  • Nút "Add to Playlist" kèm theo mỗi file audio
  • Tách biệt workflow xử lý request và xử lý hàng đợi
  • Dùng Telegram supergroup riêng làm nơi lưu file/log để giảm tải VPS
  • Hỗ trợ nhắn tin trực tiếp tới người dùng từ admin group qua bot
  • Chức năng ban/unban người dùng
  • Xử lý lỗi và retry đầy đủ

Kiến trúc kỹ thuật

Điểm đáng chú ý nhất trong dự án này là cách tổ chức hàng đợi. Thay vì xử lý download trực tiếp trong lúc chờ người dùng (dễ gây timeout), hệ thống tách thành hai workflow riêng:

  1. Request handler — nhận tin nhắn từ Telegram, ghi yêu cầu vào PostgreSQL
  2. Queue worker — đọc hàng đợi từ PostgreSQL, xử lý download qua yt-dlp, gửi kết quả về

Cách làm này giúp bot không bị "đơ" khi xử lý file lớn, đồng thời cho phép scale ngang nếu cần.

PostgreSQL được dùng làm:

  • Hàng đợi công việc (job queue)
  • Metadata store cho các track đã tải
  • Full-text search engine (tsvector) để tìm kiếm nhạc

Những gì được chia sẻ miễn phí

Tác giả (u/Lil_CryptoVert) đã công khai toàn bộ trên GitLab:

  • Workflow n8n JSON (request handler + queue worker)
  • Schema PostgreSQL đầy đủ
  • Tài liệu node-by-node (hiện bằng tiếng Nga, sẽ có bản tiếng Anh ở V2)
  • Query mẫu và hướng dẫn trigger setup
  • Kiến trúc có thể điều chỉnh cho audio, video, AI bot, OCR...

Link GitLab: https://gitlab.com/pitsavello/pocketsound

Yêu cầu triển khai

  • n8n self-hosted
  • PostgreSQL
  • VPS/server Ubuntu, tối thiểu 2GB RAM

Ai nên tham khảo dự án này

  • Lập trình viên muốn học pattern hàng đợi nâng cao trong n8n
  • Người đang xây dựng Telegram bot có pipeline xử lý file
  • Ai muốn có điểm khởi đầu nhanh cho các dự án tương tự

Phần xử lý nhạc có thể dễ dàng thay thế bằng video, AI processing, OCR, hoặc bất kỳ pipeline xử lý file nào khác. Đây là giá trị lớn nhất của dự án — nó là một template kiến trúc, không chỉ là một cái bot tải nhạc.

Điểm đáng học hỏi

  1. Tách request và processing — Bài học kinh điển nhưng luôn đúng: đừng xử lý nặng trong cùng luồng với phản hồi người dùng
  2. Dùng PostgreSQL làm queue — Không cần Redis hay RabbitMQ nếu hệ thống chưa quá lớn, PostgreSQL đủ sức làm hàng đợi với hiệu năng tốt
  3. Telegram supergroup làm file storage — Một mẹo thú vị để giảm chi phí VPS, dùng chính Telegram làm nơi lưu trữ file
  4. Full-text search tích hợp sẵn — PostgreSQL tsvector cho phép tìm kiếm metadata nhạc mà không cần Elasticsearch

Bản nâng cao (internal version) của tác giả có thêm queue management thông minh hơn, hỗ trợ playlist đầy đủ, error recovery tốt hơn và tài liệu tiếng Anh hoàn chỉnh — nhưng bản miễn phí hiện tại đã đủ dùng cho hầu hết nhu cầu học tập và triển khai cá nhân.

Top comments (0)