Add Activepieces integration for workflow automation
- Add Activepieces fork with SmoothSchedule custom piece - Create integrations app with Activepieces service layer - Add embed token endpoint for iframe integration - Create Automations page with embedded workflow builder - Add sidebar visibility fix for embed mode - Add list inactive customers endpoint to Public API - Include SmoothSchedule triggers: event created/updated/cancelled - Include SmoothSchedule actions: create/update/cancel events, list resources/services/customers 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
{
|
||||
"You can obtain your API key by navigating to [API Settings](https://app.slidespeak.co/settings/developer).": "Du kannst deinen API-Schlüssel erhalten, indem du zu [API-Einstellungen]navigierst (https://app.slidespeak.co/settings/developer).",
|
||||
"Create Presentation": "Create Presentation",
|
||||
"Edit Presentation": "Präsentation bearbeiten",
|
||||
"Get Task Status": "Get Task Status",
|
||||
"Upload Document": "Dokument hochladen",
|
||||
"Custom API Call": "Eigener API-Aufruf",
|
||||
"Creates a new presentation.": "Erstellt eine neue Präsentation.",
|
||||
"Edits an existing presentation.": "Bearbeitet eine bestehende Präsentation.",
|
||||
"Gets status of task by id.": "Ruft den Status der Aufgabe durch ID ab.",
|
||||
"Uploads a document file to SlideSpeak.": "Lädt eine Dokumentdatei auf SlideSpeak hoch.",
|
||||
"Make a custom API call to a specific endpoint": "Einen benutzerdefinierten API-Aufruf an einen bestimmten Endpunkt machen",
|
||||
"Topic": "Thema",
|
||||
"Number of Slides": "Anzahl der Folien",
|
||||
"Documents": "Dokumente",
|
||||
"Dropdown": "Dropdown",
|
||||
"Language": "Sprache",
|
||||
"Custom User Instructions": "Benutzerdefinierte Benutzeranleitungen",
|
||||
"Fetch Images": "Bilder abrufen",
|
||||
"Tone": "Ton",
|
||||
"Verbosity": "Ausführlichkeit",
|
||||
"include the ‘cover’ slide.": "inklusive der „Cover“-Folie.",
|
||||
" include the ‘table of contents’ slides.": " die Folientabelle enthalten.",
|
||||
"Response Format": "Antwortformat",
|
||||
"Powepoint File (.pptx)": "Powepoint-Datei (.pptx)",
|
||||
"Config": "Konfiguration",
|
||||
"Task ID": "Task ID",
|
||||
"File": "Datei",
|
||||
"Method": "Methode",
|
||||
"Headers": "Kopfzeilen",
|
||||
"Query Parameters": "Abfrageparameter",
|
||||
"Body": "Körper",
|
||||
"Response is Binary ?": "Antwort ist binär?",
|
||||
"No Error on Failure": "Kein Fehler bei Fehler",
|
||||
"Timeout (in seconds)": "Timeout (in Sekunden)",
|
||||
"Topic of presentation.": "Thema der Präsentation.",
|
||||
"Uploaded docuemts to use in presentation.": "Hochgeladene Docuemts für die Präsentation.",
|
||||
"Whether to include stock images.": "Gibt an, ob Bilder mit aufgenommen werden sollen.",
|
||||
"The tone to use for the text.": "Der Ton für den Text.",
|
||||
"How verbose, or long, the text should be.": "Wie ausführlich, oder lang, der Text sollte sein.",
|
||||
"Authorization headers are injected automatically from your connection.": "Autorisierungs-Header werden automatisch von Ihrer Verbindung injiziert.",
|
||||
"Enable for files like PDFs, images, etc..": "Aktivieren für Dateien wie PDFs, Bilder, etc..",
|
||||
"default": "standard",
|
||||
"casual": "lässig",
|
||||
"professional": "professionell",
|
||||
"funny": "lustig",
|
||||
"educational": "pädagogisch",
|
||||
"sales_pitch": "verkaufs_Pitch",
|
||||
"concise": "prägnant",
|
||||
"standard": "standard",
|
||||
"text-heavy": "text-schwer",
|
||||
"powerpoint": "powerpoint",
|
||||
"pdf": "pdf",
|
||||
"GET": "ERHALTEN",
|
||||
"POST": "POST",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "LÖSCHEN",
|
||||
"HEAD": "HEAD",
|
||||
"New Presentation": "Neue Präsentation",
|
||||
"Triggers when a new presentation is created.": "Wird ausgelöst, wenn eine neue Präsentation erstellt wird."
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
{
|
||||
"You can obtain your API key by navigating to [API Settings](https://app.slidespeak.co/settings/developer).": "Puedes obtener tu clave API navegando a [Configuración API](https://app.slidespeak.co/settings/developer).",
|
||||
"Create Presentation": "Create Presentation",
|
||||
"Edit Presentation": "Editar presentación",
|
||||
"Get Task Status": "Get Task Status",
|
||||
"Upload Document": "Subir Documento",
|
||||
"Custom API Call": "Llamada API personalizada",
|
||||
"Creates a new presentation.": "Crea una nueva presentación.",
|
||||
"Edits an existing presentation.": "Edita una presentación existente.",
|
||||
"Gets status of task by id.": "Obtiene el estado de la tarea por id.",
|
||||
"Uploads a document file to SlideSpeak.": "Sube un archivo de documento a SlideSpeak.",
|
||||
"Make a custom API call to a specific endpoint": "Hacer una llamada API personalizada a un extremo específico",
|
||||
"Topic": "Tema",
|
||||
"Number of Slides": "Número de diapositivas",
|
||||
"Documents": "Documentos",
|
||||
"Dropdown": "Soltar",
|
||||
"Language": "Idioma",
|
||||
"Custom User Instructions": "Instrucciones de usuario personalizadas",
|
||||
"Fetch Images": "Obtener imágenes",
|
||||
"Tone": "Tono",
|
||||
"Verbosity": "Verbosidad",
|
||||
"include the ‘cover’ slide.": "incluye la diapositiva de la \"portada\".",
|
||||
" include the ‘table of contents’ slides.": " incluye las diapositivas de “tabla de contenidos”.",
|
||||
"Response Format": "Formato de respuesta",
|
||||
"Powepoint File (.pptx)": "Archivo Powepoint (.ptx)",
|
||||
"Config": "Configuración",
|
||||
"Task ID": "Task ID",
|
||||
"File": "Archivo",
|
||||
"Method": "Método",
|
||||
"Headers": "Encabezados",
|
||||
"Query Parameters": "Parámetros de consulta",
|
||||
"Body": "Cuerpo",
|
||||
"Response is Binary ?": "¿Respuesta es binaria?",
|
||||
"No Error on Failure": "No hay ningún error en fallo",
|
||||
"Timeout (in seconds)": "Tiempo de espera (en segundos)",
|
||||
"Topic of presentation.": "Tema de presentación.",
|
||||
"Uploaded docuemts to use in presentation.": "Subidos tópicos a usar en la presentación.",
|
||||
"Whether to include stock images.": "Si incluir o no imágenes en stock.",
|
||||
"The tone to use for the text.": "El tono a usar para el texto.",
|
||||
"How verbose, or long, the text should be.": "Cuán detallado o largo debería ser el texto.",
|
||||
"Authorization headers are injected automatically from your connection.": "Las cabeceras de autorización se inyectan automáticamente desde tu conexión.",
|
||||
"Enable for files like PDFs, images, etc..": "Activar para archivos como PDFs, imágenes, etc.",
|
||||
"default": "por defecto",
|
||||
"casual": "casual",
|
||||
"professional": "profesional",
|
||||
"funny": "divertido",
|
||||
"educational": "educativo",
|
||||
"sales_pitch": "ventas_pitch",
|
||||
"concise": "conciso",
|
||||
"standard": "estándar",
|
||||
"text-heavy": "texto-pesado",
|
||||
"powerpoint": "powerpoint",
|
||||
"pdf": "pdf",
|
||||
"GET": "RECOGER",
|
||||
"POST": "POST",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "BORRAR",
|
||||
"HEAD": "LIMPIO",
|
||||
"New Presentation": "Nueva presentación",
|
||||
"Triggers when a new presentation is created.": "Dispara cuando se crea una nueva presentación."
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
{
|
||||
"You can obtain your API key by navigating to [API Settings](https://app.slidespeak.co/settings/developer).": "Vous pouvez obtenir votre clé API en accédant à [API Settings](https://app.slidespeak.co/settings/developer).",
|
||||
"Create Presentation": "Create Presentation",
|
||||
"Edit Presentation": "Modifier la présentation",
|
||||
"Get Task Status": "Get Task Status",
|
||||
"Upload Document": "Télécharger le document",
|
||||
"Custom API Call": "Appel d'API personnalisé",
|
||||
"Creates a new presentation.": "Crée une nouvelle présentation.",
|
||||
"Edits an existing presentation.": "Modifie une présentation existante.",
|
||||
"Gets status of task by id.": "Obtient le statut de la tâche par ID.",
|
||||
"Uploads a document file to SlideSpeak.": "Télécharge un fichier de document sur SlideSpeak.",
|
||||
"Make a custom API call to a specific endpoint": "Passer un appel API personnalisé à un endpoint spécifique",
|
||||
"Topic": "Sujet",
|
||||
"Number of Slides": "Nombre de diapositives",
|
||||
"Documents": "Documents",
|
||||
"Dropdown": "Liste déroulante",
|
||||
"Language": "Langue",
|
||||
"Custom User Instructions": "Instructions utilisateur personnalisées",
|
||||
"Fetch Images": "Récupérer les images",
|
||||
"Tone": "Tonalité",
|
||||
"Verbosity": "Verbosité",
|
||||
"include the ‘cover’ slide.": "inclure la diapositive « couverture».",
|
||||
" include the ‘table of contents’ slides.": " inclure les diapositives de la ‘table des matières’.",
|
||||
"Response Format": "Format de réponse",
|
||||
"Powepoint File (.pptx)": "Fichier Powepoint (.pptx)",
|
||||
"Config": "Configuration",
|
||||
"Task ID": "Task ID",
|
||||
"File": "Ficher",
|
||||
"Method": "Méthode",
|
||||
"Headers": "Headers",
|
||||
"Query Parameters": "Paramètres de requête",
|
||||
"Body": "Body",
|
||||
"Response is Binary ?": "La réponse est Binaire ?",
|
||||
"No Error on Failure": "Aucune erreur en cas d'échec",
|
||||
"Timeout (in seconds)": "Délai d'expiration (en secondes)",
|
||||
"Topic of presentation.": "Sujet de la présentation.",
|
||||
"Uploaded docuemts to use in presentation.": "Documents téléchargés à utiliser dans la présentation.",
|
||||
"Whether to include stock images.": "Inclure ou non les images par défaut.",
|
||||
"The tone to use for the text.": "Le ton à utiliser pour le texte.",
|
||||
"How verbose, or long, the text should be.": "À quel point le texte doit être long ou verbeux.",
|
||||
"Authorization headers are injected automatically from your connection.": "Les Headers d'autorisation sont injectés automatiquement à partir de votre connexion.",
|
||||
"Enable for files like PDFs, images, etc..": "Activer pour les fichiers comme les PDFs, les images, etc.",
|
||||
"default": "par défaut",
|
||||
"casual": "décontracté",
|
||||
"professional": "professionnel",
|
||||
"funny": "drôle",
|
||||
"educational": "éducatif",
|
||||
"sales_pitch": "ventes_pitch",
|
||||
"concise": "concis",
|
||||
"standard": "standard",
|
||||
"text-heavy": "texte-lourd",
|
||||
"powerpoint": "powerpoint",
|
||||
"pdf": "pdf",
|
||||
"GET": "GET",
|
||||
"POST": "POST",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "DELETE",
|
||||
"HEAD": "HEAD",
|
||||
"New Presentation": "Nouvelle présentation",
|
||||
"Triggers when a new presentation is created.": "Déclenche quand une nouvelle présentation est créée."
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
{
|
||||
"You can obtain your API key by navigating to [API Settings](https://app.slidespeak.co/settings/developer).": "[API 設定](https://app.slidespeak.co/settings/developer ) に移動すると、API キーを取得できます。",
|
||||
"Create Presentation": "Create Presentation",
|
||||
"Edit Presentation": "プレゼンテーションを編集",
|
||||
"Get Task Status": "Get Task Status",
|
||||
"Upload Document": "ドキュメントをアップロード",
|
||||
"Custom API Call": "カスタムAPI通話",
|
||||
"Creates a new presentation.": "新しいプレゼンテーションを作成します。",
|
||||
"Edits an existing presentation.": "既存のプレゼンテーションを編集します",
|
||||
"Gets status of task by id.": "タスクの状態を id で取得します。",
|
||||
"Uploads a document file to SlideSpeak.": "SlideSpeakにドキュメントファイルをアップロードします。",
|
||||
"Make a custom API call to a specific endpoint": "特定のエンドポイントへのカスタム API コールを実行します。",
|
||||
"Topic": "トピック",
|
||||
"Number of Slides": "スライドの数",
|
||||
"Documents": "ドキュメント",
|
||||
"Dropdown": "ドロップダウン",
|
||||
"Language": "言語",
|
||||
"Custom User Instructions": "カスタムユーザーの説明",
|
||||
"Fetch Images": "画像を取得",
|
||||
"Tone": "Tone",
|
||||
"Verbosity": "詳細度",
|
||||
"include the ‘cover’ slide.": "「カバー」スライドを含めます。",
|
||||
" include the ‘table of contents’ slides.": " 「目次」スライドを含めます。",
|
||||
"Response Format": "応答形式",
|
||||
"Powepoint File (.pptx)": "Powepoint ファイル (.pptx)",
|
||||
"Config": "設定",
|
||||
"Task ID": "Task ID",
|
||||
"File": "ファイル",
|
||||
"Method": "方法",
|
||||
"Headers": "ヘッダー",
|
||||
"Query Parameters": "クエリパラメータ",
|
||||
"Body": "本文",
|
||||
"Response is Binary ?": "応答はバイナリですか?",
|
||||
"No Error on Failure": "失敗時にエラーはありません",
|
||||
"Timeout (in seconds)": "タイムアウト(秒)",
|
||||
"Topic of presentation.": "プレゼンテーションのトピック",
|
||||
"Uploaded docuemts to use in presentation.": "プレゼンテーションで使用するドキュメントがアップロードされました。",
|
||||
"Whether to include stock images.": "ストック画像を含めるかどうか。",
|
||||
"The tone to use for the text.": "テキストに使用するトーン。",
|
||||
"How verbose, or long, the text should be.": "どのように冗長、または長い、テキストである必要があります。",
|
||||
"Authorization headers are injected automatically from your connection.": "認証ヘッダは接続から自動的に注入されます。",
|
||||
"Enable for files like PDFs, images, etc..": "PDF、画像などのファイルを有効にします。",
|
||||
"default": "デフォルト",
|
||||
"casual": "カジュアルな",
|
||||
"professional": "プロフェッショナル",
|
||||
"funny": "面白い|面白い|面白い|面白い|面白い|面白い|",
|
||||
"educational": "教育",
|
||||
"sales_pitch": "sales_pitch",
|
||||
"concise": "簡潔に",
|
||||
"standard": "標準",
|
||||
"text-heavy": "text-heavy",
|
||||
"powerpoint": "powerpoint",
|
||||
"pdf": "pdf",
|
||||
"GET": "取得",
|
||||
"POST": "POST",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "削除",
|
||||
"HEAD": "頭",
|
||||
"New Presentation": "新しいプレゼンテーション",
|
||||
"Triggers when a new presentation is created.": "新しいプレゼンテーションが作成されたときにトリガーします。"
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
{
|
||||
"You can obtain your API key by navigating to [API Settings](https://app.slidespeak.co/settings/developer).": "U kunt uw API-sleutel verkrijgen door te navigeren naar [API Settings](https://app.slidespeak.co/settings/developer).",
|
||||
"Create Presentation": "Create Presentation",
|
||||
"Edit Presentation": "Presentatie bewerken",
|
||||
"Get Task Status": "Get Task Status",
|
||||
"Upload Document": "Document uploaden",
|
||||
"Custom API Call": "Custom API Call",
|
||||
"Creates a new presentation.": "Maakt een nieuwe presentatie.",
|
||||
"Edits an existing presentation.": "Bewerkt een bestaande presentatie.",
|
||||
"Gets status of task by id.": "Krijgt de status van taak door id.",
|
||||
"Uploads a document file to SlideSpeak.": "Upload een documentbestand naar SlideSpeak.",
|
||||
"Make a custom API call to a specific endpoint": "Maak een aangepaste API call naar een specifiek eindpunt",
|
||||
"Topic": "Onderwerp",
|
||||
"Number of Slides": "Aantal dia's",
|
||||
"Documents": "Documenten",
|
||||
"Dropdown": "Uitklapmenu",
|
||||
"Language": "Taal",
|
||||
"Custom User Instructions": "Aangepaste gebruikersinstructies",
|
||||
"Fetch Images": "Afbeeldingen ophalen",
|
||||
"Tone": "Toon",
|
||||
"Verbosity": "Verbossing",
|
||||
"include the ‘cover’ slide.": "inclusief de ‘cover’-slide.",
|
||||
" include the ‘table of contents’ slides.": " omvatten de ‘tabel met inhoud’ slides.",
|
||||
"Response Format": "Antwoord formaat",
|
||||
"Powepoint File (.pptx)": "Powepoint bestand (.pptx)",
|
||||
"Config": "Configuratie",
|
||||
"Task ID": "Task ID",
|
||||
"File": "Bestand",
|
||||
"Method": "Methode",
|
||||
"Headers": "Kopteksten",
|
||||
"Query Parameters": "Query parameters",
|
||||
"Body": "Lichaam",
|
||||
"Response is Binary ?": "Antwoord is binair?",
|
||||
"No Error on Failure": "Geen fout bij fout",
|
||||
"Timeout (in seconds)": "Time-out (in seconden)",
|
||||
"Topic of presentation.": "Onderwerp van presentatie.",
|
||||
"Uploaded docuemts to use in presentation.": "Geüploade documenten om te gebruiken in presentatie.",
|
||||
"Whether to include stock images.": "Of er afbeeldingen van de voorraad moeten worden toegevoegd.",
|
||||
"The tone to use for the text.": "De toon voor de tekst.",
|
||||
"How verbose, or long, the text should be.": "Hoe uitgebreid of lang, de tekst zou moeten zijn.",
|
||||
"Authorization headers are injected automatically from your connection.": "Autorisatie headers worden automatisch geïnjecteerd vanuit uw verbinding.",
|
||||
"Enable for files like PDFs, images, etc..": "Inschakelen voor bestanden zoals PDF's, afbeeldingen etc..",
|
||||
"default": "standaard",
|
||||
"casual": "onvolledig",
|
||||
"professional": "professioneel",
|
||||
"funny": "grappig",
|
||||
"educational": "educatief",
|
||||
"sales_pitch": "verkoop_toonhoogte",
|
||||
"concise": "beknopt",
|
||||
"standard": "standaard",
|
||||
"text-heavy": "tekstzwaar",
|
||||
"powerpoint": "powerpoint",
|
||||
"pdf": "PDF",
|
||||
"GET": "KRIJG",
|
||||
"POST": "POSTE",
|
||||
"PATCH": "BEKIJK",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "VERWIJDEREN",
|
||||
"HEAD": "HOOFD",
|
||||
"New Presentation": "Nieuwe presentatie",
|
||||
"Triggers when a new presentation is created.": "Triggert wanneer een nieuwe presentatie wordt gemaakt."
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
{
|
||||
"You can obtain your API key by navigating to [API Settings](https://app.slidespeak.co/settings/developer).": "Você pode obter sua chave de API navegando para [Configurações da API](https://app.slidespeak.co/settings/developer).",
|
||||
"Create Presentation": "Create Presentation",
|
||||
"Edit Presentation": "Editar apresentação",
|
||||
"Get Task Status": "Get Task Status",
|
||||
"Upload Document": "Upload de documento",
|
||||
"Custom API Call": "Chamada de API personalizada",
|
||||
"Creates a new presentation.": "Cria uma nova apresentação.",
|
||||
"Edits an existing presentation.": "Edita uma apresentação existente.",
|
||||
"Gets status of task by id.": "Obtém status da tarefa por id.",
|
||||
"Uploads a document file to SlideSpeak.": "Carrega um arquivo de documento para SlideSpeak.",
|
||||
"Make a custom API call to a specific endpoint": "Faça uma chamada de API personalizada para um ponto de extremidade específico",
|
||||
"Topic": "Tópico",
|
||||
"Number of Slides": "Número de slides",
|
||||
"Documents": "Documentos",
|
||||
"Dropdown": "Suspensa",
|
||||
"Language": "IDIOMA",
|
||||
"Custom User Instructions": "Instruções Personalizadas do Usuário",
|
||||
"Fetch Images": "Buscar imagens",
|
||||
"Tone": "Tom",
|
||||
"Verbosity": "Verbossidade",
|
||||
"include the ‘cover’ slide.": "incluir o slide 'capa'.",
|
||||
" include the ‘table of contents’ slides.": " incluir os slides 'tabela de conteúdo'.",
|
||||
"Response Format": "Formato de Resposta",
|
||||
"Powepoint File (.pptx)": "Arquivo Powepoint (.pptx)",
|
||||
"Config": "Configuração",
|
||||
"Task ID": "Task ID",
|
||||
"File": "Arquivo",
|
||||
"Method": "Método",
|
||||
"Headers": "Cabeçalhos",
|
||||
"Query Parameters": "Parâmetros da consulta",
|
||||
"Body": "Conteúdo",
|
||||
"Response is Binary ?": "A resposta é binária ?",
|
||||
"No Error on Failure": "Nenhum erro no Failure",
|
||||
"Timeout (in seconds)": "Tempo limite (em segundos)",
|
||||
"Topic of presentation.": "Tópico de apresentação.",
|
||||
"Uploaded docuemts to use in presentation.": "Docuemts carregados para serem usados na apresentação.",
|
||||
"Whether to include stock images.": "Se deseja incluir imagens de estoque.",
|
||||
"The tone to use for the text.": "O tom a ser usado para o texto.",
|
||||
"How verbose, or long, the text should be.": "Quão detalhado ou longo o texto deve ser.",
|
||||
"Authorization headers are injected automatically from your connection.": "Os cabeçalhos de autorização são inseridos automaticamente a partir da sua conexão.",
|
||||
"Enable for files like PDFs, images, etc..": "Habilitar para arquivos como PDFs, imagens, etc..",
|
||||
"default": "padrão",
|
||||
"casual": "casual",
|
||||
"professional": "profissional",
|
||||
"funny": "Engraçado",
|
||||
"educational": "educacional",
|
||||
"sales_pitch": "tom_vendas",
|
||||
"concise": "conciso",
|
||||
"standard": "padrão",
|
||||
"text-heavy": "texto-pesado",
|
||||
"powerpoint": "powerpoint",
|
||||
"pdf": "PDF",
|
||||
"GET": "OBTER",
|
||||
"POST": "POSTAR",
|
||||
"PATCH": "COMPRAR",
|
||||
"PUT": "COLOCAR",
|
||||
"DELETE": "EXCLUIR",
|
||||
"HEAD": "CABEÇA",
|
||||
"New Presentation": "Nova apresentação",
|
||||
"Triggers when a new presentation is created.": "Dispara quando uma nova apresentação é criada."
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
{
|
||||
"You can obtain your API key by navigating to [API Settings](https://app.slidespeak.co/settings/developer).": "You can obtain your API key by navigating to [API Settings](https://app.slidespeak.co/settings/developer).",
|
||||
"Create Presentation": "Create Presentation",
|
||||
"Edit Presentation": "Edit Presentation",
|
||||
"Get Task Status": "Get Task Status",
|
||||
"Upload Document": "Upload Document",
|
||||
"Custom API Call": "Custom API Call",
|
||||
"Creates a new presentation.": "Creates a new presentation.",
|
||||
"Edits an existing presentation.": "Edits an existing presentation.",
|
||||
"Gets status of task by id.": "Gets status of task by id.",
|
||||
"Uploads a document file to SlideSpeak.": "Uploads a document file to SlideSpeak.",
|
||||
"Make a custom API call to a specific endpoint": "Make a custom API call to a specific endpoint",
|
||||
"Topic": "Topic",
|
||||
"Number of Slides": "Number of Slides",
|
||||
"Documents": "Documents",
|
||||
"Dropdown": "Dropdown",
|
||||
"Language": "Language",
|
||||
"Custom User Instructions": "Custom User Instructions",
|
||||
"Fetch Images": "Fetch Images",
|
||||
"Tone": "Tone",
|
||||
"Verbosity": "Verbosity",
|
||||
"include the ‘cover’ slide.": "include the ‘cover’ slide.",
|
||||
" include the ‘table of contents’ slides.": " include the ‘table of contents’ slides.",
|
||||
"Response Format": "Response Format",
|
||||
"Powepoint File (.pptx)": "Powepoint File (.pptx)",
|
||||
"Config": "Config",
|
||||
"Task ID": "Task ID",
|
||||
"File": "File",
|
||||
"Method": "Method",
|
||||
"Headers": "Headers",
|
||||
"Query Parameters": "Query Parameters",
|
||||
"Body": "Body",
|
||||
"Response is Binary ?": "Response is Binary ?",
|
||||
"No Error on Failure": "No Error on Failure",
|
||||
"Timeout (in seconds)": "Timeout (in seconds)",
|
||||
"Topic of presentation.": "Topic of presentation.",
|
||||
"Uploaded docuemts to use in presentation.": "Uploaded docuemts to use in presentation.",
|
||||
"Whether to include stock images.": "Whether to include stock images.",
|
||||
"The tone to use for the text.": "The tone to use for the text.",
|
||||
"How verbose, or long, the text should be.": "How verbose, or long, the text should be.",
|
||||
"Authorization headers are injected automatically from your connection.": "Authorization headers are injected automatically from your connection.",
|
||||
"Enable for files like PDFs, images, etc..": "Enable for files like PDFs, images, etc..",
|
||||
"default": "default",
|
||||
"casual": "casual",
|
||||
"professional": "professional",
|
||||
"funny": "funny",
|
||||
"educational": "educational",
|
||||
"sales_pitch": "sales_pitch",
|
||||
"concise": "concise",
|
||||
"standard": "standard",
|
||||
"text-heavy": "text-heavy",
|
||||
"powerpoint": "powerpoint",
|
||||
"pdf": "pdf",
|
||||
"GET": "GET",
|
||||
"POST": "POST",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "DELETE",
|
||||
"HEAD": "HEAD",
|
||||
"New Presentation": "New Presentation",
|
||||
"Triggers when a new presentation is created.": "Triggers when a new presentation is created."
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
{
|
||||
"You can obtain your API key by navigating to [API Settings](https://app.slidespeak.co/settings/developer).": "You can obtain your API key by navigating to [API Settings](https://app.slidespeak.co/settings/developer).",
|
||||
"Create Presentation": "Create Presentation",
|
||||
"Edit Presentation": "Edit Presentation",
|
||||
"Get Task Status": "Get Task Status",
|
||||
"Upload Document": "Upload Document",
|
||||
"Custom API Call": "自定义 API 呼叫",
|
||||
"Creates a new presentation.": "Creates a new presentation.",
|
||||
"Edits an existing presentation.": "Edits an existing presentation.",
|
||||
"Gets status of task by id.": "Gets status of task by id.",
|
||||
"Uploads a document file to SlideSpeak.": "Uploads a document file to SlideSpeak.",
|
||||
"Make a custom API call to a specific endpoint": "将一个自定义 API 调用到一个特定的终点",
|
||||
"Topic": "Topic",
|
||||
"Number of Slides": "Number of Slides",
|
||||
"Documents": "Documents",
|
||||
"Dropdown": "Dropdown",
|
||||
"Language": "Language",
|
||||
"Custom User Instructions": "Custom User Instructions",
|
||||
"Fetch Images": "Fetch Images",
|
||||
"Tone": "Tone",
|
||||
"Verbosity": "Verbosity",
|
||||
"include the ‘cover’ slide.": "include the ‘cover’ slide.",
|
||||
" include the ‘table of contents’ slides.": " include the ‘table of contents’ slides.",
|
||||
"Response Format": "Response Format",
|
||||
"Powepoint File (.pptx)": "Powepoint File (.pptx)",
|
||||
"Config": "Config",
|
||||
"Task ID": "Task ID",
|
||||
"File": "文件",
|
||||
"Method": "方法",
|
||||
"Headers": "信头",
|
||||
"Query Parameters": "查询参数",
|
||||
"Body": "正文内容",
|
||||
"Response is Binary ?": "Response is Binary ?",
|
||||
"No Error on Failure": "失败时没有错误",
|
||||
"Timeout (in seconds)": "超时(秒)",
|
||||
"Topic of presentation.": "Topic of presentation.",
|
||||
"Uploaded docuemts to use in presentation.": "Uploaded docuemts to use in presentation.",
|
||||
"Whether to include stock images.": "Whether to include stock images.",
|
||||
"The tone to use for the text.": "The tone to use for the text.",
|
||||
"How verbose, or long, the text should be.": "How verbose, or long, the text should be.",
|
||||
"Authorization headers are injected automatically from your connection.": "授权头自动从您的连接中注入。",
|
||||
"Enable for files like PDFs, images, etc..": "Enable for files like PDFs, images, etc..",
|
||||
"default": "default",
|
||||
"casual": "casual",
|
||||
"professional": "professional",
|
||||
"funny": "funny",
|
||||
"educational": "educational",
|
||||
"sales_pitch": "sales_pitch",
|
||||
"concise": "concise",
|
||||
"standard": "standard",
|
||||
"text-heavy": "text-heavy",
|
||||
"powerpoint": "powerpoint",
|
||||
"pdf": "pdf",
|
||||
"GET": "获取",
|
||||
"POST": "帖子",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "弹出",
|
||||
"DELETE": "删除",
|
||||
"HEAD": "黑色",
|
||||
"New Presentation": "New Presentation",
|
||||
"Triggers when a new presentation is created.": "Triggers when a new presentation is created."
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
import { createPiece, PieceAuth } from '@activepieces/pieces-framework';
|
||||
import {
|
||||
HttpMethod,
|
||||
createCustomApiCallAction,
|
||||
httpClient,
|
||||
} from '@activepieces/pieces-common';
|
||||
import { BASE_URL } from './lib/common/constants';
|
||||
import { uploadDocumentAction } from './lib/actions/upload-document';
|
||||
import { createPresentationAction } from './lib/actions/create-presentation';
|
||||
import { editPresentationAction } from './lib/actions/edit-presentation';
|
||||
import { getTaskStatusAction } from './lib/actions/get-task-status';
|
||||
import { newPresentationTrigger } from './lib/triggers/new-presentation';
|
||||
import { PieceCategory } from '@activepieces/shared';
|
||||
|
||||
export const slidespeakAuth = PieceAuth.SecretText({
|
||||
displayName: 'API Key',
|
||||
required: true,
|
||||
description: `You can obtain your API key by navigating to [API Settings](https://app.slidespeak.co/settings/developer).`,
|
||||
validate: async ({ auth }) => {
|
||||
try {
|
||||
await httpClient.sendRequest({
|
||||
url: BASE_URL + '/me',
|
||||
method: HttpMethod.GET,
|
||||
headers: {
|
||||
'X-API-key': auth,
|
||||
},
|
||||
});
|
||||
|
||||
return {
|
||||
valid: true,
|
||||
};
|
||||
} catch {
|
||||
return {
|
||||
valid: false,
|
||||
error: 'Invalid API Key',
|
||||
};
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
export const slidespeak = createPiece({
|
||||
displayName: 'SlideSpeak',
|
||||
auth: slidespeakAuth,
|
||||
minimumSupportedRelease: '0.36.1',
|
||||
logoUrl: 'https://cdn.activepieces.com/pieces/slidespeak.png',
|
||||
authors: ['rimjhimyadav'],
|
||||
categories:[PieceCategory.CONTENT_AND_FILES,PieceCategory.PRODUCTIVITY],
|
||||
actions: [
|
||||
createPresentationAction,
|
||||
editPresentationAction,
|
||||
getTaskStatusAction,
|
||||
uploadDocumentAction,
|
||||
createCustomApiCallAction({
|
||||
auth:slidespeakAuth,
|
||||
baseUrl:()=>BASE_URL,
|
||||
authMapping:async (auth)=>{
|
||||
return{
|
||||
'X-API-key':auth.secret_text,
|
||||
}
|
||||
}
|
||||
})
|
||||
],
|
||||
triggers: [newPresentationTrigger],
|
||||
});
|
||||
@@ -0,0 +1,189 @@
|
||||
import { slidespeakAuth } from '../../index';
|
||||
import { httpClient, HttpMethod } from '@activepieces/pieces-common';
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { BASE_URL } from '../common/constants';
|
||||
|
||||
export const createPresentationAction = createAction({
|
||||
auth: slidespeakAuth,
|
||||
name: 'create-presentation',
|
||||
displayName: 'Create Presentation',
|
||||
description: 'Creates a new presentation.',
|
||||
props: {
|
||||
plain_text: Property.ShortText({
|
||||
displayName: 'Topic',
|
||||
description: 'Topic of presentation.',
|
||||
required: true,
|
||||
}),
|
||||
length: Property.Number({
|
||||
displayName: 'Number of Slides',
|
||||
required: false,
|
||||
}),
|
||||
document_uuids: Property.Array({
|
||||
displayName: 'Documents',
|
||||
description: 'Uploaded docuemts to use in presentation.',
|
||||
required: false,
|
||||
}),
|
||||
template: Property.Dropdown({
|
||||
auth: slidespeakAuth,
|
||||
displayName: 'Dropdown',
|
||||
refreshers: [],
|
||||
required: false,
|
||||
options: async ({ auth }) => {
|
||||
if (!auth) {
|
||||
return {
|
||||
disabled: true,
|
||||
placeholder: 'Please connect your account first.',
|
||||
options: [],
|
||||
};
|
||||
}
|
||||
|
||||
const response = await httpClient.sendRequest<{ name: string }[]>({
|
||||
method: HttpMethod.GET,
|
||||
url: BASE_URL + '/presentation/templates',
|
||||
headers: {
|
||||
'X-API-key': auth.secret_text,
|
||||
},
|
||||
});
|
||||
|
||||
return {
|
||||
disabled: false,
|
||||
options: response.body.map((template) => {
|
||||
return {
|
||||
label: template.name,
|
||||
value: template.name,
|
||||
};
|
||||
}),
|
||||
};
|
||||
},
|
||||
}),
|
||||
language: Property.ShortText({
|
||||
displayName: 'Language',
|
||||
required: false,
|
||||
}),
|
||||
custom_user_instructions: Property.LongText({
|
||||
displayName: 'Custom User Instructions',
|
||||
required: false,
|
||||
}),
|
||||
fetch_images: Property.Checkbox({
|
||||
displayName: 'Fetch Images',
|
||||
description: 'Whether to include stock images.',
|
||||
required: false,
|
||||
}),
|
||||
tone: Property.StaticDropdown({
|
||||
displayName: 'Tone',
|
||||
description: 'The tone to use for the text.',
|
||||
required: false,
|
||||
options: {
|
||||
disabled: false,
|
||||
options: [
|
||||
{ label: 'default', value: 'default' },
|
||||
{ label: 'casual', value: 'casual' },
|
||||
{ label: 'professional', value: 'professional' },
|
||||
{ label: 'funny', value: 'funny' },
|
||||
{ label: 'educational', value: 'educational' },
|
||||
{ label: 'sales_pitch', value: 'sales_pitch' },
|
||||
],
|
||||
},
|
||||
}),
|
||||
verbosity: Property.StaticDropdown({
|
||||
displayName: 'Verbosity',
|
||||
description: 'How verbose, or long, the text should be.',
|
||||
required: false,
|
||||
options: {
|
||||
disabled: false,
|
||||
options: [
|
||||
{ label: 'concise', value: 'concise' },
|
||||
{ label: 'standard', value: 'standard' },
|
||||
{ label: 'text-heavy', value: 'text-heavy' },
|
||||
],
|
||||
},
|
||||
}),
|
||||
include_cover: Property.Checkbox({
|
||||
displayName: 'include the ‘cover’ slide.',
|
||||
required: false,
|
||||
}),
|
||||
include_table_of_contents: Property.Checkbox({
|
||||
displayName: ' include the ‘table of contents’ slides.',
|
||||
required: false,
|
||||
}),
|
||||
response_format: Property.StaticDropdown({
|
||||
displayName: 'Response Format',
|
||||
required: false,
|
||||
options: {
|
||||
disabled: false,
|
||||
options: [
|
||||
{ label: 'powerpoint', value: 'powerpoint' },
|
||||
{ label: 'pdf', value: 'pdf' },
|
||||
],
|
||||
},
|
||||
}),
|
||||
},
|
||||
async run(context) {
|
||||
const {
|
||||
plain_text,
|
||||
length,
|
||||
document_uuids,
|
||||
template,
|
||||
language,
|
||||
fetch_images,
|
||||
tone,
|
||||
verbosity,
|
||||
include_cover,
|
||||
response_format,
|
||||
include_table_of_contents,
|
||||
custom_user_instructions,
|
||||
} = context.propsValue;
|
||||
const apiKey = context.auth;
|
||||
|
||||
const response = await httpClient.sendRequest<{ task_id: string }>({
|
||||
method: HttpMethod.POST,
|
||||
url: BASE_URL + '/presentation/generate',
|
||||
headers: {
|
||||
'X-API-key': apiKey.secret_text,
|
||||
},
|
||||
body: {
|
||||
plain_text,
|
||||
length,
|
||||
document_uuids,
|
||||
template,
|
||||
language,
|
||||
fetch_images,
|
||||
tone,
|
||||
verbosity,
|
||||
include_cover,
|
||||
include_table_of_contents,
|
||||
response_format,
|
||||
custom_user_instructions,
|
||||
},
|
||||
});
|
||||
|
||||
if (!response || !response.body.task_id) {
|
||||
throw new Error('Failed to create presentation.');
|
||||
}
|
||||
|
||||
let status = 'FAILURE';
|
||||
const timeoutAt = Date.now() + 5 * 60 * 1000;
|
||||
const taskId = response.body.task_id;
|
||||
|
||||
do {
|
||||
await new Promise((resolve) => setTimeout(resolve, 5000));
|
||||
|
||||
const pollRes = await httpClient.sendRequest<{
|
||||
task_id: string;
|
||||
task_status: string;
|
||||
}>({
|
||||
method: HttpMethod.GET,
|
||||
url: BASE_URL + `/task_status/${taskId}`,
|
||||
headers: {
|
||||
'X-API-key': apiKey.secret_text,
|
||||
},
|
||||
});
|
||||
|
||||
status = pollRes.body.task_status;
|
||||
|
||||
if (status === 'SUCCESS') return pollRes.body;
|
||||
} while (status !== 'SUCCESS' && Date.now() < timeoutAt);
|
||||
|
||||
throw new Error('Create resentation timed out or failed.');
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,51 @@
|
||||
import { slidespeakAuth } from '../../index';
|
||||
import { httpClient, HttpMethod } from '@activepieces/pieces-common';
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { BASE_URL } from '../common/constants';
|
||||
import FormData from 'form-data';
|
||||
|
||||
export const editPresentationAction = createAction({
|
||||
auth: slidespeakAuth,
|
||||
name: 'edit-presentation',
|
||||
displayName: 'Edit Presentation',
|
||||
description: 'Edits an existing presentation.',
|
||||
props: {
|
||||
pptx_file: Property.File({
|
||||
displayName: 'Powepoint File (.pptx)',
|
||||
required: true,
|
||||
}),
|
||||
config: Property.Json({
|
||||
displayName: 'Config',
|
||||
required: true,
|
||||
defaultValue: {
|
||||
replacements: [
|
||||
{
|
||||
shape_name: 'TARGET_TITLE',
|
||||
content: 'Your new title',
|
||||
},
|
||||
],
|
||||
},
|
||||
}),
|
||||
},
|
||||
async run(context) {
|
||||
const { pptx_file, config } = context.propsValue;
|
||||
const apiKey = context.auth;
|
||||
|
||||
const formData = new FormData();
|
||||
const fileBuffer = Buffer.from(pptx_file.base64, 'base64');
|
||||
formData.append('pptx_file', fileBuffer, pptx_file.filename);
|
||||
formData.append('config', JSON.stringify(config));
|
||||
|
||||
const response = await httpClient.sendRequest({
|
||||
method: HttpMethod.POST,
|
||||
url: BASE_URL + '/presentation/edit',
|
||||
headers: {
|
||||
'X-API-key': apiKey.secret_text,
|
||||
...formData.getHeaders()
|
||||
},
|
||||
body: formData,
|
||||
});
|
||||
|
||||
return response.body;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,31 @@
|
||||
import { slidespeakAuth } from '../../index';
|
||||
import { httpClient, HttpMethod } from '@activepieces/pieces-common';
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { BASE_URL } from '../common/constants';
|
||||
|
||||
export const getTaskStatusAction = createAction({
|
||||
auth: slidespeakAuth,
|
||||
name: 'get-task-status',
|
||||
displayName: 'Get Task Status',
|
||||
description: 'Gets status of task by id.',
|
||||
props: {
|
||||
taskId: Property.ShortText({
|
||||
displayName: 'Task ID',
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
async run(context) {
|
||||
const { taskId } = context.propsValue;
|
||||
const apiKey = context.auth;
|
||||
|
||||
const response = await httpClient.sendRequest({
|
||||
method: HttpMethod.GET,
|
||||
url: BASE_URL + `/task_status/${taskId}`,
|
||||
headers: {
|
||||
'X-API-key': apiKey.secret_text,
|
||||
},
|
||||
});
|
||||
|
||||
return response.body;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,64 @@
|
||||
import { slidespeakAuth } from '../../index';
|
||||
import { httpClient, HttpMethod } from '@activepieces/pieces-common';
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import FormData from 'form-data';
|
||||
import { BASE_URL } from '../common/constants';
|
||||
|
||||
export const uploadDocumentAction = createAction({
|
||||
auth: slidespeakAuth,
|
||||
name: 'upload-docuemnt',
|
||||
displayName: 'Upload Document',
|
||||
description: 'Uploads a document file to SlideSpeak.',
|
||||
props: {
|
||||
file: Property.File({
|
||||
displayName: 'File',
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
async run(context) {
|
||||
const { file } = context.propsValue;
|
||||
const apiKey = context.auth;
|
||||
|
||||
const formData = new FormData();
|
||||
const fileBuffer = Buffer.from(file.base64, 'base64');
|
||||
formData.append('file', fileBuffer, file.filename);
|
||||
|
||||
const response = await httpClient.sendRequest<{task_id:string}>({
|
||||
method: HttpMethod.POST,
|
||||
url: BASE_URL + '/document/upload',
|
||||
headers: {
|
||||
'X-API-key': apiKey.secret_text,
|
||||
...formData.getHeaders(),
|
||||
},
|
||||
body:formData
|
||||
});
|
||||
|
||||
if(!response || !response.body.task_id){
|
||||
throw new Error('Failed to upload document.')
|
||||
}
|
||||
|
||||
let status = 'FAILURE'
|
||||
const timeoutAt = Date.now() + 5 * 60 * 1000;
|
||||
const taskId = response.body.task_id
|
||||
|
||||
do
|
||||
{
|
||||
await new Promise((resolve) => setTimeout(resolve, 5000));
|
||||
|
||||
const pollRes = await httpClient.sendRequest<{task_id:string,task_status:string}>({
|
||||
method:HttpMethod.GET,
|
||||
url:BASE_URL + `/task_status/${taskId}`,
|
||||
headers: {
|
||||
'X-API-key': apiKey.secret_text,
|
||||
}
|
||||
})
|
||||
|
||||
status = pollRes.body.task_status
|
||||
|
||||
if(status === 'SUCCESS') return pollRes.body;
|
||||
|
||||
}while(status !== 'SUCCESS'&& Date.now() < timeoutAt )
|
||||
|
||||
throw new Error('Upload document timed out or failed.');
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1 @@
|
||||
export const BASE_URL = 'https://api.slidespeak.co/api/v1'
|
||||
@@ -0,0 +1,53 @@
|
||||
import { slidespeakAuth } from '../../index';
|
||||
import { createTrigger, TriggerStrategy } from '@activepieces/pieces-framework';
|
||||
import { httpClient, HttpMethod } from '@activepieces/pieces-common';
|
||||
import { isNil } from '@activepieces/shared';
|
||||
import { BASE_URL } from '../common/constants';
|
||||
|
||||
export const newPresentationTrigger = createTrigger({
|
||||
auth: slidespeakAuth,
|
||||
name: 'new-presentation',
|
||||
displayName: 'New Presentation',
|
||||
description: 'Triggers when a new presentation is created.',
|
||||
type: TriggerStrategy.WEBHOOK,
|
||||
props: {},
|
||||
async onEnable(context) {
|
||||
const apiKey = context.auth;
|
||||
|
||||
const response = await httpClient.sendRequest<{ webhook_id: string }>({
|
||||
method: HttpMethod.POST,
|
||||
url: BASE_URL + '/webhook/subscribe',
|
||||
headers: {
|
||||
'X-API-key': apiKey.secret_text,
|
||||
},
|
||||
body: {
|
||||
endpoint: context.webhookUrl,
|
||||
},
|
||||
});
|
||||
|
||||
await context.store.put<string>('webhook_id', response.body.webhook_id);
|
||||
},
|
||||
async onDisable(context) {
|
||||
const webhookId = await context.store.get<string>('webhook_id');
|
||||
const apiKey = context.auth;
|
||||
|
||||
if (!isNil(webhookId)) {
|
||||
await httpClient.sendRequest({
|
||||
method: HttpMethod.DELETE,
|
||||
url: BASE_URL + '/webhook/unsubscribe',
|
||||
headers: {
|
||||
'X-API-key': apiKey.secret_text,
|
||||
},
|
||||
body: {
|
||||
webhook_id: webhookId,
|
||||
},
|
||||
});
|
||||
}
|
||||
},
|
||||
async run(context) {
|
||||
return [context.payload.body];
|
||||
},
|
||||
sampleData: {
|
||||
url: 'https://slidespeak-files.s3.us-east-2.amazonaws.com/e9c29f9f-0676-49ac-a550.pptx',
|
||||
},
|
||||
});
|
||||
Reference in New Issue
Block a user