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:
poduck
2025-12-18 22:59:37 -05:00
parent 9848268d34
commit 3aa7199503
16292 changed files with 1284892 additions and 4708 deletions

View File

@@ -0,0 +1,33 @@
{
"extends": [
"../../../../.eslintrc.base.json"
],
"ignorePatterns": [
"!**/*"
],
"overrides": [
{
"files": [
"*.ts",
"*.tsx",
"*.js",
"*.jsx"
],
"rules": {}
},
{
"files": [
"*.ts",
"*.tsx"
],
"rules": {}
},
{
"files": [
"*.js",
"*.jsx"
],
"rules": {}
}
]
}

View File

@@ -0,0 +1,7 @@
# pieces-heygen
This library was generated with [Nx](https://nx.dev).
## Building
Run `nx build pieces-heygen` to build the library.

View File

@@ -0,0 +1,4 @@
{
"name": "@activepieces/piece-heygen",
"version": "0.0.7"
}

View File

@@ -0,0 +1,65 @@
{
"name": "pieces-heygen",
"$schema": "../../../../node_modules/nx/schemas/project-schema.json",
"sourceRoot": "packages/pieces/community/heygen/src",
"projectType": "library",
"release": {
"version": {
"currentVersionResolver": "git-tag",
"preserveLocalDependencyProtocols": false,
"manifestRootsToUpdate": [
"dist/{projectRoot}"
]
}
},
"tags": [],
"targets": {
"build": {
"executor": "@nx/js:tsc",
"outputs": [
"{options.outputPath}"
],
"options": {
"outputPath": "dist/packages/pieces/community/heygen",
"tsConfig": "packages/pieces/community/heygen/tsconfig.lib.json",
"packageJson": "packages/pieces/community/heygen/package.json",
"main": "packages/pieces/community/heygen/src/index.ts",
"assets": [
"packages/pieces/community/heygen/*.md",
{
"input": "packages/pieces/community/heygen/src/i18n",
"output": "./src/i18n",
"glob": "**/!(i18n.json)"
}
],
"buildableProjectDepsInPackageJsonType": "dependencies",
"updateBuildableProjectDepsInPackageJson": true
},
"dependsOn": [
"^build",
"prebuild"
]
},
"nx-release-publish": {
"options": {
"packageRoot": "dist/{projectRoot}"
}
},
"lint": {
"executor": "@nx/eslint:lint",
"outputs": [
"{options.outputFile}"
]
},
"prebuild": {
"executor": "nx:run-commands",
"options": {
"cwd": "packages/pieces/community/heygen",
"command": "bun install --no-save --silent"
},
"dependsOn": [
"^build"
]
}
}
}

View File

@@ -0,0 +1,72 @@
{
"Generate and manage AI avatar videos using HeyGen.": "Generieren und verwalten Sie AI Avatar Videos mit HeyGen.",
"You can obtain your API key by navigating to your Space Settings in HeyGen App.": "Sie können Ihren API-Schlüssel erhalten, indem Sie in Ihren Space Einstellungen in der HeyGen App navigieren.",
"Create Video from Template": "Video aus Vorlage erstellen",
"Retrieve Translated Video Status": "Übersetzter Video-Status abrufen",
"Retrieve Video Status": "Videostatus abrufen",
"Retrieve Sharable Video URL": "URL des freigegebenen Videos abrufen",
"Upload an Asset": "Asset hochladen",
"Translate Video": "Video übersetzen",
"Custom API Call": "Eigener API-Aufruf",
"Create a video using a selected template.": "Erstellen Sie ein Video mit einer ausgewählten Vorlage.",
"Retrieves the status of a translated video.": "Ruft den Status eines übersetzten Videos ab.",
"Retrieve the status and details of a video using its ID.": "Rufen Sie den Status und die Details eines Videos unter Verwendung seiner ID ab.",
"Generates a public URL for a video, allowing it to be shared and accessed publicly.": "Erzeugt eine öffentliche URL für ein Video, so dass es geteilt und öffentlich zugänglich gemacht werden kann.",
"Upload media files (images, videos, or audio) to HeyGen. Supports JPEG, PNG, MP4, WEBM, and MPEG files.": "Mediendateien (Bilder, Videos oder Audio) in HeyGen hochladen. Unterstützt JPEG, PNG, MP4, WEBM und MPEG-Dateien.",
"Translate a video into 175+ languages with natural voice and lip-sync.": "Übersetzen Sie ein Video in 175+ Sprachen mit natürlicher Stimme und Lippensynchron.",
"Make a custom API call to a specific endpoint": "Einen benutzerdefinierten API-Aufruf an einen bestimmten Endpunkt machen",
"Template": "Vorlage",
"Video Title": "Videotitel",
"Enable Captions": "Bildunterschriften aktivieren",
"Include GIF Preview": "GIF-Vorschau einbeziehen",
"Enable Public Sharing": "Öffentliches Teilen aktivieren",
"Folder": "Ordner",
"Brand Voice": "Marke Stimme",
"Callback URL": "Callback URL",
"Video Width": "Video-Breite",
"Video Height": "Videohöhe",
"Template Varriables": "Verfügbare Vorlagen",
"Video ID": "Video ID",
"File": "Datei",
"Video URL": "Video-URL",
"Title": "Titel",
"Supported Language": "Unterstützte Sprache",
"Translate Audio Only": "Nur Audio übersetzen",
"Number of Speakers": "Anzahl der Lautsprecher",
"Callback ID": "Callback ID",
"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)",
"Select the template to generate the video.": "Wählen Sie die Vorlage aus, um das Video zu generieren.",
"Title of the generated video.": "Titel des generierten Videos.",
"Select the folder to store the video.": "Wählen Sie den Ordner zum Speichern des Videos.",
"Select the Brand Voice to apply to the video.": "Wählen Sie die Marke Voice zum Anwenden auf das Video.",
"Webhook URL to notify when video rendering is complete.": "Webhook URL, die angezeigt wird, wenn die Video-Darstellung abgeschlossen ist.",
"The ID of the translated video to check the status for.": "Die ID des übersetzten Videos um den Status zu überprüfen.",
"The ID of the video to retrieve the status for.": "Die ID des Videos, für das der Status abgerufen wird.",
"The ID of the video to generate a shareable URL for.": "Die ID des Videos, um eine teilbare URL zu generieren.",
"The file to upload (JPEG, PNG, MP4, WEBM, or MPEG).": "Die hochzuladende Datei (JPEG, PNG, MP4, WEBM oder MPEG).",
"URL of the video file to be translated. Supports direct URLs, Google Drive, and YouTube.": "URL der zu übersetzenden Videodatei. Unterstützt direkte URLs, Google Drive und YouTube.",
"Optional title of the translated video.": "Optionaler Titel des übersetzten Videos.",
"Select the language for video translation.": "Wählen Sie die Sprache für die Videoübersetzung.",
"Only translate the audio without modifying faces.": "Nur den Ton übersetzen, ohne Gesichter zu verändern.",
"Number of speakers in the video (if applicable).": "Anzahl der Lautsprecher im Video (falls zutreffend).",
"Custom ID returned in webhook callback.": "Benutzerdefinierte ID im Webhook Callback zurückgegeben.",
"URL to notify when translation is complete.": "URL zur Benachrichtigung, wenn die Übersetzung abgeschlossen ist.",
"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..",
"GET": "ERHALTEN",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "LÖSCHEN",
"HEAD": "HEAD",
"New Avatar Video Event (Success)": "Neues Avatar-Video-Ereignis (Erfolg)",
"New Avatar Video Event (Fail)": "Neues Avatar-Video-Ereignis (Fail)",
"Triggers when a video is generated successfully.": "Wird ausgelöst, wenn ein Video erfolgreich generiert wurde.",
"Triggers when a video generation process fails.": "Wird ausgelöst, wenn ein Videogenerierungsprozess fehlschlägt."
}

View File

@@ -0,0 +1,72 @@
{
"Generate and manage AI avatar videos using HeyGen.": "Generar y administrar vídeos de avatar de IA usando HeyGen.",
"You can obtain your API key by navigating to your Space Settings in HeyGen App.": "Puede obtener su clave de API navegando a la configuración espacial en la aplicación HeyGen.",
"Create Video from Template": "Crear vídeo desde plantilla",
"Retrieve Translated Video Status": "Recuperar estado de vídeo traducido",
"Retrieve Video Status": "Recuperar estado del vídeo",
"Retrieve Sharable Video URL": "Recuperar URL de vídeo compartible",
"Upload an Asset": "Subir un Activo",
"Translate Video": "Traducir vídeo",
"Custom API Call": "Llamada API personalizada",
"Create a video using a selected template.": "Crear un vídeo con una plantilla seleccionada.",
"Retrieves the status of a translated video.": "Recuperar el estado de un vídeo traducido.",
"Retrieve the status and details of a video using its ID.": "Recuperar el estado y los detalles de un video usando su ID.",
"Generates a public URL for a video, allowing it to be shared and accessed publicly.": "Genera una URL pública para un vídeo, permitiéndole compartir y acceder públicamente.",
"Upload media files (images, videos, or audio) to HeyGen. Supports JPEG, PNG, MP4, WEBM, and MPEG files.": "Subir archivos multimedia (imágenes, vídeos o audio) a HeyGen. Soporta archivos JPEG, PNG, MP4, WEBM y MPEG.",
"Translate a video into 175+ languages with natural voice and lip-sync.": "Traducir un video a más de 175 idiomas con voz natural y lip-sync.",
"Make a custom API call to a specific endpoint": "Hacer una llamada API personalizada a un extremo específico",
"Template": "Plantilla",
"Video Title": "Título del vídeo",
"Enable Captions": "Activar leyendas",
"Include GIF Preview": "Incluye vista previa GIF",
"Enable Public Sharing": "Activar Compartir Público",
"Folder": "Carpeta",
"Brand Voice": "Voz de marca",
"Callback URL": "Callback URL",
"Video Width": "Ancho de vídeo",
"Video Height": "Altura de vídeo",
"Template Varriables": "Plantillas Varriables",
"Video ID": "ID de vídeo",
"File": "Archivo",
"Video URL": "URL del vídeo",
"Title": "Título",
"Supported Language": "Idioma soportado",
"Translate Audio Only": "Traducir solo audio",
"Number of Speakers": "Número de altavoces",
"Callback ID": "Callback ID",
"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)",
"Select the template to generate the video.": "Seleccione la plantilla para generar el vídeo.",
"Title of the generated video.": "Título del vídeo generado.",
"Select the folder to store the video.": "Seleccione la carpeta para guardar el vídeo.",
"Select the Brand Voice to apply to the video.": "Seleccione la voz de la marca para aplicar al vídeo.",
"Webhook URL to notify when video rendering is complete.": "URL de Webhook para notificar cuando el renderizado de vídeo se haya completado.",
"The ID of the translated video to check the status for.": "El ID del vídeo traducido para comprobar el estado.",
"The ID of the video to retrieve the status for.": "El ID del vídeo para recuperar el estado para.",
"The ID of the video to generate a shareable URL for.": "El ID del vídeo para generar una URL compartible.",
"The file to upload (JPEG, PNG, MP4, WEBM, or MPEG).": "El archivo a subir (JPEG, PNG, MP4, WEBM o MPEG).",
"URL of the video file to be translated. Supports direct URLs, Google Drive, and YouTube.": "URL del archivo de vídeo a traducir. Soporta URLs directas, Google Drive y YouTube.",
"Optional title of the translated video.": "Título opcional del vídeo traducido.",
"Select the language for video translation.": "Seleccione el idioma para la traducción de vídeo.",
"Only translate the audio without modifying faces.": "Sólo traducir el audio sin modificar las caras.",
"Number of speakers in the video (if applicable).": "Número de altavoces en el vídeo (si corresponde).",
"Custom ID returned in webhook callback.": "ID personalizado devuelto en llamada webhook.",
"URL to notify when translation is complete.": "URL para notificar cuando la traducción esté completa.",
"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.",
"GET": "RECOGER",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "BORRAR",
"HEAD": "LIMPIO",
"New Avatar Video Event (Success)": "Nuevo evento de video avatar (éxito)",
"New Avatar Video Event (Fail)": "Nuevo evento de video de avatar (falla)",
"Triggers when a video is generated successfully.": "Dispara cuando un video se genera correctamente.",
"Triggers when a video generation process fails.": "Se activa cuando un proceso de generación de vídeo falla."
}

View File

@@ -0,0 +1,72 @@
{
"Generate and manage AI avatar videos using HeyGen.": "Générer et gérer les vidéos des avatars AI à l'aide de HeyGen.",
"You can obtain your API key by navigating to your Space Settings in HeyGen App.": "Vous pouvez obtenir votre clé API en accédant à vos paramètres d'espace dans l'application HeyGen.",
"Create Video from Template": "Créer une vidéo à partir du modèle",
"Retrieve Translated Video Status": "Récupérer l'état de la vidéo traduite",
"Retrieve Video Status": "Récupérer l'état de la vidéo",
"Retrieve Sharable Video URL": "Récupérer l'URL de la vidéo partageable",
"Upload an Asset": "Télécharger un actif",
"Translate Video": "Traduire la vidéo",
"Custom API Call": "Appel API personnalisé",
"Create a video using a selected template.": "Créer une vidéo en utilisant un modèle sélectionné.",
"Retrieves the status of a translated video.": "Récupère le statut d'une vidéo traduite.",
"Retrieve the status and details of a video using its ID.": "Récupérez le statut et les détails d'une vidéo en utilisant son ID.",
"Generates a public URL for a video, allowing it to be shared and accessed publicly.": "Génère une URL publique pour une vidéo, permettant de la partager et d'y accéder publiquement.",
"Upload media files (images, videos, or audio) to HeyGen. Supports JPEG, PNG, MP4, WEBM, and MPEG files.": "Télécharger des fichiers média (images, vidéos ou audio) vers HeyGen. Supporte des fichiers JPEG, PNG, MP4, WEBM, et MPEG.",
"Translate a video into 175+ languages with natural voice and lip-sync.": "Traduisez une vidéo en plus de 175 langues avec voix naturelle et synchronisation des lèvres.",
"Make a custom API call to a specific endpoint": "Passez un appel API personnalisé à un point de terminaison spécifique",
"Template": "Gabarit",
"Video Title": "Titre de la vidéo",
"Enable Captions": "Activer les légendes",
"Include GIF Preview": "Inclure l'aperçu du GIF",
"Enable Public Sharing": "Activer le partage public",
"Folder": "Dossier",
"Brand Voice": "Voix de la marque",
"Callback URL": "Callback URL",
"Video Width": "Largeur de la vidéo",
"Video Height": "Hauteur de la vidéo",
"Template Varriables": "Modèles Varriables",
"Video ID": "ID Vidéo",
"File": "Ficher",
"Video URL": "URL de la vidéo",
"Title": "Titre de la page",
"Supported Language": "Langue prise en charge",
"Translate Audio Only": "Traduire seulement l'audio",
"Number of Speakers": "Nombre d'orateurs",
"Callback ID": "Callback ID",
"Method": "Méthode",
"Headers": "En-têtes",
"Query Parameters": "Paramètres de requête",
"Body": "Corps",
"Response is Binary ?": "La réponse est Binaire ?",
"No Error on Failure": "Aucune erreur en cas d'échec",
"Timeout (in seconds)": "Délai d'attente (en secondes)",
"Select the template to generate the video.": "Sélectionnez le modèle pour générer la vidéo.",
"Title of the generated video.": "Titre de la vidéo générée.",
"Select the folder to store the video.": "Sélectionnez le dossier pour stocker la vidéo.",
"Select the Brand Voice to apply to the video.": "Sélectionnez la Voix de Marque à appliquer à la vidéo.",
"Webhook URL to notify when video rendering is complete.": "URL du Webhook pour avertir lorsque le rendu de la vidéo est terminé.",
"The ID of the translated video to check the status for.": "L'ID de la vidéo traduite pour vérifier le statut.",
"The ID of the video to retrieve the status for.": "L'ID de la vidéo pour laquelle récupérer le statut.",
"The ID of the video to generate a shareable URL for.": "L'ID de la vidéo pour générer une URL partageable.",
"The file to upload (JPEG, PNG, MP4, WEBM, or MPEG).": "Le fichier à télécharger (JPEG, PNG, MP4, WEBM, ou MPEG).",
"URL of the video file to be translated. Supports direct URLs, Google Drive, and YouTube.": "URL du fichier vidéo à traduire. Supporte les URL directes, Google Drive et YouTube.",
"Optional title of the translated video.": "Titre optionnel de la vidéo traduite.",
"Select the language for video translation.": "Sélectionnez la langue pour la traduction vidéo.",
"Only translate the audio without modifying faces.": "Traduire seulement l'audio sans modifier les visages.",
"Number of speakers in the video (if applicable).": "Nombre d'orateurs dans la vidéo (le cas échéant).",
"Custom ID returned in webhook callback.": "ID personnalisé retourné dans la fonction de rappel du webhook.",
"URL to notify when translation is complete.": "URL à signaler lorsque la traduction est terminée.",
"Authorization headers are injected automatically from your connection.": "Les en-têtes 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.",
"GET": "OBTENIR",
"POST": "POSTER",
"PATCH": "PATCH",
"PUT": "EFFACER",
"DELETE": "SUPPRIMER",
"HEAD": "TÊTE",
"New Avatar Video Event (Success)": "Nouvel Evénement Vidéo Avatar (Success)",
"New Avatar Video Event (Fail)": "Nouvel Evénement de Vidéo d'Avatar (Échec de l'Evènement)",
"Triggers when a video is generated successfully.": "Déclenche quand une vidéo est générée avec succès.",
"Triggers when a video generation process fails.": "Déclenche lorsqu'un processus de génération de vidéo échoue."
}

View File

@@ -0,0 +1,72 @@
{
"Generate and manage AI avatar videos using HeyGen.": "HeyGenを使用してAIアバターのビデオを生成・管理します。",
"You can obtain your API key by navigating to your Space Settings in HeyGen App.": "HeyGen Appのスペース設定に移動すると、APIキーを取得できます。",
"Create Video from Template": "テンプレートからビデオを作成",
"Retrieve Translated Video Status": "翻訳済み動画のステータスを取得する",
"Retrieve Video Status": "ビデオステータスの取得",
"Retrieve Sharable Video URL": "共有ビデオの URL を取得",
"Upload an Asset": "アセットをアップロード",
"Translate Video": "ビデオを翻訳",
"Custom API Call": "カスタムAPI通話",
"Create a video using a selected template.": "選択したテンプレートを使用してビデオを作成します。",
"Retrieves the status of a translated video.": "翻訳された動画の状態を取得します。",
"Retrieve the status and details of a video using its ID.": "ID を使用してビデオのステータスと詳細を取得します。",
"Generates a public URL for a video, allowing it to be shared and accessed publicly.": "ビデオの公開 URL を生成し、公開してアクセスすることができます。",
"Upload media files (images, videos, or audio) to HeyGen. Supports JPEG, PNG, MP4, WEBM, and MPEG files.": "HeyGenにメディアファイル画像、ビデオ、またはオーディオをアップロード。JPEG、PNG、MP4、WEBM、およびMPEGファイルをサポートしています。",
"Translate a video into 175+ languages with natural voice and lip-sync.": "175以上の言語で自然な声と唇同期でビデオを翻訳します。",
"Make a custom API call to a specific endpoint": "特定のエンドポイントへのカスタム API コールを実行します。",
"Template": "テンプレート",
"Video Title": "ビデオタイトル",
"Enable Captions": "キャプションを有効にする",
"Include GIF Preview": "GIF のプレビューを含める",
"Enable Public Sharing": "公開共有を有効にする",
"Folder": "Folder",
"Brand Voice": "ブランドの声",
"Callback URL": "Callback URL",
"Video Width": "動画の幅",
"Video Height": "動画の高さ",
"Template Varriables": "テンプレートvarriables",
"Video ID": "ビデオ ID",
"File": "ファイル",
"Video URL": "動画の URL",
"Title": "タイトル",
"Supported Language": "対応言語",
"Translate Audio Only": "音声のみ翻訳",
"Number of Speakers": "スピーカーの数",
"Callback ID": "Callback ID",
"Method": "方法",
"Headers": "ヘッダー",
"Query Parameters": "クエリパラメータ",
"Body": "本文",
"Response is Binary ?": "応答はバイナリですか?",
"No Error on Failure": "失敗時にエラーはありません",
"Timeout (in seconds)": "タイムアウト(秒)",
"Select the template to generate the video.": "動画を生成するテンプレートを選択します。",
"Title of the generated video.": "生成されたビデオのタイトル",
"Select the folder to store the video.": "ビデオを保存するフォルダを選択します。",
"Select the Brand Voice to apply to the video.": "動画に適用するブランド音声を選択します。",
"Webhook URL to notify when video rendering is complete.": "ビデオレンダリングが完了したら通知する Webhook URL。",
"The ID of the translated video to check the status for.": "ステータスを確認するための翻訳されたビデオのID。",
"The ID of the video to retrieve the status for.": "ステータスを取得するビデオのID。",
"The ID of the video to generate a shareable URL for.": "共有可能なURLを生成するビデオのID。",
"The file to upload (JPEG, PNG, MP4, WEBM, or MPEG).": "アップロードするファイル(JPEG、PNG、MP4、WEBM、MPEG)です。",
"URL of the video file to be translated. Supports direct URLs, Google Drive, and YouTube.": "翻訳するビデオファイルのURL。直接URL、Googleドライブ、YouTubeに対応しています。",
"Optional title of the translated video.": "翻訳されたビデオの任意のタイトル。",
"Select the language for video translation.": "ビデオ翻訳の言語を選択します。",
"Only translate the audio without modifying faces.": "顔を変更せずにオーディオを翻訳するだけです。",
"Number of speakers in the video (if applicable).": "ビデオ内のスピーカー数(該当する場合)。",
"Custom ID returned in webhook callback.": "WebhookコールバックでカスタムIDを返しました。",
"URL to notify when translation is complete.": "翻訳が完了したら通知する URL",
"Authorization headers are injected automatically from your connection.": "認証ヘッダは接続から自動的に注入されます。",
"Enable for files like PDFs, images, etc..": "PDF、画像などのファイルを有効にします。",
"GET": "取得",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "削除",
"HEAD": "頭",
"New Avatar Video Event (Success)": "新しいアバターのビデオイベント(成功)",
"New Avatar Video Event (Fail)": "新しいアバタービデオイベント(失敗)",
"Triggers when a video is generated successfully.": "ビデオが正常に生成されたときにトリガーします。",
"Triggers when a video generation process fails.": "ビデオ生成プロセスが失敗したときにトリガーします。"
}

View File

@@ -0,0 +1,72 @@
{
"Generate and manage AI avatar videos using HeyGen.": "Genereer en beheer de AI avatar video's met behulp van HeyGen.",
"You can obtain your API key by navigating to your Space Settings in HeyGen App.": "Je kunt je API-sleutel verkrijgen door naar je Ruimte Instellingen te navigeren in de HeyGen App.",
"Create Video from Template": "Video maken van sjabloon",
"Retrieve Translated Video Status": "Videostatus ophalen",
"Retrieve Video Status": "Videostatus ophalen",
"Retrieve Sharable Video URL": "Haal gedeelde video-URL op",
"Upload an Asset": "Een asset uploaden",
"Translate Video": "Video vertalen",
"Custom API Call": "Custom API Call",
"Create a video using a selected template.": "Maak een video aan met behulp van een geselecteerd sjabloon.",
"Retrieves the status of a translated video.": "Herstelt de status van een vertaalde video.",
"Retrieve the status and details of a video using its ID.": "Ophalen van de status en details van een video met behulp van de ID.",
"Generates a public URL for a video, allowing it to be shared and accessed publicly.": "Genereert een openbare URL voor een video, zodat deze openbaar kan worden gedeeld en benaderd.",
"Upload media files (images, videos, or audio) to HeyGen. Supports JPEG, PNG, MP4, WEBM, and MPEG files.": "Mediabestanden (afbeeldingen, video's of audio) uploaden naar HeyGen. Ondersteunt JPEG, PNG, MP4, WEBM en MPEG bestanden.",
"Translate a video into 175+ languages with natural voice and lip-sync.": "Vertaal een video in 175 + talen met natuurlijke stem en lip-synchronisatie.",
"Make a custom API call to a specific endpoint": "Maak een aangepaste API call naar een specifiek eindpunt",
"Template": "Sjabloon",
"Video Title": "Video titel",
"Enable Captions": "Ondertiteling inschakelen",
"Include GIF Preview": "GIF Preview meenemen",
"Enable Public Sharing": "Openbare delen inschakelen",
"Folder": "Map",
"Brand Voice": "Merk Stem",
"Callback URL": "Callback URL",
"Video Width": "Video breedte",
"Video Height": "Video hoogte",
"Template Varriables": "Sjabloon Varriables",
"Video ID": "Video ID",
"File": "Bestand",
"Video URL": "Video URL",
"Title": "Aanspreektitel",
"Supported Language": "Ondersteunde taal",
"Translate Audio Only": "Alleen audio vertalen",
"Number of Speakers": "Aantal sprekers",
"Callback ID": "Callback ID",
"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)",
"Select the template to generate the video.": "Selecteer de template om de video te genereren.",
"Title of the generated video.": "Titel van de gegenereerde video.",
"Select the folder to store the video.": "Selecteer de map om de video op te slaan.",
"Select the Brand Voice to apply to the video.": "Selecteer het merk spraak om toe te passen op de video.",
"Webhook URL to notify when video rendering is complete.": "Webhook URL om te informeren wanneer de video-weergave is voltooid.",
"The ID of the translated video to check the status for.": "De ID van de vertaalde video om de status te controleren.",
"The ID of the video to retrieve the status for.": "Het ID van de video om de status voor op te halen.",
"The ID of the video to generate a shareable URL for.": "Het ID van de video om een deelbare URL voor te genereren.",
"The file to upload (JPEG, PNG, MP4, WEBM, or MPEG).": "Het te uploaden bestand (JPEG, PNG, MP4, WEBM of MPEG).",
"URL of the video file to be translated. Supports direct URLs, Google Drive, and YouTube.": "URL van het te vertalen videobestand. Ondersteunt directe URL's, Google Drive en YouTube.",
"Optional title of the translated video.": "Optionele titel van de vertaalde video.",
"Select the language for video translation.": "Selecteer de taal voor video-vertaling.",
"Only translate the audio without modifying faces.": "Vertaal de audio alleen zonder gezichten te wijzigen.",
"Number of speakers in the video (if applicable).": "Aantal sprekers in de video (indien van toepassing).",
"Custom ID returned in webhook callback.": "Aangepaste ID geretourneerd in de webhook callback.",
"URL to notify when translation is complete.": "URL om te informeren wanneer de vertaling is voltooid.",
"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..",
"GET": "KRIJG",
"POST": "POSTE",
"PATCH": "BEKIJK",
"PUT": "PUT",
"DELETE": "VERWIJDEREN",
"HEAD": "HOOFD",
"New Avatar Video Event (Success)": "Nieuw Avatar Video Evenement (Succes)",
"New Avatar Video Event (Fail)": "Nieuw Avatar Video Evenement (Vrij)",
"Triggers when a video is generated successfully.": "Triggert wanneer een video met succes wordt gegenereerd.",
"Triggers when a video generation process fails.": "Triggert wanneer een proces voor het genereren van video's mislukt."
}

View File

@@ -0,0 +1,72 @@
{
"Generate and manage AI avatar videos using HeyGen.": "Gere e gerencie vídeos de avatar IA usando a HeyGen.",
"You can obtain your API key by navigating to your Space Settings in HeyGen App.": "Você pode obter a sua chave de API navegando nas Configurações do Espaço no aplicativo HeyGen.",
"Create Video from Template": "Criar vídeo a partir do modelo",
"Retrieve Translated Video Status": "Recuperar Status do Vídeo Traduzido",
"Retrieve Video Status": "Recuperar Status do Vídeo",
"Retrieve Sharable Video URL": "Recuperar URL de Vídeo Compartilhável",
"Upload an Asset": "Carregar um Ativo",
"Translate Video": "Traduzir vídeo",
"Custom API Call": "Chamada de API personalizada",
"Create a video using a selected template.": "Criar um vídeo usando um modelo selecionado.",
"Retrieves the status of a translated video.": "Recupera o status de um vídeo traduzido.",
"Retrieve the status and details of a video using its ID.": "Recuperar o status e detalhes de um vídeo usando sua ID.",
"Generates a public URL for a video, allowing it to be shared and accessed publicly.": "Gera uma URL pública para um vídeo, permitindo que seja compartilhado e acessado publicamente.",
"Upload media files (images, videos, or audio) to HeyGen. Supports JPEG, PNG, MP4, WEBM, and MPEG files.": "Carregar arquivos de mídia (imagens, vídeos ou áudio) para HeyGen. Suporta arquivos JPEG, PNG, MP4, WEBM e MPEG.",
"Translate a video into 175+ languages with natural voice and lip-sync.": "Traduza um vídeo para mais de 175 idiomas com voz natural e sincronização de lábios.",
"Make a custom API call to a specific endpoint": "Faça uma chamada de API personalizada para um ponto de extremidade específico",
"Template": "Modelo",
"Video Title": "Título do Vídeo",
"Enable Captions": "Habilitar legendas",
"Include GIF Preview": "Incluir Prévia do GIF",
"Enable Public Sharing": "Habilitar compartilhamento público",
"Folder": "Pasta",
"Brand Voice": "Voz da Marca",
"Callback URL": "Callback URL",
"Video Width": "Largura do Vídeo",
"Video Height": "Altura do Vídeo",
"Template Varriables": "Varriáveis do Modelo",
"Video ID": "ID do Vídeo",
"File": "Arquivo",
"Video URL": "URL do vídeo",
"Title": "Título",
"Supported Language": "Idioma suportado",
"Translate Audio Only": "Traduzir somente o áudio",
"Number of Speakers": "Número de Pregadores",
"Callback ID": "Callback ID",
"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)",
"Select the template to generate the video.": "Selecione o modelo para gerar o vídeo.",
"Title of the generated video.": "Título do vídeo gerado.",
"Select the folder to store the video.": "Selecione a pasta para armazenar o vídeo.",
"Select the Brand Voice to apply to the video.": "Selecione a Voz da Marca para aplicar ao vídeo.",
"Webhook URL to notify when video rendering is complete.": "Webhook URL para notificar quando a renderização de vídeo estiver concluída.",
"The ID of the translated video to check the status for.": "A identificação do vídeo traduzido para verificar o status.",
"The ID of the video to retrieve the status for.": "A identificação do vídeo para recuperar o status.",
"The ID of the video to generate a shareable URL for.": "O ID do vídeo para gerar uma URL compartilhável.",
"The file to upload (JPEG, PNG, MP4, WEBM, or MPEG).": "O arquivo para upload (JPEG, PNG, MP4, WEBM ou MPEG).",
"URL of the video file to be translated. Supports direct URLs, Google Drive, and YouTube.": "URL do arquivo de vídeo a ser traduzido. Suporta URLs diretas, Google Drive e YouTube.",
"Optional title of the translated video.": "Título opcional do vídeo traduzido.",
"Select the language for video translation.": "Selecione o idioma para tradução do vídeo.",
"Only translate the audio without modifying faces.": "Traduza apenas o áudio sem modificar os rostos.",
"Number of speakers in the video (if applicable).": "Número de alto-falantes no vídeo (se aplicável).",
"Custom ID returned in webhook callback.": "ID personalizado retornado no webhook callback.",
"URL to notify when translation is complete.": "URL para notificar quando a tradução estiver completa.",
"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..",
"GET": "OBTER",
"POST": "POSTAR",
"PATCH": "COMPRAR",
"PUT": "COLOCAR",
"DELETE": "EXCLUIR",
"HEAD": "CABEÇA",
"New Avatar Video Event (Success)": "Novo evento de vídeo de avatar (Fotos)",
"New Avatar Video Event (Fail)": "Novo evento de vídeo de avatar (falha)",
"Triggers when a video is generated successfully.": "Dispara quando um vídeo é gerado com sucesso.",
"Triggers when a video generation process fails.": "Aciona quando um processo de geração de vídeo falha."
}

View File

@@ -0,0 +1,71 @@
{
"HeyGen": "HeyGen",
"Generate and manage AI avatar videos using HeyGen.": "Генерировать и управлять AI аватарами с помощью HeyGen.",
"You can obtain your API key by navigating to your Space Settings in HeyGen App.": "Вы можете получить ключ API, перейдя в Настройки Пространства в приложении HeyGen.",
"Create Video from Template": "Создать видео из шаблона",
"Retrieve Translated Video Status": "Получить статус переведенного видео",
"Retrieve Video Status": "Получить статус видео",
"Retrieve Sharable Video URL": "Получить URL-адрес четкого видео",
"Upload an Asset": "Загрузить актив",
"Translate Video": "Перевести видео",
"Custom API Call": "Пользовательский вызов API",
"Create a video using a selected template.": "Создать видео с использованием выбранного шаблона.",
"Retrieves the status of a translated video.": "Получает статус переведенного видео.",
"Retrieve the status and details of a video using its ID.": "Получить статус и детали видео, используя его ID.",
"Generates a public URL for a video, allowing it to be shared and accessed publicly.": "Генерирует публичный URL-адрес для видео, позволяющий ему быть общедоступным.",
"Upload media files (images, videos, or audio) to HeyGen. Supports JPEG, PNG, MP4, WEBM, and MPEG files.": "HeyGen поддерживает файлы JPEG, PNG, MP4, WEBM и MPEG.",
"Translate a video into 175+ languages with natural voice and lip-sync.": "Переведите видео на 175 + языков с естественным голосом и гуп-синтаксисом.",
"Make a custom API call to a specific endpoint": "Сделать пользовательский API вызов к определенной конечной точке",
"Template": "Шаблон",
"Video Title": "Название видео",
"Enable Captions": "Включить субтитры",
"Include GIF Preview": "Включить превью GIF",
"Enable Public Sharing": "Включить общий доступ",
"Folder": "Папка",
"Brand Voice": "Голос бренда",
"Callback URL": "Callback URL",
"Video Width": "Ширина видео",
"Video Height": "Высота видео",
"Template Varriables": "Привязанные к шаблону",
"Video ID": "ID видео",
"File": "Файл",
"Video URL": "URL видео",
"Title": "Заголовок",
"Supported Language": "Поддерживаемый язык",
"Translate Audio Only": "Перевести только аудио",
"Number of Speakers": "Количество спикеров",
"Callback ID": "Callback ID",
"Method": "Метод",
"Headers": "Заголовки",
"Query Parameters": "Параметры запроса",
"Body": "Тело",
"No Error on Failure": "Нет ошибок при ошибке",
"Timeout (in seconds)": "Таймаут (в секундах)",
"Select the template to generate the video.": "Выберите шаблон для создания видео.",
"Title of the generated video.": "Заголовок сгенерированного видео.",
"Select the folder to store the video.": "Выберите папку для хранения видео.",
"Select the Brand Voice to apply to the video.": "Выберите Brand Voice для применения к видео.",
"Webhook URL to notify when video rendering is complete.": "Webhook URL для уведомления когда видео рендеринг завершен.",
"The ID of the translated video to check the status for.": "ID переведенного видео для проверки статуса.",
"The ID of the video to retrieve the status for.": "ID видео для получения статуса.",
"The ID of the video to generate a shareable URL for.": "Идентификатор видео для создания разделяемого URL-адреса.",
"The file to upload (JPEG, PNG, MP4, WEBM, or MPEG).": "Файл для загрузки (JPEG, PNG, MP4, WEBM или MPEG).",
"URL of the video file to be translated. Supports direct URLs, Google Drive, and YouTube.": "URL видеофайла для перевода. Поддерживает прямые URL, Google Drive и YouTube.",
"Optional title of the translated video.": "Необязательное название переведенного видео.",
"Select the language for video translation.": "Выберите язык для перевода видео.",
"Only translate the audio without modifying faces.": "Только переводить звук без изменения лица.",
"Number of speakers in the video (if applicable).": "Число ораторов в видео (если это применимо).",
"Custom ID returned in webhook callback.": "Пользовательский ID возвращается в обратном вызове webhook.",
"URL to notify when translation is complete.": "URL-адрес для оповещения о завершении перевода.",
"Authorization headers are injected automatically from your connection.": "Заголовки авторизации включаются автоматически из вашего соединения.",
"GET": "ПОЛУЧИТЬ",
"POST": "ПОСТ",
"PATCH": "ПАТЧ",
"PUT": "ПОКУПИТЬ",
"DELETE": "УДАЛИТЬ",
"HEAD": "HEAD",
"New Avatar Video Event (Success)": "Новое Видео событие Аватара (успех)",
"New Avatar Video Event (Fail)": "Новое событие для аватара (левый)",
"Triggers when a video is generated successfully.": "Триггеры, когда видео сгенерировано успешно.",
"Triggers when a video generation process fails.": "Срабатывает при сбое процесса генерации видео."
}

View File

@@ -0,0 +1,72 @@
{
"Generate and manage AI avatar videos using HeyGen.": "Generate and manage AI avatar videos using HeyGen.",
"You can obtain your API key by navigating to your Space Settings in HeyGen App.": "You can obtain your API key by navigating to your Space Settings in HeyGen App.",
"Create Video from Template": "Create Video from Template",
"Retrieve Translated Video Status": "Retrieve Translated Video Status",
"Retrieve Video Status": "Retrieve Video Status",
"Retrieve Sharable Video URL": "Retrieve Sharable Video URL",
"Upload an Asset": "Upload an Asset",
"Translate Video": "Translate Video",
"Custom API Call": "Custom API Call",
"Create a video using a selected template.": "Create a video using a selected template.",
"Retrieves the status of a translated video.": "Retrieves the status of a translated video.",
"Retrieve the status and details of a video using its ID.": "Retrieve the status and details of a video using its ID.",
"Generates a public URL for a video, allowing it to be shared and accessed publicly.": "Generates a public URL for a video, allowing it to be shared and accessed publicly.",
"Upload media files (images, videos, or audio) to HeyGen. Supports JPEG, PNG, MP4, WEBM, and MPEG files.": "Upload media files (images, videos, or audio) to HeyGen. Supports JPEG, PNG, MP4, WEBM, and MPEG files.",
"Translate a video into 175+ languages with natural voice and lip-sync.": "Translate a video into 175+ languages with natural voice and lip-sync.",
"Make a custom API call to a specific endpoint": "Make a custom API call to a specific endpoint",
"Template": "Template",
"Video Title": "Video Title",
"Enable Captions": "Enable Captions",
"Include GIF Preview": "Include GIF Preview",
"Enable Public Sharing": "Enable Public Sharing",
"Folder": "Folder",
"Brand Voice": "Brand Voice",
"Callback URL": "Callback URL",
"Video Width": "Video Width",
"Video Height": "Video Height",
"Template Varriables": "Template Varriables",
"Video ID": "Video ID",
"File": "File",
"Video URL": "Video URL",
"Title": "Title",
"Supported Language": "Supported Language",
"Translate Audio Only": "Translate Audio Only",
"Number of Speakers": "Number of Speakers",
"Callback ID": "Callback ID",
"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)",
"Select the template to generate the video.": "Select the template to generate the video.",
"Title of the generated video.": "Title of the generated video.",
"Select the folder to store the video.": "Select the folder to store the video.",
"Select the Brand Voice to apply to the video.": "Select the Brand Voice to apply to the video.",
"Webhook URL to notify when video rendering is complete.": "Webhook URL to notify when video rendering is complete.",
"The ID of the translated video to check the status for.": "The ID of the translated video to check the status for.",
"The ID of the video to retrieve the status for.": "The ID of the video to retrieve the status for.",
"The ID of the video to generate a shareable URL for.": "The ID of the video to generate a shareable URL for.",
"The file to upload (JPEG, PNG, MP4, WEBM, or MPEG).": "The file to upload (JPEG, PNG, MP4, WEBM, or MPEG).",
"URL of the video file to be translated. Supports direct URLs, Google Drive, and YouTube.": "URL of the video file to be translated. Supports direct URLs, Google Drive, and YouTube.",
"Optional title of the translated video.": "Optional title of the translated video.",
"Select the language for video translation.": "Select the language for video translation.",
"Only translate the audio without modifying faces.": "Only translate the audio without modifying faces.",
"Number of speakers in the video (if applicable).": "Number of speakers in the video (if applicable).",
"Custom ID returned in webhook callback.": "Custom ID returned in webhook callback.",
"URL to notify when translation is complete.": "URL to notify when translation is complete.",
"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..",
"GET": "GET",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "DELETE",
"HEAD": "HEAD",
"New Avatar Video Event (Success)": "New Avatar Video Event (Success)",
"New Avatar Video Event (Fail)": "New Avatar Video Event (Fail)",
"Triggers when a video is generated successfully.": "Triggers when a video is generated successfully.",
"Triggers when a video generation process fails.": "Triggers when a video generation process fails."
}

View File

@@ -0,0 +1,71 @@
{
"HeyGen": "HeyGen",
"Generate and manage AI avatar videos using HeyGen.": "Generate and manage AI avatar videos using HeyGen.",
"You can obtain your API key by navigating to your Space Settings in HeyGen App.": "You can obtain your API key by navigating to your Space Settings in HeyGen App.",
"Create Video from Template": "Create Video from Template",
"Retrieve Translated Video Status": "Retrieve Translated Video Status",
"Retrieve Video Status": "Retrieve Video Status",
"Retrieve Sharable Video URL": "Retrieve Sharable Video URL",
"Upload an Asset": "Upload an Asset",
"Translate Video": "Translate Video",
"Custom API Call": "Custom API Call",
"Create a video using a selected template.": "Create a video using a selected template.",
"Retrieves the status of a translated video.": "Retrieves the status of a translated video.",
"Retrieve the status and details of a video using its ID.": "Retrieve the status and details of a video using its ID.",
"Generates a public URL for a video, allowing it to be shared and accessed publicly.": "Generates a public URL for a video, allowing it to be shared and accessed publicly.",
"Upload media files (images, videos, or audio) to HeyGen. Supports JPEG, PNG, MP4, WEBM, and MPEG files.": "Upload media files (images, videos, or audio) to HeyGen. Supports JPEG, PNG, MP4, WEBM, and MPEG files.",
"Translate a video into 175+ languages with natural voice and lip-sync.": "Translate a video into 175+ languages with natural voice and lip-sync.",
"Make a custom API call to a specific endpoint": "Make a custom API call to a specific endpoint",
"Template": "Template",
"Video Title": "Video Title",
"Enable Captions": "Enable Captions",
"Include GIF Preview": "Include GIF Preview",
"Enable Public Sharing": "Enable Public Sharing",
"Folder": "Folder",
"Brand Voice": "Brand Voice",
"Callback URL": "Callback URL",
"Video Width": "Video Width",
"Video Height": "Video Height",
"Template Varriables": "Template Varriables",
"Video ID": "Video ID",
"File": "File",
"Video URL": "Video URL",
"Title": "Title",
"Supported Language": "Supported Language",
"Translate Audio Only": "Translate Audio Only",
"Number of Speakers": "Number of Speakers",
"Callback ID": "Callback ID",
"Method": "Method",
"Headers": "Headers",
"Query Parameters": "Query Parameters",
"Body": "Body",
"No Error on Failure": "No Error on Failure",
"Timeout (in seconds)": "Timeout (in seconds)",
"Select the template to generate the video.": "Select the template to generate the video.",
"Title of the generated video.": "Title of the generated video.",
"Select the folder to store the video.": "Select the folder to store the video.",
"Select the Brand Voice to apply to the video.": "Select the Brand Voice to apply to the video.",
"Webhook URL to notify when video rendering is complete.": "Webhook URL to notify when video rendering is complete.",
"The ID of the translated video to check the status for.": "The ID of the translated video to check the status for.",
"The ID of the video to retrieve the status for.": "The ID of the video to retrieve the status for.",
"The ID of the video to generate a shareable URL for.": "The ID of the video to generate a shareable URL for.",
"The file to upload (JPEG, PNG, MP4, WEBM, or MPEG).": "The file to upload (JPEG, PNG, MP4, WEBM, or MPEG).",
"URL of the video file to be translated. Supports direct URLs, Google Drive, and YouTube.": "URL of the video file to be translated. Supports direct URLs, Google Drive, and YouTube.",
"Optional title of the translated video.": "Optional title of the translated video.",
"Select the language for video translation.": "Select the language for video translation.",
"Only translate the audio without modifying faces.": "Only translate the audio without modifying faces.",
"Number of speakers in the video (if applicable).": "Number of speakers in the video (if applicable).",
"Custom ID returned in webhook callback.": "Custom ID returned in webhook callback.",
"URL to notify when translation is complete.": "URL to notify when translation is complete.",
"Authorization headers are injected automatically from your connection.": "Authorization headers are injected automatically from your connection.",
"GET": "GET",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "DELETE",
"HEAD": "HEAD",
"New Avatar Video Event (Success)": "New Avatar Video Event (Success)",
"New Avatar Video Event (Fail)": "New Avatar Video Event (Fail)",
"Triggers when a video is generated successfully.": "Triggers when a video is generated successfully.",
"Triggers when a video generation process fails.": "Triggers when a video generation process fails."
}

View File

@@ -0,0 +1,72 @@
{
"Generate and manage AI avatar videos using HeyGen.": "Generate and manage AI avatar videos using HeyGen.",
"You can obtain your API key by navigating to your Space Settings in HeyGen App.": "You can obtain your API key by navigating to your Space Settings in HeyGen App.",
"Create Video from Template": "Create Video from Template",
"Retrieve Translated Video Status": "Retrieve Translated Video Status",
"Retrieve Video Status": "Retrieve Video Status",
"Retrieve Sharable Video URL": "Retrieve Sharable Video URL",
"Upload an Asset": "Upload an Asset",
"Translate Video": "Translate Video",
"Custom API Call": "自定义 API 呼叫",
"Create a video using a selected template.": "Create a video using a selected template.",
"Retrieves the status of a translated video.": "Retrieves the status of a translated video.",
"Retrieve the status and details of a video using its ID.": "Retrieve the status and details of a video using its ID.",
"Generates a public URL for a video, allowing it to be shared and accessed publicly.": "Generates a public URL for a video, allowing it to be shared and accessed publicly.",
"Upload media files (images, videos, or audio) to HeyGen. Supports JPEG, PNG, MP4, WEBM, and MPEG files.": "Upload media files (images, videos, or audio) to HeyGen. Supports JPEG, PNG, MP4, WEBM, and MPEG files.",
"Translate a video into 175+ languages with natural voice and lip-sync.": "Translate a video into 175+ languages with natural voice and lip-sync.",
"Make a custom API call to a specific endpoint": "将一个自定义 API 调用到一个特定的终点",
"Template": "模板",
"Video Title": "Video Title",
"Enable Captions": "Enable Captions",
"Include GIF Preview": "Include GIF Preview",
"Enable Public Sharing": "Enable Public Sharing",
"Folder": "Folder",
"Brand Voice": "Brand Voice",
"Callback URL": "Callback URL",
"Video Width": "Video Width",
"Video Height": "Video Height",
"Template Varriables": "Template Varriables",
"Video ID": "Video ID",
"File": "文件",
"Video URL": "Video URL",
"Title": "标题",
"Supported Language": "Supported Language",
"Translate Audio Only": "Translate Audio Only",
"Number of Speakers": "Number of Speakers",
"Callback ID": "Callback ID",
"Method": "方法",
"Headers": "信头",
"Query Parameters": "查询参数",
"Body": "正文内容",
"Response is Binary ?": "Response is Binary ?",
"No Error on Failure": "失败时没有错误",
"Timeout (in seconds)": "超时(秒)",
"Select the template to generate the video.": "Select the template to generate the video.",
"Title of the generated video.": "Title of the generated video.",
"Select the folder to store the video.": "Select the folder to store the video.",
"Select the Brand Voice to apply to the video.": "Select the Brand Voice to apply to the video.",
"Webhook URL to notify when video rendering is complete.": "Webhook URL to notify when video rendering is complete.",
"The ID of the translated video to check the status for.": "The ID of the translated video to check the status for.",
"The ID of the video to retrieve the status for.": "The ID of the video to retrieve the status for.",
"The ID of the video to generate a shareable URL for.": "The ID of the video to generate a shareable URL for.",
"The file to upload (JPEG, PNG, MP4, WEBM, or MPEG).": "The file to upload (JPEG, PNG, MP4, WEBM, or MPEG).",
"URL of the video file to be translated. Supports direct URLs, Google Drive, and YouTube.": "URL of the video file to be translated. Supports direct URLs, Google Drive, and YouTube.",
"Optional title of the translated video.": "Optional title of the translated video.",
"Select the language for video translation.": "Select the language for video translation.",
"Only translate the audio without modifying faces.": "Only translate the audio without modifying faces.",
"Number of speakers in the video (if applicable).": "Number of speakers in the video (if applicable).",
"Custom ID returned in webhook callback.": "Custom ID returned in webhook callback.",
"URL to notify when translation is complete.": "URL to notify when translation is complete.",
"Authorization headers are injected automatically from your connection.": "授权头自动从您的连接中注入。",
"Enable for files like PDFs, images, etc..": "Enable for files like PDFs, images, etc..",
"GET": "获取",
"POST": "帖子",
"PATCH": "PATCH",
"PUT": "弹出",
"DELETE": "删除",
"HEAD": "黑色",
"New Avatar Video Event (Success)": "New Avatar Video Event (Success)",
"New Avatar Video Event (Fail)": "New Avatar Video Event (Fail)",
"Triggers when a video is generated successfully.": "Triggers when a video is generated successfully.",
"Triggers when a video generation process fails.": "Triggers when a video generation process fails."
}

View File

@@ -0,0 +1,42 @@
import { createCustomApiCallAction } from '@activepieces/pieces-common';
import { createPiece } from '@activepieces/pieces-framework';
import { PieceCategory } from '@activepieces/shared';
import { createVideoFromTemplateAction } from './lib/actions/create-a-video-from-template';
import { retrieveTranslatedVideoStatus } from './lib/actions/retrieve-a-translated-video-status';
import { retrieveVideoStatusAction } from './lib/actions/retrieve-a-video-status';
import { retrieveSharableVideoUrlAction } from './lib/actions/retrieve-shareable-link-for-a-video';
import { uploadAssetAction } from './lib/actions/upload-an-asset';
import { translateVideoAction } from './lib/actions/translate-a-video';
import { videoGenerationCompletedTrigger } from './lib/triggers/video-generation-completed';
import { videoGenerationFailedTrigger } from './lib/triggers/video-generation-failed';
import { heygenAuth } from './lib/common/auth';
import { BASE_URL_V1 } from './lib/common/client';
export const heygen = createPiece({
displayName: 'HeyGen',
description: 'Generate and manage AI avatar videos using HeyGen.',
auth: heygenAuth,
minimumSupportedRelease: '0.36.1',
logoUrl: 'https://cdn.activepieces.com/pieces/heygen.jpg',
authors: ['krushnarout'],
categories: [PieceCategory.ARTIFICIAL_INTELLIGENCE],
actions: [
createVideoFromTemplateAction,
retrieveTranslatedVideoStatus,
retrieveVideoStatusAction,
retrieveSharableVideoUrlAction,
uploadAssetAction,
translateVideoAction,
createCustomApiCallAction({
auth: heygenAuth,
baseUrl: () => BASE_URL_V1,
authMapping: async (auth) => {
return {
'X-Api-Key': auth.secret_text,
};
},
}),
],
triggers: [videoGenerationCompletedTrigger, videoGenerationFailedTrigger],
});

View File

@@ -0,0 +1,164 @@
import { HttpMethod } from '@activepieces/pieces-common';
import { createAction, Property } from '@activepieces/pieces-framework';
import { heygenAuth } from '../common/auth';
import { heygenApiCall } from '../common/client';
import {
folderDropdown,
brandVoiceDropdown,
templateDropdown,
templateVariables,
} from '../common/props';
import { isNil } from '@activepieces/shared';
export const createVideoFromTemplateAction = createAction({
auth: heygenAuth,
name: 'create-video-from-template',
displayName: 'Create Video from Template',
description: 'Create a video using a selected template.',
props: {
templateId: templateDropdown,
title: Property.ShortText({
displayName: 'Video Title',
required: true,
description: 'Title of the generated video.',
}),
caption: Property.Checkbox({
displayName: 'Enable Captions',
required: false,
defaultValue: false,
}),
includeGif: Property.Checkbox({
displayName: 'Include GIF Preview',
required: false,
defaultValue: false,
}),
enableSharing: Property.Checkbox({
displayName: 'Enable Public Sharing',
required: false,
defaultValue: false,
}),
folderId: folderDropdown,
brandVoiceId: brandVoiceDropdown,
callbackUrl: Property.ShortText({
displayName: 'Callback URL',
required: false,
description: 'Webhook URL to notify when video rendering is complete.',
}),
dimensionWidth: Property.Number({
displayName: 'Video Width',
required: false,
defaultValue: 1280,
}),
dimensionHeight: Property.Number({
displayName: 'Video Height',
required: false,
defaultValue: 720,
}),
variables: templateVariables,
},
async run({ propsValue, auth }) {
const {
templateId,
title,
caption,
includeGif,
enableSharing,
folderId,
brandVoiceId,
callbackUrl,
dimensionWidth,
dimensionHeight,
} = propsValue;
const inputVariables = propsValue.variables ?? {};
const template = await heygenApiCall<{
data: {
variables: { [x: string]: { type: string; name: string; properties: Record<string, any> } };
};
}>({
apiKey: auth as unknown as string,
method: HttpMethod.GET,
resourceUri: `/template/${templateId}`,
apiVersion: 'v2',
});
const templateVariables = template.data.variables;
const formattedVariables: Record<string, any> = {};
for (const [key, value] of Object.entries(inputVariables)) {
if (isNil(value) || value === '') continue;
const variable = templateVariables[key];
if (!variable) continue;
const { type, name, properties } = variable;
const base = { name, type };
switch (type) {
case 'text':
formattedVariables[key] = {
...base,
properties: { content: value },
};
break;
case 'image':
case 'video':
case 'audio':
formattedVariables[key] = {
...base,
properties: { ...properties, url: value },
};
break;
case 'character':
formattedVariables[key] = {
...base,
properties: { ...properties, character_id: value },
};
break;
case 'voice':
formattedVariables[key] = {
...base,
properties: { ...properties, voice_id: value },
};
break;
default:
break;
}
}
const body: Record<string, any> = {
template_id: templateId,
title,
caption: caption === true,
include_gif: includeGif === true,
enable_sharing: enableSharing === true,
};
if (folderId) body['folder_id'] = folderId;
if (brandVoiceId) body['brand_voice_id'] = brandVoiceId;
if (callbackUrl) body['callback_url'] = callbackUrl;
if (dimensionWidth && dimensionHeight) {
body['dimension'] = {
width: dimensionWidth,
height: dimensionHeight,
};
}
if (Object.keys(formattedVariables || {}).length) {
body['variables'] = formattedVariables;
}
const response = await heygenApiCall({
apiKey: auth.secret_text,
method: HttpMethod.POST,
resourceUri: `/template/${templateId}/generate`,
body,
apiVersion: 'v2',
});
return response;
},
});

View File

@@ -0,0 +1,30 @@
import { HttpMethod } from '@activepieces/pieces-common';
import { createAction, Property } from '@activepieces/pieces-framework';
import { heygenAuth } from '../common/auth';
import { heygenApiCall } from '../common/client';
export const retrieveTranslatedVideoStatus = createAction({
auth: heygenAuth,
name: 'retrieve-translated-video-status',
displayName: 'Retrieve Translated Video Status',
description: 'Retrieves the status of a translated video.',
props: {
videoId: Property.ShortText({
displayName: 'Video ID',
required: true,
description: 'The ID of the translated video to check the status for.',
}),
},
async run({ propsValue, auth }) {
const { videoId } = propsValue;
const response = await heygenApiCall({
apiKey: auth.secret_text,
method: HttpMethod.GET,
resourceUri: `/video_translate/${videoId}`,
apiVersion: 'v2',
});
return response;
},
});

View File

@@ -0,0 +1,31 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import { HttpMethod } from '@activepieces/pieces-common';
import { heygenApiCall } from '../common/client';
import { heygenAuth } from '../common/auth';
export const retrieveVideoStatusAction = createAction({
auth: heygenAuth,
name: 'retrieve_video_status',
displayName: 'Retrieve Video Status',
description: 'Retrieve the status and details of a video using its ID.',
props: {
videoId: Property.ShortText({
displayName: 'Video ID',
description: 'The ID of the video to retrieve the status for.',
required: true,
}),
},
async run({ propsValue, auth }) {
const { videoId } = propsValue;
const response = await heygenApiCall({
apiKey: auth.secret_text,
method: HttpMethod.GET,
resourceUri: `/video_status.get`,
query: { video_id: videoId },
apiVersion: 'v1',
});
return response;
},
});

View File

@@ -0,0 +1,31 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import { HttpMethod } from '@activepieces/pieces-common';
import { heygenApiCall } from '../common/client';
import { heygenAuth } from '../common/auth';
export const retrieveSharableVideoUrlAction = createAction({
auth: heygenAuth,
name: 'retrieve_sharable_video_url',
displayName: 'Retrieve Sharable Video URL',
description: 'Generates a public URL for a video, allowing it to be shared and accessed publicly.',
props: {
videoId: Property.ShortText({
displayName: 'Video ID',
description: 'The ID of the video to generate a shareable URL for.',
required: true,
}),
},
async run({ propsValue, auth }) {
const { videoId } = propsValue;
const response = await heygenApiCall({
apiKey: auth.secret_text,
method: HttpMethod.POST,
resourceUri: '/video/share',
body: { video_id: videoId },
apiVersion: 'v1',
});
return response;
},
});

View File

@@ -0,0 +1,83 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import { HttpMethod } from '@activepieces/pieces-common';
import { heygenApiCall } from '../common/client';
import { heygenAuth } from '../common/auth';
import { brandVoiceDropdown, supportedLanguagesDropdown } from '../common/props';
export const translateVideoAction = createAction({
auth: heygenAuth,
name: 'translate_video',
displayName: 'Translate Video',
description: 'Translate a video into 175+ languages with natural voice and lip-sync.',
props: {
videoUrl: Property.ShortText({
displayName: 'Video URL',
required: true,
description:
'URL of the video file to be translated. Supports direct URLs, Google Drive, and YouTube.',
}),
title: Property.ShortText({
displayName: 'Title',
required: false,
description: 'Optional title of the translated video.',
}),
outputLanguage: supportedLanguagesDropdown,
translateAudioOnly: Property.Checkbox({
displayName: 'Translate Audio Only',
required: false,
defaultValue: false,
description: 'Only translate the audio without modifying faces.',
}),
speakerNum: Property.Number({
displayName: 'Number of Speakers',
required: false,
description: 'Number of speakers in the video (if applicable).',
}),
brandVoiceId: brandVoiceDropdown,
callbackId: Property.ShortText({
displayName: 'Callback ID',
required: false,
description: 'Custom ID returned in webhook callback.',
}),
callbackUrl: Property.ShortText({
displayName: 'Callback URL',
required: false,
description: 'URL to notify when translation is complete.',
}),
},
async run({ propsValue, auth }) {
const {
videoUrl,
title,
outputLanguage,
translateAudioOnly,
speakerNum,
callbackId,
brandVoiceId,
callbackUrl,
} = propsValue;
const body: Record<string, unknown> = {
video_url: videoUrl,
output_language: outputLanguage,
};
if (title) body['title'] = title;
if (translateAudioOnly) body['translate_audio_only'] = translateAudioOnly;
if (speakerNum) body['speaker_num'] = speakerNum;
if (callbackId) body['callback_id'] = callbackId;
if (brandVoiceId) body['brand_voice_id'] = brandVoiceId;
if (callbackUrl) body['callback_url'] = callbackUrl;
const response = await heygenApiCall({
apiKey: auth.secret_text,
method: HttpMethod.POST,
resourceUri: '/video_translate',
body,
apiVersion: 'v2',
});
return response;
},
});

View File

@@ -0,0 +1,55 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import { HttpMethod, httpClient } from '@activepieces/pieces-common';
import { heygenAuth } from '../common/auth';
export const uploadAssetAction = createAction({
auth: heygenAuth,
name: 'upload_asset',
displayName: 'Upload an Asset',
description:
'Upload media files (images, videos, or audio) to HeyGen. Supports JPEG, PNG, MP4, WEBM, and MPEG files.',
props: {
file: Property.File({
displayName: 'File',
description: 'The file to upload (JPEG, PNG, MP4, WEBM, or MPEG).',
required: true,
}),
},
async run(context) {
const { file } = context.propsValue;
const getContentType = (filename: string): string => {
const extension = filename.toLowerCase().split('.').pop();
switch (extension) {
case 'jpg':
case 'jpeg':
return 'image/jpeg';
case 'png':
return 'image/png';
case 'mp4':
return 'video/mp4';
case 'webm':
return 'video/webm';
case 'mpeg':
case 'mpg':
return 'audio/mpeg';
default:
throw new Error(`Unsupported file type: ${extension}`);
}
};
const contentType = getContentType(file.filename);
const response = await httpClient.sendRequest({
method: HttpMethod.POST,
url: 'https://upload.heygen.com/v1/asset',
headers: {
'x-api-key': context.auth.secret_text,
'Content-Type': contentType,
},
body: file.data,
});
return response.body;
},
});

View File

@@ -0,0 +1,25 @@
import { HttpMethod } from '@activepieces/pieces-common';
import { PieceAuth } from '@activepieces/pieces-framework';
import { heygenApiCall } from './client';
export const heygenAuth = PieceAuth.SecretText({
displayName: 'API Key',
description: `You can obtain your API key by navigating to your Space Settings in HeyGen App.`,
required: true,
validate: async ({ auth }) => {
try {
await heygenApiCall({
apiKey: auth as string,
method: HttpMethod.GET,
resourceUri: '/user/me',
apiVersion: 'v1',
});
return { valid: true };
} catch {
return {
valid: false,
error: 'Invalid API Key.',
};
}
},
});

View File

@@ -0,0 +1,53 @@
import {
httpClient,
HttpMessageBody,
HttpMethod,
HttpRequest,
QueryParams,
} from '@activepieces/pieces-common';
export type HeygenApiCallParams = {
apiKey: string;
method: HttpMethod;
resourceUri: string;
query?: Record<string, string | number | string[] | undefined>;
body?: unknown;
apiVersion: 'v1' | 'v2';
};
export const BASE_URL_V1 = 'https://api.heygen.com/v1';
export const BASE_URL_V2 = 'https://api.heygen.com/v2';
export async function heygenApiCall<T extends HttpMessageBody>({
apiKey,
method,
resourceUri,
query,
body,
apiVersion,
}: HeygenApiCallParams): Promise<T> {
const qs: QueryParams = {};
if (query) {
for (const [key, value] of Object.entries(query)) {
if (value !== null && value !== undefined) {
qs[key] = String(value);
}
}
}
const url = (apiVersion === 'v1' ? BASE_URL_V1 : BASE_URL_V2) + resourceUri;
const request: HttpRequest = {
method,
url,
headers: {
'X-Api-Key': apiKey,
},
queryParams: qs,
body,
};
const response = await httpClient.sendRequest<T>(request);
return response.body;
}

View File

@@ -0,0 +1,265 @@
import { HttpMethod } from '@activepieces/pieces-common';
import { DynamicPropsValue, Property } from '@activepieces/pieces-framework';
import { heygenApiCall } from './client';
import { isNil } from '@activepieces/shared';
import { heygenAuth } from './auth';
export const folderDropdown = Property.Dropdown({
displayName: 'Folder',
description: 'Select the folder to store the video.',
required: false,
refreshers: [],
auth: heygenAuth,
options: async ({ auth }) => {
if (!auth) {
return {
disabled: true,
options: [],
placeholder: 'Please connect your account first.',
};
}
const response = await heygenApiCall<{
data: { folders: { id: string; name: string }[] };
}>({
apiKey: auth.secret_text,
method: HttpMethod.GET,
resourceUri: '/folders',
apiVersion: 'v1',
});
return {
disabled: false,
options: response.data.folders.map((folder) => ({
label: folder.name,
value: folder.id,
})),
};
},
});
export const brandVoiceDropdown = Property.Dropdown({
auth: heygenAuth,
displayName: 'Brand Voice',
description: 'Select the Brand Voice to apply to the video.',
required: false,
refreshers: [],
options: async ({ auth }) => {
if (!auth) {
return {
disabled: true,
options: [],
placeholder: 'Please connect your account first.',
};
}
const response = await heygenApiCall<{
data: { list: { id: string; name: string }[] };
}>({
apiKey: auth.secret_text,
method: HttpMethod.GET,
resourceUri: '/brand_voice/list',
apiVersion: 'v1',
});
return {
disabled: false,
options: response.data.list.map((voice) => ({
label: voice.name,
value: voice.id,
})),
};
},
});
export const templateDropdown = Property.Dropdown({
auth: heygenAuth,
displayName: 'Template',
description: 'Select the template to generate the video.',
required: true,
refreshers: [],
options: async ({ auth }) => {
if (!auth) {
return {
disabled: true,
options: [],
placeholder: 'Please connect your account first.',
};
}
const response = await heygenApiCall<{
data: { templates: { template_id: string; name: string; aspect_ratio: string }[] };
}>({
apiKey: auth.secret_text,
method: HttpMethod.GET,
resourceUri: '/templates',
apiVersion: 'v2',
});
return {
disabled: false,
options: response.data.templates.map((template) => ({
label: template.name,
value: template.template_id,
})),
};
},
});
export const supportedLanguagesDropdown = Property.Dropdown({
auth: heygenAuth,
displayName: 'Supported Language',
description: 'Select the language for video translation.',
required: true,
refreshers: [],
options: async ({ auth }) => {
if (!auth) {
return {
disabled: true,
options: [],
placeholder: 'Please connect your account first.',
};
}
const response = await heygenApiCall<{ data: { languages: string[] } }>({
apiKey: auth.secret_text,
method: HttpMethod.GET,
resourceUri: '/video_translate/target_languages',
apiVersion: 'v2',
});
return {
disabled: false,
options: response.data.languages.map((lang) => ({
label: lang,
value: lang,
})),
};
},
});
export const templateVariables = Property.DynamicProperties({
auth: heygenAuth,
displayName: 'Template Varriables',
refreshers: ['templateId'],
required: false,
props: async ({ auth, templateId }) => {
if (!auth || !templateId) return {};
const fields: DynamicPropsValue = {};
try {
const response = await heygenApiCall<{
data: { variables: { [x: string]: { type: string; name: string } } };
}>({
apiKey: auth.secret_text,
method: HttpMethod.GET,
resourceUri: `/template/${templateId}`,
apiVersion: 'v2',
});
const variables = response.data.variables;
if (!isNil(variables)) return {};
for (const [key, value] of Object.entries(response.data.variables)) {
const fieldKey = key;
const fieldType = value.type;
switch (fieldType) {
case 'text':
fields[fieldKey] = Property.ShortText({
displayName: fieldKey,
required: false,
description: 'Provide text value.',
});
break;
case 'image':
fields[fieldKey] = Property.ShortText({
displayName: fieldKey,
required: false,
description: 'Provide image URL.',
});
break;
case 'video':
fields[fieldKey] = Property.ShortText({
displayName: fieldKey,
required: false,
description: 'Provide video URL.',
});
break;
case 'audio':
fields[fieldKey] = Property.ShortText({
displayName: fieldKey,
required: false,
description: 'Provide audio URL.',
});
break;
case 'character': {
const characters = await heygenApiCall<{
avatars: { avatar_name: string; avatar_id: string }[];
talking_photos: {
talking_photo_id: string;
talking_photo_name: string;
}[];
}>({
apiKey: auth as unknown as string,
method: HttpMethod.GET,
resourceUri: `/avatars`,
apiVersion: 'v2',
});
const options = [
...characters.avatars.map((avatar) => ({
label: avatar.avatar_name,
value: avatar.avatar_id,
})),
...characters.talking_photos.map((photo) => ({
label: photo.talking_photo_name,
value: photo.talking_photo_id,
})),
];
fields[fieldKey] = Property.StaticDropdown({
displayName: fieldKey,
required: false,
description: 'Select one of avatar or talking photo.',
options: { disabled: false, options },
});
break;
}
case 'voice': {
const voices = await heygenApiCall<{
voices: { name: string; voice_id: string }[];
}>({
apiKey: auth as unknown as string,
method: HttpMethod.GET,
resourceUri: `/voices`,
apiVersion: 'v2',
});
fields[fieldKey] = Property.StaticDropdown({
displayName: fieldKey,
required: false,
options: {
disabled: false,
options: voices.voices.map((voice) => ({
label: voice.name,
value: voice.voice_id,
})),
},
});
break;
}
default:
break;
}
}
return fields;
} catch (error) {
console.error(`${error instanceof Error ? error.message : 'Unknown error'}`);
return {};
}
},
});

View File

@@ -0,0 +1,67 @@
import { createTrigger, TriggerStrategy } from '@activepieces/pieces-framework';
import { HttpMethod } from '@activepieces/pieces-common';
import { heygenApiCall } from '../common/client';
import { heygenAuth } from '../common/auth';
const TRIGGER_KEY = 'video_generation_completed_trigger';
export const videoGenerationCompletedTrigger = createTrigger({
auth: heygenAuth,
name: 'video_generation_completed',
displayName: 'New Avatar Video Event (Success)',
description: 'Triggers when a video is generated successfully.',
type: TriggerStrategy.WEBHOOK,
props: {},
sampleData: {
event_type: 'avatar_video.success',
event_data: {
video_id: '123',
url: 'https://www.example.com',
gif_download_url: '<gif_url>',
folder_id: '123',
callback_id: '123',
},
},
async onEnable(context) {
const webhook = (await heygenApiCall({
apiKey: context.auth.secret_text,
method: HttpMethod.POST,
resourceUri: '/webhook/endpoint.add',
apiVersion: 'v1',
body: {
url: context.webhookUrl,
events: ['avatar_video.success'],
},
})) as { data: { endpoint_id: string } };
await context.store.put<string>(TRIGGER_KEY, webhook.data.endpoint_id);
},
async onDisable(context) {
const webhookId = await context.store.get<string>(TRIGGER_KEY);
if (webhookId) {
await heygenApiCall({
apiKey: context.auth.secret_text,
method: HttpMethod.DELETE,
resourceUri: '/webhook/endpoint.delete',
apiVersion: 'v1',
query: {
endpoint_id: webhookId,
},
});
}
},
async run(context) {
const payload = context.payload.body as {
event_type: string;
event_data: Record<string, any>;
};
if (payload.event_type !== 'avatar_video.success') return [];
return [payload.event_data];
},
});

View File

@@ -0,0 +1,66 @@
import { createTrigger, TriggerStrategy } from '@activepieces/pieces-framework';
import { HttpMethod } from '@activepieces/pieces-common';
import { heygenApiCall } from '../common/client';
import { heygenAuth } from '../common/auth';
const TRIGGER_KEY = 'video_generation_failed_trigger';
export const videoGenerationFailedTrigger = createTrigger({
auth: heygenAuth,
name: 'video_generation_failed',
displayName: 'New Avatar Video Event (Fail)',
description: 'Triggers when a video generation process fails.',
type: TriggerStrategy.WEBHOOK,
props: {},
sampleData: {
event_type: 'avatar_video.fail',
event_data: {
video_id: 'abc',
msg: 'Failed',
callback_id: '123',
},
},
async onEnable(context) {
const webhook = (await heygenApiCall({
apiKey: context.auth.secret_text,
method: HttpMethod.POST,
resourceUri: '/webhook/endpoint.add',
apiVersion: 'v1',
body: {
url: context.webhookUrl,
events: ['avatar_video.fail'],
},
})) as { data: { endpoint_id: string } };
await context.store.put<string>(TRIGGER_KEY, webhook.data.endpoint_id);
},
async onDisable(context) {
const webhookId = await context.store.get<string>(TRIGGER_KEY);
if (webhookId) {
await heygenApiCall({
apiKey: context.auth.secret_text,
method: HttpMethod.DELETE,
resourceUri: '/webhook/endpoint.delete',
apiVersion: 'v1',
query: {
endpoint_id: webhookId,
},
});
}
},
async run(context) {
const payload = context.payload.body as {
event_type: string;
event_data: Record<string, any>;
};
if (payload.event_type !== 'avatar_video.fail') return [];
return [payload];
},
});

View File

@@ -0,0 +1,19 @@
{
"extends": "../../../../tsconfig.base.json",
"compilerOptions": {
"module": "commonjs",
"forceConsistentCasingInFileNames": true,
"strict": true,
"noImplicitOverride": true,
"noImplicitReturns": true,
"noFallthroughCasesInSwitch": true,
"noPropertyAccessFromIndexSignature": true
},
"files": [],
"include": [],
"references": [
{
"path": "./tsconfig.lib.json"
}
]
}

View File

@@ -0,0 +1,11 @@
{
"extends": "./tsconfig.json",
"compilerOptions": {
"module": "commonjs",
"outDir": "../../../../dist/out-tsc",
"declaration": true,
"types": ["node"]
},
"exclude": ["jest.config.ts", "src/**/*.spec.ts", "src/**/*.test.ts"],
"include": ["src/**/*.ts"]
}