DeepSeek Vision and Grok Imagine models are now live on CometAPI →
guide/งานวิจัย CometAPI

วิธีเชื่อมต่อโมเดล AI หลายตัวเข้ากับ n8n ด้วยคีย์ CometAPI เพียงคีย์เดียว

สร้างเวิร์กโฟลว์ n8n แบบโลว์โค้ดที่จัดเส้นทางงานสเปรดชีตไปยังผู้ให้บริการ AI หลายรายผ่านคีย์ CometAPI เดียว โพลลิงงานวิดีโอเป็นระยะ และจัดเก็บผลลัพธ์ทั้งหมด

CometAPI
Annaทีมวิจัยโมเดล AI และ API
อัปเดตแล้ว Aug 25, 2026 7 นาทีในการอ่าน
วิธีเชื่อมต่อโมเดล AI หลายตัวเข้ากับ n8n ด้วยคีย์ CometAPI เพียงคีย์เดียว
ใช้รูปแบบนี้

เรียกใช้ API ครั้งแรก

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)

จะเชื่อมต่อโมเดล AI หลายตัวกับ n8n ด้วย API เดียวได้อย่างไร

การเชื่อมต่อโมเดล AI แบบทีละผู้ให้บริการอาจเพียงพอสำหรับต้นแบบ แต่เมื่อการใช้งานเติบโตขึ้นก็จะเปราะบาง ผู้ให้บริการแต่ละรายมีข้อมูลรับรองปลายทาง รูปแบบคำขอ ข้อจำกัดอัตรา การเรียกเก็บเงิน และโครงสร้างการตอบกลับแยกกัน ใน n8n สิ่งนี้มักทำให้เกิดโหนด HTTP ที่ซ้ำซ้อนและกิ่งก้านเฉพาะผู้ให้บริการ ดังนั้นการเพิ่มโมเดลหรือเปลี่ยนเส้นทางสำรองจะหมายถึงการแก้ไขหลายส่วนของเวิร์กโฟลว์

n8n และ CometAPI แก้ปัญหาในคนละเลเยอร์ n8n ควบคุมว่าเมื่อใดให้งานทำงาน ตรวจสอบความถูกต้องของอินพุต กำหนดเส้นทางงานแบบซิงโครนัสและอะซิงโครนัส ทำการลองใหม่เมื่อเกิดข้อผิดพลาด และจัดเก็บผลลัพธ์ CometAPI รวมการเข้าถึงโมเดลไว้ภายใต้คีย์ API เดียวและ base URL เดียว เมื่อทำงานร่วมกัน พวกเขาช่วยกันกันการเปลี่ยนแปลงผู้ให้บริการออกจากเลเยอร์ออร์เคสเตรชัน: คุณสามารถสลับ model ID โดยยังคงตรรกะคิว การโพลล์ การจัดเก็บ และการมอนิเตอร์เดิมไว้

การผสมผสานนี้มีประโยชน์อย่างยิ่งสำหรับงานภาพและวิดีโอแบบผสมที่มาจากสเปรดชีตหรือเครื่องมือภายใน เวิร์กโฟลว์ยังคงเป็นภาพและตรวจสอบได้ใน n8n ขณะที่ข้อมูลรับรอง ความพร้อมใช้งานของโมเดล และค่าใช้จ่ายในการใช้งานยังคงจัดการได้ง่ายผ่านเลเยอร์ API เดียว

วิธีที่ง่ายที่สุดในการบูรณาการผู้ให้บริการ AI หลายรายเข้ากับแอปเดียว คือแยกออร์เคสเตรชันออกจากการเข้าถึงโมเดล ให้ n8n จัดการทริกเกอร์ การแตกแขนง การลองใหม่ และการจัดเก็บ ขณะที่ CometAPI มอบคีย์ API เดียวและ base URL เดียวให้กับทุกแขนง โดยเปลี่ยน model ID ให้กลายเป็นฟิลด์หนึ่งในแต่ละงานแทนที่จะเป็นบัญชีผู้ให้บริการ SDK และการตั้งค่าบิลลิงแยกกัน

