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,54 @@
{
"E-commerce CRM for B2B marketers": "E-Commerce-CRM für B2B-Vermarkter",
"Get it from https://www.getdrip.com/user/edit": "Holen Sie es unter https://www.getdrip.com/user/edit",
"Apply a tag to subscriber": "Einen Tag auf Abonnenten anwenden",
"Add a subscriber to a campaign": "Abonnent einer Kampagne hinzufügen",
"Create or Update Subscriber": "Abonnent erstellen oder aktualisieren",
"Custom API Call": "Eigener API-Aufruf",
"Apply a tag to a subscriber": "Einen Tag auf einen Abonnenten anwenden",
"Add a subscriber to a campaign (Email series)": "Abonnent einer Kampagne hinzufügen (Email-Serie)",
"Make a custom API call to a specific endpoint": "Einen benutzerdefinierten API-Aufruf an einen bestimmten Endpunkt machen",
"Account": "Konto",
"Subscriber Email": "Abonnenten-E-Mail",
"Tag": "Markierung",
"Email Series Campaign": "E-Mail-Serie Kampagne",
"tags": "tags",
"Custom Fields": "Eigene Felder",
"First Name": "Vorname",
"Last Name": "Nachname",
"Zip Code": "Postleitzahl",
"Country": "Land",
"State": "Bundesland",
"City": "Stadt",
"Phone": "Telefon",
"Address": "Adresse",
"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)",
"Email of the subscriber": "E-Mail des Abonnenten",
"Tag to apply": "Tag zum Anwenden",
"Tags to apply to subscriber": "Tags für Abonnenten",
"Custom field data about the subscriber": "Benutzerdefinierte Felddaten über den Abonnenten",
"Postal code in which the subscriber resides": "Postleitzahl, in der sich der Abonnent befindet",
"The country in which the subscriber resides": "Das Land, in dem der Abonnent wohnt",
"The region in which the subscriber resides": "Die Region, in der sich der Abonnent aufhält",
"The city in which the subscriber resides": "Die Stadt, in der der Abonnent wohnt",
"The subscriber's primary phone number": "Die primäre Telefonnummer des Abonnenten",
"The subscriber's mailing address": "Die Mailingadresse des Abonnenten",
"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 Subscriber": "Neuer Abonnent",
"Tag Applied": "Tag angewendet",
"Triggers when a subscriber is created in your Drip account.": "Wird ausgelöst, wenn ein Abonnent in Ihrem Drip-Konto erstellt wurde.",
"Triggers when a tag is applied.": "Wird ausgelöst, wenn ein Tag angewendet wird."
}

View File

@@ -0,0 +1,54 @@
{
"E-commerce CRM for B2B marketers": "CRM de comercio electrónico para comercializadores B2B",
"Get it from https://www.getdrip.com/user/edit": "Obtenerlo en https://www.getdrip.com/user/edit",
"Apply a tag to subscriber": "Aplicar una etiqueta al suscriptor",
"Add a subscriber to a campaign": "Añadir un suscriptor a una campaña",
"Create or Update Subscriber": "Crear o actualizar suscriptores",
"Custom API Call": "Llamada API personalizada",
"Apply a tag to a subscriber": "Aplicar una etiqueta a un suscriptor",
"Add a subscriber to a campaign (Email series)": "Añadir un suscriptor a una campaña (serie Email)",
"Make a custom API call to a specific endpoint": "Hacer una llamada API personalizada a un extremo específico",
"Account": "Cuenta",
"Subscriber Email": "Email del suscriptor",
"Tag": "Etiqueta",
"Email Series Campaign": "Campaña de la Serie de Correo",
"tags": "etiquetas",
"Custom Fields": "Campos personalizados",
"First Name": "Nombre",
"Last Name": "Apellido",
"Zip Code": "Código postal",
"Country": "País",
"State": "Estado",
"City": "Ciudad",
"Phone": "Teléfono",
"Address": "Dirección",
"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)",
"Email of the subscriber": "Email del suscriptor",
"Tag to apply": "Etiqueta a aplicar",
"Tags to apply to subscriber": "Etiquetas a aplicar al suscriptor",
"Custom field data about the subscriber": "Datos de campo personalizado sobre el suscriptor",
"Postal code in which the subscriber resides": "Código postal en el que reside el suscriptor",
"The country in which the subscriber resides": "El país en el que reside el suscriptor",
"The region in which the subscriber resides": "La región en la que reside el suscriptor",
"The city in which the subscriber resides": "La ciudad en la que reside el suscriptor",
"The subscriber's primary phone number": "Número de teléfono principal del suscriptor",
"The subscriber's mailing address": "La dirección de correo del suscriptor",
"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 Subscriber": "Nuevo suscriptor",
"Tag Applied": "Etiqueta aplicada",
"Triggers when a subscriber is created in your Drip account.": "Dispara cuando un suscriptor es creado en su cuenta de Drip.",
"Triggers when a tag is applied.": "Dispara cuando se aplica una etiqueta."
}

