Đăng ngày · Cập nhật
Tự động đăng bài Facebook nghĩa là bài tự lên Trang (fanpage) đúng giờ đã hẹn, không cần ai bấm đăng. Bài này làm việc đó bằng n8n, nền tảng dựng luồng tự động có bản tự cài miễn phí, cùng Google Sheets và Graph API, cổng kết nối chính thức Meta mở cho phần mềm. Các chi tiết kỹ thuật được đối chiếu với tài liệu chính thức tới tháng 9/2026, nên hãy xem lại khi làm.
Meta Business Suite hay n8n: khi nào cần luồng riêng
Meta Business Suite, công cụ miễn phí của Meta, đã cho lên lịch bài trên Trang Facebook và trên Instagram. Theo trang trợ giúp của Facebook tới tháng 9/2026, bạn hẹn được giờ đăng từ 20 phút tới 29 ngày sau lúc lên lịch. Với một Trang và vài bài mỗi tuần, như vậy thường là đủ.
Luồng n8n đáng dựng khi có ít nhất một trong các nhu cầu sau:
- Lịch nội dung trên Google Sheets có cột duyệt, để chỉ bài đã duyệt mới được đăng.
- Nhiều Trang hoặc nhiều kênh được điều khiển từ một bảng.
- AI soạn nháp từ ý chính, người duyệt sửa rồi mới đăng.
- Cần ghi lại kết quả: mã bài, giờ đăng và lỗi nằm ngay trong bảng, làm nguồn cho báo cáo.
Đổi lại, bạn phải tự lo phần Meta Business Suite lo sẵn: một ứng dụng Meta, một mã truy cập phải giữ kín, một máy chạy n8n và một người trông luồng.
Chuẩn bị bảng lịch nội dung và mã truy cập Trang
Bảng lịch nội dung
Mỗi dòng trong bảng là một bài:
| Cột | Nội dung | Ai điền |
|---|---|---|
| Mã bài | Mã riêng của dòng, ví dụ B001 | Người lên kế hoạch |
| Giờ đăng | Theo một định dạng cố định, ví dụ 2026-10-05 09:00 | Người lên kế hoạch |
| Ý chính | Vài dòng về nội dung bài | Người lên kế hoạch |
| Nội dung | Bài sẽ được đăng | AI soạn, người sửa |
| Link ảnh | Đường dẫn công khai tới file ảnh, trống nếu bài chỉ có chữ | Người lên kế hoạch |
| Trạng thái | Nháp, Chờ duyệt, Đã duyệt, Đang đăng, Đã đăng hoặc Lỗi | Người và n8n |
| Người duyệt | Tên người duyệt | Người duyệt |
| Mã bài Facebook | Mã Meta trả về khi đăng xong | n8n |
| Ghi chú lỗi | Nội dung lỗi nếu có | n8n |
Đặt cột Trạng thái thành ô chọn. Chỉ người duyệt được sửa trạng thái và tên người duyệt; tài khoản n8n được cập nhật kết quả đăng. Bài đã duyệt phải được khóa nội dung, ảnh và Trang nhận bài. Nếu cần sửa, chuyển về Nháp và xóa dấu duyệt trước. Tên người duyệt còn đó không chứng minh nội dung mới đã được duyệt. Có nhiều Trang thì thêm cột Trang.
Ứng dụng Meta và mã truy cập Trang
Mã truy cập Trang (Page access token) là chuỗi ký tự cho phép phần mềm đăng bài dưới tên Trang. Các bước theo tài liệu của Meta tới tháng 9/2026:
- Tạo ứng dụng trên developers.facebook.com bằng tài khoản quản lý Trang, chọn trường hợp sử dụng Manage everything on your Page, và gắn với danh mục doanh nghiệp (business portfolio) của công ty nếu có.
- Thêm quyền pages_manage_posts để đăng, sửa, xóa bài của Trang, cùng pages_read_engagement đi kèm. Quyền pages_show_list có sẵn trong trường hợp sử dụng này.
- Lấy mã người dùng trong Graph API Explorer, công cụ thử của Meta: chọn ứng dụng, chọn ba quyền trên, đăng nhập và cấp quyền cho Trang. Người lấy mã phải có tác vụ tạo nội dung (CREATE_CONTENT) trên Trang. Mã lấy ở bước này chỉ dùng được vài giờ.
- Đổi sang mã dài hạn. Đổi mã vừa lấy thành mã người dùng dài hạn, khoảng 60 ngày, qua điểm cuối oauth/access_token, rồi dùng nó đọc danh sách Trang ở điểm cuối accounts: mỗi Trang trả về mã số Trang và một mã truy cập Trang không có ngày hết hạn. Lệnh đổi mã cần khóa bí mật của ứng dụng (App Secret), nên Meta yêu cầu gọi từ máy chủ.
- Kiểm tra mã bằng Access Token Debugger của Meta: mã còn hiệu lực không, hết hạn khi nào, có những quyền gì.
- Chuyển ứng dụng sang Live. Theo Meta, dữ liệu tạo ra khi ứng dụng còn ở chế độ Development, kể cả bài đăng thử, chỉ người có vai trò trong ứng dụng nhìn thấy. Muốn chuyển, điền các mục bắt buộc trong cài đặt cơ bản như tên hiển thị, email liên hệ, biểu tượng, danh mục, mục đích dùng và đường dẫn điều khoản dịch vụ.
Theo quy định của Meta tới tháng 9/2026, khi chỉ những người có vai trò trong ứng dụng dùng nó, như doanh nghiệp tự đăng lên Trang của mình, thì không cần qua bước xét duyệt ứng dụng (App Review). Xác minh doanh nghiệp là điều kiện để có quyền truy cập nâng cao, loại quyền cần khi ứng dụng phục vụ cả người không có vai trò trong ứng dụng.
Giữ mã truy cập an toàn
- Chỉ lưu mã trong Credentials của n8n, phần được mã hóa trước khi ghi vào cơ sở dữ liệu, không dán vào bảng tính, tin nhắn hay ô nhập của một nút. App Secret cũng giữ như mật khẩu, lộ thì đặt lại ngay trong cài đặt cơ bản.
- Sao lưu khóa mã hóa của n8n (biến N8N_ENCRYPTION_KEY, hoặc khóa tự tạo trong thư mục .n8n). Mất khóa thì bản sao lưu không giải mã được thông tin đăng nhập.
- Đừng để luồng phụ thuộc tài khoản của một người. Mã Trang mất hiệu lực khi người tạo mã đổi mật khẩu Facebook hoặc gỡ ứng dụng. Công ty có danh mục doanh nghiệp trên Meta nên tạo mã bằng người dùng hệ thống (system user), loại tài khoản dành cho máy chủ. Meta cho chọn mã không hết hạn hoặc hết hạn sau 60 ngày, và khuyên dùng loại có hạn.
- Meta không báo khi mã hết hiệu lực, nên luồng phải tự báo lỗi.
Tự động đăng bài Facebook bằng n8n: năm bước
Luồng đăng bài có năm bước chính, mỗi bước là một nút (node) trong n8n:
- Schedule Trigger, 15 phút một lần. Đặt múi giờ Asia/Ho_Chi_Minh trong cài đặt của luồng. Bản n8n tự cài mặc định dùng America/New_York nếu chưa ai đặt, và bài sẽ lên lệch nhiều giờ.
- Google Sheets, thao tác Get Row(s), lọc dòng có Trạng thái Đã duyệt. Trong Options, đặt When Filter Has Multiple Matches thành Return All Matches, vì mặc định nút chỉ trả về dòng khớp đầu tiên và chỉ một bài được đăng.
- Filter, giữ bài đã tới giờ, có người duyệt, nội dung không thay đổi sau duyệt và Mã bài Facebook còn trống. Chuẩn hóa giờ sang ISO 8601 có múi giờ, ví dụ 2026-10-05T09:00:00+07:00, trước khi so sánh. Dòng sai định dạng được chuyển sang Lỗi để sửa, không đoán ngày giờ.
- Facebook Graph API, đăng bài. Chọn Credentials chứa mã Trang, HTTP Request Method là POST, Host URL để Default, Node là mã số Trang, Edge là feed, và thêm message lấy từ cột Nội dung trong Query Parameters. Bài có ảnh thì Edge là photos, url là link ảnh, caption là nội dung, vì với ảnh Meta ghi message là tham số cũ. Đặt một nút If phía trước để tách bài ảnh và bài chữ. Trong Settings của nút, đặt On Error thành Continue (using error output) để một bài lỗi không chặn các bài khác.
- Google Sheets, thao tác Update Row. Chọn cột Mã bài ở Column to Match On, ghi mã Meta trả về vào cột Mã bài Facebook và đổi Trạng thái thành Đã đăng. Bài chữ trả về id; bài ảnh trả về id và post_id, trong đó post_id là mã bài trên Trang. Nhánh lỗi ghi Lỗi và gửi thông báo cho người phụ trách; không tự gửi lại bài khi chưa rõ Meta đã nhận hay chưa.
Chống đăng trùng cần thêm cơ chế giữ chỗ. Chỉ kiểm tra ô mã bài còn trống là chưa đủ: hai lần chạy có thể cùng đọc một dòng, hoặc Meta đăng thành công nhưng bước ghi bảng thất bại. Với bảng tính, chỉ cho một lần chạy xử lý việc đăng tại một thời điểm, kể cả chạy tay; ghi Đang đăng trước khi gọi Meta. Dòng mắc ở Đang đăng hoặc bị mất phản hồi phải đối chiếu trên Trang trước khi thử lại. Khi cần nhiều luồng chạy đồng thời, dùng nơi lưu có khóa theo Mã bài; Google Sheets không cung cấp khóa nguyên tử cho chuỗi đọc rồi sửa này.
Ảnh phải ở đường dẫn công khai trỏ thẳng tới file, không phải trang xem ảnh. Theo Meta, ảnh dùng định dạng như JPEG hoặc PNG, không quá 4 MB, ảnh PNG nên dưới 1 MB.
Phiên bản Graph API
Chọn rõ phiên bản Graph API mà nút n8n hỗ trợ và ghi lại trong tài liệu vận hành. Đối chiếu lịch phiên bản của Meta trước khi triển khai; thử đăng trên Trang thử nghiệm khi nâng phiên bản. Danh sách phiên bản trong n8n phụ thuộc bản cài đặt.
Chạy thử và bật luồng
Tạo một dòng thử có giờ đăng đã qua, chạy luồng bằng tay, rồi mở Trang bằng một tài khoản không có vai trò trong ứng dụng để chắc bài hiện với mọi người. Sau đó bấm Publish: từ n8n 2.0, lưu chỉ cập nhật bản nháp, luồng chỉ chạy theo lịch khi đã publish, và mỗi lần sửa phải publish lại.
Nối nhánh lỗi ở bước đăng vào nút gửi email hoặc Telegram. Lỗi đã xử lý bằng Continue (using error output) không tự làm cả luồng thất bại, nên không thể chỉ trông vào Error Trigger. Bổ sung một luồng Error Trigger cho lỗi khiến lần chạy tự động thất bại, như không đọc hoặc ghi được bảng. Thử riêng cả hai đường báo lỗi trước khi bật lịch.
Tự động đăng bài Facebook bằng AI, người duyệt trước khi đăng
Phần AI là một luồng thứ hai, tách khỏi luồng đăng bài để AI không bao giờ chạm vào bước đăng: AI chỉ viết vào bảng, người duyệt quyết định.
- Điểm bắt đầu: Schedule Trigger mỗi sáng, hoặc Google Sheets Trigger với sự kiện Row added or updated nếu muốn có bản nháp ngay khi thêm dòng.
- Google Sheets: lấy các dòng có Trạng thái Nháp, đã có Ý chính và chưa có Nội dung.
- Nút mô hình AI: n8n có sẵn nút cho Anthropic, OpenAI và Google Gemini, với thao tác Message a Model. Hướng dẫn gửi cho AI nên có 5 đến 10 bài cũ làm mẫu giọng văn, độ dài, số hashtag tối đa, và điều cấm: không tự thêm giá, khuyến mãi, ngày hay lời hứa không có trong ý chính.
- Update Row: ghi bản nháp vào cột Nội dung và đổi Trạng thái thành Chờ duyệt.
Người duyệt sửa bài ngay trong bảng nếu cần, điền tên vào cột Người duyệt và đổi Trạng thái thành Đã duyệt. Chỉ khi đó luồng đăng bài mới nhìn thấy bài. Khi duyệt, soát kỹ ba thứ AI dễ sai: con số như giá, phần trăm giảm, ngày; tên sản phẩm; và mọi lời hứa với khách.
Nguyên tắc AI soạn, người duyệt, máy làm phần còn lại cũng được dùng để vận hành nội dung website này.
Lỗi hay gặp và cách mở rộng
| Hiện tượng | Nguyên nhân thường gặp | Cách xử lý |
|---|---|---|
| Lỗi 190, mã hết hạn hoặc không hợp lệ | Dùng mã ngắn hạn, hoặc người tạo mã đã đổi mật khẩu hay gỡ ứng dụng | Tạo lại mã Trang dài hạn, kiểm tra bằng Access Token Debugger |
| Lỗi 10 hoặc từ 200 tới 299, thiếu quyền | Mã thiếu pages_manage_posts, hoặc người tạo mã không có quyền tạo nội dung trên Trang | Thêm quyền, kiểm tra vai trò trên Trang, tạo lại mã |
| Đăng được nhưng người khác không thấy bài | Ứng dụng còn ở chế độ Development | Chuyển ứng dụng sang Live |
| Bài bị đăng trùng | Hai lần chạy cùng đọc một dòng, hoặc ghi bảng thất bại sau khi đăng | Dừng thử lại, đối chiếu Trang, kiểm tra cơ chế giữ chỗ theo Mã bài |
| Lỗi 368, tạm thời bị chặn | Meta tạm chặn hành động đăng | Chờ rồi thử lại, xem lại nội dung và tần suất đăng |
Khi luồng đã chạy ổn cho một Trang, mở rộng từng bước: thêm cột Trang và một nút Switch chia bài cho từng Trang, mỗi nhánh dùng mã truy cập riêng; thêm Instagram qua API riêng; hoặc gom số liệu tương tác của các bài vào một báo cáo tự động mỗi tuần. Luồng đăng bài là một phần của tự động hóa marketing, và theo cùng nguyên tắc với mọi luồng tự động hóa quy trình: có bảng làm nguồn, có người duyệt, có nhật ký và báo lỗi.
Câu hỏi thường gặp
Có tự động đăng lên trang cá nhân hoặc nhóm Facebook được không?
Luồng trong bài này dùng API của Trang Facebook, không dùng để đăng lên trang cá nhân hay nhóm. Cần kiểm tra tài liệu Meta nếu muốn làm với loại tài khoản hoặc kênh khác.
Có đăng lên Instagram trong cùng luồng được không?
Được, qua API riêng của Instagram. Tài khoản phải là tài khoản chuyên nghiệp, và mỗi bài đi qua hai bước: tạo nội dung chờ đăng rồi mới đăng. Theo tài liệu của Meta tới tháng 9/2026, mỗi tài khoản đăng được tối đa 100 bài qua API trong 24 giờ.
Người tạo mã truy cập nghỉ việc thì luồng có dừng không?
Có thể. Mã tạo từ tài khoản cá nhân mất hiệu lực khi người đó đổi mật khẩu Facebook hoặc gỡ ứng dụng khỏi tài khoản. Nên tạo mã bằng người dùng hệ thống của doanh nghiệp, và khi có người rời công ty, thu hồi vai trò của họ trong ứng dụng và trên Trang.