ในคู่มือนี้ คุณจะสร้างไปป์ไลน์แบบ low-code ที่ใช้งานได้จริงซึ่งอ่านงานภาพและวิดีโอจาก Google Sheets ส่งไปยังโมเดลของ OpenAI และ ByteDance ผ่าน CometAPI บันทึก ID งานวิดีโอแบบอะซิงโครนัส โพลล์จนเสร็จ และอัปเสิร์ตผลลัพธ์สุดท้ายลงใน n8n Data Table

สิ่งที่คุณจะสร้าง

เวิร์กโฟลว์ที่เสร็จแล้วดำเนินตามเส้นทางนี้:

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.

ใช้คอลัมน์เหล่านี้ในชีตต้นทาง:

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

แถวภาพทั่วไปใช้ image, gpt-image-2 และ 1024x1024 แถววิดีโอใช้ video, seedance-2-5, 1280x720 และระยะเวลาตั้งแต่ 4 ถึง 30 วินาที

ก่อนที่คุณจะเริ่ม

คุณต้องมีอินสแตนซ์ n8n, Google Sheet, คีย์ API ของ CometAPI และ n8n Data Table ชื่อ ai_jobs สร้างคอลัมน์เหล่านี้ใน Data Table: job_id, media_type, model, status, task_id, result_url, error, และ updated_at

สำหรับ n8n แบบ self-hosted ให้เพิ่มค่าเหล่านี้ลงในสภาพแวดล้อมที่ใช้โดยโปรเซส n8n ของคุณ:

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

รีสตาร์ท n8n หลังจากเปลี่ยนสภาพแวดล้อม ใน n8n Cloud หรือเมื่อใดก็ตามที่คุณไม่ต้องการเปิดเผยตัวแปรสภาพแวดล้อมในนิพจน์ของโหนด ให้สร้าง Credential แบบ HTTP Header Auth ชื่อ CometAPI Bearer ตั้งชื่อเฮดเดอร์เป็น Authorization และค่าคือ Bearer your_cometapi_key ตัวอย่างด้านล่างใช้ Credential นี้และ OpenAI-compatible base URL แบบคงที่ https://api.cometapi.com/v1.

ใช้ Model ID ปัจจุบัน

งานผู้ให้บริการและโมเดลคำขอผลลัพธ์
ภาพOpenAI · gpt-image-2POST /v1/images/generationsรูปภาพ base64 แบบซิงโครนัส
วิดีโอByteDance · seedance-2-5POST /v1/videosงานแบบอะซิงโครนัส แล้วค่อยโพลล์

ทั้ง ID และความสามารถมีอยู่ใน API ไดเรกทอรีโมเดลแบบ live ของ CometAPI ณ วันที่ 11 สิงหาคม 2026 โมเดลภาพรองรับการสร้างภาพจากข้อความ Seedance 2.5 รองรับการสร้างวิดีโอจากข้อความและจากภาพ ความยาวคลิป 4–30 วินาที และขนาด 480p และ 720p ตามที่มีเอกสารไว้

ราคาข ณ วันที่ 11 สิงหาคม 2026: หน้าโมเดล GPT Image 2 ระบุ $4 ต่อหนึ่งล้านโทเค็นอินพุตและ $24 ต่อหนึ่งล้านโทเค็นเอาต์พุต หน้าโมเดล Seedance 2.5 ระบุ $0.103 ต่อวินาทีที่ 480p และ $0.231 ต่อวินาทีที่ 720p ราคาอาจเปลี่ยนแปลงได้ ดังนั้นให้ใช้ไดเรกทอรีโมเดลแบบ live หรือหน้าโมเดลเป็นแหล่งความจริงขณะรันไทม์

ความแตกต่างด้านสถาปัตยกรรมที่สำคัญคือ การสร้างภาพสามารถจัดการแบบคำขอ-ตอบกลับได้ ขณะที่การสร้างวิดีโอควรถูกมองว่าเป็นงานที่มีสถานะ ต้องบันทึก ID งานวิดีโอก่อนการโพลล์เพื่อป้องกันไม่ให้การรีสตาร์ทการทำงานของ n8n ทำให้งานหายไป

สร้างเวิร์กโฟลว์ใน n8n

  1. Trigger งานใหม่จาก Google Sheets

