

بناء وكيل عروض تقديمية بالذكاء الاصطناعي: دليل شامل للمطورين
وكلاء الذكاء الاصطناعي يُحدثون ثورة في كيفية إنشاء البرمجيات للمحتوى. يمكن لوكيل العروض التقديمية بالذكاء الاصطناعي إنشاء وتخصيص وتسليم عروض شرائح احترافية كجزء من سير العمل الآلي — من خطوط أنابيب CRM إلى أدوات التقارير الداخلية.
يرشدك هذا الدليل خلال بناء وكيل عروض تقديمية جاهز للإنتاج باستخدام 2Slides API.
نظرة عامة على البنية المعمارية
عادةً ما يتبع وكيل العروض التقديمية هذا التدفق:
طلب المستخدم → منطق الوكيل → 2Slides API → استطلاع المهمة → تسليم النتيجة ↓ جمع السياق (البيانات، القوالب، أصول العلامة التجارية)
المكونات الأساسية
- معالج المدخلات — يستقبل طلبات العروض التقديمية (نصوص، بيانات، ملفات)
- منشئ السياق — يُثري الطلبات بالقوالب ومعلومات العلامة التجارية والبيانات
- محرك الإنشاء — يستدعي 2Slides API لإنشاء الشرائح
- مراقب الحالة — يستطلع حالة المهمة حتى الاكتمال
- طبقة التسليم — تُرجع روابط التنزيل، وترسل عبر البريد الإلكتروني، وتنشر على Slack
البدء
1. احصل على مفتاح API الخاص بك
سجل في 2slides.com وأنشئ مفتاح API على 2slides.com/api.
2. تثبيت التبعيات
npm install node-fetch dotenv
3. تطبيق الوكيل الأساسي
import fetch from 'node-fetch'; class PresentationAgent { constructor(apiKey) { this.apiKey = apiKey; this.baseUrl = 'https://2slides.com/api/v1'; } async generateSlides({ topic, themeId, language = 'en', resolution = '2K' }) { // الخطوة 1: بدء الإنشاء const response = await fetch(`${this.baseUrl}/slides/generate`, { method: 'POST', headers: { 'Authorization': `Bearer ${this.apiKey}`, 'Content-Type': 'application/json' }, body: JSON.stringify({ userInput: topic, themeId, responseLanguage: language, resolution, mode: 'async' }) }); const job = await response.json(); if (!response.ok) throw new Error(job.error || 'فشل الإنشاء'); // الخطوة 2: الاستعلام حتى الاكتمال return await this.waitForCompletion(job.jobId); } async waitForCompletion(jobId, maxWait = 300000) { const start = Date.now(); while (Date.now() - start < maxWait) { const response = await fetch(`${this.baseUrl}/jobs/${jobId}`, { headers: { 'Authorization': `Bearer ${this.apiKey}` } }); const status = await response.json(); if (status.status === 'success') return status; if (status.status === 'failed') throw new Error('فشل الإنشاء'); await new Promise(r => setTimeout(r, 3000)); } throw new Error('انتهت مهلة الإنشاء'); } async generateFromFile({ fileUrl, prompt, themeId }) { const response = await fetch(`${this.baseUrl}/slides/create-pdf-slides`, { method: 'POST', headers: { 'Authorization': `Bearer ${this.apiKey}`, 'Content-Type': 'application/json' }, body: JSON.stringify({ fileUrl, userInput: prompt, themeId, mode: 'async' }) }); const job = await response.json(); return await this.waitForCompletion(job.jobId); } async generateWithDesign({ topic, referenceImageUrl, resolution = '2K' }) { const response = await fetch(`${this.baseUrl}/slides/create-like-this`, { method: 'POST', headers: { 'Authorization': `Bearer ${this.apiKey}`, 'Content-Type': 'application/json' }, body: JSON.stringify({ userInput: topic, designStyle: { global: { referenceImageUrl } }, resolution, mode: 'async' }) }); const job = await response.json(); return await this.waitForCompletion(job.jobId); } async addNarration({ jobId, mode = 'single', voice = 'Charon' }) { const response = await fetch(`${this.baseUrl}/slides/generate-narration`, { method: 'POST', headers: { 'Authorization': `Bearer ${this.apiKey}`, 'Content-Type': 'application/json' }, body: JSON.stringify({ jobId, mode, voice, contentMode: 'concise' }) }); return await response.json(); } } // الاستخدام const agent = new PresentationAgent('sk-2slides-xxx'); const result = await agent.generateSlides({ topic: 'مراجعة الأعمال للربع الأول 2026', themeId: 'mckinsey-theme-id', resolution: '2K' }); console.log('التحميل:', result.downloadUrl);
تطبيق Python
import requests import time class PresentationAgent: def __init__(self, api_key): self.api_key = api_key self.base_url = 'https://2slides.com/api/v1' self.headers = { 'Authorization': f'Bearer {api_key}', 'Content-Type': 'application/json' } def generate_slides(self, topic, theme_id=None, language='en', resolution='2K'): response = requests.post( f'{self.base_url}/slides/generate', headers=self.headers, json={ 'userInput': topic, 'themeId': theme_id, 'responseLanguage': language, 'resolution': resolution, 'mode': 'async' } ) response.raise_for_status() job = response.json() return self._wait_for_completion(job['jobId']) def generate_from_file(self, file_url, prompt, theme_id=None): response = requests.post( f'{self.base_url}/slides/create-pdf-slides', headers=self.headers, json={ 'fileUrl': file_url, 'userInput': prompt, 'themeId': theme_id, 'mode': 'async' } ) response.raise_for_status() job = response.json() return self._wait_for_completion(job['jobId']) def _wait_for_completion(self, job_id, max_wait=300): start = time.time() while time.time() - start < max_wait: response = requests.get( f'{self.base_url}/jobs/{job_id}', headers=self.headers ) status = response.json() if status['status'] == 'success': return status if status['status'] == 'failed': raise Exception('فشل الإنشاء') time.sleep(3) raise TimeoutError('انتهت مهلة الإنشاء') # الاستخدام agent = PresentationAgent('sk-2slides-xxx') result = agent.generate_slides('اتجاهات AI لعام 2026', resolution='4K') print(f"التحميل: {result['downloadUrl']}")
الأنماط المتقدمة
النمط 1: الإنشاء بناءً على القوالب
تكوين السمات مسبقاً لحالات استخدام مختلفة:
const TEMPLATES = { 'pitch-deck': { themeId: 'apple-id', resolution: '2K' }, 'quarterly-review': { themeId: 'mckinsey-id', resolution: '2K' }, 'training': { themeId: 'corporate-id', resolution: '1K' }, 'social-media': { themeId: 'saul-bass-id', resolution: '4K', aspectRatio: '1:1' }, }; async function generateByType(type, topic) { const config = TEMPLATES[type]; return agent.generateSlides({ topic, ...config }); }
النمط 2: تكامل خط أنابيب البيانات
الاتصال بمصادر البيانات الخاصة بك:
async function weeklyReport(dataSource) { // 1. جلب أحدث البيانات const data = await dataSource.getWeeklyMetrics(); // 2. تنسيق كمدخل للعرض التقديمي const topic = `التقرير الأسبوعي: الإيرادات $${data.revenue}، المستخدمون ${data.users}، معدل التوقف ${data.churn}%`; // 3. إنشاء الشرائح const result = await agent.generateSlides({ topic, themeId: 'mckinsey-id' }); // 4. التسليم await slackBot.postMessage('#team-updates', `التقرير الأسبوعي جاهز: ${result.downloadUrl}`); }
النمط 3: مخرجات متعددة التنسيقات
إنشاء الشرائح + السرد الصوتي + الفيديو في خط أنابيب واحد:
async function fullPresentation(topic) { // 1. إنشاء الشرائح const slides = await agent.generateSlides({ topic }); // 2. إضافة السرد الصوتي await agent.addNarration({ jobId: slides.jobId, mode: 'multi', voice: 'Charon' }); // 3. التنزيل مع الصوت const download = await fetch(`${agent.baseUrl}/slides/download-slides-pages-voices`, { method: 'POST', headers: agent.headers, body: JSON.stringify({ jobId: slides.jobId }) }); return download.json(); }
اعتبارات الإنتاج
تحديد المعدل
- الافتراضي: 60 طلب/دقيقة
- التعامل مع استجابات 429 بالتراجع الأسي
- استخدام الوضع غير المتزامن للعمليات الدفعية
معالجة الأخطاء
- تغليف جميع استدعاءات API في try/catch
- تنفيذ منطق إعادة المحاولة للإخفاقات المؤقتة
- تسجيل معرفات المهام لتصحيح الأخطاء
إدارة التكلفة
- تتبع استخدام الرصيد لكل إنشاء
- تعيين تنبيهات الميزانية في لوحة تحكم 2Slides
- استخدام دقة أقل للمحتوى الداخلي/المسودات
الأمان
- تخزين مفاتيح API في متغيرات البيئة، وليس في الكود أبداً
- استخدام استدعاءات API من جانب الخادم فقط — عدم الكشف عن المفاتيح للعملاء أبداً
- تنفيذ توقيع الطلبات لاستدعاءات webhook
الأسئلة الشائعة
هل يمكنني بناء منتج SaaS على قمة 2Slides API؟
نعم — تم تصميم API للاستخدام في الإنتاج. لا توجد قيود على التطبيقات التجارية.
ما هو الحد الأقصى للإنشاء المتزامن؟
يتعامل API مع الطلبات المتزامنة عبر تحديد المعدل. للاحتياجات كبيرة الحجم، اتصل بفريق 2Slides للحصول على حدود المؤسسات.
هل يوجد webhook لإتمام المهمة؟
حالياً، استخدم الاستطلاع عبر نقطة نهاية المهام. دعم Webhook موجود على خريطة الطريق.
قم ببناء وكيل العروض التقديمية الخاص بك — احصل على مفتاح API الخاص بك في 2Slides وابدأ في إنشاء الشرائح برمجياً.
About 2Slides
Create stunning AI-powered presentations in seconds. Transform your ideas into professional slides with 2slides AI Agent.
Try For Free