View File

@@ -0,0 +1,54 @@
{
"E-commerce CRM for B2B marketers": "CRM e-commerce pour les marketeurs B2B",
"Get it from https://www.getdrip.com/user/edit": "Obtenez-le depuis https://www.getdrip.com/user/edit",
"Apply a tag to subscriber": "Appliquer un tag à l'abonné",
"Add a subscriber to a campaign": "Ajouter un abonné à une campagne",
"Create or Update Subscriber": "Créer ou mettre à jour un abonné",
"Custom API Call": "Appel API personnalisé",
"Apply a tag to a subscriber": "Appliquer un tag à un abonné",
"Add a subscriber to a campaign (Email series)": "Ajouter un abonné à une campagne (série d'e-mails)",
"Make a custom API call to a specific endpoint": "Passez un appel API personnalisé à un point de terminaison spécifique",
"Account": "Compte client",
"Subscriber Email": "Courriel de l'abonné",
"Tag": "Étiquette",
"Email Series Campaign": "Campagne de la Série d'E-mail",
"tags": "tags",
"Custom Fields": "Champs personnalisés",
"First Name": "First Name",
"Last Name": "Last Name",
"Zip Code": "Code postal",
"Country": "Pays",
"State": "État",
"City": "Ville",
"Phone": "Téléphone",
"Address": "Adresses",
"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)",
"Email of the subscriber": "Courriel de l'abonné",
"Tag to apply": "Étiquette à appliquer",
"Tags to apply to subscriber": "Tags à appliquer à l'abonné",
"Custom field data about the subscriber": "Données du champ personnalisé à propos de l'abonné",
"Postal code in which the subscriber resides": "Code postal dans lequel se trouve l'abonné",
"The country in which the subscriber resides": "Le pays dans lequel se trouve l'abonné",
"The region in which the subscriber resides": "La région dans laquelle se trouve l'abonné",
"The city in which the subscriber resides": "La ville dans laquelle se trouve l'abonné",
"The subscriber's primary phone number": "Le numéro de téléphone principal de l'abonné",
"The subscriber's mailing address": "Adresse postale de l'abonné",
"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 Subscriber": "Nouvel abonné",
"Tag Applied": "Étiquette appliquée",
"Triggers when a subscriber is created in your Drip account.": "Déclenche lorsqu'un abonné est créé dans votre compte Drip.",
"Triggers when a tag is applied.": "Déclenche quand un tag est appliqué."
}

View File

@@ -0,0 +1,54 @@
{
"E-commerce CRM for B2B marketers": "B2Bマーケティング担当者向けのEコマースCRM",
"Get it from https://www.getdrip.com/user/edit": "Get it from https://www.getdrip.com/user/edit",
"Apply a tag to subscriber": "購読者にタグを適用する",
"Add a subscriber to a campaign": "購読者をキャンペーンに追加",
"Create or Update Subscriber": "購読者を作成または更新",
"Custom API Call": "カスタムAPI通話",
"Apply a tag to a subscriber": "購読者にタグを適用する",
"Add a subscriber to a campaign (Email series)": "キャンペーンに購読者を追加します(メールシリーズ)",
"Make a custom API call to a specific endpoint": "特定のエンドポイントへのカスタム API コールを実行します。",
"Account": "アカウント",
"Subscriber Email": "購読者メールアドレス",
"Tag": "タグ",
"Email Series Campaign": "メール シリーズ キャンペーン",
"tags": "タグ",
"Custom Fields": "カスタムフィールド",
"First Name": "名",
"Last Name": "姓",
"Zip Code": "郵便番号",
"Country": "国",
"State": "都道府県:",
"City": "市区町村名",
"Phone": "電話番号",
"Address": "住所",
"Method": "方法",
"Headers": "ヘッダー",
"Query Parameters": "クエリパラメータ",
"Body": "本文",
"Response is Binary ?": "応答はバイナリですか?",
"No Error on Failure": "失敗時にエラーはありません",
"Timeout (in seconds)": "タイムアウト(秒)",
"Email of the subscriber": "購読者のメールアドレス",
"Tag to apply": "適用するタグ",
"Tags to apply to subscriber": "購読者に適用するタグ",
"Custom field data about the subscriber": "購読者に関するカスタムフィールドデータ",
"Postal code in which the subscriber resides": "購読者が居住する郵便番号",
"The country in which the subscriber resides": "購読者が居住する国",
"The region in which the subscriber resides": "購読者が居住する地域",
"The city in which the subscriber resides": "購読者が居住する都市",
"The subscriber's primary phone number": "購読者の主な電話番号",
"The subscriber's mailing address": "購読者の郵送先住所",
"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 Subscriber": "新規購読",
"Tag Applied": "タグを適用しました",
"Triggers when a subscriber is created in your Drip account.": "Dripアカウントに登録者が作成されたときにトリガーします。",
"Triggers when a tag is applied.": "タグが適用されたときにトリガーします。"
}