เพิ่มโหนด Google Sheets Trigger และเลือก Row added or updated ชี้ไปยังเวิร์กชีตที่มีคิวงานของคุณ เพิ่มโหนด IF ต่อจากทริกเกอร์และดำเนินการต่อเฉพาะเมื่อ status ว่างหรือเท่ากับ queued สิ่งนี้ป้องกันไม่ให้แถวที่เสร็จแล้วถูกส่งอีกเมื่อชีตมีการเปลี่ยนแปลง

  1. ทำให้แต่ละแถวเป็นมาตรฐานและตรวจสอบความถูกต้อง

เพิ่มโหนด Code ชื่อ Normalize Job โหนดนี้จะกำหนดค่าเริ่มต้นที่ปลอดภัย จำกัดเวิร์กโฟลว์ให้ใช้เฉพาะ model ID ที่อนุมัติ และผลิตฟิลด์เดียวกันสำหรับทั้งสองแขนง

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(),  },}];

เพิ่มโหนด Switch หลัง Normalize Job กำหนดเส้นทาง image ไปยังแขนงภาพ และ video ไปยังแขนงวิดีโอ

  1. สร้างภาพผ่านเอ็นด์พอยต์เดียว

เพิ่มโหนด HTTP Request ชื่อ Create Image ด้วยการตั้งค่าเหล่านี้:

  • Method: POST
  • URL: https://api.cometapi.com/v1/images/generations
  • Authentication: Credential แบบ CometAPI Bearer Header Auth
  • 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 ส่งคืนข้อมูลภาพแบบ base64 เพิ่มโหนด Code ชื่อ Prepare Image File เพื่อแปลงข้อมูลนั้นเป็นไอเท็มแบบไบนารีของ 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`,    },  },}];

เชื่อมโหนดนี้ไปยังโหนดที่เก็บไฟล์วัตถุที่คุณชอบ เช่น S3 หรือ Google Drive จัดเก็บ URL ของไฟล์ที่ได้ไว้ใน result_url จากนั้นอัปเสิร์ตแถวลงใน ai_jobs หลีกเลี่ยงการเก็บเพย์โหลด base64 ขนาดใหญ่ใน Data Table

  1. สร้างงานวิดีโอแบบอะซิงโครนัส

เพิ่มโหนด HTTP Request ชื่อ Create Video:

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

เพิ่มช่องฟอร์มสี่ช่อง: model, prompt, seconds และ size แมปค่าจาก Normalize Job

ถัดไป เพิ่มโหนด Code ชื่อ 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(),  },}];

อัปเสิร์ตไอเท็มนี้ลงใน ai_jobs ก่อนการโพลล์ การบันทึก task ID ทันทีหมายความว่าการรีสตาร์ทหรือหมดเวลาจะไม่ทำให้งานหายไป

  1. รอ โพลล์ และจัดเก็บ URL ของวิดีโอ

เพิ่มโหนด Wait ตั้งไว้ 15 วินาที จากนั้นเพิ่มโหนด HTTP Request ชื่อ Get Video:

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

หลังคำขอ ใช้โหนด Switch บน status:

  • queued หรือ in_progress: กลับไปยังโหนด Wait
  • completed: ดำเนินต่อไปยัง Finalize Video
  • failed หรือ error: เขียนข้อผิดพลาดลงใน ai_jobs และหยุด

เพิ่มโค้ดโหนดนี้สำหรับแขนงที่เสร็จแล้ว:

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(),  },}];

อัปเสิร์ตไอเท็มสุดท้ายลงใน ai_jobs โดยใช้ job_id URL ของวิดีโอจาก CometAPI อาจเป็นแบบลงชื่อและชั่วคราว ดังนั้นเวิร์กโฟลว์ในโปรดักชันควรดาวน์โหลดและโฮสต์ใหม่ไฟล์ก่อนบันทึก URL ถาวร หากแอปของคุณรับคำขาเข้าได้ ให้แทนการโพลล์ด้วย webhook เมื่อโมเดลที่เลือกสนับสนุนการเรียกกลับ

แผนที่โหนดครบถ้วน

คุณสามารถประกอบเวิร์กโฟลว์เต็มได้ด้วยโหนดต่อไปนี้:

  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. Image branch: HTTP Request → Prepare Image File → Object Storage → Data Table Upsert
  6. Video branch: HTTP Request → Save Video Task → Data Table Upsert → Wait → HTTP Request → Status Switch
  7. Completed video: Finalize Video → Object Storage or permanent URL → Data Table Upsert
  8. Failed video: Set Error → Data Table Upsert

สำหรับแขนงความล้มเหลว ใช้นิพจน์นี้ในโหนด 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() }}"}

ทดสอบเวิร์กโฟลว์

เพิ่มสองแถวนี้ลงในชีตต้นทาง:

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

คำขอภาพควรส่งคืนโครงสร้างคล้ายกับ:

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

คำขอสร้างวิดีโอควรส่งคืนโครงสร้างงานคล้ายกับ:

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

หลังการโพลล์ การตอบกลับที่เสร็จสมบูรณ์ควรมี task ID เดิม status: completed และ video_url ฟิลด์เสริมที่แน่นอนอาจแตกต่างกันไปตามโมเดล ซึ่งเป็นเหตุผลว่าทำไมโค้ด normalization จึงอ่านสถานะงานที่เสถียรและ result URL แทนที่จะคัดลอกการตอบกลับจากผู้ให้บริการทั้งหมดลงฐานข้อมูลของคุณ

ข้อผิดพลาดทั่วไปและวิธีแก้

ข้อผิดพลาดวิธีแก้
401 Unauthorizedตรวจสอบว่าค่า Header Auth เริ่มต้นด้วย Bearer และคีย์ยังใช้งานอยู่
404 model or task not foundตรวจสอบไดเรกทอรีโมเดลแบบ live และยืนยันว่าใช้ task ID ที่บันทึกกับ GET /v1/videos/{id}
400 invalid size or secondsใช้ขนาดที่รองรับและคงระยะเวลา Seedance 2.5 ไว้ระหว่าง 4 ถึง 30 วินาที
429 rate limitedลดความพร้อมกันของ n8n และลองใหม่ด้วย backoff แบบเอ็กซ์โปเนนเชียลพร้อม jitter
Polling never endsบันทึกจำนวนความพยายามและหยุดหลังครบกำหนดเวลา; ปฏิบัติต่อ failed และ error เป็นสถานะสิ้นสุด
Image payload is too largeแปลง base64 เป็นไบนารี อัปโหลด และเก็บเฉพาะ URL ถาวร

เช็กลิสต์สำหรับโปรดักชัน

  • ป้องกันข้อมูลรับรอง: เก็บคีย์ API ไว้ใน Credential ของ n8n หรือในตัวแปรสภาพแวดล้อมฝั่งเซิร์ฟเวอร์ อย่าใส่ไว้ในสเปรดชีตหรือส่งกลับไปยังเบราว์เซอร์
  • ทำให้งานทุกงานเป็น idempotent: ใช้ job_id เป็นคีย์อัปเสิร์ต Data Table ก่อนสร้างงานใหม่ ให้ข้ามแถวที่ถูกทำเครื่องหมายว่า processing หรือ completed อยู่แล้ว
  • ควบคุมการโพลล์และความพร้อมกัน: โพลล์งานวิดีโอทุก 10–20 วินาที จำกัดจำนวนความพยายาม และจำกัดการทำงานพร้อมกัน ถอยหลังเมื่อเจอการตอบกลับ 429, 500 และ 503 แทนที่จะสร้างงานซ้ำ
  • ตรวจสอบนโยบายโมเดลก่อนทุกคำขอ: เก็บ allowlist ตามประเภทสื่อ รีเฟรชความพร้อมใช้งานของโมเดลและราคาโดยอิงจากไดเรกทอรีแบบ live ตามตารางเวลา แต่ปรับใช้การเปลี่ยนโมเดลผ่านการรีวิวแทนการปล่อยให้ผู้ใช้สเปรดชีตส่ง ID ตามใจ
  • ติดตามต้นทุนต่อหนึ่งงาน: จัดเก็บโมเดล ความละเอียด ระยะเวลา และฟิลด์การใช้งานกับผลลัพธ์แต่ละรายการ งาน Seedance 2.5 ความยาว 4 วินาทีที่ 720p อยู่ที่ประมาณ $0.924 ตามอัตราที่ระบุ ณ 11 สิงหาคม 2026; ความยาวเดียวกันที่ 480p อยู่ที่ประมาณ $0.412 บังคับใช้ระยะเวลาและความละเอียดสูงสุดก่อนส่งคำขอ
  • โฮสต์สื่อที่สร้างขึ้นใหม่: ปฏิบัติต่อ URL ที่ลงชื่อจากผู้ให้บริการเป็นลิงก์ส่งมอบ ไม่ใช่ที่จัดเก็บถาวร ดาวน์โหลดสื่อที่เสร็จแล้ว อัปโหลดไปยังบัคเก็ตที่คุณควบคุม และบันทึก URL ที่ทนทานพร้อมเช็คซัม
  • เก็บร่องรอยการตรวจสอบ: จัดเก็บโมเดลคำขอ พารามิเตอร์ที่ sanitize แล้ว task ID การเปลี่ยนสถานะ จำนวนการลองใหม่ เวลาตอบสนอง และตำแหน่งสินทรัพย์สุดท้าย อย่าบันทึกคีย์ API หรือพรอมต์ส่วนตัวแบบเต็ม

ทำไมรูปแบบนี้จึงขยายได้

เวิร์กโฟลว์ยังคงเรียบง่ายเพราะผู้ให้บริการหรือโมเดลใหม่แต่ละตัวเป็นเพียงการตัดสินใจด้านการกำหนดเส้นทาง ไม่ใช่การบูรณาการบัญชีใหม่ สเปรดชีตยังคงเป็นคิวงาน n8n ยังเป็นเลเยอร์ออร์เคสเตรชัน และ CometAPI ยังเป็นเลเยอร์การเข้าถึงเดียว เพิ่มโมเดลด้วยการขยาย allowlist และการกำหนดค่ากิ่งก้าน; ขณะที่ทริกเกอร์ การคงอยู่ของงาน การโพลล์ การจัดเก็บ และตรรกะการมอนิเตอร์ยังคงไม่เปลี่ยนแปลง

นี่คือคำตอบเชิงปฏิบัติสำหรับการบูรณาการ AI หลายผู้ให้บริการ: เอ็นด์พอยต์และคีย์เดียวที่ควบคุมได้ การกำหนดเส้นทางโมเดลอย่างชัดเจน แยกเส้นทางซิงก์และอะซิงก์ และบันทึกที่คงทนสำหรับทุกงาน

คำถามที่พบบ่อย

คำถาม: n8n สามารถเรียกผู้ให้บริการ AI หลายรายผ่าน API เดียวได้ไหม?

คำตอบ: ได้ ด้วยเลเยอร์ API แบบรวม เช่น CometAPI n8n สามารถส่งคำขอไปยังโมเดลที่รองรับต่างๆ ได้ ขณะเก็บ Credential ของผู้ให้บริการและการรวม HTTP ไว้ศูนย์กลาง

คำถาม: ฉันสามารถใช้ CometAPI กับโหนด HTTP Request ของ n8n ได้ไหม?

คำตอบ: ได้ โหนด HTTP Request สามารถส่งคำขอไปยังเอ็นด์พอยต์ของ CometAPI พร้อมการรับรองความถูกต้องและพารามิเตอร์เฉพาะโมเดลที่ต้องการ

คำถาม: n8n สามารถสลับโมเดล AI อัตโนมัติเมื่อโมเดลหนึ่งล้มเหลวได้ไหม?

คำตอบ: ได้ ใช้แขนง IF/Switch หลังคำขอ API และกำหนดเส้นทางความล้มเหลวที่ลองใหม่ได้หรือเฉพาะโมเดลไปยังโมเดลสำรอง โมเดลสำรองควรรองรับโมดาลิตี้และความสามารถที่จำเป็นเหมือนกัน

เรียนรู้ต่อ

เชื่อมโยงบทความนี้กับการตัดสินใจถัดไป

ดูทุกหัวข้อ
เผยแพร่เมื่อ Aug 25, 2026
อัปเดตล่าสุด Aug 25, 2026
0 ครั้งที่ดู
ตรวจสอบความชัดเจน การอ้างอิงแหล่งที่มา และคำศัพท์ API ปัจจุบันแล้ว

พร้อมลดต้นทุนการพัฒนา AI ลง 20% แล้วหรือยัง?

เริ่มต้นฟรีภายในไม่กี่นาที มีเครดิตทดลองใช้ฟรี ไม่ต้องใช้บัตรเครดิต

อ่านเพิ่มเติม