Tự đăng bài từ Google Sheet bằng n8n

Bạn soạn bài trong Google Sheet. n8n đọc từng dòng, đăng lên các kênh qua MADIAD Hub, rồi ghi kết quả về đúng dòng đó.

Cần có: một n8n (tự dựng hoặc n8n Cloud), API key MADIAD Hub (gói nào cũng có), một tài khoản Google.


Trong bộ có gì

FileViệc của nóCần không
wf-01-publish-on-schedule.json15 phút quét sheet một lượt, đăng các dòng Đăng ngayCần
wf-03-reconcile.jsonTra lại bài đang chờ nền tảng xử lý, ghi kết quả thậtCần
wf-02-publish-at.jsonĐăng đúng giờ ghi trong cột Hẹn Giờkhi cần hẹn giờ
wf-04-usage.jsonSáng nào cũng ghi hạn mức vào tab Hạn Mứcnên có
wf-06-retry-unpublish.jsonChạy hai lệnh Đăng lại và Gỡ bàikhi cần
wf-05-publish-now.jsonĐăng ngay, không chờ lượt quét 15 phúttùy chọn
Gate.gsMã dán vào sheet, thêm menu MADIAD Hub. Đi cùng wf-05khi dùng wf-05
Vì sao luôn cần wf-03: nhiều nền tảng nhận bài trước, xử lý sau. Lúc wf-01 gọi xong, bài mới vào hàng đợi. Thiếu wf-03 thì dòng đó nằm mãi ở Đang Đăng, dù bài đã lên.

Phần A. Nối sheet với n8n (15 phút)

Bước 1. Tạo bản sao sheet mẫu

Để làm gì: có sheet của riêng bạn để luồng ghi kết quả vào. Bản gốc chỉ xem được.

Mở sheet mẫu, bấm Tệp › Tạo bản sao.

Bước 2. Điền tab Cấu Hình

Để làm gì: luồng biết đăng bằng profile nào của bạn.

  1. Tab Cấu Hình nằm ở hàng tab dưới cùng của sheet, cạnh tab Lịch Đăng.
  2. Dán profile_id vào cột Giá Trị, đúng dòng profile_id. Mã này nằm trong Dashboard MADIAD Hub, mục Kết nối.
  3. Có đăng Pinterest thì điền thêm pinterest_board_id.
Tab Cấu Hình ở hàng tab dưới cùng, ô Giá Trị của dòng profile_id
Tab Cấu Hình ở hàng tab dưới cùng, ô Giá Trị của dòng profile_id

Bước 3. Cất API key vào n8n

Để làm gì: n8n gọi MADIAD Hub bằng tài khoản của bạn. Key nằm trong n8n chứ không nằm trong sheet, vì link sheet hay đi qua tay nhiều người.

Mở node Gọi MADIAD Hub, bấm Connect to Header Auth, rồi:

  1. Name: Authorization
  2. Value: Bearer (có dấu cách) rồi dán API key ngay sau. Key lấy trong Dashboard, mục API key.
  3. Bấm Save.
Hộp tạo credential Header Auth: Name, Value và nút Save
Hộp tạo credential Header Auth: Name, Value và nút Save

Các luồng khác chọn lại đúng credential này. Nên tạo một key riêng cho n8n: lỡ lộ thì thu hồi đúng key đó, chỗ khác vẫn chạy.

Bước 4. Nạp luồng, chọn sheet

Để làm gì: chỉ cho từng node Google Sheets biết đọc và ghi vào bản sao nào.

  1. Trong n8n: Workflows › Import from File, chọn wf-01, rồi wf-03. Tối thiểu hai luồng này.
  2. Node nào có tam giác đỏ thì mở ra. Bấm Connect to Google Sheets để đăng nhập Google, rồi ở ô Document chọn bản sao sheet của bạn.
Node Google Sheets: nút Connect to Google Sheets và ô Document
Node Google Sheets: nút Connect to Google Sheets và ô Document

Bước 5. Bấm Publish

Để làm gì: luồng chỉ tự chạy sau khi Publish. Chưa Publish thì không có gì xảy ra, và cũng không có gì báo lỗi.

Hết tam giác đỏ thì bấm Publish ở góc trên bên phải. Làm cho từng luồng.

Luồng trong n8n: node còn tam giác đỏ và nút Publish
Luồng trong n8n: node còn tam giác đỏ và nút Publish

Xong phần A, dòng nào có Hành Động là Đăng ngay sẽ lên trong vòng 15 phút.


Phần B. Bấm là đăng ngay (tùy chọn, 10 phút)

Phần này thêm menu MADIAD Hub vào sheet, và nếu muốn thì đổi ô là đăng luôn, không chờ lượt quét 15 phút. Ảnh chụp giao diện Google tiếng Anh, nên tên nút ghi kèm chữ tiếng Anh trong ngoặc.

Bước 6. Lấy Production URL của wf-05