View File

@@ -0,0 +1,54 @@
{
"E-commerce CRM for B2B marketers": "E-commerce CRM voor B2B marketers",
"Get it from https://www.getdrip.com/user/edit": "Download het via https://www.getdrip.com/user/edit",
"Apply a tag to subscriber": "Een tag toepassen op abonnee",
"Add a subscriber to a campaign": "Voeg een abonnee toe aan een campagne",
"Create or Update Subscriber": "Aanmaken of bijwerken abonnee",
"Custom API Call": "Custom API Call",
"Apply a tag to a subscriber": "Een label toepassen op een abonnee",
"Add a subscriber to a campaign (Email series)": "Voeg een abonnee toe aan een campagne (Emailseries)",
"Make a custom API call to a specific endpoint": "Maak een aangepaste API call naar een specifiek eindpunt",
"Account": "Rekening",
"Subscriber Email": "E-mailadres ontvanger",
"Tag": "Tagnaam",
"Email Series Campaign": "E-mail serie campagne",
"tags": "labels",
"Custom Fields": "Aangepaste velden",
"First Name": "Voornaam",
"Last Name": "Achternaam",
"Zip Code": "Postcode code",
"Country": "Land:",
"State": "Provincie",
"City": "Woonplaats",
"Phone": "Telefoonnummer",
"Address": "Adres:",
"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)",
"Email of the subscriber": "E-mail van de abonnee",
"Tag to apply": "Tag om toe te passen",
"Tags to apply to subscriber": "Tags om toe te passen op abonnee",
"Custom field data about the subscriber": "Aangepaste veldgegevens over de ontvanger",
"Postal code in which the subscriber resides": "Postcode waarin de abonnee zich bevindt",
"The country in which the subscriber resides": "Het land waar de abonnee woont",
"The region in which the subscriber resides": "De regio waar de abonnee zich bevindt",
"The city in which the subscriber resides": "De stad waar de abonnee zich bevindt",
"The subscriber's primary phone number": "Het primaire telefoonnummer van de abonnee",
"The subscriber's mailing address": "Postadres van de abonnee",
"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 Subscriber": "Nieuwe abonnee",
"Tag Applied": "Tag toegepast",
"Triggers when a subscriber is created in your Drip account.": "Triggert wanneer een abonnee is aangemaakt in uw Drip account.",
"Triggers when a tag is applied.": "Triggert wanneer een tag wordt toegepast."
}

View File

@@ -0,0 +1,54 @@
{
"E-commerce CRM for B2B marketers": "E-commerce CRM para comerciantes B2B",
"Get it from https://www.getdrip.com/user/edit": "Baixe em https://www.getdrip.com/user/edit",
"Apply a tag to subscriber": "Aplicar uma etiqueta ao assinante",
"Add a subscriber to a campaign": "Adicionar um participante a uma campanha",
"Create or Update Subscriber": "Criar ou Atualizar Assinante",
"Custom API Call": "Chamada de API personalizada",
"Apply a tag to a subscriber": "Aplicar uma tag a um assinante",
"Add a subscriber to a campaign (Email series)": "Adicionar um assinante a uma campanha (série de e-mail)",
"Make a custom API call to a specific endpoint": "Faça uma chamada de API personalizada para um ponto de extremidade específico",
"Account": "conta",
"Subscriber Email": "E-mail do Assinante",
"Tag": "Etiqueta",
"Email Series Campaign": "Campanha de Séries De E-Mail",
"tags": "etiquetas",
"Custom Fields": "Campos Personalizados",
"First Name": "Nome",
"Last Name": "Sobrenome",
"Zip Code": "Código Postal",
"Country": "País/região",
"State": "Estado:",
"City": "cidade",
"Phone": "Smartphone",
"Address": "Endereço",
"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)",
"Email of the subscriber": "E-mail do assinante",
"Tag to apply": "Etiqueta para aplicar",
"Tags to apply to subscriber": "Tags a serem aplicadas aos assinantes",
"Custom field data about the subscriber": "Dados do campo personalizado sobre o membro",
"Postal code in which the subscriber resides": "Código postal no qual o assinante reside",
"The country in which the subscriber resides": "O país em que o assinante reside",
"The region in which the subscriber resides": "A região na qual o assinante reside",
"The city in which the subscriber resides": "A cidade na qual o assinante reside",
"The subscriber's primary phone number": "Número primário do assinante",
"The subscriber's mailing address": "Endereço postal do assinante",
"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 Subscriber": "Novo Assinante",
"Tag Applied": "Tag Aplicada",
"Triggers when a subscriber is created in your Drip account.": "Aciona quando um assinante é criado em sua conta de Gotejamento.",
"Triggers when a tag is applied.": "Dispara quando uma tag é aplicada."
}

