كيف يمكنك ربط نماذج ذكاء اصطناعي متعددة بـ n8n عبر واجهة API واحدة؟
يمكن أن ينجح ربط نماذج الذكاء الاصطناعي عبر مزود واحد في كل مرة كتجربة أولية، لكنه يصبح هشًا مع ازدياد الاستخدام. فكل مزود يجلب بيانات اعتماد ونقاط نهاية وصيغ طلبات وحدود معدل وفوترة وبُنى استجابات منفصلة. في n8n، يؤدي هذا غالبًا إلى تكرار عقد HTTP وتفرعات خاصة بكل مزود، لذا فإن إضافة نموذج أو تغيير مسار بديل يعني تعديل أجزاء متعددة من سير العمل.
تعالج n8n وCometAPI طبقات مختلفة من المشكلة. تتحكم n8n في توقيت تشغيل المهمة، والتحقق من صحة المدخلات، وتوجيه المهام المتزامنة وغير المتزامنة، وإعادة المحاولة عند الفشل، وتخزين النتائج. تجمع CometAPI الوصول إلى النماذج خلف مفتاح API واحد وعنوان قاعدة واحد. معًا، يُبقون تغييرات المزود خارج طبقة الأوركسترة: يمكنك تبديل معرف النموذج مع الحفاظ على نفس نظام الانتظار والاستطلاع والتخزين والمراقبة.
يكون هذا المزيج مفيدًا بشكل خاص للوظائف المختلطة للصور والفيديو القادمة من جداول بيانات أو أدوات داخلية. يبقى سير العمل بصريًا وقابلًا للتدقيق في n8n، بينما تبقى بيانات الاعتماد وتوافر النماذج وتكاليف الاستخدام أسهل في الإدارة من خلال طبقة API واحدة.
أسهل طريقة لدمج عدة مزودين للذكاء الاصطناعي في تطبيق واحد هي فصل الأوركسترة عن الوصول إلى النماذج. دع n8n يتعامل مع المشغلات والتفرعات وإعادة المحاولات والتخزين، بينما تمنح CometAPI كل فرع مفتاح API واحدًا وعنوان قاعدة واحدًا. يصبح معرف النموذج حقلًا في كل مهمة بدلًا من أن يكون حساب مزود منفصلًا وSDK وإعداد فوترة.
في هذا الدليل، ستبني خط أنابيب منخفض الشفرة يعمل على قراءة مهام الصور والفيديو من Google Sheets، وإرسالها إلى نماذج OpenAI وByteDance عبر CometAPI، وحفظ معرفات مهام الفيديو غير المتزامنة، والاستطلاع حتى الاكتمال، ثم إدراج أو تحديث النتيجة النهائية في n8n Data Table.
ماذا ستبني
يسير سير العمل النهائي بهذا المسار:
Google Sheets Trigger → Normalize Job → Switch حسب نوع الوسائط → طلب صورة أو فيديو عبر CometAPI → الانتظار واستطلاع مهام الفيديو → رفع أو مرجعة المخرجات → 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 المُستضاف ذاتيًا، أضف القيم التالية إلى بيئة العملية التي تشغل n8n:
COMETAPI_BASE_URL=https://api.cometapi.com/v1COMETAPI_KEY=your_cometapi_key
أعد تشغيل n8n بعد تغيير البيئة. في n8n Cloud، أو عندما لا تريد كشف متغيرات البيئة في تعابير العقد، أنشئ بيانات اعتماد HTTP Header Auth باسم CometAPI Bearer. اضبط اسم الترويسة على Authorization والقيمة على Bearer your_cometapi_key. تستخدم الأمثلة أدناه هذه البيانات الاعتمادية وعنوان OpenAI-compatible base URL الثابت https://api.cometapi.com/v1.
استخدم معرفات النماذج الحالية
| Job | Provider and model | Request | Result |
|---|---|---|---|
| Image | OpenAI · gpt-image-2 | POST /v1/images/generations | Synchronous base64 image |
| Video | ByteDance · seedance-2-5 | POST /v1/videos | Asynchronous task, then poll |
كانت هذه المعرفات والقدرات متاحة في واجهة API لدليل نماذج 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. قد تتغير الأسعار، لذا استخدم دليل النماذج الحي أو صفحة النموذج كمصدر موثوق وقت التشغيل.
الفارق المعماري المهم هو أن توليد الصور يمكن التعامل معه كعملية طلب-استجابة، بينما يجب التعامل مع توليد الفيديو كمهمة ذات حالة. إن حفظ معرف مهمة الفيديو قبل الاستطلاع يمنع فقدان المهمة عند إعادة تشغيل تنفيذ n8n.
بناء سير العمل في n8n
1. تشغيل مهام جديدة من Google Sheets
أضف عقدة Google Sheets Trigger واختر Row added or updated. وجّهها إلى ورقة العمل التي تحتوي على قائمة مهامك. أضف عقدة IF مباشرة بعد المشغل وتابع فقط عندما يكون status فارغًا أو يساوي queued. هذا يمنع إرسال الصفوف المكتملة مرة أخرى عند تغيّر الورقة.
2. توحيد الشكل والتحقق من كل صف
أضف عقدة Code باسم Normalize Job. تطبّق هذه العقدة قيَمًا افتراضية آمنة، وتقيّد سير العمل بمعرفات نماذج معتمدة، وتنتج نفس الحقول لكلا الفرعين.
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 image أو video؛ المستلم: ${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} غير مسموح لمهام ${mediaType}`);}const prompt = String(row.prompt || '').trim();if (!prompt) throw new Error('prompt مطلوب');const seconds = mediaType === 'video' ? Number(row.seconds || 4) : null;if (mediaType === 'video' && (!Number.isInteger(seconds) || seconds < 4 || seconds > 30)) { throw new Error('يجب أن تكون قيمة seconds في Seedance 2.5 عددًا صحيحًا بين 4 و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 إلى فرع الفيديو.
3. توليد الصور عبر نقطة نهاية واحدة
أضف عقدة HTTP Request باسم Create Image بالإعدادات التالية:
- Method:
POST - URL:
https://api.cometapi.com/v1/images/generations - Authentication: بيانات اعتماد 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 بيانات صورة 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 بيانات صورة');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، ثم نفّذ upsert للصف في ai_jobs. أبقِ حمولات base64 الكبيرة خارج Data Table.
4. إنشاء مهمة فيديو غير متزامنة
أضف عقدة HTTP Request باسم Create Video:
- Method:
POST - URL:
https://api.cometapi.com/v1/videos - Authentication:
CometAPI Bearer - Body Content Type: Form-Data
أضف أربعة حقول form: 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('معرّف مهمة الفيديو مفقود من استجابة الإنشاء');return [{ json: { ...job, task_id: taskId, status: $json.status || 'queued', result_url: '', error: '', updated_at: new Date().toISOString(), },}];
نفّذ upsert لهذا العنصر في ai_jobs قبل الاستطلاع. إن حفظ معرف المهمة فورًا يعني أن إعادة التشغيل أو انتهاء المهلة لن يفقد المهمة.
5. الانتظار، الاستطلاع، وتخزين عنوان فيديو 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وتوقف.
أضف عقدة Code لهذا الفرع المكتمل:
const prior = $('Save Video Task').item.json;const resultUrl = $json.video_url || $json.url || $json.data?.video_url;if (!resultUrl) throw new Error('لا يحتوي رد الفيديو المكتمل على عنوان فيديو URL');return [{ json: { ...prior, status: 'completed', result_url: resultUrl, error: '', updated_at: new Date().toISOString(), },}];
نفّذ upsert للعُنصر النهائي في ai_jobs بواسطة job_id. قد تكون عناوين URL للفيديو في CometAPI موقعة ومؤقتة، لذا ينبغي على سير العمل الإنتاجي تنزيل الملف وإعادة استضافته قبل حفظ عنوان URL الدائم. إذا كان تطبيقك يستطيع استقبال طلبات واردة، فاستبدل الاستطلاع بWebhook حيث يدعم النموذج المحدد ردود النداء.
خريطة العقد الكاملة
يمكن تجميع سير العمل الكامل باستخدام العقد التالية:
- Google Sheets Trigger — Row added or updated
- IF — معالجة الصفوف الجديدة أو ذات الحالة queued فقط
- Code — Normalize Job
- Switch — Image أو Video
- فرع الصور: HTTP Request → Prepare Image File → Object Storage → Data Table Upsert
- فرع الفيديو: HTTP Request → Save Video Task → Data Table Upsert → Wait → HTTP Request → Status Switch
- فيديو مكتمل: Finalize Video → Object Storage أو عنوان URL دائم → Data Table Upsert
- فيديو فشل: 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 || 'فشل توليد الفيديو' }}", "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}
بعد الاستطلاع، ينبغي أن يحتوي الرد المكتمل على نفس معرف المهمة، وstatus: completed، وvideo_url. قد تختلف الحقول الاختيارية الدقيقة حسب النموذج، ولهذا يقرأ كود التوحيد حالة المهمة وعنوان النتيجة المستقر بدلًا من نسخ استجابة المزود كاملة إلى قاعدة بياناتك.
أخطاء شائعة وحلول
| Error | Fix |
|---|---|
| 401 Unauthorized | تأكد أن قيمة Header Auth تبدأ بـ Bearer وأن المفتاح فعّال. |
| 404 model or task not found | تحقق من دليل النماذج الحي وتأكد من استخدام معرف المهمة المخزن في GET /v1/videos/{id}. |
| 400 invalid size or seconds | استخدم حجمًا مدعومًا واحفظ مدة Seedance 2.5 بين 4 و30 ثانية. |
| 429 rate limited | خفّض توازي n8n وأعد المحاولة بارتداد أُسّي مع jitter. |
| Polling never ends | خزّن عدد المحاولات وتوقف بعد مهلة محددة؛ اعتبر حالتي failed وerror نهائيتين. |
| Image payload is too large | حوّل base64 إلى ثنائي، ارفعها، وخزّن فقط عنوان URL الدائم. |
قائمة تحقق للإنتاج
- حماية بيانات الاعتماد. احتفظ بمفتاح API في بيانات اعتماد n8n أو متغيرات بيئة على الخادم. لا تضعه في جدول البيانات أو تعيده إلى المتصفح.
- اجعل كل مهمة قابلة للإعادة بلا آثار جانبية. استخدم
job_idكمفتاح upsert في Data Table. قبل إنشاء مهمة جديدة، تخطّ الصفوف المعلّمةprocessingأوcompleted. - تحكم في الاستطلاع والتوازي. استطلع مهام الفيديو كل 10–20 ثانية، وحدد عدد المحاولات، وقيّد عدد التنفيذات المتزامنة. تراجع عند استجابات 429 و500 و503 بدلًا من إنشاء مهام مكررة.
- تحقق من سياسة النموذج قبل كل طلب. احتفظ بقائمة سماح حسب نوع الوسائط. حدّث توافر النماذج والأسعار من الدليل الحي وفق جدول، لكن انشر تغييرات النماذج عبر مراجعة بدلًا من السماح لمستخدمي الجدول بإرسال معرفات عشوائية.
- تتبع التكلفة لكل مهمة. خزّن النموذج والدقة والمدة وحقول الاستخدام مع كل نتيجة. تكلفة مهمة Seedance 2.5 لمدة أربع ثوان على 720p نحو 0.924$ بحسب سعر 11 أغسطس 2026؛ ونحو 0.412$ لنفس الأربع ثوان على 480p. طبّق قيودًا على أقصى مدة ودقة قبل إرسال الطلب.
- أعد استضافة الوسائط المولدة. اعتبر عناوين URL الموقعة روابط تسليم لا تخزينًا دائمًا. نزّل الوسائط المكتملة، وارفعها إلى مخزن تملكه، واحفظ العنوان الدائم مع قيمة checksum.
- احفظ سجل تدقيق. خزّن نموذج الطلب والمعلمات المنقحة ومعرف المهمة وحالات الانتقال وعدد المحاولات وزمن الاستجابة والموقع النهائي للأصل. لا تسجل مفاتيح API أو المطالبات الخاصة كاملة.
لماذا يتوسع هذا النمط بسهولة
يبقى سير العمل بسيطًا لأن كل مزود أو نموذج جديد هو قرار توجيه، وليس تكامل حساب جديد. يبقى الجدول الإلكتروني قائمة المهام، وتبقى n8n طبقة الأوركسترة، وتبقى CometAPI طبقة الوصول الموحدة. أضف نموذجًا بتمديد قائمة السماح وتكوين الفرع؛ تظل منطق المشغّل واستمرارية المهام والاستطلاع والتخزين والمراقبة دون تغيير.
هذه هي الإجابة العملية لتكامل مزودين متعددين للذكاء الاصطناعي: نقطة نهاية واحدة مُتحكَّم بها ومفتاح واحد، توجيه نماذج صريح، مسارات متزامنة وغير متزامنة منفصلة، وسجل متين لكل مهمة.
الأسئلة الشائعة
هل يمكن لـ n8n استدعاء مزودين متعددين للذكاء الاصطناعي عبر واجهة API واحدة؟
نعم. مع طبقة API موحّدة مثل CometAPI، يمكن لـ n8n إرسال الطلبات إلى نماذج مختلفة مدعومة مع إبقاء بيانات اعتماد المزود وتكامل HTTP مركزيًا.
هل يمكنني استخدام CometAPI مع عقدة HTTP Request في n8n؟
نعم. يمكن لعقدة HTTP Request إرسال الطلبات إلى نقطة نهاية CometAPI مع المصادقة المطلوبة والمعلمات الخاصة بكل نموذج.
هل يمكن لـ n8n التبديل تلقائيًا بين النماذج عند فشل أحدها؟
نعم. استخدم فرع IF/Switch بعد طلب API ووجّه الإخفاقات القابلة لإعادة المحاولة أو الخاصة بنموذج معيّن إلى نموذج احتياطي. يجب أن يدعم النموذج الاحتياطي نفس النمط والقدرات المطلوبة.
