DeepSeek Vision and Grok Imagine models are now live on CometAPI →
guide/Nghiên cứu CometAPI

Cách kết nối nhiều mô hình AI với n8n bằng một CometAPI Key

Xây dựng một quy trình công việc n8n low-code để định tuyến các công việc bảng tính tới nhiều nhà cung cấp AI thông qua một khóa CometAPI duy nhất, thăm dò định kỳ các tác vụ video và lưu trữ mọi kết quả.

CometAPI
AnnaĐội ngũ nghiên cứu mô hình AI và API
Đã cập nhật Aug 25, 2026 14 phút đọc
Cách kết nối nhiều mô hình AI với n8n bằng một CometAPI Key
Sử dụng mẫu này

Thực hiện API call đầu tiên.

from openai import OpenAI

client = OpenAI(
    api_key="YOUR_COMETAPI_KEY",
    base_url="https://api.cometapi.com/v1",
)

response = client.chat.completions.create(
    model="gpt-5-mini",
    messages=[{"role": "user", "content": "Build this workflow."}],
)

print(response.choices[0].message.content)

Làm thế nào để kết nối nhiều mô hình AI với n8n bằng một API?

Kết nối các mô hình AI theo từng nhà cung cấp có thể phù hợp cho bản mẫu, nhưng sẽ trở nên mong manh khi mức sử dụng tăng. Mỗi nhà cung cấp mang theo thông tin xác thực, điểm cuối, định dạng yêu cầu, giới hạn tốc độ, thanh toán và cấu trúc phản hồi riêng. Trong n8n, điều đó thường tạo ra các nút HTTP trùng lặp và các nhánh riêng cho từng nhà cung cấp, nên việc thêm mô hình hoặc thay đổi tuyến dự phòng đồng nghĩa với việc phải chỉnh sửa nhiều phần của workflow.

n8n và CometAPI giải quyết các lớp khác nhau của vấn đề. n8n điều khiển thời điểm chạy job, xác thực đầu vào, định tuyến tác vụ đồng bộ và bất đồng bộ, thử lại khi thất bại và lưu kết quả. CometAPI tập trung quyền truy cập mô hình phía sau một API key và một base URL. Kết hợp lại, chúng giữ các thay đổi nhà cung cấp nằm ngoài lớp điều phối: bạn có thể đổi model ID mà vẫn giữ nguyên logic hàng đợi, polling, lưu trữ và giám sát.

Sự kết hợp này đặc biệt hữu ích cho các job ảnh và video hỗn hợp đến từ bảng tính hoặc công cụ nội bộ. Workflow vẫn trực quan và có khả năng kiểm toán trong n8n, trong khi thông tin xác thực, trạng thái khả dụng của mô hình và chi phí sử dụng trở nên dễ quản lý hơn thông qua một lớp API duy nhất.

Cách dễ nhất để tích hợp nhiều nhà cung cấp AI vào một ứng dụng là tách rời điều phối khỏi truy cập mô hình. Hãy để n8n xử lý trigger, phân nhánh, thử lại và lưu trữ, trong khi CometAPI cung cấp cho mỗi nhánh một API key và một base URL. Model ID trở thành một trường trong mỗi job thay vì một tài khoản nhà cung cấp, SDK và thiết lập thanh toán riêng biệt.

Trong hướng dẫn này, bạn sẽ xây dựng một pipeline low-code hoạt động, đọc các job ảnh và video từ Google Sheets, gửi chúng tới các mô hình OpenAI và ByteDance qua CometAPI, lưu task ID video bất đồng bộ, thăm dò để hoàn tất và upsert kết quả cuối cùng vào n8n Data Table.

Bạn sẽ xây dựng gì

Luồng hoàn chỉnh đi theo đường này:

Google Sheets Trigger → Normalize Job → Switch by media type → CometAPI image or video request → Wait and poll video tasks → Upload or reference the output → Data Table upsert.

Sử dụng các cột này trong sheet nguồn:

job_id | media_type | model | prompt | size | seconds | status