Để làm gì: đây là địa chỉ sheet gọi sang n8n.

  1. Nạp wf-05-publish-now.json, chọn sheet và Publish như bước 4 và 5.
  2. Mở node Nhận lệnh từ Sheet, chọn Production URL, chép địa chỉ.
Node webhook: chọn Production URL, địa chỉ có /webhook/
Node webhook: chọn Production URL, địa chỉ có /webhook/

Địa chỉ đúng có /webhook/. Địa chỉ có /webhook-test/ là Test URL, chỉ chạy khi bạn đang mở n8n và bấm nghe thử.

Bước 7. Dán Gate.gs vào Apps Script, bấm Lưu

Để làm gì: thêm menu MADIAD Hub vào sheet.

  1. Trong sheet: Tiện ích mở rộng › Apps Script (Extensions › Apps Script).
  2. Xóa đoạn mã có sẵn, dán toàn bộ Gate.gs trong bộ.
  3. Bấm biểu tượng Lưu (Save project). Không cần bấm Triển khai (Deploy).
Menu Tiện ích mở rộng, mục Apps Script
Menu Tiện ích mở rộng, mục Apps Script
Trình sửa Apps Script: nút Lưu, còn Triển khai thì không cần
Trình sửa Apps Script: nút Lưu, còn Triển khai thì không cần

Bước 8. Điền WEBHOOK_URL

Để làm gì: cho đoạn mã biết gửi lệnh tới đâu.

Trong Apps Script: Cài đặt dự án (Project Settings, bánh răng bên trái) › Thuộc tính tập lệnh (Script Properties) › thêm một dòng tên WEBHOOK_URL, giá trị là Production URL vừa chép, rồi bấm Lưu thuộc tính tập lệnh (Save script properties).

Thuộc tính tập lệnh: WEBHOOK_URL và Production URL, rồi lưu
Thuộc tính tập lệnh: WEBHOOK_URL và Production URL, rồi lưu

Bước 9. Tải lại sheet, kiểm tra kết nối

Để làm gì: chắc chắn sheet gọi được n8n trước khi đăng thật.

  1. Tải lại trang sheet. Menu MADIAD Hub hiện ra cạnh menu Trợ giúp (Help). Không thấy menu nghĩa là mã chưa dán hoặc chưa Lưu.
  2. Vào menu MADIAD Hub, bấm Kiểm tra kết nối n8n. Lần đầu Google hỏi cấp quyền thì đồng ý. Báo "Gọi được n8n" nghĩa là sheet đã gọi tới n8n. Lệnh này không đăng bài nào, và cũng không kiểm các node trong luồng: lỗi phía n8n (chưa chọn sheet, sai key) xem ở tab Executions, bước 11.
Menu MADIAD Hub cạnh Trợ giúp, mục Kiểm tra kết nối n8n
Menu MADIAD Hub cạnh Trợ giúp, mục Kiểm tra kết nối n8n

Bước 10. Cài trình kích hoạt để đổi ô là đăng

Để làm gì: đổi ô Hành Động thành Đăng ngay là bài đi luôn, khỏi mở menu.

  1. Trong Apps Script, bấm biểu tượng đồng hồ (Triggers) bên trái › Thêm trình kích hoạt (Add Trigger).
  2. Hàm: onEditInstallable. Nguồn sự kiện: Từ bảng tính (From spreadsheet). Loại sự kiện: Khi chỉnh sửa (On edit). Bấm Lưu (Save), Google hỏi cấp quyền thì đồng ý.
Hộp thêm trình kích hoạt: onEditInstallable, Từ bảng tính, Khi chỉnh sửa, Lưu
Hộp thêm trình kích hoạt: onEditInstallable, Từ bảng tính, Khi chỉnh sửa, Lưu

Bỏ qua bước này vẫn đăng ngay được: chọn dòng, rồi bấm Đăng ngay dòng đang chọn trong menu MADIAD Hub.

Bước 11. Đăng thử, xem kết quả

Để làm gì: thấy một bài đi trọn đường, từ sheet tới kênh.

  1. Ở dòng đã có Nội Dung và Kênh Đăng, đổi Hành Động thành Đăng ngay. Dòng mới chưa có Mã Bài vẫn đăng bình thường, luồng tự sinh mã.
  2. Góc dưới sheet hiện "Đã gửi 1 lệnh đăng". Ít giây sau Trạng Thái chuyển Đang Đăng, rồi Đã Đăng kèm link bài.
  3. Không thấy gì đổi thì mở luồng trong n8n, tab Executions. Dòng đỏ là lần chạy lỗi: bấm vào để xem node nào hỏng và vì sao.
Tab Executions: lần chạy lỗi và lý do n8n đưa ra
Tab Executions: lần chạy lỗi và lý do n8n đưa ra

Dùng hằng ngày

Nhập từ dòng 3. Dòng 1 là tiêu đề, dòng 2 là phần giải thích, đừng xóa.