View File

@@ -0,0 +1,53 @@
{
"Drip": "Капать",
"E-commerce CRM for B2B marketers": "Электронная коммерция для B2B маркеров",
"Get it from https://www.getdrip.com/user/edit": "Скачать с https://www.getdrip.com/user/edit",
"Apply a tag to subscriber": "Применить тег для подписчика",
"Add a subscriber to a campaign": "Добавить подписчика в кампанию",
"Create or Update Subscriber": "Создать или обновить подписчика",
"Custom API Call": "Пользовательский вызов API",
"Apply a tag to a subscriber": "Применить тег подписчику",
"Add a subscriber to a campaign (Email series)": "Добавить подписчика в кампанию (серия сообщений)",
"Make a custom API call to a specific endpoint": "Сделать пользовательский API вызов к определенной конечной точке",
"Account": "Аккаунт",
"Subscriber Email": "Email подписчика",
"Tag": "Тег",
"Email Series Campaign": "Кампания Серии Электронных Почт",
"tags": "теги",
"Custom Fields": "Пользовательские поля",
"First Name": "First Name",
"Last Name": "Фамилия",
"Zip Code": "Индекс",
"Country": "Страна",
"State": "Область",
"City": "Город",
"Phone": "Телефон",
"Address": "Адрес",
"Method": "Метод",
"Headers": "Заголовки",
"Query Parameters": "Параметры запроса",
"Body": "Тело",
"No Error on Failure": "Нет ошибок при ошибке",
"Timeout (in seconds)": "Таймаут (в секундах)",
"Email of the subscriber": "Email подписчика",
"Tag to apply": "Тег для применения",
"Tags to apply to subscriber": "Теги для применения к подписчику",
"Custom field data about the subscriber": "Пользовательские поля данных о подписчике",
"Postal code in which the subscriber resides": "Почтовый индекс, в котором проживает подписчик",
"The country in which the subscriber resides": "Страна, в которой проживает подписчик",
"The region in which the subscriber resides": "Регион, в котором проживает подписчик",
"The city in which the subscriber resides": "Город, в котором проживает подписчик",
"The subscriber's primary phone number": "Основной номер телефона подписчика",
"The subscriber's mailing address": "Адрес рассылки подписчика",
"Authorization headers are injected automatically from your connection.": "Заголовки авторизации включаются автоматически из вашего соединения.",
"GET": "ПОЛУЧИТЬ",
"POST": "ПОСТ",
"PATCH": "ПАТЧ",
"PUT": "ПОКУПИТЬ",
"DELETE": "УДАЛИТЬ",
"HEAD": "HEAD",
"New Subscriber": "Новый подписчик",
"Tag Applied": "Тег применён",
"Triggers when a subscriber is created in your Drip account.": "Включает при создании подписчика в вашем аккаунте Drip.",
"Triggers when a tag is applied.": "Триггеры при применении тега."
}

View File

@@ -0,0 +1,54 @@
{
"E-commerce CRM for B2B marketers": "E-commerce CRM for B2B marketers",
"Get it from https://www.getdrip.com/user/edit": "Get it from https://www.getdrip.com/user/edit",
"Apply a tag to subscriber": "Apply a tag to subscriber",
"Add a subscriber to a campaign": "Add a subscriber to a campaign",
"Create or Update Subscriber": "Create or Update Subscriber",
"Custom API Call": "Custom API Call",
"Apply a tag to a subscriber": "Apply a tag to a subscriber",
"Add a subscriber to a campaign (Email series)": "Add a subscriber to a campaign (Email series)",
"Make a custom API call to a specific endpoint": "Make a custom API call to a specific endpoint",
"Account": "Account",
"Subscriber Email": "Subscriber Email",
"Tag": "Tag",
"Email Series Campaign": "Email Series Campaign",
"tags": "tags",
"Custom Fields": "Custom Fields",
"First Name": "First Name",
"Last Name": "Last Name",
"Zip Code": "Zip Code",
"Country": "Country",
"State": "State",
"City": "City",
"Phone": "Phone",
"Address": "Address",
"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)",
"Email of the subscriber": "Email of the subscriber",
"Tag to apply": "Tag to apply",
"Tags to apply to subscriber": "Tags to apply to subscriber",
"Custom field data about the subscriber": "Custom field data about the subscriber",
"Postal code in which the subscriber resides": "Postal code in which the subscriber resides",
"The country in which the subscriber resides": "The country in which the subscriber resides",
"The region in which the subscriber resides": "The region in which the subscriber resides",
"The city in which the subscriber resides": "The city in which the subscriber resides",
"The subscriber's primary phone number": "The subscriber's primary phone number",
"The subscriber's mailing address": "The subscriber's mailing address",
"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 Subscriber": "New Subscriber",
"Tag Applied": "Tag Applied",
"Triggers when a subscriber is created in your Drip account.": "Triggers when a subscriber is created in your Drip account.",
"Triggers when a tag is applied.": "Triggers when a tag is applied."
}