Một hàng ảnh điển hình dùng image, gpt-image-21024x1024. Một hàng video dùng video, seedance-2-5, 1280x720 và thời lượng từ 4 đến 30 giây.

Trước khi bắt đầu

Bạn cần một instance n8n, một Google Sheet, một CometAPI API key và một n8n Data Table có tên ai_jobs. Tạo các cột sau trong Data Table: job_id, media_type, model, status, task_id, result_url, errorupdated_at.

Đối với n8n tự lưu trữ, thêm các giá trị sau vào môi trường dùng bởi tiến trình n8n của bạn:

COMETAPI_BASE_URL=https://api.cometapi.com/v1COMETAPI_KEY=your_cometapi_key

Khởi động lại n8n sau khi thay đổi môi trường. Trong n8n Cloud, hoặc khi bạn không muốn lộ biến môi trường trong biểu thức của node, hãy tạo thông tin xác thực HTTP Header Auth có tên CometAPI Bearer. Đặt tên header là Authorization và giá trị là Bearer your_cometapi_key. Các ví dụ dưới đây dùng thông tin xác thực này và base URL tương thích OpenAI cố định https://api.cometapi.com/v1.

Sử dụng các model ID hiện tại

JobNhà cung cấp và mô hìnhYêu cầuKết quả
ẢnhOpenAI · gpt-image-2POST /v1/images/generationsHình ảnh base64 đồng bộ
VideoByteDance · seedance-2-5POST /v1/videosTác vụ bất đồng bộ, sau đó poll

Cả ID và khả năng đều có sẵn trong API thư mục mô hình trực tiếp của CometAPI vào ngày 11 tháng 8, 2026. Mô hình ảnh hỗ trợ tạo ảnh từ văn bản. Seedance 2.5 hỗ trợ tạo video từ văn bản và từ ảnh, clip dài 4–30 giây, và các kích thước 480p và 720p như đã được tài liệu hóa.

Giá theo ngày 11 tháng 8, 2026: trang mô hình GPT Image 2 liệt kê $4 cho một triệu token đầu vào và $24 cho một triệu token đầu ra. Trang mô hình Seedance 2.5 liệt kê $0,103 mỗi giây ở 480p và $0,231 mỗi giây ở 720p. Giá có thể thay đổi, nên hãy dùng thư mục mô hình trực tiếp hoặc trang mô hình làm nguồn sự thật lúc chạy.

Khác biệt kiến trúc quan trọng là tạo ảnh có thể xử lý như một thao tác yêu cầu-phản hồi, trong khi tạo video nên được coi là một job có trạng thái. Lưu task ID video trước khi polling ngăn việc khởi động lại execution của n8n làm mất job.

Xây dựng workflow trong n8n

1. Kích hoạt các job mới từ Google Sheets

Thêm một node Google Sheets Trigger và chọn Row added or updated. Trỏ node tới worksheet chứa hàng đợi job của bạn. Thêm một node IF ngay sau trigger và chỉ tiếp tục khi status trống hoặc bằng queued. Điều này tránh việc các hàng đã hoàn tất bị gửi lại khi sheet thay đổi.

2. Chuẩn hoá và xác thực từng hàng

Thêm một node Code có tên Normalize Job. Node này áp dụng các giá trị mặc định an toàn, giới hạn workflow vào các model ID đã phê duyệt và tạo ra cùng một tập trường cho cả hai nhánh.