CộtBạn điền gì
Hành ĐộngĐăng ngay · Hẹn giờ · Đăng lại · Gỡ bài
Kênh Đăngchọn một kênh, hoặc gõ nhiều kênh cách nhau bởi dấu phẩy
Tiêu Đềtùy chọn, tiêu đề riêng cho YouTube và Pinterest. Để trống thì lấy Nội Dung làm tiêu đề
Nội Dungphần chữ của bài
Medialink ảnh hoặc video, bắt đầu bằng https://. Nhiều ảnh thì mỗi link một dòng
Hẹn Giờchỉ khi chọn Hẹn giờ. Dạng 2026-09-10 08:30
Bình Luận Đầutùy chọn, bình luận tự đăng dưới bài

Reddit chưa đăng được từ sheet mẫu, vì Reddit cần chọn subreddit mà sheet chưa có cột đó. Profile đã kết nối Reddit thì soạn bài Reddit trong Dashboard MADIAD Hub.

Các cột còn lại do hệ thống ghi, đừng sửa tay. Đang Đăng là đã gửi đi, đang chờ nền tảng nhận. Đã Đăng chỉ hiện khi nền tảng đăng xong thật. Dòng hỏng thì cột Lỗi nói vì sao: sửa xong, xóa trắng Trạng Thái, đặt lại Hành Động.


Trang Facebook, LinkedIn và các kênh khác

  • Facebook, LinkedIn: một kết nối là một tài khoản, và tài khoản đó quản được nhiều Trang. Profile đăng được lên tất cả các Trang ấy.
  • TikTok, Instagram và các kênh đăng nhập bằng tài khoản riêng: mỗi profile một tài khoản.
  • Chọn Trang cho từng bài: soạn bài trong Dashboard MADIAD Hub và chọn ở ô Trang. Cách này dùng khi profile chưa ghim Trang nào.
  • Đã ghim một Trang (Dashboard, mục Kết nối): bài lên Trang đó. Bài nhắm Trang khác bị từ chối, muốn đăng Trang khác thì bỏ ghim trước.
  • Bài từ sheet mẫu lên Trang đang ghim, vì sheet không có cột chọn Trang. Tài khoản quản nhiều Trang thì nên ghim Trang muốn đăng. Cần chọn Trang theo từng dòng sheet thì liên hệ MADIAD.

Node MADIAD Hub cho n8n (tùy chọn)

Thay node HTTP Request bằng node MADIAD Hub: có ô chọn profile lấy thẳng từ tài khoản bạn, và nút Test để biết key đúng hay sai trước khi chạy.

  • n8n tự dựng: vào Settings › Community nodes, bấm Install a community node, gõ n8n-nodes-madiad-hub, tick ô đồng ý, bấm Install. Hoặc chạy npm install cho gói này trong ~/.n8n, rồi khởi động lại n8n.
  • n8n Cloud: chỉ cài được node đã qua kiểm định của n8n, node này chưa qua. Trên Cloud, dùng các luồng JSON ở trên: chúng chỉ cần node có sẵn.

Node và các luồng dùng chung một API key.


Bộ mẫu cập nhật định kỳ

Bản mới luôn ở https://hub.madiad.com/n8n-templates. Tải về, nạp đè lên luồng cũ trong n8n. Có bản Gate.gs mới thì dán đè vào đúng file cũ trong Apps Script rồi bấm Lưu: trình kích hoạt đã cài vẫn giữ nguyên.

Bảng tính của bạn không bị đụng tới. Bản nào đổi tên cột thì phần này sẽ ghi rõ, vì đổi tên cột là thứ duy nhất làm luồng mất dấu dữ liệu cũ.

Hỏng thì xem ở đây

Hiện tượngThường do
Không thấy menu MADIAD HubChưa dán Gate.gs hoặc chưa bấm Lưu, rồi tải lại sheet (bước 7, 9)
Menu báo "Không có dòng nào để đăng"Dòng thiếu Nội Dung hoặc Kênh Đăng, hoặc chọn dòng 1, 2
Menu báo dòng chưa gửi vì ô Hành ĐộngĐặt Hành Động là Đăng ngay
Kiểm tra kết nối báo mã 404Dán nhầm Test URL (/webhook-test/), hoặc luồng chưa Publish
Đổi ô mà không có gì xảy raChưa cài trình kích hoạt ở bước 10
n8n báo Parameter "Document" is requiredMột node Google Sheets chưa chọn sheet (bước 4)
Chạy xong mà không đăng dòng nàoTrạng Thái chưa trống, hoặc Hành Động sai chữ
Cột Kênh Đăng không khớp kênh nàoGõ tay sai tên kênh. Chọn từ danh sách cho chắc
Link media phải bắt đầu bằng https://Đang dùng link chia sẻ Drive. Cần link ảnh trực tiếp
Dòng nằm mãi ở Đang ĐăngChưa Publish wf-03
Bài lên nhầm Trang FacebookGhim đúng Trang trong Dashboard, mục Kết nối
401 hoặc 403API key sai, thiếu chữ Bearer , hoặc gói đã hết hạn
Node MADIAD Hub không hiện sau khi càin8n chưa khởi động lại, hoặc đang dùng n8n Cloud

Tài liệu API đầy đủ: https://docs.madiad.com