View File

@@ -0,0 +1,53 @@
{
"Drip": "Drip",
"E-commerce CRM for B2B marketers": "E-commerce CRM for B2B marketers",
"Get it from https://www.getdrip.com/user/edit": "Get it from https://www.getdrip.com/user/edit",
"Apply a tag to subscriber": "Apply a tag to subscriber",
"Add a subscriber to a campaign": "Add a subscriber to a campaign",
"Create or Update Subscriber": "Create or Update Subscriber",
"Custom API Call": "Custom API Call",
"Apply a tag to a subscriber": "Apply a tag to a subscriber",
"Add a subscriber to a campaign (Email series)": "Add a subscriber to a campaign (Email series)",
"Make a custom API call to a specific endpoint": "Make a custom API call to a specific endpoint",
"Account": "Account",
"Subscriber Email": "Subscriber Email",
"Tag": "Tag",
"Email Series Campaign": "Email Series Campaign",
"tags": "tags",
"Custom Fields": "Custom Fields",
"First Name": "First Name",
"Last Name": "Last Name",
"Zip Code": "Zip Code",
"Country": "Country",
"State": "State",
"City": "City",
"Phone": "Phone",
"Address": "Address",
"Method": "Method",
"Headers": "Headers",
"Query Parameters": "Query Parameters",
"Body": "Body",
"No Error on Failure": "No Error on Failure",
"Timeout (in seconds)": "Timeout (in seconds)",
"Email of the subscriber": "Email of the subscriber",
"Tag to apply": "Tag to apply",
"Tags to apply to subscriber": "Tags to apply to subscriber",
"Custom field data about the subscriber": "Custom field data about the subscriber",
"Postal code in which the subscriber resides": "Postal code in which the subscriber resides",
"The country in which the subscriber resides": "The country in which the subscriber resides",
"The region in which the subscriber resides": "The region in which the subscriber resides",
"The city in which the subscriber resides": "The city in which the subscriber resides",
"The subscriber's primary phone number": "The subscriber's primary phone number",
"The subscriber's mailing address": "The subscriber's mailing address",
"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 Subscriber": "New Subscriber",
"Tag Applied": "Tag Applied",
"Triggers when a subscriber is created in your Drip account.": "Triggers when a subscriber is created in your Drip account.",
"Triggers when a tag is applied.": "Triggers when a tag is applied."
}

View File

@@ -0,0 +1,54 @@
{
"E-commerce CRM for B2B marketers": "E-commerce CRM for B2B marketers",
"Get it from https://www.getdrip.com/user/edit": "Get it from https://www.getdrip.com/user/edit",
"Apply a tag to subscriber": "Apply a tag to subscriber",
"Add a subscriber to a campaign": "Add a subscriber to a campaign",
"Create or Update Subscriber": "Create or Update Subscriber",
"Custom API Call": "自定义 API 呼叫",
"Apply a tag to a subscriber": "Apply a tag to a subscriber",
"Add a subscriber to a campaign (Email series)": "Add a subscriber to a campaign (Email series)",
"Make a custom API call to a specific endpoint": "将一个自定义 API 调用到一个特定的终点",
"Account": "Account",
"Subscriber Email": "Subscriber Email",
"Tag": "标签",
"Email Series Campaign": "Email Series Campaign",
"tags": "标签",
"Custom Fields": "Custom Fields",
"First Name": "名字",
"Last Name": "名字",
"Zip Code": "Zip Code",
"Country": "Country",
"State": "State",
"City": "City",
"Phone": "Phone",
"Address": "Address",
"Method": "方法",
"Headers": "信头",
"Query Parameters": "查询参数",
"Body": "正文内容",
"Response is Binary ?": "Response is Binary ?",
"No Error on Failure": "失败时没有错误",
"Timeout (in seconds)": "超时(秒)",
"Email of the subscriber": "Email of the subscriber",
"Tag to apply": "Tag to apply",
"Tags to apply to subscriber": "Tags to apply to subscriber",
"Custom field data about the subscriber": "Custom field data about the subscriber",
"Postal code in which the subscriber resides": "Postal code in which the subscriber resides",
"The country in which the subscriber resides": "The country in which the subscriber resides",
"The region in which the subscriber resides": "The region in which the subscriber resides",
"The city in which the subscriber resides": "The city in which the subscriber resides",
"The subscriber's primary phone number": "The subscriber's primary phone number",
"The subscriber's mailing address": "The subscriber's mailing address",
"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 Subscriber": "New Subscriber",
"Tag Applied": "Tag Applied",
"Triggers when a subscriber is created in your Drip account.": "Triggers when a subscriber is created in your Drip account.",
"Triggers when a tag is applied.": "Triggers when a tag is applied."
}