const row = $json;​const allowedModels = {  image: new Set(['gpt-image-2']),  video: new Set(['seedance-2-5']),};​const mediaType = String(row.media_type || '').trim().toLowerCase();if (!allowedModels[mediaType]) {  throw new Error(`media_type must be image or video; received: ${row.media_type}`);}​const defaultModel = mediaType === 'image' ? 'gpt-image-2' : 'seedance-2-5';const model = String(row.model || defaultModel).trim();if (!allowedModels[mediaType].has(model)) {  throw new Error(`Model ${model} is not allowed for ${mediaType} jobs`);}​const prompt = String(row.prompt || '').trim();if (!prompt) throw new Error('prompt is required');​const seconds = mediaType === 'video' ? Number(row.seconds || 4) : null;if (mediaType === 'video' && (!Number.isInteger(seconds) || seconds < 4 || seconds > 30)) {  throw new Error('Seedance 2.5 seconds must be an integer from 4 to 30');}​return [{  json: {    job_id: String(row.job_id || $execution.id),    media_type: mediaType,    model,    prompt,    size: String(row.size || (mediaType === 'image' ? '1024x1024' : '1280x720')),    seconds,    status: 'processing',    updated_at: new Date().toISOString(),  },}];

Thêm một node Switch sau Normalize Job. Chuyển image đến nhánh ảnh và video đến nhánh video.

3. Tạo ảnh qua một endpoint

Thêm một node HTTP Request có tên Create Image với các thiết lập sau:

  • Method: POST
  • URL: https://api.cometapi.com/v1/images/generations
  • Authentication: thông tin xác thực Header Auth CometAPI Bearer
  • Body Content Type: JSON
{  "model": "={{ $('Normalize Job').item.json.model }}",  "prompt": "={{ $('Normalize Job').item.json.prompt }}",  "size": "={{ $('Normalize Job').item.json.size }}"}

GPT Image 2 trả về dữ liệu ảnh base64. Thêm một node Code có tên Prepare Image File để chuyển dữ liệu đó thành một item binary của n8n:

const job = $('Normalize Job').item.json;const b64 = $json.data?.[0]?.b64_json;if (!b64) throw new Error('CometAPI returned no image data');​return [{  json: {    ...job,    status: 'completed',    task_id: '',    result_url: '',    error: '',    updated_at: new Date().toISOString(),  },  binary: {    media: {      data: b64,      mimeType: 'image/png',      fileName: `${job.job_id}.png`,    },  },}];

Kết nối node này với node lưu trữ đối tượng mà bạn ưa thích, như S3 hoặc Google Drive. Lưu URL tệp trả về vào result_url, rồi upsert hàng vào ai_jobs. Tránh đưa payload base64 lớn vào Data Table.

4. Tạo một task video bất đồng bộ

Thêm một node HTTP Request có tên Create Video:

  • Method: POST
  • URL: https://api.cometapi.com/v1/videos
  • Authentication: CometAPI Bearer
  • Body Content Type: Form-Data

Thêm bốn trường form: model, prompt, secondssize. Ánh xạ giá trị của chúng từ Normalize Job.

Tiếp theo, thêm một node Code có tên Save Video Task:

const job = $('Normalize Job').item.json;const taskId = $json.id || $json.task_id;if (!taskId) throw new Error('Video task ID missing from create response');​return [{  json: {    ...job,    task_id: taskId,    status: $json.status || 'queued',    result_url: '',    error: '',    updated_at: new Date().toISOString(),  },}];

Upsert item này vào ai_jobs trước khi polling. Lưu task ID ngay lập tức nghĩa là trường hợp khởi động lại hoặc timeout sẽ không làm mất job.

5. Chờ, thăm dò và lưu URL video

Thêm một node Wait đặt 15 giây. Sau đó thêm một node HTTP Request có tên Get Video:

  • Method: GET
  • URL: =https://api.cometapi.com/v1/videos/{{ $json.task_id }}
  • Authentication: CometAPI Bearer

Sau yêu cầu, dùng một node Switch dựa trên status:

  • queued hoặc in_progress: quay lại node Wait.
  • completed: tiếp tục đến Finalize Video.
  • failed hoặc error: ghi lỗi vào ai_jobs và dừng.

Thêm node Code này cho nhánh hoàn tất:

const prior = $('Save Video Task').item.json;const resultUrl = $json.video_url || $json.url || $json.data?.video_url;if (!resultUrl) throw new Error('Completed video response has no video URL');​return [{  json: {    ...prior,    status: 'completed',    result_url: resultUrl,    error: '',    updated_at: new Date().toISOString(),  },}];

