Logo 2Slides
Construa um Agente de Apresentação com IA: Guia Completo para Desenvolvedores
2Slides Team
6 min read

Crie um Agente de Apresentação com IA: Guia Completo para Desenvolvedores

Agentes de IA estão transformando a forma como o software cria conteúdo. Um agente de apresentação com IA pode gerar, personalizar e entregar apresentações profissionais como parte de fluxos de trabalho automatizados — desde pipelines de CRM até ferramentas de relatórios internos.

Este guia o conduzirá pela construção de um agente de apresentação pronto para produção usando a API da 2Slides.

Visão Geral da Arquitetura

Um agente de apresentação geralmente segue este fluxo:

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

Componentes Principais

  1. Manipulador de Entrada — recebe solicitações de apresentação (texto, dados, arquivos)
  2. Construtor de Contexto — enriquece as solicitações com modelos, informações de marca, dados
  3. Mecanismo de Geração — chama a API da 2Slides para criar slides
  4. Monitor de Status — consulta o status da tarefa até a conclusão
  5. Camada de Entrega — retorna links de download, envia por e-mail, publica no Slack

Primeiros Passos

1. Obtenha Sua Chave de API

Cadastre-se em 2slides.com e crie uma chave de API em 2slides.com/api.

2. Instale as Dependências

npm install node-fetch dotenv

3. Implementação Básica do Agente

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' }) { // Step 1: Start generation 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 || 'Generation failed'); // Step 2: Poll until complete 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('Generation failed'); await new Promise(r => setTimeout(r, 3000)); } throw new Error('Generation timed out'); } 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(); } } // Usage const agent = new PresentationAgent('sk-2slides-xxx'); const result = await agent.generateSlides({ topic: 'Q1 2026 Business Review', themeId: 'mckinsey-theme-id', resolution: '2K' }); console.log('Download:', result.downloadUrl);

Implementação em 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('Generation failed') time.sleep(3) raise TimeoutError('Generation timed out') # Usage agent = PresentationAgent('sk-2slides-xxx') result = agent.generate_slides('AI Trends 2026', resolution='4K') print(f"Download: {result['downloadUrl']}")

Padrões Avançados

Padrão 1: Geração Baseada em Modelos

Pré-configure temas para diferentes casos de uso:

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

Padrão 2: Integração com Pipeline de Dados

Conecte-se às suas fontes de dados:

async function weeklyReport(dataSource) { // 1. Fetch latest data const data = await dataSource.getWeeklyMetrics(); // 2. Format as presentation input const topic = `Weekly Report: Revenue $${data.revenue}, Users ${data.users}, Churn ${data.churn}%`; // 3. Generate slides const result = await agent.generateSlides({ topic, themeId: 'mckinsey-id' }); // 4. Deliver await slackBot.postMessage('#team-updates', `Weekly report ready: ${result.downloadUrl}`); }

Padrão 3: Saída Multi-Formato

Gere slides + narração + vídeo em um único pipeline:

async function fullPresentation(topic) { // 1. Generate slides const slides = await agent.generateSlides({ topic }); // 2. Add voice narration await agent.addNarration({ jobId: slides.jobId, mode: 'multi', voice: 'Charon' }); // 3. Download with 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(); }

Considerações para Produção

Limitação de Taxa

  • Padrão: 60 requisições/minuto
  • Lide com respostas 429 usando exponential backoff
  • Use o modo assíncrono para operações em lote

Tratamento de Erros

  • Envolva todas as chamadas de API em try/catch
  • Implemente lógica de repetição para falhas transitórias
  • Registre os IDs das tarefas para depuração

Gerenciamento de Custos

  • Acompanhe o uso de créditos por geração
  • Configure alertas de orçamento no seu painel da 2Slides
  • Use resoluções mais baixas para conteúdo interno/rascunho

Segurança

  • Armazene as chaves de API em variáveis de ambiente, nunca no código
  • Use chamadas de API apenas no lado do servidor — nunca exponha chaves a clientes
  • Implemente assinatura de requisições para callbacks de webhook

Perguntas Frequentes

Posso construir um produto SaaS com base na API da 2Slides?

Sim — a API foi projetada para uso em produção. Não há restrições para aplicações comerciais.

Qual é o limite máximo de geração simultânea?

A API lida com requisições concorrentes através de limitação de taxa (rate limiting). Para necessidades de alto volume, entre em contato com a equipe da 2Slides para limites empresariais.

Existe um webhook para a conclusão da tarefa?

Atualmente, use o polling através do endpoint de tarefas. O suporte a webhook está no roteiro.


Crie seu agente de apresentação — obtenha sua chave de API na 2Slides e comece a gerar slides programaticamente.

About 2Slides

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

Try For Free
2Slides logo

Seu Agente IA para slides. Economize tempo, brilhe mais rápido com criação inteligente de apresentações.

Resumir com IA

ChatGPTClaudeGrokPerplexity
Todos os serviços online

Recursos

Comparação

Galeria

Recursos

Comparação

Galeria

© 2026 2slides. Todos os direitos reservados.