2Slides Logo
Membangun AI Presentation Agent: Panduan Lengkap Developer
2Slides Team
6 min read

Membangun AI Presentation Agent: Panduan Lengkap untuk Developer

AI agent sedang mentransformasi cara software membuat konten. Sebuah AI presentation agent dapat menghasilkan, menyesuaikan, dan mengirimkan slide deck profesional sebagai bagian dari workflow otomatis — mulai dari pipeline CRM hingga tool pelaporan internal.

Panduan ini akan memandu Anda membangun presentation agent yang production-ready menggunakan 2Slides API.

Gambaran Arsitektur

Sebuah presentation agent biasanya mengikuti alur ini:

User Request → Agent Logic → 2Slides API → Poll Job → Deliver Result Context Gathering (data, templates, brand assets)

Komponen Inti

  1. Input Handler — menerima permintaan presentasi (teks, data, file)
  2. Context Builder — memperkaya permintaan dengan template, informasi brand, data
  3. Generation Engine — memanggil 2Slides API untuk membuat slide
  4. Status Monitor — polling status job hingga selesai
  5. Delivery Layer — mengembalikan link download, mengirim via email, posting ke Slack

Memulai

1. Dapatkan API Key Anda

Daftar di 2slides.com dan buat API key di 2slides.com/api.

2. Instal Dependencies

npm install node-fetch dotenv

3. Implementasi Agent Dasar

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' }) { // Langkah 1: Mulai generasi 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 || 'Generasi gagal'); // Langkah 2: Polling hingga selesai 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('Generasi gagal'); await new Promise(r => setTimeout(r, 3000)); } throw new Error('Generasi melebihi batas waktu'); } 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(); } } // Penggunaan const agent = new PresentationAgent('sk-2slides-xxx'); const result = await agent.generateSlides({ topic: 'Tinjauan Bisnis Q1 2026', themeId: 'mckinsey-theme-id', resolution: '2K' }); console.log('Unduh:', result.downloadUrl);

Implementasi 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('Pembuatan gagal') time.sleep(3) raise TimeoutError('Pembuatan melebihi batas waktu') # Penggunaan agent = PresentationAgent('sk-2slides-xxx') result = agent.generate_slides('Tren AI 2026', resolution='4K') print(f"Unduh: {result['downloadUrl']}")

Pola Lanjutan

Pola 1: Generasi Berbasis Template

Konfigurasikan tema sebelumnya untuk berbagai kasus penggunaan:

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 }); }

Pola 2: Integrasi Pipeline Data

Hubungkan ke sumber data Anda:

async function weeklyReport(dataSource) { // 1. Ambil data terbaru const data = await dataSource.getWeeklyMetrics(); // 2. Format sebagai input presentasi const topic = `Laporan Mingguan: Pendapatan $${data.revenue}, Pengguna ${data.users}, Churn ${data.churn}%`; // 3. Generate slide const result = await agent.generateSlides({ topic, themeId: 'mckinsey-id' }); // 4. Kirimkan await slackBot.postMessage('#team-updates', `Laporan mingguan siap: ${result.downloadUrl}`); }

Pola 3: Output Multi-Format

Generate slide + narasi + video dalam satu pipeline:

async function fullPresentation(topic) { // 1. Generate slide const slides = await agent.generateSlides({ topic }); // 2. Tambahkan narasi suara await agent.addNarration({ jobId: slides.jobId, mode: 'multi', voice: 'Charon' }); // 3. Unduh dengan audio 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(); }

Pertimbangan Produksi

Rate Limiting

  • Default: 60 permintaan/menit
  • Tangani respons 429 dengan exponential backoff
  • Gunakan mode async untuk operasi batch

Penanganan Error

  • Bungkus semua panggilan API dalam try/catch
  • Implementasikan logika retry untuk kegagalan sementara
  • Catat job ID untuk debugging

Manajemen Biaya

  • Lacak penggunaan kredit per generasi
  • Atur peringatan budget di dashboard 2Slides Anda
  • Gunakan resolusi lebih rendah untuk konten internal/draft

Keamanan

  • Simpan API key dalam variabel lingkungan, jangan pernah dalam kode
  • Gunakan panggilan API sisi server saja — jangan pernah ekspos key ke klien
  • Implementasikan penandatanganan permintaan untuk callback webhook

Pertanyaan yang Sering Diajukan

Bisakah saya membangun produk SaaS di atas 2Slides API?

Ya — API dirancang untuk penggunaan produksi. Tidak ada pembatasan pada aplikasi komersial.

Berapa batas generasi konkuren maksimum?

API menangani permintaan konkuren melalui rate limiting. Untuk kebutuhan volume tinggi, hubungi tim 2Slides untuk batas enterprise.

Apakah ada webhook untuk penyelesaian job?

Saat ini, gunakan polling melalui endpoint jobs. Dukungan webhook ada dalam roadmap.


Bangun agen presentasi Anda — dapatkan API key Anda di 2Slides dan mulai generate slide secara programatis.

About 2Slides

Create stunning AI-powered presentations in seconds. Transform your ideas into professional slides with 2slides AI Agent.

Try For Free