Upsert item cuối cùng vào ai_jobs theo job_id. URL video của CometAPI có thể được ký và tạm thời, nên các workflow sản xuất nên tải xuống và rehost tệp trước khi lưu URL vĩnh viễn. Nếu ứng dụng của bạn có thể nhận yêu cầu đến, hãy thay polling bằng webhook ở nơi mô hình được chọn hỗ trợ callback.

Sơ đồ node hoàn chỉnh

Workflow đầy đủ có thể lắp ráp với các node sau:

  1. Google Sheets Trigger — Row added or updated
  2. IF — Process only new or queued rows
  3. Code — Normalize Job
  4. Switch — Image or video
  5. Nhánh ảnh: HTTP Request → Prepare Image File → Object Storage → Data Table Upsert
  6. Nhánh video: HTTP Request → Save Video Task → Data Table Upsert → Wait → HTTP Request → Status Switch
  7. Video hoàn tất: Finalize Video → Object Storage hoặc URL vĩnh viễn → Data Table Upsert
  8. Video thất bại: Set Error → Data Table Upsert

Đối với nhánh thất bại, dùng biểu thức này trong một node Edit Fields:

{  "job_id": "={{ $('Save Video Task').item.json.job_id }}",  "status": "failed",  "task_id": "={{ $('Save Video Task').item.json.task_id }}",  "result_url": "",  "error": "={{ $json.error?.message || $json.message || 'Video generation failed' }}",  "updated_at": "={{ $now.toISO() }}"}

Kiểm thử workflow

Thêm hai hàng này vào sheet nguồn:

img-001 | image | gpt-image-2 | A cinematic product photo of a glass robot on a dark desk | 1024x1024 | | queuedvid-001 | video | seedance-2-5 | A paper airplane flies through a sunlit studio, smooth tracking shot | 1280x720 | 4 | queued

Yêu cầu ảnh sẽ trả về cấu trúc tương tự:

{  "created": 1786400000,  "data": [    { "b64_json": "iVBORw0KGgoAAA..." }  ]}

Yêu cầu tạo video sẽ trả về cấu trúc task tương tự:

{  "id": "video_task_abc123",  "object": "video",  "status": "queued",  "progress": 0}

Sau khi polling, phản hồi hoàn tất sẽ chứa cùng task ID, status: completed và một video_url. Các trường tuỳ chọn chính xác có thể khác nhau theo mô hình, đó là lý do mã chuẩn hoá đọc trạng thái task ổn định và URL kết quả thay vì sao chép toàn bộ phản hồi của nhà cung cấp vào cơ sở dữ liệu của bạn.

Lỗi phổ biến và cách khắc phục

LỗiCách khắc phục
401 UnauthorizedXác nhận giá trị Header Auth bắt đầu bằng Bearer và key đang hoạt động.
404 không tìm thấy mô hình hoặc tác vụKiểm tra thư mục mô hình trực tiếp và xác nhận task ID đã lưu được dùng trong GET /v1/videos/{id}.
400 kích thước hoặc số giây không hợp lệDùng kích thước được hỗ trợ và giữ thời lượng Seedance 2.5 trong khoảng 4 đến 30 giây.
429 bị giới hạn tần suấtGiảm concurrency của n8n và thử lại với backoff mũ cộng jitter.
Thăm dò không kết thúcLưu số lần thử và dừng sau một giới hạn timeout đã định; coi failed và error là trạng thái cuối.
Payload ảnh quá lớnChuyển base64 sang binary, tải lên và chỉ lưu URL vĩnh viễn.

Danh sách kiểm tra cho môi trường sản xuất

Bảo vệ thông tin xác thực. Giữ API key trong thông tin xác thực của n8n hoặc biến môi trường phía server. Không bao giờ đặt nó trong bảng tính hoặc trả về trình duyệt.

Bảo đảm mỗi job có thể idempotent. Dùng job_id làm khoá upsert của Data Table. Trước khi tạo task mới, bỏ qua các hàng đã được đánh dấu processing hoặc completed.

