Hướng dẫn này giả định bạn đã có API key và ít nhất một profile được kết nối. Nếu chưa, hãy làm Bắt đầu nhanh trước (5 phút).
1. Lưu API key thành credential
Giữ key ngoài file workflow bằng cách lưu nó thành credential dùng lại được.- Trong n8n mở Credentials → New, chọn Header Auth.
- Đặt:
- Name là
Authorization - Value là
Bearer mdc_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
- Name là
- Lưu lại với tên ví dụ MADIAD Hub.
2. Đăng một bài chỉ có chữ
Thêm node HTTP Request:
Body (JSON):
3. Chống trùng lặp bằng Idempotency-Key
Nếu n8n chạy lại một node (timeout, nhánh lỗi), bạn không muốn tạo ra bài đăng trùng. Thêm một header có giá trị ổn định cho mỗi item, Hub sẽ coi lần lặp lại cùng key là cùng một yêu cầu. Ở phần Headers, thêm:
Dùng một giá trị duy nhất cho mỗi bài định đăng và không đổi khi thử lại chính bài đó. Lựa chọn tốt: một UUID bạn sinh một lần rồi ghi ngược lại vào dòng dữ liệu, hoặc một hash của chính nội dung.
4. Đăng ảnh hoặc video
Endpoint làhttps://api.madiad.com/v1/posts/photos cho ảnh và https://api.madiad.com/v1/posts/video cho một video.
Ảnh, tải file lên: chọn Send Body → Form-Data Multipart rồi thêm từng trường thành từng entry riêng. Lặp lại platforms[] một lần cho mỗi nền tảng, và gửi ảnh dưới dạng trường binary:
Ảnh, dùng URL công khai: nếu ảnh đã có link
https:// công khai, bỏ qua bước xử lý file luôn. Chọn Send Body → JSON và truyền link vào photo_urls[], đây là cách đơn giản nhất cho n8n vì không cần node binary nào:
video_url công khai:
5. Xử lý phản hồi bất đồng bộ
Bài chỉ có chữ hoặc bài ảnh tới các nền tảng nhanh thường trả về"status": "completed" kèm results theo từng nền tảng. Video là bất đồng bộ, nó trả về "status": "processing" và một request_id. Có hai cách lấy kết quả cuối:
Poll là thêm node Wait, rồi node HTTP Request:
status là completed, partial, hoặc failed.
Webhook (khuyến nghị) là nhận thông báo đẩy thay vì poll. Thêm node Webhook trong n8n, sao chép Production URL của nó, và đăng ký trong dashboard tại hub.madiad.com/dashboard/webhooks cho sự kiện post.completed. Hub ký mọi lần gửi bằng HMAC-SHA256, hãy xác thực chữ ký ở node kế tiếp. Xem Webhooks.
6. Đọc kết quả theo từng nền tảng
Một bài đăng có thể thành công một phần, hãy kiểm traresults theo từng nền tảng thay vì chỉ nhìn status tổng:
success bằng node IF để chuyển các lỗi sang một cảnh báo Slack hoặc email.
7. Xử lý lỗi mà không retry vô tận
Retry On Fail của n8n coi mọi phản hồi không phải 2xx là đáng thử lại, và điều đó sai với phần lớn lỗi ở đây. Hãy rẽ nhánh theo mã trạng thái HTTP, đừng dựa vào câu chữ của thông báo:
Trong node HTTP Request, hãy bật Never Error (hoặc đặt On Error thành Continue using error
output) để đọc được
$json.error.code và rẽ nhánh theo nó, thay vì để node làm hỏng cả lượt chạy.
Ví dụ workflow: Google Sheets → mọi nền tảng
Một mẫu phổ biến là lịch nội dung trong Google Sheets, tự đăng khi một dòng được đánh dấu sẵn sàng:- Schedule Trigger (mỗi 15 phút) → Google Sheets (lấy các dòng có
status = ready). - HTTP Request →
POST /v1/posts/photosvớiprofile_id,platforms[],captionlấy từ dòng đó,Idempotency-Key= một UUID lưu sẵn trên dòng đó (không dùng số dòng, xem cảnh báo ở trên). - IF theo phản hồi → nếu thành công, Google Sheets cập nhật dòng thành
published; nếu lỗi, gửi cảnh báo.
Bước tiếp theo
Tuỳ chọn theo nền tảng
Ghi đè caption, tiêu đề và tuỳ chọn cho từng nền tảng.
Lên lịch
Để Hub tự đăng vào thời điểm tương lai.
Idempotency
Chạy lại an toàn từ mọi automation.
Webhooks
Nhận callback có chữ ký khi bài đăng hoàn tất.

