tạo video tự động bằng n8n: Workflow API dễ làm | RevidAPI
Tạo video tự động bằng n8n là luồng gửi prompt tạo video, chờ xử lý rồi kiểm tra job định kỳ; lệnh tạo không trả video hoàn chỉnh ngay. Bạn có thể bắt đầu từ một brief sản phẩm: n8n lấy model qua `GET /v1/video/models`, gửi prompt bằng `POST /v1/video/generate`, rồi dùng thông tin từ phản hồi để hỏi `GET /v1/video/jobs/{id}`. Bài này hướng dẫn bạn nối luồng từ brief đến kết quả, giữ thông tin theo dõi job giữa các bước và rẽ nhánh khi tác vụ chưa xong hoặc gặp lỗi. Video tạo ra vẫn cần người xem lại trước khi đăng, nhất là khi prompt chứa giá bán, tên sản phẩm hoặc lời quảng cáo.
Tóm tắt nhanh
- `POST /v1/video/generate` chỉ khởi chạy yêu cầu; đừng đưa phản hồi này thẳng sang bước đăng video.
- Trong n8n, `Wait` đặt khoảng nghỉ, `HTTP Request` kiểm tra job và `If` quyết định chờ tiếp hay xử lý kết quả.
- Đặt giới hạn số lần kiểm tra để luồng không lặp mãi khi job chưa hoàn tất; người phụ trách duyệt video trước khi xuất bản.
Tạo video tự động bằng n8n thực chất là điều phối một job
Bạn gửi một prompt vào n8n, nhưng đầu ra của lệnh tạo chưa phải tệp video. n8n chuyển yêu cầu tới dịch vụ tạo video qua API; dịch vụ nhận việc, xử lý ở phía máy chủ và cho phép hỏi kết quả sau. Nếu nối phản hồi của lệnh tạo thẳng vào bước đăng bài, workflow có thể chạy tiếp khi video vẫn chưa tồn tại.
Prompt và job không phải cùng một thứ Prompt mô tả video bạn muốn tạo, chẳng hạn “giới thiệu bình giữ nhiệt bằng tiếng Việt, cảnh quay trên bàn làm việc”. Model là lựa chọn dùng để xử lý prompt; danh sách model có thể tra qua `GET /v1/video/models`. Khi gửi yêu cầu tới `POST /v1/video/generate`, bạn đang khởi tạo một tác vụ tạo video, không yêu cầu máy chủ giữ kết nối cho tới lúc xuất xong tệp. Job là tác vụ đó trong lúc chờ xử lý hoặc đang xử lý. Phản hồi từ lệnh tạo cần
được giữ lại để có định danh phù hợp với `{id}` trong `GET /v1/video/jobs/{id}`. Hai phản hồi phục vụ hai câu hỏi khác nhau: lệnh tạo cho biết yêu cầu đã được tiếp nhận để theo dõi; lệnh kiểm tra cho biết tác vụ đã có kết quả hay chưa. Chỉ khi kiểm tra xác nhận hoàn tất, workflow mới nên dùng video đầu ra.
Khác với bấm tạo video trên giao diện Trong AI Studio, bạn nhập nội dung rồi xem tiến trình và kết quả trên màn hình. Với workflow qua API, n8n phải tự giữ mối liên hệ giữa prompt ban đầu và job tương ứng; nếu nhận nhiều prompt sản phẩm cùng lúc, nhầm định danh có thể khiến video
của sản phẩm này bị gắn sang sản phẩm khác. Phần việc của n8n là điều phối và theo dõi, còn quá trình dựng video diễn ra ở dịch vụ phía sau API.
Workflow n8n biến prompt thành tác vụ tạo video như thế nào?
| Bước | Mô tả | API / Node | Ghi chú |
|---|---|---|---|
| Một brief như “video giới thiệu bình giữ nhiệt cho khách đi làm” không thể đi thẳng từ Trigger đến file video. Workflow phải giữ prompt, model đã chọn và định danh job qua nhiều node; nếu mất định danh ở đoạn Wait, lần kiểm tra sau sẽ không biết cần hỏi tác vụ nào. | Tác vụ | Node n8n | Dữ liệu chuyển sang bước sau |
| Nhận nội dung | Trigger | Brief làm đầu vào cho prompt | |
| Chuẩn bị prompt | Edit Fields | Prompt được giữ để gửi cùng model | |
| Lấy lựa chọn model | HTTP Request | Danh sách từ `GET /v1/video/models` để chọn model | |
| Gửi yêu cầu tạo | HTTP Request | Phản hồi từ `POST /v1/video/generate` để theo dõi job, chưa phải video hoàn chỉnh | |
| Tạm dừng | Wait | Giữ định danh job đến lần kiểm tra tiếp theo | |
| Kiểm tra job | HTTP Request | Kết quả mới từ `GET /v1/video/jobs/{id}` | |
| Xử lý kết quả | If và node tiếp theo | Chuyển sang nhánh đã xong, chưa xong hoặc lỗi theo phản hồi |
Dữ liệu nào phải đi cùng job? Sau khi lấy danh sách model, node gửi yêu cầu cần cả prompt lẫn model
được chọn; danh sách model tự nó không phải yêu cầu tạo video. Phản hồi
của lệnh tạo cần được giữ lại để lấy đúng định danh job theo tài liệu API. Định danh ấy là đầu vào cho URL kiểm tra, kể cả khi workflow đã đi qua Wait. Đừng giả định trường chứa định danh hay trường trạng thái có tên cụ thể trước khi xem phản hồi thực tế. Chỉ đặt nhánh xử lý video sau HTTP Request kiểm tra job. Nếu phản hồi cho thấy tác vụ chưa xong, If đưa luồng trở lại Wait rồi kiểm tra cùng định danh; nếu đã xong, node tiếp theo mới dùng kết quả trả về. Nhánh lỗi cần tách khỏi nhánh đang chờ: gửi lại lệnh tạo khi chỉ thiếu kết quả ở lần kiểm tra đầu có thể sinh thêm một job, thay vì tiếp tục theo dõi job cũ.
Các bước nối n8n từ content brief đến video
Brief → prompt → job → kết quả. Với một brief như “video giới thiệu bình giữ nhiệt, giọng ngắn gọn, không nêu giá”, bạn cần giữ nguyên yêu cầu đó khi tạo prompt; phản hồi từ lệnh tạo là dữ liệu để theo dõi job, chưa phải video để chuyển cho người duyệt.
Dựng luồng theo thứ tự
| Bước | Thao tác trong n8n | API/Node |
|---|---|---|
| 1 | Nhận brief từ nguồn bạn đang dùng. Tạo trường `prompt` từ nội dung brief; giữ riêng các ràng buộc như “không nêu giá” để kiểm tra trước khi gửi. | Trigger → Edit Fields |
| 2 | Gọi danh sách model, đọc phản hồi rồi chọn một giá trị model có trong danh sách. Đừng tự gõ tên model theo trí nhớ. | HTTP Request → `GET /v1/video/models` |
| 3 | Gửi `prompt` cùng model đã chọn. Giữ nguyên phản hồi của lệnh tạo để bước sau đọc được dữ liệu theo dõi job. | HTTP Request → `POST /v1/video/generate` |
| 4 | Đối chiếu phản hồi với tài liệu API, lấy đúng định danh job và lưu vào một trường riêng, chẳng hạn `jobId`. Không giả định đường dẫn trường này là `id` khi chưa xem phản hồi thực tế. | Edit Fields |
| 5 | Đặt một khoảng chờ trong Wait trước lần hỏi đầu tiên; bạn có thể thử 30 giây như một cấu hình khởi đầu, không phải thời gian hoàn thành được cam kết. | Wait |
| 6 | Gọi endpoint kiểm tra, thay `{id}` bằng `jobId` đã lưu. Nếu thiếu `jobId`, chuyển sang nhánh lỗi thay vì gửi yêu cầu với đường dẫn rỗng. | HTTP Request → `GET /v1/video/jobs/{id}` |
| 7 | Đọc phản hồi và rẽ nhánh theo trạng thái thực tế: hoàn tất thì lấy kết quả, thất bại thì ghi lỗi, chưa xong thì tiếp tục chờ. Đối chiếu tên trạng thái với tài liệu API trước khi cấu hình điều kiện. | If |
| 8 | Ở nhánh chưa xong, tăng biến đếm rồi quay về Wait và kiểm tra lại. Chẳng hạn, đặt giới hạn 10 lần kiểm tra; chạm giới hạn thì dừng và báo cần xử lý, không tự gửi lại lệnh tạo. | Wait → HTTP Request → If |
Polling dày, job chạy mãi và chi phí là những điểm cần kiểm soát
Một job tạo video có thể còn đang xử lý khi n8n chạy tới node kiểm tra đầu tiên. Hai yêu cầu dùng cùng model cũng không nhất thiết hoàn tất cùng lúc; chúng tôi chưa đo thời gian chờ điển hình. Vì vậy, đừng coi phản hồi từ `POST /v1/video/generate` là video đã sẵn sàng.
Đặt điểm dừng cho vòng kiểm tra Trong nhánh chưa xong, cho node Wait nghỉ trước khi gọi `GET /v1/video/jobs/{id}` lần tiếp theo. Poll mỗi vài giây chỉ làm tăng số request, không làm job xử lý nhanh hơn. Bạn có thể thử khoảng chờ 30 giây làm cấu hình ban đầu rồi điều chỉnh theo log thực tế; đây là ví dụ vận hành, không phải thời gian hãng cam kết. Đặt thêm bộ đếm, chẳng hạn tối đa 20 lần kiểm tra, hoặc mốc hết hạn tính từ lúc gửi yêu cầu. Khi chạm ngưỡng, dừng vòng lặp và lưu `id` cùng trạng thái cuối để người vận hành tra cứu. Đừng tự gửi lại lệnh tạo ngay lúc hết hạn: job cũ có thể vẫn chạy, khiến bạn tạo hai video từ một prompt.
Tách lỗi cấu hình khỏi job chậm Nếu node HTTP Request báo lỗi xác thực, kiểm tra header `x-api-key` trước khi sửa nhánh If hoặc Wait. Nếu yêu cầu tạo bị từ chối vì model, đối chiếu tên model với kết quả `GET /v1/video/models`; tăng số lần poll không sửa
được hai lỗi này. Khi tính ngân sách, tách chi phí tạo video khỏi lượng request kiểm tra job và lượt chạy lại workflow. Giá model và cách tính phí cần đối chiếu ở bảng giá hiện hành trước khi đặt hạn mức; dữ liệu hiện có không xác nhận một mức phí cố định cho mọi video.
Hai tình huống tại Việt Nam: video sản phẩm và video nội dung định kỳ
Nhóm marketing làm video sản phẩm Một shop bán nồi chiên không dầu trên sàn thương mại điện tử có thể để nhóm marketing nhập tên sản phẩm, dung tích, màu sắc và mô tả ngắn vào một biểu mẫu chung. Đây là tình huống minh họa, không phải kết quả
của khách hàng. Người viết nội dung thêm yêu cầu cụ thể, chẳng hạn video nháp phải tập trung vào cách đặt nồi trong bếp nhỏ, thay vì để workflow tự suy đoán điểm bán hàng. Khi có bản mô tả, n8n gửi yêu cầu tạo video và giữ thông tin để kiểm tra job sau đó. Nhóm không nhận video hoàn chỉnh ngay lúc bấm gửi. Chỉ khi job hoàn tất, người phụ trách mới mở bản nháp để đối chiếu hình ảnh, lời mô tả và thông số với trang sản phẩm. Nếu video hiển thị dung tích sai hoặc minh họa tính năng không có thật, họ sửa nội dung đầu vào và yêu cầu làm lại, không chuyển thẳng sang lịch đăng.
Creator làm nội dung định kỳ Một creator chuyên chia sẻ mẹo chăm cây ban công có thể nhập brief cho từng tuần: chủ đề, ba ý chính và câu cần tránh, ví dụ không khẳng định một loại phân bón dùng
được cho mọi cây. Lịch chạy n8n giúp brief đã có sẵn được gửi đi theo kỳ; creator không phải lặp lại thao tác gửi yêu cầu cho từng chủ đề. Đây cũng chỉ là ví dụ về cách tổ chức công việc, không phải số liệu hiệu quả. Sau khi job báo hoàn tất, creator xem video trước khi đăng lên TikTok hoặc Facebook. Họ kiểm tra tên cây có khớp với hình, phụ đề có làm sai ý brief và hình minh họa có gây hiểu lầm hay không. Nếu đến giờ đăng mà job vẫn chưa xong, bài đó cần chờ hoặc được xử lý thủ công; lịch chạy tự động không đồng nghĩa với quyền tự xuất bản.
Cấu hình endpoint RevidAPI và lưu định danh job trong n8n
Đừng nối thẳng phản hồi của lệnh tạo video vào bước xuất file. `POST https://revidapi.com/v1/video/generate` khởi tạo tác vụ; n8n cần giữ định danh job để gọi `GET https://revidapi.com/v1/video/jobs/{id}` sau đó. Phần dễ sai nhất là ánh xạ định danh từ phản hồi vào trường nội bộ.
Cấu hình ba HTTP Request Tạo HTTP Request đầu tiên gọi `GET https://revidapi.com/v1/video/models` để xem model có thể dùng và giá tương ứng. Ở request thứ hai, chọn `POST https://revidapi.com/v1/video/generate`, đặt body JSON với `model` lấy từ danh sách và `prompt` lấy từ dữ liệu đầu vào, chẳng hạn `{“model”:”MODEL_TU_DANH_SACH”,”prompt”:”Cảnh quay giới thiệu sản phẩm trên bàn làm việc”}`. Trước khi điền body hoặc ánh xạ phản hồi, kiểm tra tài liệu API: đừng đoán tên trường chứa định danh hay trạng thái job. Trong n8n, lưu khóa ở credential dùng cho HTTP Request và gửi qua header `x-api-key`; có thể dùng `Authorization: Bearer` nếu cấu hình theo cách đó. Đừng dán khóa vào Code node, bài viết hoặc log. Bạn có thể mở dashboard để lấy khóa và tham khảo hub workflow khi thiết lập luồng.
Giữ một định danh xuyên suốt lượt chạy Sau request tạo video, xem phản hồi thực tế rồi ánh xạ định danh trả về vào trường nội bộ `jobId` bằng Edit Fields. Code node sau chỉ dựng URL kiểm tra từ trường *đã ánh xạ*; nó không giả định API đặt tên trường phản hồi là `jobId`:
const jobId = $json.jobId;
if (!jobId) throw new Error("Thiếu jobId để kiểm tra video"); return [{ json: { ...$json, jobUrl: `https://revidapi.com/v1/video/jobs/${encodeURIComponent(jobId)}` }
}];
const jobId = $json.jobId;
if (!jobId) throw new Error("Thiếu jobId để kiểm tra video"); return [{ json: { ...$json, jobUrl: `https://revidapi.com/v1/video/jobs/${encodeURIComponent(jobId)}` }
}];HTTP Request thứ ba dùng phương thức `GET` với URL từ `jobUrl`. Ghi vào log nội bộ `jobId`, thời điểm kiểm tra và trạng thái đọc được từ phản hồi
sau khi đã đối chiếu tài liệu; không ghi header xác thực. Nếu bạn chạy nhiều prompt trong cùng workflow, `jobId` cho biết mỗi lần kiểm tra thuộc yêu cầu nào. Lệnh tạo không trả video hoàn chỉnh ngay: chờ rồi kiểm tra lại cho đến khi phản hồi cho biết có kết quả hoặc cần xử lý lỗi.
FAQ: n8n có trả video ngay sau lệnh tạo không?
n8n có tự tạo video không?
Không. n8n điều phối workflow: lấy danh sách model qua `GET /v1/video/models`, chuyển prompt sang RevidAPI qua `POST /v1/video/generate`, rồi xử lý phản hồi. Việc tạo video diễn ra ở dịch vụ nhận yêu cầu, không phải trong n8n.
Gửi lệnh tạo xong đã có video để đăng chưa?
Chưa. Phản hồi từ `POST /v1/video/generate` dùng để theo dõi tác vụ; bạn cần lấy định danh job từ phản hồi theo tài liệu API, sau đó gọi `GET /v1/video/jobs/{id}` để kiểm tra kết quả. Đừng nối thẳng bước gửi lệnh tạo với bước đăng bài.
Job chưa xong thì workflow nên làm gì?
Cho nhánh chưa hoàn tất đi qua Wait rồi mới gọi lại `GET /v1/video/jobs/{id}`. Đặt giới hạn số lần kiểm tra hoặc thời gian chờ; khi chạm giới hạn, dừng workflow và báo để người vận hành xem lại, thay vì lặp vô hạn.
Một lần tạo video tốn bao nhiêu?
Chưa có mức credit cố định cho `POST /v1/video/generate` trong dữ liệu
được cung cấp. Bạn nên xem giá
của model định dùng trước khi chạy nhiều job, thay vì lấy chi phí của một model áp cho toàn bộ workflow.
Có cần người duyệt trước khi đăng không?
Có, nhất là khi video nhắc giá bán, tên sản phẩm hoặc lời hứa với khách hàng. Chỉ đưa job đã hoàn tất sang bước duyệt; người phụ trách xem hình, chữ và nội dung trước khi cho phép xuất bản. Nếu đưa các câu hỏi này vào schema FAQ, bạn cũng không nên mặc định Google
sẽ hiển thị rich result.
Khám phá workflow miễn phí tại AI Tạo ảnh & Video và lấy API key tại API Marketplace RevidAPI.
Khám phá API Marketplace RevidAPI — lấy API key miễn phí · Nhóm Zalo hỗ trợ · revidapi@gmail.com