Kiểm soát polling và concurrency. Poll job video mỗi 10–20 giây, giới hạn số lần thử và hạn chế số execution đồng thời. Backoff khi gặp phản hồi 429, 500 và 503 thay vì tạo task trùng lặp.

Xác thực chính sách mô hình trước mỗi yêu cầu. Giữ một danh sách cho phép theo loại media. Làm mới trạng thái khả dụng và giá từ thư mục trực tiếp theo lịch, nhưng triển khai thay đổi mô hình thông qua quy trình xem xét thay vì để người dùng sheet gửi ID tuỳ ý.

Theo dõi chi phí theo job. Lưu mô hình, độ phân giải, thời lượng và các trường sử dụng với mỗi kết quả. Một job Seedance 2.5 4 giây ở 720p khoảng $0,924 theo mức giá niêm yết ngày 11 tháng 8, 2026; cùng 4 giây ở 480p khoảng $0,412. Áp đặt thời lượng và độ phân giải tối đa trước khi gửi yêu cầu.

Rehost media được tạo. Xem URL có chữ ký của nhà cung cấp như liên kết phân phối, không phải lưu trữ vĩnh viễn. Tải media đã hoàn tất, tải lên bucket do bạn kiểm soát và lưu URL bền vững cùng checksum.

Giữ nhật ký kiểm toán. Lưu mô hình yêu cầu, tham số đã làm sạch, task ID, các chuyển trạng thái, số lần retry, thời gian phản hồi và vị trí tài sản cuối cùng. Không log API key hoặc toàn bộ prompt riêng tư.

Tại sao mẫu này có khả năng mở rộng

Workflow vẫn đơn giản vì mỗi nhà cung cấp hoặc mô hình mới là một quyết định định tuyến, không phải một tích hợp tài khoản mới. Bảng tính vẫn là hàng đợi job, n8n vẫn là lớp điều phối và CometAPI vẫn là lớp truy cập duy nhất. Thêm mô hình bằng cách mở rộng danh sách cho phép và cấu hình nhánh; trigger, lưu task, polling, lưu trữ và logic giám sát vẫn không đổi.

Đó là câu trả lời thực tiễn cho tích hợp AI nhiều nhà cung cấp: một endpoint và key được kiểm soát, định tuyến mô hình rõ ràng, tách riêng đường đồng bộ và bất đồng bộ, và một bản ghi bền vững cho mỗi job.

Câu hỏi thường gặp

n8n có thể gọi nhiều nhà cung cấp AI qua một API không?

Có. Với một lớp API hợp nhất như CometAPI, n8n có thể gửi yêu cầu tới các mô hình được hỗ trợ khác nhau trong khi giữ thông tin xác thực nhà cung cấp và tích hợp HTTP tập trung.

Tôi có thể dùng CometAPI với node HTTP Request của n8n không?

Có. Node HTTP Request có thể gửi yêu cầu tới endpoint API của CometAPI với xác thực cần thiết và các tham số đặc thù theo mô hình.

n8n có thể tự động chuyển mô hình AI khi một mô hình thất bại không?

Có. Dùng nhánh IF/Switch sau yêu cầu API và định tuyến các lỗi có thể retry hoặc lỗi đặc thù mô hình tới một mô hình dự phòng. Mô hình dự phòng nên hỗ trợ cùng phương thức và các khả năng yêu cầu.

Tiếp tục học

Kết nối bài viết này với quyết định tiếp theo.

Xem tất cả chủ đề
Được xuất bản Aug 25, 2026
Cập nhật lần cuối Aug 25, 2026
0 lượt xem
Đã được xem xét về độ rõ ràng, ghi nguồn và thuật ngữ API hiện tại.

Sẵn sàng giảm 20% chi phí phát triển AI?

Bắt đầu miễn phí trong vài phút. Bao gồm tín dụng dùng thử miễn phí. Không cần thẻ tín dụng.

Đọc thêm