View File

@@ -0,0 +1,39 @@
import { createCustomApiCallAction } from '@activepieces/pieces-common';
import { PieceAuth, createPiece } from '@activepieces/pieces-framework';
import { PieceCategory } from '@activepieces/shared';
import { dripAddSubscriberToCampaign } from './lib/actions/add-subscriber-to-campaign.action';
import { dripApplyTagToSubscriber } from './lib/actions/apply-tag-to-subscriber.action';
import { dripUpsertSubscriberAction } from './lib/actions/upsert-subscriber.action';
import { dripNewSubscriberEvent } from './lib/trigger/new-subscriber.trigger';
import { dripTagAppliedEvent } from './lib/trigger/new-tag.trigger';
export const dripAuth = PieceAuth.SecretText({
displayName: 'API Key',
required: true,
description: 'Get it from https://www.getdrip.com/user/edit',
});
export const drip = createPiece({
displayName: 'Drip',
description: 'E-commerce CRM for B2B marketers',
minimumSupportedRelease: '0.30.0',
logoUrl: 'https://cdn.activepieces.com/pieces/drip.png',
authors: ["kishanprmr","MoShizzle","AbdulTheActivePiecer","khaledmashaly","abuaboud"],
categories: [PieceCategory.MARKETING],
auth: dripAuth,
actions: [
dripApplyTagToSubscriber,
dripAddSubscriberToCampaign,
dripUpsertSubscriberAction,
createCustomApiCallAction({
baseUrl: () => `https://api.getdrip.com/v2/`,
auth: dripAuth,
authMapping: async (auth) => ({
Authorization: `Basic ${Buffer.from(auth.secret_text).toString(
'base64'
)}`,
}),
}),
],
triggers: [dripNewSubscriberEvent, dripTagAppliedEvent],
});

View File

@@ -0,0 +1,91 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import {
HttpRequest,
HttpMethod,
httpClient,
} from '@activepieces/pieces-common';
import { dripCommon } from '../common';
import { dripAuth } from '../../';
export const dripAddSubscriberToCampaign = createAction({
auth: dripAuth,
name: 'add_subscriber_to_campaign',
description: 'Add a subscriber to a campaign (Email series)',
displayName: 'Add a subscriber to a campaign',
props: {
account_id: dripCommon.account_id,
campaign_id: Property.Dropdown({
displayName: 'Email Series Campaign',
auth: dripAuth,
refreshers: ['account_id'],
required: true,
options: async ({ auth, account_id }) => {
if (!auth) {
return {
disabled: true,
options: [],
placeholder: 'Please fill in API key first',
};
}
if (!account_id) {
return {
disabled: true,
options: [],
placeholder: 'Please select an account first',
};
}
const request: HttpRequest = {
method: HttpMethod.GET,
url: `${dripCommon.baseUrl(account_id as string)}/campaigns`,
headers: {
Authorization: `Basic ${Buffer.from(auth .secret_text).toString(
'base64'
)}`,
},
};
const response = await httpClient.sendRequest<{
campaigns: { name: string; id: string }[];
}>(request);
const opts = response.body.campaigns.map((campaign) => {
return { value: campaign.id, label: campaign.name };
});
if (opts.length === 0) {
return {
disabled: false,
options: [],
placeholder: 'Please create an email series campaign',
};
}
return {
disabled: false,
options: opts,
};
},
}),
subscriber: dripCommon.subscriber,
tags: dripCommon.tags,
custom_fields: dripCommon.custom_fields,
},
async run({ auth, propsValue }) {
const request: HttpRequest = {
method: HttpMethod.POST,
url: `${dripCommon.baseUrl(propsValue.account_id)}/campaigns/${
propsValue.campaign_id
}/subscribers`,
body: {
subscribers: [
{
email: propsValue.subscriber,
tags: propsValue.tags,
custom_fields: propsValue.custom_fields,
},
],
},
headers: {
Authorization: dripCommon.authorizationHeader(auth),
},
queryParams: {},
};
return await httpClient.sendRequest<Record<string, never>>(request);
},
});

View File

@@ -0,0 +1,43 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import {
HttpRequest,
HttpMethod,
httpClient,
} from '@activepieces/pieces-common';
import { dripCommon } from '../common';
import { dripAuth } from '../../';
export const dripApplyTagToSubscriber = createAction({
auth: dripAuth,
name: 'apply_tag_to_subscriber',
description: 'Apply a tag to a subscriber',
displayName: 'Apply a tag to subscriber',
props: {
account_id: dripCommon.account_id,
subscriber: dripCommon.subscriber,
tag: Property.ShortText({
displayName: 'Tag',
required: true,
description: 'Tag to apply',
}),
},
async run({ auth, propsValue }) {
const request: HttpRequest = {
method: HttpMethod.POST,
url: `${dripCommon.baseUrl(propsValue.account_id)}/tags`,
body: {
tags: [
{
email: propsValue.subscriber,
tag: propsValue.tag,
},
],
},
headers: {
Authorization: dripCommon.authorizationHeader(auth),
},
queryParams: {},
};
return await httpClient.sendRequest<Record<string, never>>(request);
},
});

View File

@@ -0,0 +1,87 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import {
HttpRequest,
HttpMethod,
httpClient,
} from '@activepieces/pieces-common';
import { dripCommon } from '../common';
import { dripAuth } from '../../';
export const dripUpsertSubscriberAction = createAction({
auth: dripAuth,
name: 'upsert_subscriber',
description: 'Create or Update Subscriber',
displayName: 'Create or Update Subscriber',
props: {
account_id: dripCommon.account_id,
subscriber: dripCommon.subscriber,
tags: dripCommon.tags,
custom_fields: dripCommon.custom_fields,
first_name: Property.ShortText({
displayName: 'First Name',
required: false,
}),
last_name: Property.ShortText({
displayName: 'Last Name',
required: false,
}),
zip: Property.ShortText({
displayName: 'Zip Code',
description: 'Postal code in which the subscriber resides',
required: false,
}),
country: Property.ShortText({
displayName: 'Country',
description: 'The country in which the subscriber resides',
required: false,
}),
state: Property.ShortText({
displayName: 'State',
description: 'The region in which the subscriber resides',
required: false,
}),
city: Property.ShortText({
displayName: 'City',
description: 'The city in which the subscriber resides',
required: false,
}),
phone: Property.ShortText({
displayName: 'Phone',
description: "The subscriber's primary phone number",
required: false,
}),
address: Property.ShortText({
displayName: 'Address',
description: "The subscriber's mailing address",
required: false,
}),
},
async run({ auth, propsValue }) {
const request: HttpRequest = {
method: HttpMethod.POST,
url: `${dripCommon.baseUrl(propsValue.account_id)}/subscribers`,
body: {
subscribers: [
{
email: propsValue.subscriber,
tags: propsValue.tags,
custom_fields: propsValue.custom_fields,
country: propsValue.country,
address1: propsValue.address,
city: propsValue.city,
state: propsValue.state,
zip: propsValue.zip,
phone: propsValue.phone,
first_name: propsValue.first_name,
last_name: propsValue.last_name,
},
],
},
headers: {
Authorization: dripCommon.authorizationHeader(auth),
},
queryParams: {},
};
return await httpClient.sendRequest<Record<string, never>>(request);
},
});

View File

@@ -0,0 +1,65 @@
import { AppConnectionValueForAuthProperty, Property } from '@activepieces/pieces-framework';
import {
HttpRequest,
HttpMethod,
httpClient,
} from '@activepieces/pieces-common';
import { dripAuth } from '../..';
export const dripCommon = {
baseUrl: (accountId: string) => {
return `https://api.getdrip.com/v2/${accountId}`;
},
account_id: Property.Dropdown({
auth: dripAuth,
displayName: 'Account',
required: true,
refreshers: [],
options: async ({ auth }) => {
if (!auth) {
return {
disabled: true,
options: [],
placeholder: 'Please fill in API key first',
};
}
const request: HttpRequest = {
method: HttpMethod.GET,
url: 'https://api.getdrip.com/v2/accounts',
headers: {
Authorization: `Basic ${Buffer.from(auth.secret_text ).toString(
'base64'
)}`,
},
};
const response = await httpClient.sendRequest<{
accounts: { id: string; name: string }[];
}>(request);
const opts = response.body.accounts.map((acc) => {
return { value: acc.id, label: acc.name };
});
return {
disabled: false,
options: opts,
};
},
}),
subscriber: Property.ShortText({
required: true,
displayName: 'Subscriber Email',
description: 'Email of the subscriber',
}),
tags: Property.Array({
displayName: 'tags',
required: false,
description: 'Tags to apply to subscriber',
}),
custom_fields: Property.Object({
displayName: 'Custom Fields',
required: false,
description: 'Custom field data about the subscriber',
}),
authorizationHeader: (apiKey: AppConnectionValueForAuthProperty<typeof dripAuth>) =>
`Basic ${Buffer.from(apiKey.secret_text).toString('base64')}`,
};

View File

@@ -0,0 +1,73 @@
import {
HttpRequest,
HttpMethod,
httpClient,
} from '@activepieces/pieces-common';
import { TriggerStrategy, createTrigger } from '@activepieces/pieces-framework';
import { dripCommon } from '../common';
import { dripAuth } from '../../';
const triggerNameInStore = 'drip_new_subscriber_trigger';
export const dripNewSubscriberEvent = createTrigger({
auth: dripAuth,
name: 'new_subscriber',
displayName: 'New Subscriber',
description: 'Triggers when a subscriber is created in your Drip account.',
props: {
account_id: dripCommon.account_id,
},
sampleData: {
event: 'subscriber.created',
data: {
account_id: '9999999',
subscriber: {},
},
occurred_at: '2013-06-21T10:31:58Z',
},
type: TriggerStrategy.WEBHOOK,
async onEnable({ auth, propsValue, webhookUrl, store }) {
const request: HttpRequest = {
method: HttpMethod.POST,
url: `${dripCommon.baseUrl(propsValue.account_id)}/webhooks`,
body: {
webhooks: [{ post_url: webhookUrl, events: ['subscriber.created'] }],
},
headers: {
Authorization: dripCommon.authorizationHeader(auth),
},
queryParams: {},
};
const { body } = await httpClient.sendRequest<{
webhooks: { id: string }[];
}>(request);
await store.put<DripWebhookInformation>(triggerNameInStore, {
webhookId: body.webhooks[0].id,
userId: propsValue.account_id,
});
},
async onDisable(context) {
const response = await context.store?.get<DripWebhookInformation>(
triggerNameInStore
);
if (response !== null && response !== undefined) {
const request: HttpRequest = {
method: HttpMethod.DELETE,
url: `${dripCommon.baseUrl(response.userId)}/webhooks/${
response.webhookId
}`,
headers: {
Authorization: dripCommon.authorizationHeader(context.auth),
},
};
await httpClient.sendRequest(request);
}
},
async run(context) {
return [context.payload.body];
},
});
interface DripWebhookInformation {
webhookId: string;
userId: string;
}

View File

@@ -0,0 +1,78 @@
import {
HttpRequest,
HttpMethod,
httpClient,
} from '@activepieces/pieces-common';
import { TriggerStrategy, createTrigger } from '@activepieces/pieces-framework';
import { dripCommon } from '../common';
import { dripAuth } from '../../';
const triggerNameInStore = 'drip_tag_applied_to_subscriber_trigger';
export const dripTagAppliedEvent = createTrigger({
auth: dripAuth,
name: 'tag_applied_to_subscribers',
displayName: 'Tag Applied',
description: 'Triggers when a tag is applied.',
props: {
account_id: dripCommon.account_id,
},
sampleData: {
event: 'subscriber.applied_tag',
data: {
account_id: '9999999',
subscriber: {},
properties: {
tag: 'Customer',
},
},
occurred_at: '2013-06-21T10:31:58Z',
},
type: TriggerStrategy.WEBHOOK,
async onEnable(context) {
const request: HttpRequest = {
method: HttpMethod.POST,
url: `${dripCommon.baseUrl(context.propsValue.account_id)}/webhooks`,
body: {
webhooks: [
{ post_url: context.webhookUrl, events: ['subscriber.applied_tag'] },
],
},
headers: {
Authorization: dripCommon.authorizationHeader(context.auth),
},
queryParams: {},
};
const { body } = await httpClient.sendRequest<{
webhooks: { id: string }[];
}>(request);
await context.store?.put<DripWebhookInformation>(triggerNameInStore, {
webhookId: body.webhooks[0].id,
userId: context.propsValue['account_id']!,
});
},
async onDisable(context) {
const response = await context.store?.get<DripWebhookInformation>(
triggerNameInStore
);
if (response !== null && response !== undefined) {
const request: HttpRequest<never> = {
method: HttpMethod.DELETE,
url: `${dripCommon.baseUrl(response.userId)}/webhooks/${
response.webhookId
}`,
headers: {
Authorization: dripCommon.authorizationHeader(context.auth),
},
};
await httpClient.sendRequest(request);
}
},
async run(context) {
return [context.payload.body];
},
});
interface DripWebhookInformation {
webhookId: string;
userId: string;
}