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.json"
],
"ignorePatterns": [
"!**/*"
],
"overrides": [
{
"files": [
"*.ts",
"*.tsx",
"*.js",
"*.jsx"
],
"rules": {}
},
{
"files": [
"*.ts",
"*.tsx"
],
"rules": {}
},
{
"files": [
"*.js",
"*.jsx"
],
"rules": {}
}
]
}

View File

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

View File

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

View File

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

View File

@@ -0,0 +1,54 @@
{
"Email marketing, marketing automation, and CRM tools you need to create incredible customer experiences.": "E-Mail-Marketing, Marketing-Automatisierung und CRM-Tools benötigen Sie, um unglaubliche Kundenerlebnisse zu schaffen.",
"API URL": "API URL",
"API Key": "API-Schlüssel",
"\nTo obtain your ActiveCampaign API URL and Key, follow these steps:\n\n1. Log in to your ActiveCampaign account.\n2. Navigate to **Settings->Developer** section.\n3. Under **API Access** ,you'll find your API URL and Key.\n": "\nUm Ihre ActiveCampaign API URL und Ihren Schlüssel zu erhalten, folgen Sie diesen Schritten:\n\n1. Loggen Sie sich in Ihr ActiveCampaign Konto ein.\n2. Navigieren Sie zu **Einstellungen->Entwickler** Abschnitt.\n3. Unter **API Zugriff** finden Sie Ihre API-URL und Schlüssel.\n",
"Add Contact to Account": "Kontakt zum Konto hinzufügen",
"Add Tag to Contact": "Tag zu Kontakt hinzufügen",
"Create Account": "Konto erstellen",
"Create Contact": "Kontakt erstellen",
"Update Account": "Konto aktualisieren",
"Update Contact": "Kontakt aktualisieren",
"Subscribe or Unsubscribe Contact From List": "Kontaktliste abonnieren oder abbestellen",
"Adds a contact to an ActiveCampaign account.": "Fügt einen Kontakt zu einem ActiveCampaign Konto hinzu.",
"Adds a tag to contact.": "Fügt einen Tag zum Kontakt hinzu.",
"Creates a new account.": "Erstellt ein neues Konto.",
"Creates a new contact.": "Erstellt einen neuen Kontakt.",
"Updates an account.": "Aktualisiert ein Konto.",
"Updates an existing contact.": "Aktualisiert einen bestehenden Kontakt.",
"Subscribes a Contact to a List it is not currently associated with, or Unsubscribes a Contact from a list is currently associated with.": "Abonniert einen Kontakt zu einer Liste, der er derzeit nicht zugeordnet ist, oder löscht einen Kontakt aus einer Liste aus.",
"Contact ID": "Kontakt-ID",
"Account ID": "Konto-ID",
"Job Title": "Job Titel",
"Tag ID": "Tag ID",
"Account Name": "Kontoname",
"Account URL": "Account-URL",
"Account Custom Fields": "Benutzerdefinierte Felder",
"Email": "E-Mail",
"First Name": "Vorname",
"Last Name": "Nachname",
"Phone": "Telefon",
"Contact Custom Fields": "Benutzerdefinierte Kontaktfelder",
"List": "Liste",
"Action": "Aktion",
"Subscribe": "Abonnieren",
"Unsubscribe": "Abmelden",
"Deal Task Completed": "Angebotsaufgabe abgeschlossen",
"New Contact Note": "Neue Kontakt-Notiz",
"New Contact Task": "Neue Kontaktaufgabe",
"New Deal Added or Updated": "Neuer Deal hinzugefügt oder aktualisiert",
"New or Updated Account": "Neues oder aktualisiertes Konto",
"New Deal Note": "Neue Deal-Notiz",
"New Deal Task": "Neue Angebotsaufgabe",
"Tag Added or Removed From Contact": "Tag hinzugefügt oder vom Kontakt entfernt",
"Updated Contact": "Kontakt aktualisiert",
"Triggers when a deal task has been completed.": "Löst aus, wenn eine Deal-Aufgabe erledigt wurde.",
"Triggers when a new contact note is added.": "Wird ausgelöst, wenn eine neue Kontakt-Notiz hinzugefügt wird.",
"Triggers when a new contact task is added.": "Wird ausgelöst, wenn eine neue Kontaktaufgabe hinzugefügt wird.",
"Triggers when a new deal is created or existing deal is updated.": "Wird ausgelöst, wenn einen neuen Deal erstellt oder ein bestehender Deal aktualisiert wird.",
"Triggers when a new account is added or an existing accounts details are updated": "Wird ausgelöst, wenn ein neues Konto hinzugefügt wird oder die Daten eines bestehenden Kontos aktualisiert werden",
"Triggers when a new deal note is created.": "Wird ausgelöst, wenn ein neuer Deal-Hinweis erstellt wird.",
"Triggers when a new deal task is created.": "Wird ausgelöst, wenn eine neue Deal-Aufgabe erstellt wird.",
"Triggers when a a Tag is added or removed from a Contact": "Wird ausgelöst, wenn ein Tag hinzugefügt oder von einem Kontakt entfernt wird",
"Triggers when an existing contact details are updated.": "Wird ausgelöst, wenn eine existierende Kontaktinformation aktualisiert wird."
}

View File

@@ -0,0 +1,54 @@
{
"Email marketing, marketing automation, and CRM tools you need to create incredible customer experiences.": "Herramientas de marketing por correo electrónico, automatización de marketing y CRM que necesita para crear increíbles experiencias de clientes.",
"API URL": "API URL",
"API Key": "Clave API",
"\nTo obtain your ActiveCampaign API URL and Key, follow these steps:\n\n1. Log in to your ActiveCampaign account.\n2. Navigate to **Settings->Developer** section.\n3. Under **API Access** ,you'll find your API URL and Key.\n": "\nPara obtener la llave de API URL de Campaña Activa, debes seguir estos pasos:\n\n1. Iniciar sesión en tu cuenta Campaña Activa.\n2. Navegar a la sección **Ajustes -> Desarrollador**.\n3. Debajo de ** Acceso API**, puedes encontrar tu API URL y la llave.\n",
"Add Contact to Account": "Añadir contacto a cuenta",
"Add Tag to Contact": "Añadir etiqueta al contacto",
"Create Account": "Crear cuenta",
"Create Contact": "Crear contacto",
"Update Account": "Actualizar cuenta",
"Update Contact": "Actualizar contacto",
"Subscribe or Unsubscribe Contact From List": "Suscribirse o cancelar contacto de la lista",
"Adds a contact to an ActiveCampaign account.": "Añade un contacto a una cuenta de Campaña Activa.",
"Adds a tag to contact.": "Añade una etiqueta al contacto.",
"Creates a new account.": "Crea una nueva cuenta.",
"Creates a new contact.": "Crea un nuevo contacto.",
"Updates an account.": "Actualiza una cuenta.",
"Updates an existing contact.": "Actualiza un contacto existente.",
"Subscribes a Contact to a List it is not currently associated with, or Unsubscribes a Contact from a list is currently associated with.": "Suscribirse a un contacto a una lista con la que no está asociada actualmente, o Cancelar suscripciones a un contacto de una lista está asociado actualmente.",
"Contact ID": "ID de contacto",
"Account ID": "ID de cuenta",
"Job Title": "Trabajo",
"Tag ID": "Etiqueta ID",
"Account Name": "Nombre de cuenta",
"Account URL": "URL de la cuenta",
"Account Custom Fields": "Campos personalizados del cliente",
"Email": "E-mail",
"First Name": "Nombre",
"Last Name": "Apellido",
"Phone": "Teléfono",
"Contact Custom Fields": "Contactar campos personalizados",
"List": "Lista",
"Action": "Accin",
"Subscribe": "Suscribirse",
"Unsubscribe": "Darse de baja",
"Deal Task Completed": "Tarea de oferta completada",
"New Contact Note": "Nueva nota de contacto",
"New Contact Task": "Nueva Tarea de Contacto",
"New Deal Added or Updated": "Nueva oferta añadida o actualizada",
"New or Updated Account": "Cuenta nueva o actualizada",
"New Deal Note": "Nueva nota de oferta",
"New Deal Task": "Nueva tarea de oferta",
"Tag Added or Removed From Contact": "Etiqueta añadida o eliminada del contacto",
"Updated Contact": "Contacto actualizado",
"Triggers when a deal task has been completed.": "Se activa cuando se ha completado una tarea de acuerdo.",
"Triggers when a new contact note is added.": "Se activa cuando se añade una nueva nota de contacto.",
"Triggers when a new contact task is added.": "Se activa cuando se añade una nueva tarea de contacto.",
"Triggers when a new deal is created or existing deal is updated.": "Se activa cuando se crea una nueva operación o se actualiza una operación existente.",
"Triggers when a new account is added or an existing accounts details are updated": "Dispara cuando se agrega una nueva cuenta o se actualizan los detalles de una cuenta existente",
"Triggers when a new deal note is created.": "Se activa cuando se crea una nueva nota de negocio.",
"Triggers when a new deal task is created.": "Se activa cuando se crea una nueva tarea de trato.",
"Triggers when a a Tag is added or removed from a Contact": "Dispara cuando se agrega o elimina una etiqueta de un contacto",
"Triggers when an existing contact details are updated.": "Se activa cuando se actualizan los datos de contacto existentes."
}

View File

@@ -0,0 +1,54 @@
{
"Email marketing, marketing automation, and CRM tools you need to create incredible customer experiences.": "Le marketing par courriel, l'automatisation du marketing et les outils CRM dont vous avez besoin pour créer des expériences clients incroyables.",
"API URL": "API URL",
"API Key": "Clé API",
"\nTo obtain your ActiveCampaign API URL and Key, follow these steps:\n\n1. Log in to your ActiveCampaign account.\n2. Navigate to **Settings->Developer** section.\n3. Under **API Access** ,you'll find your API URL and Key.\n": "\nTo obtain your ActiveCampaign API URL and Key, follow these steps:\n\n1. Log in to your ActiveCampaign account.\n2. Navigate to **Settings->Developer** section.\n3. Under **API Access** ,you'll find your API URL and Key.\n",
"Add Contact to Account": "Ajouter un contact au compte",
"Add Tag to Contact": "Ajouter un tag au contact",
"Create Account": "Créer un compte",
"Create Contact": "Créer un contact",
"Update Account": "Mettre à jour le compte",
"Update Contact": "Mettre à jour le contact",
"Subscribe or Unsubscribe Contact From List": "S'abonner ou se désabonner de la liste des contacts",
"Adds a contact to an ActiveCampaign account.": "Ajoute un contact à un compte ActiveCampagne.",
"Adds a tag to contact.": "Ajoute un tag au contact.",
"Creates a new account.": "Crée un nouveau compte.",
"Creates a new contact.": "Crée un nouveau contact.",
"Updates an account.": "Met à jour un compte.",
"Updates an existing contact.": "Met à jour un contact existant.",
"Subscribes a Contact to a List it is not currently associated with, or Unsubscribes a Contact from a list is currently associated with.": "Abonne un Contact à une Liste avec laquelle il n'est actuellement pas associé ou désabonne un Contact d'une liste est actuellement associé.",
"Contact ID": "ID du contact",
"Account ID": "ID du compte client",
"Job Title": "Titre du poste",
"Tag ID": "Tag ID",
"Account Name": "Nom du compte",
"Account URL": "URL du compte",
"Account Custom Fields": "Champs personnalisés du cpte client",
"Email": "Courriel",
"First Name": "First Name",
"Last Name": "Last Name",
"Phone": "Téléphone",
"Contact Custom Fields": "Champs personnalisés du contact",
"List": "Liste",
"Action": "Action",
"Subscribe": "S'abonner",
"Unsubscribe": "Se désabonner",
"Deal Task Completed": "Tâche de transaction terminée",
"New Contact Note": "Nouvelle note de contact",
"New Contact Task": "Nouvelle tâche de contact",
"New Deal Added or Updated": "Nouvelle offre ajoutée ou mise à jour",
"New or Updated Account": "Nouveau ou mis à jour du compte",
"New Deal Note": "Note sur la nouvelle offre",
"New Deal Task": "Nouvelle tâche",
"Tag Added or Removed From Contact": "Étiquette ajoutée ou retirée du contact",
"Updated Contact": "Contact mis à jour",
"Triggers when a deal task has been completed.": "Déclenche quand une tâche de transaction est terminée.",
"Triggers when a new contact note is added.": "Déclenche quand une nouvelle note de contact est ajoutée.",
"Triggers when a new contact task is added.": "Déclenche quand une nouvelle tâche de contact est ajoutée.",
"Triggers when a new deal is created or existing deal is updated.": "Déclenche lorsqu'une nouvelle transaction est créée ou qu'une transaction existante est mise à jour.",
"Triggers when a new account is added or an existing accounts details are updated": "Déclenche lorsqu'un nouveau compte est ajouté ou les coordonnées d'un compte existant sont mises à jour",
"Triggers when a new deal note is created.": "Déclenche quand une nouvelle note d'affaire est créée.",
"Triggers when a new deal task is created.": "Déclenche quand une nouvelle tâche de transaction est créée.",
"Triggers when a a Tag is added or removed from a Contact": "Déclenche lorsqu'un Tag est ajouté ou retiré d'un Contact",
"Triggers when an existing contact details are updated.": "Déclenche lorsqu'un contact existant est mis à jour."
}

View File

@@ -0,0 +1,54 @@
{
"Email marketing, marketing automation, and CRM tools you need to create incredible customer experiences.": "メールマーケティング、マーケティングオートメーション、CRMツールを活用することで、驚くほどのカスタマーエクスペリエンスを実現できます。",
"API URL": "API URL",
"API Key": "API キー",
"\nTo obtain your ActiveCampaign API URL and Key, follow these steps:\n\n1. Log in to your ActiveCampaign account.\n2. Navigate to **Settings->Developer** section.\n3. Under **API Access** ,you'll find your API URL and Key.\n": "\nTo obtain your ActiveCampaign API URL and Key, follow these steps:\n\n1. Log in to your ActiveCampaign account.\n2. Navigate to **Settings->Developer** section.\n3. Under **API Access** ,you'll find your API URL and Key.\n",
"Add Contact to Account": "アカウントに連絡先を追加",
"Add Tag to Contact": "連絡先にタグを追加",
"Create Account": "アカウントを作成",
"Create Contact": "連絡先を作成",
"Update Account": "アカウントを更新",
"Update Contact": "連絡先を更新",
"Subscribe or Unsubscribe Contact From List": "一覧から連絡先を購読または購読解除する",
"Adds a contact to an ActiveCampaign account.": "ActiveCampaignアカウントに連絡先を追加します。",
"Adds a tag to contact.": "連絡先にタグを追加",
"Creates a new account.": "新しいアカウントを作成します。",
"Creates a new contact.": "新しい連絡先を作成します。",
"Updates an account.": "アカウントを更新する。",
"Updates an existing contact.": "既存のコンタクトを更新します。",
"Subscribes a Contact to a List it is not currently associated with, or Unsubscribes a Contact from a list is currently associated with.": "現在関連付けられていないリストに連絡先を登録したり、リストから連絡先を登録解除したりします。",
"Contact ID": "連絡先ID",
"Account ID": "アカウントID",
"Job Title": "役職名",
"Tag ID": "Tag ID",
"Account Name": "口座名",
"Account URL": "アカウントのURL",
"Account Custom Fields": "アカウントのカスタムフィールド",
"Email": "Eメールアドレス",
"First Name": "名",
"Last Name": "姓",
"Phone": "電話番号",
"Contact Custom Fields": "連絡のカスタムフィールド",
"List": "リスト",
"Action": "アクション",
"Subscribe": "購読する",
"Unsubscribe": "購読解除",
"Deal Task Completed": "タスクを処理しました",
"New Contact Note": "新しい連絡先メモ",
"New Contact Task": "新しい連絡先タスク",
"New Deal Added or Updated": "新しい取引が追加または更新されました",
"New or Updated Account": "新規または更新されたアカウント",
"New Deal Note": "新しい取引メモ",
"New Deal Task": "新しい取引タスク",
"Tag Added or Removed From Contact": "連絡先からタグが追加または削除されました",
"Updated Contact": "連絡先の更新",
"Triggers when a deal task has been completed.": "ディールタスクが完了したときに発生します。",
"Triggers when a new contact note is added.": "新しい連絡先ノートが追加されたときにトリガーされます。",
"Triggers when a new contact task is added.": "新しい連絡先タスクが追加されたときにトリガーします。",
"Triggers when a new deal is created or existing deal is updated.": "新しい取引が作成されたり、既存の取引が更新されたときに発生します。",
"Triggers when a new account is added or an existing accounts details are updated": "新しいアカウントが追加された時、または既存のアカウントの詳細が更新されたときにトリガーされます。",
"Triggers when a new deal note is created.": "新しいディールノートが作成されたときにトリガーされます。",
"Triggers when a new deal task is created.": "新しい取引タスクが作成されたときにトリガーされます。",
"Triggers when a a Tag is added or removed from a Contact": "連絡先からタグが追加または削除されたときにトリガーします",
"Triggers when an existing contact details are updated.": "既存の連絡先詳細が更新されたときにトリガーされます。"
}

View File

@@ -0,0 +1,54 @@
{
"Email marketing, marketing automation, and CRM tools you need to create incredible customer experiences.": "E-mail marketing, marketing automatisering en CRM tools die u nodig heeft om ongelooflijke klanten ervaringen te maken.",
"API URL": "API URL",
"API Key": "API Sleutel",
"\nTo obtain your ActiveCampaign API URL and Key, follow these steps:\n\n1. Log in to your ActiveCampaign account.\n2. Navigate to **Settings->Developer** section.\n3. Under **API Access** ,you'll find your API URL and Key.\n": "\nOm uw ActiveCampaign API URL en Key te verkrijgen, volg de volgende stappen:\n\n1. Log in op uw ActiveCampaign account.\n2. Navigeer naar **Instellingen->Ontwikkelaar** sectie.\n3. Onder **API Access** ,vind je je API URL en Key.\n",
"Add Contact to Account": "Contactpersoon toevoegen aan account",
"Add Tag to Contact": "Tag aan contactpersoon toevoegen",
"Create Account": "Account Aanmaken",
"Create Contact": "Contactpersoon aanmaken",
"Update Account": "Account bijwerken",
"Update Contact": "Contactpersoon bijwerken",
"Subscribe or Unsubscribe Contact From List": "Abonneren of uitschrijven van contact van lijst",
"Adds a contact to an ActiveCampaign account.": "Voegt een contactpersoon toe aan een ActiveCampaign account.",
"Adds a tag to contact.": "Voegt een tag toe om contact op te nemen",
"Creates a new account.": "Maakt een nieuwe account aan.",
"Creates a new contact.": "Maakt een nieuw contact aan.",
"Updates an account.": "Een account bijwerken.",
"Updates an existing contact.": "Werkt een bestaand contact bij.",
"Subscribes a Contact to a List it is not currently associated with, or Unsubscribes a Contact from a list is currently associated with.": "Abonneert u een contactpersoon op een lijst die momenteel niet gekoppeld is aan of meldt u af van een contactpersoon uit een lijst.",
"Contact ID": "Contact ID",
"Account ID": "ID klant",
"Job Title": "Job titel",
"Tag ID": "Tag ID",
"Account Name": "Klant naam",
"Account URL": "Account URL",
"Account Custom Fields": "Klant aangepaste velden",
"Email": "E-mail",
"First Name": "Voornaam",
"Last Name": "Achternaam",
"Phone": "Telefoonnummer",
"Contact Custom Fields": "Contact Custom Velden",
"List": "Klantenlijst",
"Action": "actie",
"Subscribe": "Abonneren",
"Unsubscribe": "Afmelden",
"Deal Task Completed": "Deal Taak voltooid",
"New Contact Note": "Nieuwe contact notitie",
"New Contact Task": "Nieuwe contacttaak",
"New Deal Added or Updated": "Nieuwe deal toegevoegd of bijgewerkt",
"New or Updated Account": "Nieuw of geüpdatet account",
"New Deal Note": "Nieuwe deal notitie",
"New Deal Task": "Nieuwe aanbieding taak",
"Tag Added or Removed From Contact": "Tag toegevoegd of verwijderd van contact",
"Updated Contact": "Contact bijgewerkt",
"Triggers when a deal task has been completed.": "Triggert wanneer een transactie taak is voltooid.",
"Triggers when a new contact note is added.": "Triggert wanneer een nieuwe contactnotitie wordt toegevoegd.",
"Triggers when a new contact task is added.": "Activeert wanneer een nieuwe contacttaak is toegevoegd.",
"Triggers when a new deal is created or existing deal is updated.": "Triggert wanneer een nieuwe transactie wordt aangemaakt of een bestaande deal wordt bijgewerkt.",
"Triggers when a new account is added or an existing accounts details are updated": "Triggert wanneer een nieuw account is toegevoegd of bestaande accountgegevens worden bijgewerkt",
"Triggers when a new deal note is created.": "Triggert wanneer een nieuwe transactienotitie wordt aangemaakt.",
"Triggers when a new deal task is created.": "Triggert wanneer een nieuwe transactie taak wordt aangemaakt.",
"Triggers when a a Tag is added or removed from a Contact": "Triggert wanneer een Tag wordt toegevoegd of verwijderd uit een contactpersoon",
"Triggers when an existing contact details are updated.": "Triggert wanneer bestaande contactgegevens worden bijgewerkt."
}

View File

@@ -0,0 +1,54 @@
{
"Email marketing, marketing automation, and CRM tools you need to create incredible customer experiences.": "Marketing por e-mail, automação de marketing e ferramentas de CRM que você precisa para criar experiências incríveis para o cliente.",
"API URL": "API URL",
"API Key": "Chave de API",
"\nTo obtain your ActiveCampaign API URL and Key, follow these steps:\n\n1. Log in to your ActiveCampaign account.\n2. Navigate to **Settings->Developer** section.\n3. Under **API Access** ,you'll find your API URL and Key.\n": "\nPara obter sua Campanha Ativa API URL e chave, seguir esses passos:\n1. Acessar sua conta Campanha Ativa.\n2. Navegar para seção **Configurações->Desenvolvedor**\n3. Sob **Acesso API** você encontrará sua API URL e Chave.\n",
"Add Contact to Account": "Adicionar contato a conta",
"Add Tag to Contact": "Adicionar Tag ao Contato",
"Create Account": "Criar conta",
"Create Contact": "Criar contato",
"Update Account": "Atualizar conta",
"Update Contact": "Atualizar contato",
"Subscribe or Unsubscribe Contact From List": "Inscrever-se ou Cancelar Contato na Lista de Contatos",
"Adds a contact to an ActiveCampaign account.": "Adiciona um contato a uma conta ActiveCampaign",
"Adds a tag to contact.": "Adiciona uma etiqueta para contato.",
"Creates a new account.": "Cria uma nova conta.",
"Creates a new contact.": "Cria um novo contato.",
"Updates an account.": "Atualiza uma conta.",
"Updates an existing contact.": "Atualiza um contato existente.",
"Subscribes a Contact to a List it is not currently associated with, or Unsubscribes a Contact from a list is currently associated with.": "Assinar um Contato a uma Lista com quem ele não está atualmente associado, ou cancelar a assinatura de um Contato a partir de uma lista está atualmente associado.",
"Contact ID": "ID do contato",
"Account ID": "ID da Conta",
"Job Title": "Título do Cargo",
"Tag ID": "Tag ID",
"Account Name": "Nome da Conta",
"Account URL": "URL da Conta",
"Account Custom Fields": "Campos personalizados de clientes",
"Email": "e-mail",
"First Name": "Nome",
"Last Name": "Sobrenome",
"Phone": "Smartphone",
"Contact Custom Fields": "Campos personalizados de contato",
"List": "Lista",
"Action": "Acão",
"Subscribe": "Inscrever-se",
"Unsubscribe": "Desinscrever",
"Deal Task Completed": "Tarefa de negócio concluída",
"New Contact Note": "Nova Nota de Contato",
"New Contact Task": "Nova tarefa de contato",
"New Deal Added or Updated": "Nova Oferta adicionada ou atualizada",
"New or Updated Account": "Conta nova ou atualizada",
"New Deal Note": "Nova Nota de Oferta",
"New Deal Task": "Nova tarefa de negócio",
"Tag Added or Removed From Contact": "Tag adicionada ou removida do contato",
"Updated Contact": "Contato atualizado",
"Triggers when a deal task has been completed.": "Dispara quando uma tarefa de negócio for concluída.",
"Triggers when a new contact note is added.": "Aciona quando uma nova nota de contato é adicionada.",
"Triggers when a new contact task is added.": "Aciona quando uma nova tarefa de contato é adicionada.",
"Triggers when a new deal is created or existing deal is updated.": "Aciona quando uma nova operação é criada ou uma operação existente é atualizada.",
"Triggers when a new account is added or an existing accounts details are updated": "Dispara quando uma nova conta é adicionada ou os detalhes de uma conta existente são atualizados",
"Triggers when a new deal note is created.": "Aciona quando uma nova nota de negócio é criada.",
"Triggers when a new deal task is created.": "Aciona quando uma nova tarefa de negócio é criada.",
"Triggers when a a Tag is added or removed from a Contact": "Aciona quando uma Tag é adicionada ou removida de um Contato",
"Triggers when an existing contact details are updated.": "Aciona quando detalhes de contato existentes são atualizados."
}

View File

@@ -0,0 +1,55 @@
{
"ActiveCampaign": "Активная Кампания",
"Email marketing, marketing automation, and CRM tools you need to create incredible customer experiences.": "Электронный маркетинг, маркетинговая автоматизация и CRM инструменты, необходимые для создания невероятных впечатлений от клиентов.",
"API URL": "API URL",
"API Key": "Ключ API",
"\nTo obtain your ActiveCampaign API URL and Key, follow these steps:\n\n1. Log in to your ActiveCampaign account.\n2. Navigate to **Settings->Developer** section.\n3. Under **API Access** ,you'll find your API URL and Key.\n": "\nTo obtain your ActiveCampaign API URL and Key, follow these steps:\n\n1. Log in to your ActiveCampaign account.\n2. Navigate to **Settings->Developer** section.\n3. Under **API Access** ,you'll find your API URL and Key.\n",
"Add Contact to Account": "Добавить контакт в аккаунт",
"Add Tag to Contact": "Добавить тег в контакт",
"Create Account": "Создать Аккаунт",
"Create Contact": "Создать контакт",
"Update Account": "Обновить аккаунт",
"Update Contact": "Обновить контакт",
"Subscribe or Unsubscribe Contact From List": "Подписаться или Отписаться от контакта из списка",
"Adds a contact to an ActiveCampaign account.": "Добавляет контакт с учетной записью Activeкампании.",
"Adds a tag to contact.": "Добавляет тег контакту.",
"Creates a new account.": "Создать новую учетную запись.",
"Creates a new contact.": "Создает новый контакт.",
"Updates an account.": "Обновление учетной записи.",
"Updates an existing contact.": "Обновляет существующий контакт.",
"Subscribes a Contact to a List it is not currently associated with, or Unsubscribes a Contact from a list is currently associated with.": "Подписаться на контакт из списка, с которым он в настоящее время не связан или отписаться от контакта из списка в настоящее время связан с.",
"Contact ID": "ID контакта",
"Account ID": "ID клиента",
"Job Title": "Заголовок",
"Tag ID": "Tag ID",
"Account Name": "Имя аккаунта",
"Account URL": "URL аккаунта",
"Account Custom Fields": "Пользовательские поля клиента",
"Email": "Почта",
"First Name": "First Name",
"Last Name": "Last Name",
"Phone": "Телефон",
"Contact Custom Fields": "Пользовательские поля контакта",
"List": "Список",
"Action": "Действие",
"Subscribe": "Подписаться",
"Unsubscribe": "Отписаться",
"Deal Task Completed": "Задача на сделку выполнена",
"New Contact Note": "Новая контактная заметка",
"New Contact Task": "Новая задача Контакта",
"New Deal Added or Updated": "Новая сделка добавлена или обновлена",
"New or Updated Account": "Новый или обновленный аккаунт",
"New Deal Note": "Новая заметка о сделке",
"New Deal Task": "Новая сделка",
"Tag Added or Removed From Contact": "Тег добавлен или удален из контакта",
"Updated Contact": "Контакт обновлен",
"Triggers when a deal task has been completed.": "Триггеры по завершении сделки.",
"Triggers when a new contact note is added.": "Включает при добавлении новой контактной заметки.",
"Triggers when a new contact task is added.": "Триггеры при добавлении новой задачи контакта.",
"Triggers when a new deal is created or existing deal is updated.": "Триггеры при создании новой сделки или обновлении существующей сделки.",
"Triggers when a new account is added or an existing accounts details are updated": "Триггеры при добавлении новой учетной записи или обновлении данных существующего аккаунта",
"Triggers when a new deal note is created.": "Триггеры при создании новой заметки о сделке.",
"Triggers when a new deal task is created.": "Триггеры при создании новой сделки.",
"Triggers when a a Tag is added or removed from a Contact": "Триггеры при добавлении или удалении тега из контакта",
"Triggers when an existing contact details are updated.": "Включает при обновлении существующих контактных данных."
}

View File

@@ -0,0 +1,54 @@
{
"Email marketing, marketing automation, and CRM tools you need to create incredible customer experiences.": "Email marketing, marketing automation, and CRM tools you need to create incredible customer experiences.",
"API URL": "API URL",
"API Key": "API Key",
"\nTo obtain your ActiveCampaign API URL and Key, follow these steps:\n\n1. Log in to your ActiveCampaign account.\n2. Navigate to **Settings->Developer** section.\n3. Under **API Access** ,you'll find your API URL and Key.\n": "\nTo obtain your ActiveCampaign API URL and Key, follow these steps:\n\n1. Log in to your ActiveCampaign account.\n2. Navigate to **Settings->Developer** section.\n3. Under **API Access** ,you'll find your API URL and Key.\n",
"Add Contact to Account": "Add Contact to Account",
"Add Tag to Contact": "Add Tag to Contact",
"Create Account": "Create Account",
"Create Contact": "Create Contact",
"Update Account": "Update Account",
"Update Contact": "Update Contact",
"Subscribe or Unsubscribe Contact From List": "Subscribe or Unsubscribe Contact From List",
"Adds a contact to an ActiveCampaign account.": "Adds a contact to an ActiveCampaign account.",
"Adds a tag to contact.": "Adds a tag to contact.",
"Creates a new account.": "Creates a new account.",
"Creates a new contact.": "Creates a new contact.",
"Updates an account.": "Updates an account.",
"Updates an existing contact.": "Updates an existing contact.",
"Subscribes a Contact to a List it is not currently associated with, or Unsubscribes a Contact from a list is currently associated with.": "Subscribes a Contact to a List it is not currently associated with, or Unsubscribes a Contact from a list is currently associated with.",
"Contact ID": "Contact ID",
"Account ID": "Account ID",
"Job Title": "Job Title",
"Tag ID": "Tag ID",
"Account Name": "Account Name",
"Account URL": "Account URL",
"Account Custom Fields": "Account Custom Fields",
"Email": "Email",
"First Name": "First Name",
"Last Name": "Last Name",
"Phone": "Phone",
"Contact Custom Fields": "Contact Custom Fields",
"List": "List",
"Action": "Action",
"Subscribe": "Subscribe",
"Unsubscribe": "Unsubscribe",
"Deal Task Completed": "Deal Task Completed",
"New Contact Note": "New Contact Note",
"New Contact Task": "New Contact Task",
"New Deal Added or Updated": "New Deal Added or Updated",
"New or Updated Account": "New or Updated Account",
"New Deal Note": "New Deal Note",
"New Deal Task": "New Deal Task",
"Tag Added or Removed From Contact": "Tag Added or Removed From Contact",
"Updated Contact": "Updated Contact",
"Triggers when a deal task has been completed.": "Triggers when a deal task has been completed.",
"Triggers when a new contact note is added.": "Triggers when a new contact note is added.",
"Triggers when a new contact task is added.": "Triggers when a new contact task is added.",
"Triggers when a new deal is created or existing deal is updated.": "Triggers when a new deal is created or existing deal is updated.",
"Triggers when a new account is added or an existing accounts details are updated": "Triggers when a new account is added or an existing accounts details are updated",
"Triggers when a new deal note is created.": "Triggers when a new deal note is created.",
"Triggers when a new deal task is created.": "Triggers when a new deal task is created.",
"Triggers when a a Tag is added or removed from a Contact": "Triggers when a a Tag is added or removed from a Contact",
"Triggers when an existing contact details are updated.": "Triggers when an existing contact details are updated."
}

View File

@@ -0,0 +1,55 @@
{
"ActiveCampaign": "ActiveCampaign",
"Email marketing, marketing automation, and CRM tools you need to create incredible customer experiences.": "Email marketing, marketing automation, and CRM tools you need to create incredible customer experiences.",
"API URL": "API URL",
"API Key": "API Key",
"\nTo obtain your ActiveCampaign API URL and Key, follow these steps:\n\n1. Log in to your ActiveCampaign account.\n2. Navigate to **Settings->Developer** section.\n3. Under **API Access** ,you'll find your API URL and Key.\n": "\nTo obtain your ActiveCampaign API URL and Key, follow these steps:\n\n1. Log in to your ActiveCampaign account.\n2. Navigate to **Settings->Developer** section.\n3. Under **API Access** ,you'll find your API URL and Key.\n",
"Add Contact to Account": "Add Contact to Account",
"Add Tag to Contact": "Add Tag to Contact",
"Create Account": "Create Account",
"Create Contact": "Create Contact",
"Update Account": "Update Account",
"Update Contact": "Update Contact",
"Subscribe or Unsubscribe Contact From List": "Subscribe or Unsubscribe Contact From List",
"Adds a contact to an ActiveCampaign account.": "Adds a contact to an ActiveCampaign account.",
"Adds a tag to contact.": "Adds a tag to contact.",
"Creates a new account.": "Creates a new account.",
"Creates a new contact.": "Creates a new contact.",
"Updates an account.": "Updates an account.",
"Updates an existing contact.": "Updates an existing contact.",
"Subscribes a Contact to a List it is not currently associated with, or Unsubscribes a Contact from a list is currently associated with.": "Subscribes a Contact to a List it is not currently associated with, or Unsubscribes a Contact from a list is currently associated with.",
"Contact ID": "Contact ID",
"Account ID": "Account ID",
"Job Title": "Job Title",
"Tag ID": "Tag ID",
"Account Name": "Account Name",
"Account URL": "Account URL",
"Account Custom Fields": "Account Custom Fields",
"Email": "Email",
"First Name": "First Name",
"Last Name": "Last Name",
"Phone": "Phone",
"Contact Custom Fields": "Contact Custom Fields",
"List": "List",
"Action": "Action",
"Subscribe": "Subscribe",
"Unsubscribe": "Unsubscribe",
"Deal Task Completed": "Deal Task Completed",
"New Contact Note": "New Contact Note",
"New Contact Task": "New Contact Task",
"New Deal Added or Updated": "New Deal Added or Updated",
"New or Updated Account": "New or Updated Account",
"New Deal Note": "New Deal Note",
"New Deal Task": "New Deal Task",
"Tag Added or Removed From Contact": "Tag Added or Removed From Contact",
"Updated Contact": "Updated Contact",
"Triggers when a deal task has been completed.": "Triggers when a deal task has been completed.",
"Triggers when a new contact note is added.": "Triggers when a new contact note is added.",
"Triggers when a new contact task is added.": "Triggers when a new contact task is added.",
"Triggers when a new deal is created or existing deal is updated.": "Triggers when a new deal is created or existing deal is updated.",
"Triggers when a new account is added or an existing accounts details are updated": "Triggers when a new account is added or an existing accounts details are updated",
"Triggers when a new deal note is created.": "Triggers when a new deal note is created.",
"Triggers when a new deal task is created.": "Triggers when a new deal task is created.",
"Triggers when a a Tag is added or removed from a Contact": "Triggers when a a Tag is added or removed from a Contact",
"Triggers when an existing contact details are updated.": "Triggers when an existing contact details are updated."
}

View File

@@ -0,0 +1,54 @@
{
"Email marketing, marketing automation, and CRM tools you need to create incredible customer experiences.": "Email marketing, marketing automation, and CRM tools you need to create incredible customer experiences.",
"API URL": "API URL",
"API Key": "API 密钥",
"\nTo obtain your ActiveCampaign API URL and Key, follow these steps:\n\n1. Log in to your ActiveCampaign account.\n2. Navigate to **Settings->Developer** section.\n3. Under **API Access** ,you'll find your API URL and Key.\n": "\nTo obtain your ActiveCampaign API URL and Key, follow these steps:\n\n1. Log in to your ActiveCampaign account.\n2. Navigate to **Settings->Developer** section.\n3. Under **API Access** ,you'll find your API URL and Key.\n",
"Add Contact to Account": "Add Contact to Account",
"Add Tag to Contact": "Add Tag to Contact",
"Create Account": "Create Account",
"Create Contact": "Create Contact",
"Update Account": "Update Account",
"Update Contact": "Update Contact",
"Subscribe or Unsubscribe Contact From List": "Subscribe or Unsubscribe Contact From List",
"Adds a contact to an ActiveCampaign account.": "Adds a contact to an ActiveCampaign account.",
"Adds a tag to contact.": "Adds a tag to contact.",
"Creates a new account.": "Creates a new account.",
"Creates a new contact.": "Creates a new contact.",
"Updates an account.": "Updates an account.",
"Updates an existing contact.": "Updates an existing contact.",
"Subscribes a Contact to a List it is not currently associated with, or Unsubscribes a Contact from a list is currently associated with.": "Subscribes a Contact to a List it is not currently associated with, or Unsubscribes a Contact from a list is currently associated with.",
"Contact ID": "Contact ID",
"Account ID": "Account ID",
"Job Title": "Job Title",
"Tag ID": "Tag ID",
"Account Name": "Account Name",
"Account URL": "Account URL",
"Account Custom Fields": "Account Custom Fields",
"Email": "电子邮件地址",
"First Name": "First Name",
"Last Name": "名字",
"Phone": "Phone",
"Contact Custom Fields": "Contact Custom Fields",
"List": "List",
"Action": "行 动",
"Subscribe": "Subscribe",
"Unsubscribe": "Unsubscribe",
"Deal Task Completed": "Deal Task Completed",
"New Contact Note": "New Contact Note",
"New Contact Task": "New Contact Task",
"New Deal Added or Updated": "New Deal Added or Updated",
"New or Updated Account": "New or Updated Account",
"New Deal Note": "New Deal Note",
"New Deal Task": "New Deal Task",
"Tag Added or Removed From Contact": "Tag Added or Removed From Contact",
"Updated Contact": "Updated Contact",
"Triggers when a deal task has been completed.": "Triggers when a deal task has been completed.",
"Triggers when a new contact note is added.": "Triggers when a new contact note is added.",
"Triggers when a new contact task is added.": "Triggers when a new contact task is added.",
"Triggers when a new deal is created or existing deal is updated.": "Triggers when a new deal is created or existing deal is updated.",
"Triggers when a new account is added or an existing accounts details are updated": "Triggers when a new account is added or an existing accounts details are updated",
"Triggers when a new deal note is created.": "Triggers when a new deal note is created.",
"Triggers when a new deal task is created.": "Triggers when a new deal task is created.",
"Triggers when a a Tag is added or removed from a Contact": "Triggers when a a Tag is added or removed from a Contact",
"Triggers when an existing contact details are updated.": "Triggers when an existing contact details are updated."
}

View File

@@ -0,0 +1,89 @@
import {
createPiece,
PieceAuth,
Property,
} from '@activepieces/pieces-framework';
import { PieceCategory } from '@activepieces/shared';
import { newDealAddedOrUpdatedTrigger } from './lib/triggers/new-deal-added-or-updated';
import { createAccountAction } from './lib/actions/accounts/create-account';
import { updateAccountAction } from './lib/actions/accounts/update-account';
import { subscribeOrUnsubscribeContactFromListAction } from './lib/actions/contacts/subscribe-or-unsubscribe-contact-from-list';
import { createContactAction } from './lib/actions/contacts/create-contact';
import { updateContactAction } from './lib/actions/contacts/update-contact';
import { addContactToAccountAction } from './lib/actions/contacts/add-contact-to-account';
import { addTagToContactAction } from './lib/actions/contacts/add-tag-to-contact';
import { makeClient } from './lib/common';
import { newDealNoteTrigger } from './lib/triggers/new-deal-note';
import { newDealTaskTrigger } from './lib/triggers/new-deal-task';
import { dealTaskCompletedTrigger } from './lib/triggers/deal-task-completed';
import { newtagAddedOrRemovedFromContactTrigger } from './lib/triggers/tag-added-or-removed-from-contact';
import { newOrUpdatedAccountTrigger } from './lib/triggers/new-or-updated-account';
import { newContactNoteTrigger } from './lib/triggers/new-contact-note';
import { newContactTaskTrigger } from './lib/triggers/new-contact-task';
import { updatedContactTrigger } from './lib/triggers/updated-contact';
const authGuide = `
To obtain your ActiveCampaign API URL and Key, follow these steps:
1. Log in to your ActiveCampaign account.
2. Navigate to **Settings->Developer** section.
3. Under **API Access** ,you'll find your API URL and Key.
`;
export const activeCampaignAuth = PieceAuth.CustomAuth({
required: true,
description: authGuide,
props: {
apiUrl: Property.ShortText({
displayName: 'API URL',
required: true,
}),
apiKey: Property.ShortText({
displayName: 'API Key',
required: true,
}),
},
validate: async ({ auth }) => {
try {
const client = makeClient(auth);
await client.authenticate();
return { valid: true };
} catch (error) {
return {
valid: false,
error: 'Invalid API credentials',
};
}
},
});
export const activecampaign = createPiece({
displayName: 'ActiveCampaign',
description:
'Email marketing, marketing automation, and CRM tools you need to create incredible customer experiences.',
auth: activeCampaignAuth,
minimumSupportedRelease: '0.30.0',
logoUrl: 'https://cdn.activepieces.com/pieces/activecampaign.png',
categories: [PieceCategory.MARKETING, PieceCategory.SALES_AND_CRM],
authors: ["kishanprmr","abuaboud"],
actions: [
addContactToAccountAction,
addTagToContactAction,
createAccountAction,
createContactAction,
updateAccountAction,
updateContactAction,
subscribeOrUnsubscribeContactFromListAction,
],
triggers: [
dealTaskCompletedTrigger,
newContactNoteTrigger,
newContactTaskTrigger,
newDealAddedOrUpdatedTrigger,
newOrUpdatedAccountTrigger,
newDealNoteTrigger,
newDealTaskTrigger,
newtagAddedOrRemovedFromContactTrigger,
updatedContactTrigger,
],
});

View File

@@ -0,0 +1,37 @@
import { activeCampaignAuth } from '../../..';
import { Property, createAction } from '@activepieces/pieces-framework';
import { activecampaignCommon, makeClient } from '../../common';
import { CreateAccountRequest } from '../../common/types';
export const createAccountAction = createAction({
auth: activeCampaignAuth,
name: 'activecampaign_create_account',
displayName: 'Create Account',
description: 'Creates a new account.',
props: {
name: Property.ShortText({
displayName: 'Account Name',
required: true,
}),
accountUrl: Property.ShortText({
displayName: 'Account URL',
required: false,
}),
accountCustomFields: activecampaignCommon.accountCustomFields,
},
async run(context) {
const { name, accountUrl, accountCustomFields } = context.propsValue;
const createAccountParams: CreateAccountRequest = {
name,
accountUrl,
fields: [],
};
Object.entries(accountCustomFields).forEach(([key, value]) => {
createAccountParams.fields?.push({ customFieldId: Number(key), fieldValue: value });
});
const client = makeClient(context.auth.props);
return await client.createAccount(createAccountParams);
},
});

View File

@@ -0,0 +1,38 @@
import { activeCampaignAuth } from '../../..';
import { Property, createAction } from '@activepieces/pieces-framework';
import { activecampaignCommon, makeClient } from '../../common';
import { CreateAccountRequest } from '../../common/types';
export const updateAccountAction = createAction({
auth: activeCampaignAuth,
name: 'activecampaign_update_account',
displayName: 'Update Account',
description: 'Updates an account.',
props: {
accountId: activecampaignCommon.accountId,
name: Property.ShortText({
displayName: 'Account Name',
required: false,
}),
accountUrl: Property.ShortText({
displayName: 'Account URL',
required: false,
}),
accountCustomFields: activecampaignCommon.accountCustomFields,
},
async run(context) {
const { accountId, name, accountUrl, accountCustomFields } = context.propsValue;
const updateAccountParams: Partial<CreateAccountRequest> = {
name,
accountUrl,
fields: [],
};
Object.entries(accountCustomFields).forEach(([key, value]) => {
updateAccountParams.fields?.push({ customFieldId: Number(key), fieldValue: value });
});
const client = makeClient(context.auth.props);
return await client.updateAccount(Number(accountId), updateAccountParams);
},
});

View File

@@ -0,0 +1,29 @@
import { activeCampaignAuth } from '../../..';
import { Property, createAction } from '@activepieces/pieces-framework';
import { activecampaignCommon, makeClient } from '../../common';
export const addContactToAccountAction = createAction({
auth: activeCampaignAuth,
name: 'activecampaign_add_contact_to_account',
displayName: 'Add Contact to Account',
description: 'Adds a contact to an ActiveCampaign account.',
props: {
contactId: activecampaignCommon.contactId,
accountId: activecampaignCommon.accountId,
jobTitle: Property.ShortText({
displayName: 'Job Title',
required: false,
}),
},
async run(context) {
const { contactId, accountId, jobTitle } = context.propsValue;
const client = makeClient(context.auth.props);
return await client.createAccountContactAssociation(
Number(contactId),
Number(accountId),
jobTitle,
);
},
});

View File

@@ -0,0 +1,20 @@
import { activeCampaignAuth } from '../../..';
import { createAction } from '@activepieces/pieces-framework';
import { activecampaignCommon, makeClient } from '../../common';
export const addTagToContactAction = createAction({
auth: activeCampaignAuth,
name: 'activecampaign_add_tag_to_contact',
displayName: 'Add Tag to Contact',
description: 'Adds a tag to contact.',
props: {
contactId: activecampaignCommon.contactId,
tagId: activecampaignCommon.tagId,
},
async run(context) {
const { contactId, tagId } = context.propsValue;
const client = makeClient(context.auth.props);
return await client.addTagToContact(contactId, tagId);
},
});

View File

@@ -0,0 +1,48 @@
import { activeCampaignAuth } from '../../../';
import { Property, createAction } from '@activepieces/pieces-framework';
import { activecampaignCommon, makeClient } from '../../common';
import { CreateContactRequest } from '../../common/types';
export const createContactAction = createAction({
auth: activeCampaignAuth,
name: 'activecampaign_create_contact',
displayName: 'Create Contact',
description: 'Creates a new contact.',
props: {
email: Property.ShortText({
displayName: 'Email',
required: true,
}),
firstName: Property.ShortText({
displayName: 'First Name',
required: false,
}),
lastName: Property.ShortText({
displayName: 'Last Name',
required: false,
}),
phone: Property.ShortText({
displayName: 'Phone',
required: false,
}),
contactCustomFields: activecampaignCommon.contactCustomFields,
},
async run(context) {
const { email, firstName, lastName, phone, contactCustomFields } = context.propsValue;
const createContactParams: CreateContactRequest = {
email,
firstName,
lastName,
phone,
fieldValues: [],
};
Object.entries(contactCustomFields).forEach(([key, value]) => {
createContactParams.fieldValues.push({ field: key, value: value });
});
const client = makeClient(context.auth.props);
return await client.createContact(createContactParams);
},
});

View File

@@ -0,0 +1,41 @@
import { activeCampaignAuth } from '../../../';
import { Property, createAction } from '@activepieces/pieces-framework';
import { activecampaignCommon, makeClient } from '../../common';
export const subscribeOrUnsubscribeContactFromListAction = createAction({
auth: activeCampaignAuth,
name: 'activecampaign_subscribe_or_unsubscribe_contact_from_list',
displayName: 'Subscribe or Unsubscribe Contact From List',
description:
'Subscribes a Contact to a List it is not currently associated with, or Unsubscribes a Contact from a list is currently associated with.',
props: {
listId: activecampaignCommon.listId(true),
status: Property.StaticDropdown({
displayName: 'Action',
required: true,
options: {
disabled: false,
options: [
{
label: 'Subscribe',
value: '1',
},
{
label: 'Unsubscribe',
value: '2',
},
],
},
}),
contactId: Property.ShortText({
displayName: 'Contact ID',
required: true,
}),
},
async run(context) {
const { listId, status, contactId } = context.propsValue;
const client = makeClient(context.auth.props);
return await client.addContactToList(listId!, contactId, status);
},
});

View File

@@ -0,0 +1,50 @@
import { activeCampaignAuth } from '../../../';
import { Property, createAction } from '@activepieces/pieces-framework';
import { activecampaignCommon, makeClient } from '../../common';
import { CreateContactRequest } from '../../common/types';
export const updateContactAction = createAction({
auth: activeCampaignAuth,
name: 'activecampaign_update_contact',
displayName: 'Update Contact',
description: 'Updates an existing contact.',
props: {
contactId: activecampaignCommon.contactId,
email: Property.ShortText({
displayName: 'Email',
required: false,
}),
firstName: Property.ShortText({
displayName: 'First Name',
required: false,
}),
lastName: Property.ShortText({
displayName: 'Last Name',
required: false,
}),
phone: Property.ShortText({
displayName: 'Phone',
required: false,
}),
contactCustomFields: activecampaignCommon.contactCustomFields,
},
async run(context) {
const { email, contactId, firstName, lastName, phone, contactCustomFields } =
context.propsValue;
const updateContactParams: Partial<CreateContactRequest> = {
email,
firstName,
lastName,
phone,
fieldValues: [],
};
Object.entries(contactCustomFields).forEach(([key, value]) => {
updateContactParams.fieldValues?.push({ field: key, value: value });
});
const client = makeClient(context.auth.props);
return await client.updateContact(Number(contactId), updateContactParams);
},
});

View File

@@ -0,0 +1,148 @@
import {
HttpMessageBody,
HttpMethod,
QueryParams,
httpClient,
HttpRequest,
} from '@activepieces/pieces-common';
import {
AccountCustomFieldsResponse,
ContactCustomFieldsResponse,
ContactList,
CreateAccountRequest,
CreateContactRequest,
CreateWebhookRequest,
CreateWebhookResponse,
ListAccountsResponse,
ListContactsResponse,
ListTagsResponse,
} from './types';
function emptyValueFilter(accessor: (key: string) => any): (key: string) => boolean {
return (key: string) => {
const val = accessor(key);
return val !== null && val !== undefined && (typeof val != 'string' || val.length > 0);
};
}
export function prepareQuery(request?: Record<string, any>): QueryParams {
const params: QueryParams = {};
if (!request) return params;
Object.keys(request)
.filter(emptyValueFilter((k) => request[k]))
.forEach((k: string) => {
params[k] = (request as Record<string, any>)[k].toString();
});
return params;
}
export class ActiveCampaignClient {
constructor(private apiUrl: string, private apiKey: string) {}
async makeRequest<T extends HttpMessageBody>(
method: HttpMethod,
resourceUri: string,
query?: QueryParams,
body: any | undefined = undefined,
): Promise<T> {
const baseUrl = this.apiUrl.replace(/\/$/, '');
const request: HttpRequest = {
method: method,
url: baseUrl + '/api/3' + resourceUri,
headers: {
'Api-Token': this.apiKey,
},
queryParams: query,
body: body,
};
const res = await httpClient.sendRequest<T>(request);
return res.body;
}
async authenticate() {
return await this.makeRequest(HttpMethod.GET, '/users/me');
}
async subscribeWebhook(request: CreateWebhookRequest): Promise<CreateWebhookResponse> {
return await this.makeRequest<CreateWebhookResponse>(HttpMethod.POST, '/webhooks', undefined, {
webhook: request,
});
}
async unsubscribeWebhook(webhookId: string) {
return await this.makeRequest(HttpMethod.DELETE, `/webhooks/${webhookId}`);
}
async listContactLists() {
return await this.makeRequest<{ lists: ContactList[] }>(
HttpMethod.GET,
'/lists',
prepareQuery({ limit: 20 }),
);
}
async createAccount(request: CreateAccountRequest) {
return await this.makeRequest(HttpMethod.POST, '/accounts', undefined, { account: request });
}
async updateAccount(accountId: number, request: Partial<CreateAccountRequest>) {
return await this.makeRequest(HttpMethod.PUT, `/accounts/${accountId}`, undefined, {
account: request,
});
}
async listAccounts(search?: string): Promise<ListAccountsResponse> {
return await this.makeRequest<ListAccountsResponse>(
HttpMethod.GET,
'/accounts',
prepareQuery({ search: search }),
);
}
async listAccountCustomFields() {
return await this.makeRequest<{ accountCustomFieldMeta: AccountCustomFieldsResponse[] }>(
HttpMethod.GET,
'/accountCustomFieldMeta',
);
}
async createContact(request: CreateContactRequest) {
return await this.makeRequest(HttpMethod.POST, '/contacts', undefined, { contact: request });
}
async updateContact(contactId: number, request: Partial<CreateContactRequest>) {
return await this.makeRequest(HttpMethod.PUT, `/contacts/${contactId}`, undefined, {
contact: request,
});
}
async listContacts(): Promise<ListContactsResponse> {
return await this.makeRequest<ListContactsResponse>(HttpMethod.GET, '/contacts');
}
async listContactCustomFields(): Promise<ContactCustomFieldsResponse> {
return await this.makeRequest<ContactCustomFieldsResponse>(HttpMethod.GET, '/fields');
}
async addContactToList(listId: string, contactId: string, status: string) {
return await this.makeRequest(HttpMethod.POST, '/contactLists', undefined, {
contactList: { list: listId, contact: contactId, status: status },
});
}
async createAccountContactAssociation(contactId: number, accountId: number, jobTitle?: string) {
return await this.makeRequest(HttpMethod.POST, '/accountContacts', undefined, {
accountContact: { contact: contactId, account: accountId, jobTitle: jobTitle },
});
}
async addTagToContact(contactId: string, tagId: string) {
return await this.makeRequest(HttpMethod.POST, '/contactTags', undefined, {
contactTag: { contact: contactId, tag: tagId },
});
}
async listTags(): Promise<ListTagsResponse> {
return await this.makeRequest<ListTagsResponse>(HttpMethod.GET, '/tags');
}
}

View File

@@ -0,0 +1,16 @@
export const WEBHOOK_SOURCES = ['public', 'admin', 'api', 'system'];
export enum CUSTOM_FIELD_TYPE {
TEXT = 'text',
DROPDOWN = 'dropdown',
TEXTAREA = 'textarea',
NUMBER = 'number',
MONEY = 'currency',
DATE = 'date',
DATETIME = 'datetime',
LIST_BOX = 'listbox',
MULTISELECT = 'multiselect',
RADIO = 'radio',
CHECKBOX = 'checkbox',
HIDDEN = 'hidden',
}

View File

@@ -0,0 +1,299 @@
import { activeCampaignAuth } from '../../';
import { AppConnectionValueForAuthProperty, DynamicPropsValue, PiecePropValueSchema, Property } from '@activepieces/pieces-framework';
import { ActiveCampaignClient } from './client';
import { CUSTOM_FIELD_TYPE } from './constants';
export function makeClient(auth: PiecePropValueSchema<typeof activeCampaignAuth>) {
const client = new ActiveCampaignClient(auth.apiUrl, auth.apiKey);
return client;
}
export const activecampaignCommon = {
listId: (required = false) =>
Property.Dropdown({
auth: activeCampaignAuth,
displayName: 'List',
required,
refreshers: [],
options: async ({ auth }) => {
if (!auth) {
return {
disabled: true,
placeholder: 'Please connect your account first',
options: [],
};
}
const client = makeClient(auth.props);
const res = await client.listContactLists();
return {
disabled: false,
options: res.lists.map((list) => {
return {
label: list.name,
value: list.id,
};
}),
};
},
}),
accountId: Property.Dropdown({
auth: activeCampaignAuth,
displayName: 'Account ID',
required: true,
refreshers: [],
options: async ({ auth }) => {
if (!auth) {
return {
disabled: true,
placeholder: 'Please connect your account first',
options: [],
};
}
const client = makeClient(auth.props);
const res = await client.listAccounts();
return {
disabled: false,
options: res.accounts.map((account) => {
return {
label: account.name,
value: account.id,
};
}),
};
},
}),
contactId: Property.Dropdown({
auth: activeCampaignAuth,
displayName: 'Contact ID',
required: true,
refreshers: [],
options: async ({ auth }) => {
if (!auth) {
return {
disabled: true,
placeholder: 'Please connect your account first',
options: [],
};
}
const client = makeClient((auth as AppConnectionValueForAuthProperty<typeof activeCampaignAuth>).props);
const res = await client.listContacts();
return {
disabled: false,
options: res.contacts.map((contact) => {
return {
label: contact.firstName && contact.lastName ? `${contact.firstName} ${contact.lastName}` : contact.email,
value: contact.id,
};
}),
};
},
}),
tagId: Property.Dropdown({
auth: activeCampaignAuth,
displayName: 'Tag ID',
required: true,
refreshers: [],
options: async ({ auth }) => {
if (!auth) {
return {
disabled: true,
placeholder: 'Please connect your account first',
options: [],
};
}
const client = makeClient(auth.props);
const res = await client.listTags();
return {
disabled: false,
options: res.tags.map((tag) => {
return {
label: tag.tag,
value: tag.id,
};
}),
};
},
}),
accountCustomFields: Property.DynamicProperties({
auth: activeCampaignAuth,
displayName: 'Account Custom Fields',
refreshers: [],
required: true,
props: async ({ auth }) => {
if (!auth) return {};
const client = makeClient(auth.props);
const res = await client.listAccountCustomFields();
const fields: DynamicPropsValue = {};
for (const field of res.accountCustomFieldMeta) {
switch (field.fieldType) {
case CUSTOM_FIELD_TYPE.TEXT:
case CUSTOM_FIELD_TYPE.HIDDEN:
fields[field.id] = Property.ShortText({
displayName: field.fieldLabel,
required: false,
});
break;
case CUSTOM_FIELD_TYPE.TEXTAREA:
fields[field.id] = Property.LongText({
displayName: field.fieldLabel,
required: false,
});
break;
case CUSTOM_FIELD_TYPE.DATE:
fields[field.id] = Property.DateTime({
displayName: field.fieldLabel,
description: 'Please use YYYY-MM-DD format.',
required: false,
});
break;
case CUSTOM_FIELD_TYPE.DATETIME:
fields[field.id] = Property.DateTime({
displayName: field.fieldLabel,
required: false,
});
break;
case CUSTOM_FIELD_TYPE.MONEY:
case CUSTOM_FIELD_TYPE.NUMBER:
fields[field.id] = Property.Number({
displayName: field.fieldLabel,
required: false,
});
break;
case CUSTOM_FIELD_TYPE.DROPDOWN:
case CUSTOM_FIELD_TYPE.RADIO:
fields[field.id] = Property.StaticDropdown({
displayName: field.fieldLabel,
required: false,
options: {
disabled: false,
options: field.fieldOptions
? field.fieldOptions?.map((option) => {
return {
label: option,
value: option,
};
})
: [],
},
});
break;
case CUSTOM_FIELD_TYPE.CHECKBOX:
case CUSTOM_FIELD_TYPE.LIST_BOX:
case CUSTOM_FIELD_TYPE.MULTISELECT:
fields[field.id] = Property.StaticMultiSelectDropdown({
displayName: field.fieldLabel,
required: false,
options: {
disabled: false,
options: field.fieldOptions
? field.fieldOptions?.map((option) => {
return {
label: option,
value: option,
};
})
: [],
},
});
break;
}
}
return fields;
},
}),
contactCustomFields: Property.DynamicProperties({
auth: activeCampaignAuth,
displayName: 'Contact Custom Fields',
refreshers: [],
required: true,
props: async ({ auth }) => {
if (!auth) return {};
const client = makeClient(auth.props);
const res = await client.listContactCustomFields();
const fields: DynamicPropsValue = {};
for (const field of res.fields) {
switch (field.type) {
case CUSTOM_FIELD_TYPE.TEXT:
case CUSTOM_FIELD_TYPE.HIDDEN:
fields[field.id] = Property.ShortText({
displayName: field.title,
required: false,
});
break;
case CUSTOM_FIELD_TYPE.TEXTAREA:
fields[field.id] = Property.LongText({
displayName: field.title,
required: false,
});
break;
case CUSTOM_FIELD_TYPE.DATE:
fields[field.id] = Property.DateTime({
displayName: field.title,
description: 'Please use YYYY-MM-DD format.',
required: false,
});
break;
case CUSTOM_FIELD_TYPE.DATETIME:
fields[field.id] = Property.DateTime({
displayName: field.title,
required: false,
});
break;
case CUSTOM_FIELD_TYPE.MONEY:
case CUSTOM_FIELD_TYPE.NUMBER:
fields[field.id] = Property.Number({
displayName: field.title,
required: false,
});
break;
case CUSTOM_FIELD_TYPE.DROPDOWN:
case CUSTOM_FIELD_TYPE.RADIO:
fields[field.id] = Property.StaticDropdown({
displayName: field.title,
required: false,
options: {
disabled: false,
options: res.fieldOptions
.filter((option) => option.field === field.id)
.map((option) => {
return {
label: option.label,
value: option.value,
};
}),
},
});
break;
case CUSTOM_FIELD_TYPE.CHECKBOX:
case CUSTOM_FIELD_TYPE.LIST_BOX:
case CUSTOM_FIELD_TYPE.MULTISELECT:
fields[field.id] = Property.StaticMultiSelectDropdown({
displayName: field.title,
required: false,
options: {
disabled: false,
options: res.fieldOptions
.filter((option) => option.field === field.id)
.map((option) => {
return {
label: option.label,
value: option.value,
};
}),
},
});
break;
}
}
return fields;
},
}),
};

View File

@@ -0,0 +1,83 @@
import { CUSTOM_FIELD_TYPE } from './constants';
export type CreateWebhookRequest = {
name: string;
url: string;
events: string[];
sources: string[];
listid?: string;
};
export type CreateWebhookResponse = {
webhook: {
name: string;
url: string;
events: string[];
sources: string[];
listid: string;
cdate: string;
state: string;
id: string;
};
};
export type ContactList = {
id: string;
name: string;
};
export type CreateAccountRequest = {
name: string;
accountUrl?: string;
fields?: {
customFieldId: number;
fieldValue: any;
}[];
};
export type CreateContactRequest = {
email: string;
firstName?: string;
lastName?: string;
phone?: string;
fieldValues: {
field: string;
value: any;
}[];
};
export type ListAccountsResponse = {
accounts: {
name: string;
id: string;
}[];
};
export type ListContactsResponse = {
contacts: {
email: string;
firstName: string;
lastName: string;
id: string;
}[];
};
export type ListTagsResponse = {
tags: {
tagType: string;
tag: string;
id: string;
}[];
};
export type AccountCustomFieldsResponse = {
id: string;
fieldLabel: string;
fieldType: CUSTOM_FIELD_TYPE;
fieldOptions?: string[];
fieldDefaultCurrency?: string;
fieldDefault?: number | string | string[];
};
export type ContactCustomFieldsResponse = {
fieldOptions: { field: string; value: string; label: string; id: string }[];
fields: { id: string; title: string; type: CUSTOM_FIELD_TYPE; options: string[] }[];
};

View File

@@ -0,0 +1,84 @@
import { activeCampaignAuth } from '../..';
import { TriggerStrategy, createTrigger } from '@activepieces/pieces-framework';
import { makeClient } from '../common';
import { CreateWebhookResponse } from '../common/types';
import { WEBHOOK_SOURCES } from '../common/constants';
export const campaignLinkClickedTrigger = createTrigger({
auth: activeCampaignAuth,
name: 'activecampaign_campaign_link_clicked',
displayName: 'New Campaign Link Click',
description:
'Triggers when a contact clicks a link in a campaign message (will only run once for each unique link).',
type: TriggerStrategy.WEBHOOK,
props: {},
async onEnable(context) {
const client = makeClient(context.auth.props);
const res = await client.subscribeWebhook({
name: `Activepieces Deal Task Completed Hook`,
url: context.webhookUrl,
events: ['click'],
sources: WEBHOOK_SOURCES,
});
await context.store.put<CreateWebhookResponse>('activecampaign_campaign_link_clicked', res);
},
async run(context) {
return [context.payload.body];
},
async onDisable(context) {
const webhook = await context.store.get<CreateWebhookResponse>(
'activecampaign_campaign_link_clicked',
);
if (webhook != null) {
const client = makeClient(context.auth.props);
await client.unsubscribeWebhook(webhook.webhook.id);
}
},
sampleData: {
type: 'deal_update',
date_time: '2024-02-28T04:45:41-06:00',
initiated_from: 'admin',
initiated_by: 'admin',
list: '0',
contact: {
id: '3',
email: 'code.test@gmail.com',
first_name: 'John',
last_name: 'Wick',
phone: '',
ip: '0.0.0.0',
tags: '1233',
customer_acct_name: '',
orgname: '',
},
customer_acct_name: '',
customer_acct_id: '0',
orgname: '',
deal: {
id: '1',
title: 'Test Deal',
create_date: '2024-02-28 04:36:09',
create_date_iso: '2024-02-28T04:36:09-06:00',
orgid: '1',
orgname: 'John Wick',
stageid: '1',
stage_title: 'To Contact',
pipelineid: '1',
pipeline_title: 'Test Pipeline',
value: '1,044,055.00',
value_raw: '1044055',
currency: 'usd',
currency_symbol: '$',
owner: '1',
owner_firstname: 'John',
owner_lastname: 'Wick',
contactid: '3',
contact_email: 'code.test@gmail.com',
contact_firstname: 'John',
contact_lastname: 'Wick',
status: '0',
fields: [{ id: '1', key: 'Forecasted Close Date', value: '2024-02-08 00:00:00' }],
},
updated_fields: ['value'],
},
});

View File

@@ -0,0 +1,83 @@
import { activeCampaignAuth } from '../..';
import { TriggerStrategy, createTrigger } from '@activepieces/pieces-framework';
import { makeClient } from '../common';
import { CreateWebhookResponse } from '../common/types';
import { WEBHOOK_SOURCES } from '../common/constants';
export const dealTaskCompletedTrigger = createTrigger({
auth: activeCampaignAuth,
name: 'activecampaign_deal_task_completed',
displayName: 'Deal Task Completed',
description: 'Triggers when a deal task has been completed.',
type: TriggerStrategy.WEBHOOK,
props: {},
async onEnable(context) {
const client = makeClient(context.auth.props);
const res = await client.subscribeWebhook({
name: `Activepieces Deal Task Completed Hook`,
url: context.webhookUrl,
events: ['deal_task_complete'],
sources: WEBHOOK_SOURCES,
});
await context.store.put<CreateWebhookResponse>('activecampaign_deal_task_completed', res);
},
async run(context) {
return [context.payload.body];
},
async onDisable(context) {
const webhook = await context.store.get<CreateWebhookResponse>(
'activecampaign_deal_task_completed',
);
if (webhook != null) {
const client = makeClient(context.auth.props);
await client.unsubscribeWebhook(webhook.webhook.id);
}
},
sampleData: {
type: 'deal_update',
date_time: '2024-02-28T04:45:41-06:00',
initiated_from: 'admin',
initiated_by: 'admin',
list: '0',
contact: {
id: '3',
email: 'code.test@gmail.com',
first_name: 'John',
last_name: 'Wick',
phone: '',
ip: '0.0.0.0',
tags: '1233',
customer_acct_name: '',
orgname: '',
},
customer_acct_name: '',
customer_acct_id: '0',
orgname: '',
deal: {
id: '1',
title: 'Test Deal',
create_date: '2024-02-28 04:36:09',
create_date_iso: '2024-02-28T04:36:09-06:00',
orgid: '1',
orgname: 'John Wick',
stageid: '1',
stage_title: 'To Contact',
pipelineid: '1',
pipeline_title: 'Test Pipeline',
value: '1,044,055.00',
value_raw: '1044055',
currency: 'usd',
currency_symbol: '$',
owner: '1',
owner_firstname: 'John',
owner_lastname: 'Wick',
contactid: '3',
contact_email: 'code.test@gmail.com',
contact_firstname: 'John',
contact_lastname: 'Wick',
status: '0',
fields: [{ id: '1', key: 'Forecasted Close Date', value: '2024-02-08 00:00:00' }],
},
updated_fields: ['value'],
},
});

View File

@@ -0,0 +1,83 @@
import { activeCampaignAuth } from '../..';
import { TriggerStrategy, createTrigger } from '@activepieces/pieces-framework';
import { makeClient } from '../common';
import { CreateWebhookResponse } from '../common/types';
import { WEBHOOK_SOURCES } from '../common/constants';
export const newCampaignBounceTrigger = createTrigger({
auth: activeCampaignAuth,
name: 'activecampaign_new_campaign_bounce',
displayName: 'New Campaign Bounce',
description: 'Triggers when a contact email address bounces from a sent campaign.',
type: TriggerStrategy.WEBHOOK,
props: {},
async onEnable(context) {
const client = makeClient(context.auth.props);
const res = await client.subscribeWebhook({
name: `Activepieces Campaign Bounce Hook`,
url: context.webhookUrl,
events: ['bounce'],
sources: WEBHOOK_SOURCES,
});
await context.store.put<CreateWebhookResponse>('activecampaign_new_campaign_bounce', res);
},
async run(context) {
return [context.payload.body];
},
async onDisable(context) {
const webhook = await context.store.get<CreateWebhookResponse>(
'activecampaign_new_campaign_bounce',
);
if (webhook != null) {
const client = makeClient(context.auth.props);
await client.unsubscribeWebhook(webhook.webhook.id);
}
},
sampleData: {
type: 'deal_update',
date_time: '2024-02-28T04:45:41-06:00',
initiated_from: 'admin',
initiated_by: 'admin',
list: '0',
contact: {
id: '3',
email: 'code.test@gmail.com',
first_name: 'John',
last_name: 'Wick',
phone: '',
ip: '0.0.0.0',
tags: '1233',
customer_acct_name: '',
orgname: '',
},
customer_acct_name: '',
customer_acct_id: '0',
orgname: '',
deal: {
id: '1',
title: 'Test Deal',
create_date: '2024-02-28 04:36:09',
create_date_iso: '2024-02-28T04:36:09-06:00',
orgid: '1',
orgname: 'John Wick',
stageid: '1',
stage_title: 'To Contact',
pipelineid: '1',
pipeline_title: 'Test Pipeline',
value: '1,044,055.00',
value_raw: '1044055',
currency: 'usd',
currency_symbol: '$',
owner: '1',
owner_firstname: 'John',
owner_lastname: 'Wick',
contactid: '3',
contact_email: 'code.test@gmail.com',
contact_firstname: 'John',
contact_lastname: 'Wick',
status: '0',
fields: [{ id: '1', key: 'Forecasted Close Date', value: '2024-02-08 00:00:00' }],
},
updated_fields: ['value'],
},
});

View File

@@ -0,0 +1,58 @@
import { activeCampaignAuth } from '../..';
import { TriggerStrategy, createTrigger } from '@activepieces/pieces-framework';
import { makeClient } from '../common';
import { CreateWebhookResponse } from '../common/types';
import { WEBHOOK_SOURCES } from '../common/constants';
export const newContactNoteTrigger = createTrigger({
auth: activeCampaignAuth,
name: 'activecampaign_new_contact_note',
displayName: 'New Contact Note',
description: 'Triggers when a new contact note is added.',
type: TriggerStrategy.WEBHOOK,
props: {},
async onEnable(context) {
const client = makeClient(context.auth.props);
const res = await client.subscribeWebhook({
name: `Activepieces New Contact Note Hook`,
url: context.webhookUrl,
events: ['subscriber_note'],
sources: WEBHOOK_SOURCES,
});
await context.store.put<CreateWebhookResponse>('activecampaign_new_contact_note', res);
},
async run(context) {
return [context.payload.body];
},
async onDisable(context) {
const webhook = await context.store.get<CreateWebhookResponse>(
'activecampaign_new_contact_note',
);
if (webhook != null) {
const client = makeClient(context.auth.props);
await client.unsubscribeWebhook(webhook.webhook.id);
}
},
sampleData: {
type: 'subscriber_note',
date_time: '2024-02-28T06:58:11-06:00',
initiated_from: 'admin',
initiated_by: 'admin',
list: '0',
note: 'test note',
contact: {
id: '3',
email: 'code.test@gmail.com',
first_name: 'john',
last_name: 'wick',
phone: '',
ip: '0.0.0.0',
tags: '1233',
customer_acct_name: '',
orgname: '',
},
customer_acct_name: '',
customer_acct_id: '0',
orgname: '',
},
});

View File

@@ -0,0 +1,68 @@
import { activeCampaignAuth } from '../..';
import { TriggerStrategy, createTrigger } from '@activepieces/pieces-framework';
import { makeClient } from '../common';
import { CreateWebhookResponse } from '../common/types';
import { WEBHOOK_SOURCES } from '../common/constants';
export const newContactTaskTrigger = createTrigger({
auth: activeCampaignAuth,
name: 'activecampaign_new_contact_task',
displayName: 'New Contact Task',
description: 'Triggers when a new contact task is added.',
type: TriggerStrategy.WEBHOOK,
props: {},
async onEnable(context) {
const client = makeClient(context.auth.props);
const res = await client.subscribeWebhook({
name: `Activepieces New Contact Task Hook`,
url: context.webhookUrl,
events: ['contact_task_add'],
sources: WEBHOOK_SOURCES,
});
await context.store.put<CreateWebhookResponse>('activecampaign_new_contact_task', res);
},
async run(context) {
return [context.payload.body];
},
async onDisable(context) {
const webhook = await context.store.get<CreateWebhookResponse>(
'activecampaign_new_contact_task',
);
if (webhook != null) {
const client = makeClient(context.auth.props);
await client.unsubscribeWebhook(webhook.webhook.id);
}
},
sampleData: {
type: 'contact_task_add',
date_time: '2024-02-28T07:00:57-06:00',
initiated_from: 'admin',
initiated_by: 'admin',
list: '0',
contact: {
id: '3',
email: 'code.test@gmail.com',
first_name: 'John',
last_name: 'Wick',
phone: '',
ip: '0.0.0.0',
tags: '1233',
customer_acct_name: '',
orgname: '',
},
customer_acct_name: '',
customer_acct_id: '0',
orgname: '',
task: {
id: '7',
type_id: '1',
title: 'test task',
note: 'Desc',
duedate: '2024-02-28 07:00:48',
duedate_iso: '2024-02-28T07:00:48-06:00',
edate: '2024-02-28 07:15:48',
edate_iso: '2024-02-28T07:15:48-06:00',
type_title: 'Call',
},
},
});

View File

@@ -0,0 +1,83 @@
import { activeCampaignAuth } from '../..';
import { TriggerStrategy, createTrigger } from '@activepieces/pieces-framework';
import { makeClient } from '../common';
import { CreateWebhookResponse } from '../common/types';
import { WEBHOOK_SOURCES } from '../common/constants';
export const newDealAddedOrUpdatedTrigger = createTrigger({
auth: activeCampaignAuth,
name: 'activecampaign_new_deal_added_or_updated',
displayName: 'New Deal Added or Updated',
description: 'Triggers when a new deal is created or existing deal is updated.',
type: TriggerStrategy.WEBHOOK,
props: {},
async onEnable(context) {
const client = makeClient(context.auth.props);
const res = await client.subscribeWebhook({
name: `Activepieces New Deal Hook`,
url: context.webhookUrl,
events: ['deal_add', 'deal_update'],
sources: WEBHOOK_SOURCES,
});
await context.store.put<CreateWebhookResponse>('activecampaign_new_deal_added_or_updated', res);
},
async run(context) {
return [context.payload.body];
},
async onDisable(context) {
const webhook = await context.store.get<CreateWebhookResponse>(
'activecampaign_new_deal_added_or_updated',
);
if (webhook != null) {
const client = makeClient(context.auth.props);
await client.unsubscribeWebhook(webhook.webhook.id);
}
},
sampleData: {
type: 'deal_update',
date_time: '2024-02-28T04:45:41-06:00',
initiated_from: 'admin',
initiated_by: 'admin',
list: '0',
contact: {
id: '3',
email: 'code.test@gmail.com',
first_name: 'John',
last_name: 'Wick',
phone: '',
ip: '0.0.0.0',
tags: '1233',
customer_acct_name: '',
orgname: '',
},
customer_acct_name: '',
customer_acct_id: '0',
orgname: '',
deal: {
id: '1',
title: 'Test Deal',
create_date: '2024-02-28 04:36:09',
create_date_iso: '2024-02-28T04:36:09-06:00',
orgid: '1',
orgname: 'John Wick',
stageid: '1',
stage_title: 'To Contact',
pipelineid: '1',
pipeline_title: 'Test Pipeline',
value: '1,044,055.00',
value_raw: '1044055',
currency: 'usd',
currency_symbol: '$',
owner: '1',
owner_firstname: 'John',
owner_lastname: 'Wick',
contactid: '3',
contact_email: 'code.test@gmail.com',
contact_firstname: 'John',
contact_lastname: 'Wick',
status: '0',
fields: [{ id: '1', key: 'Forecasted Close Date', value: '2024-02-08 00:00:00' }],
},
updated_fields: ['value'],
},
});

View File

@@ -0,0 +1,67 @@
import { activeCampaignAuth } from '../..';
import { TriggerStrategy, createTrigger } from '@activepieces/pieces-framework';
import { makeClient } from '../common';
import { CreateWebhookResponse } from '../common/types';
import { WEBHOOK_SOURCES } from '../common/constants';
export const newDealNoteTrigger = createTrigger({
auth: activeCampaignAuth,
name: 'activecampaign_new_deal_note',
displayName: 'New Deal Note',
description: 'Triggers when a new deal note is created.',
type: TriggerStrategy.WEBHOOK,
props: {},
async onEnable(context) {
const client = makeClient(context.auth.props);
const res = await client.subscribeWebhook({
name: `Activepieces New Deal Note Hook`,
url: context.webhookUrl,
events: ['deal_note_add'],
sources: WEBHOOK_SOURCES,
});
await context.store.put<CreateWebhookResponse>('activecampaign_new_deal_note', res);
},
async run(context) {
return [context.payload.body];
},
async onDisable(context) {
const webhook = await context.store.get<CreateWebhookResponse>('activecampaign_new_deal_note');
if (webhook != null) {
const client = makeClient(context.auth.props);
await client.unsubscribeWebhook(webhook.webhook.id);
}
},
sampleData: {
type: 'deal_note_add',
date_time: '2024-02-28T05:58:27-06:00',
initiated_from: 'admin',
initiated_by: 'admin',
list: '0',
note: { id: '1', text: 'Tst node' },
deal: {
id: '1',
title: 'Test Deal updated',
create_date: '2024-02-28 04:36:09',
create_date_iso: '2024-02-28T04:36:09-06:00',
orgid: '1',
orgname: 'John wick',
stageid: '1',
stage_title: 'To Contact',
pipelineid: '1',
pipeline_title: 'Test Pipeline',
value: '14,055.00',
value_raw: '14055',
currency: 'usd',
currency_symbol: '$',
owner: '1',
owner_firstname: 'John',
owner_lastname: 'wick',
contactid: '3',
contact_email: 'code.test@gmail.com',
contact_firstname: 'John',
contact_lastname: 'wick',
status: '0',
fields: [{ id: '1', key: 'Forecasted Close Date', value: '2024-02-08 00:00:00' }],
},
},
});

View File

@@ -0,0 +1,91 @@
import { activeCampaignAuth } from '../..';
import { TriggerStrategy, createTrigger } from '@activepieces/pieces-framework';
import { makeClient } from '../common';
import { CreateWebhookResponse } from '../common/types';
import { WEBHOOK_SOURCES } from '../common/constants';
export const newDealTaskTrigger = createTrigger({
auth: activeCampaignAuth,
name: 'activecampaign_new_deal_task',
displayName: 'New Deal Task',
description: 'Triggers when a new deal task is created.',
type: TriggerStrategy.WEBHOOK,
props: {},
async onEnable(context) {
const client = makeClient(context.auth.props);
const res = await client.subscribeWebhook({
name: `Activepieces New Deal Task Hook`,
url: context.webhookUrl,
events: ['deal_task_add'],
sources: WEBHOOK_SOURCES,
});
await context.store.put<CreateWebhookResponse>('activecampaign_new_deal_task', res);
},
async run(context) {
return [context.payload.body];
},
async onDisable(context) {
const webhook = await context.store.get<CreateWebhookResponse>('activecampaign_new_deal_task');
if (webhook != null) {
const client = makeClient(context.auth.props);
await client.unsubscribeWebhook(webhook.webhook.id);
}
},
sampleData: {
type: 'deal_task_add',
date_time: '2024-02-28T06:38:49-06:00',
initiated_from: 'admin',
initiated_by: 'admin',
list: '0',
contact: {
id: '3',
email: 'code.test@gmail.com',
first_name: 'john',
last_name: 'wick',
phone: '',
ip: '0.0.0.0',
tags: '1233',
customer_acct_name: '',
orgname: '',
},
customer_acct_name: '',
customer_acct_id: '0',
orgname: '',
deal: {
id: '1',
title: 'Test Deal updated',
create_date: '2024-02-28 04:36:09',
create_date_iso: '2024-02-28T04:36:09-06:00',
orgid: '1',
orgname: 'john wick',
stageid: '1',
stage_title: 'To Contact',
pipelineid: '1',
pipeline_title: 'Test Pipeline',
value: '14,055.00',
value_raw: '14055',
currency: 'usd',
currency_symbol: '$',
owner: '1',
owner_firstname: 'john',
owner_lastname: 'wick',
contactid: '3',
contact_email: 'code.test@gmail.com',
contact_firstname: 'john',
contact_lastname: 'wick',
status: '0',
fields: [{ id: '1', key: 'Forecasted Close Date', value: '2024-02-08 00:00:00' }],
},
task: {
id: '6',
type_id: '1',
title: 'TEST TASK',
note: 'fsfssssf',
duedate: '2024-02-28 06:38:41',
duedate_iso: '2024-02-28T06:38:41-06:00',
edate: '2024-02-28 06:53:41',
edate_iso: '2024-02-28T06:53:41-06:00',
type_title: 'Call',
},
},
});

View File

@@ -0,0 +1,75 @@
import { activeCampaignAuth } from '../..';
import { TriggerStrategy, createTrigger } from '@activepieces/pieces-framework';
import { makeClient } from '../common';
import { CreateWebhookResponse } from '../common/types';
import { WEBHOOK_SOURCES } from '../common/constants';
export const newOrUpdatedAccountTrigger = createTrigger({
auth: activeCampaignAuth,
name: 'activecampaign_new_or_updated_account',
displayName: 'New or Updated Account',
description: 'Triggers when a new account is added or an existing accounts details are updated',
type: TriggerStrategy.WEBHOOK,
props: {},
async onEnable(context) {
const client = makeClient(context.auth.props);
const res = await client.subscribeWebhook({
name: `Activepieces New Account Hook`,
url: context.webhookUrl,
events: ['account_add', 'account_update'],
sources: WEBHOOK_SOURCES,
});
await context.store.put<CreateWebhookResponse>('activecampaign_new_or_updated_account', res);
},
async run(context) {
return [context.payload.body];
},
async onDisable(context) {
const webhook = await context.store.get<CreateWebhookResponse>(
'activecampaign_new_or_updated_account',
);
if (webhook != null) {
const client = makeClient(context.auth.props);
await client.unsubscribeWebhook(webhook.webhook.id);
}
},
sampleData: {
type: 'account_update',
date_time: '2024-02-28T06:44:32-06:00',
initiated_from: 'admin',
initiated_by: 'admin',
list: '0',
account: {
id: '1',
name: 'John Wick',
account_url: 'https://www.github.com',
created_timestamp: '2024-02-28 01:09:17',
updated_timestamp: '2024-02-28 06:44:32',
fields: {
'0': { id: '1', key: 'Description', value: 'Desc' },
'1': { id: '2', key: 'Address 1', value: 'Address 1' },
'2': { id: '3', key: 'Address 2', value: 'Address 2' },
'3': { id: '4', key: 'City', value: 'City' },
'4': { id: '5', key: 'State/Province', value: 'State' },
'5': { id: '6', key: 'Postal Code', value: '75156' },
'6': { id: '7', key: 'Country', value: 'India' },
'7': { id: '8', key: 'Number of Employees', value: '101 - 500' },
'8': { id: '9', key: 'Annual Revenue', value: 'Less than 100K' },
'9': { id: '10', key: 'Industry/Vertical', value: 'Accounting/Financial' },
'10': { key: 'Phone Number', value: '' },
'11': { id: '11', key: 'Text Input', value: 'Text Input' },
'12': { id: '12', key: 'Text Area', value: 'Text Area' },
'13': { id: '13', key: 'Number', value: '18.000' },
'14': { id: '14', key: 'money', value: '18' },
'15': { id: '15', key: 'Date', value: '2024-02-28 00:00:00' },
'16': { key: 'Date Time', value: '' },
'17': { id: '16', key: 'Drop Down', value: 'Option 3' },
'18': { id: '17', key: 'List box', value: ['Option 1', 'Option 2'] },
'19': { id: '18', key: 'Radio Buttons', value: 'Option 1' },
'20': { id: '19', key: 'Check Box', value: ['Option 1', 'Option 2'] },
'21': { id: '20', key: 'Hidden', value: 'Hidden' },
},
},
updated_fields: ['name'],
},
});

View File

@@ -0,0 +1,61 @@
import { activeCampaignAuth } from '../..';
import { TriggerStrategy, createTrigger } from '@activepieces/pieces-framework';
import { makeClient } from '../common';
import { CreateWebhookResponse } from '../common/types';
import { WEBHOOK_SOURCES } from '../common/constants';
export const newtagAddedOrRemovedFromContactTrigger = createTrigger({
auth: activeCampaignAuth,
name: 'activecampaign_new_tag_added_or_removed_from_contact',
displayName: 'Tag Added or Removed From Contact',
description: 'Triggers when a a Tag is added or removed from a Contact',
type: TriggerStrategy.WEBHOOK,
props: {},
async onEnable(context) {
const client = makeClient(context.auth.props);
const res = await client.subscribeWebhook({
name: `Activepieces Contact Tag Hook`,
url: context.webhookUrl,
events: ['contact_tag_added', 'contact_tag_removed'],
sources: WEBHOOK_SOURCES,
});
await context.store.put<CreateWebhookResponse>(
'activecampaign_new_tag_added_or_removed_from_contact',
res,
);
},
async run(context) {
return [context.payload.body];
},
async onDisable(context) {
const webhook = await context.store.get<CreateWebhookResponse>(
'activecampaign_new_tag_added_or_removed_from_contact',
);
if (webhook != null) {
const client = makeClient(context.auth.props);
await client.unsubscribeWebhook(webhook.webhook.id);
}
},
sampleData: {
type: 'contact_tag_added',
date_time: '2024-02-28T07:04:13-06:00',
initiated_from: 'admin',
initiated_by: 'admin',
list: '0',
contact: {
id: '3',
email: 'code.test@gmail.com',
first_name: 'John',
last_name: 'Wick',
phone: '',
ip: '0.0.0.0',
tags: 'tag1, tag2',
customer_acct_name: '',
orgname: '',
},
customer_acct_name: '',
customer_acct_id: '0',
orgname: '',
tag: 'tag2',
},
});

View File

@@ -0,0 +1,58 @@
import { activeCampaignAuth } from '../..';
import { TriggerStrategy, createTrigger } from '@activepieces/pieces-framework';
import { makeClient } from '../common';
import { CreateWebhookResponse } from '../common/types';
import { WEBHOOK_SOURCES } from '../common/constants';
export const updatedContactTrigger = createTrigger({
auth: activeCampaignAuth,
name: 'activecampaign_updated_contact',
displayName: 'Updated Contact',
description: 'Triggers when an existing contact details are updated.',
type: TriggerStrategy.WEBHOOK,
props: {},
async onEnable(context) {
const client = makeClient(context.auth.props);
const res = await client.subscribeWebhook({
name: `Activepieces Updated Contact Hook`,
url: context.webhookUrl,
events: ['update'],
sources: WEBHOOK_SOURCES,
});
await context.store.put<CreateWebhookResponse>('activecampaign_updated_contact', res);
},
async run(context) {
return [context.payload.body];
},
async onDisable(context) {
const webhook = await context.store.get<CreateWebhookResponse>(
'activecampaign_updated_contact',
);
if (webhook != null) {
const client = makeClient(context.auth.props);
await client.unsubscribeWebhook(webhook.webhook.id);
}
},
sampleData: {
type: 'update',
date_time: '2024-02-28T07:16:48-06:00',
initiated_from: 'admin',
initiated_by: 'admin',
list: '0',
contact: {
id: '3',
email: 'code.test@gmail.com',
first_name: 'John',
last_name: 'Wick',
phone: '',
ip: '0.0.0.0',
tags: 'tag1, tag2',
fields: ['Option 1', '||Option 1||Option 2||'],
customer_acct_name: '',
orgname: '',
},
customer_acct_name: '',
customer_acct_id: '0',
orgname: '',
},
});

View File

@@ -0,0 +1,19 @@
{
"extends": "../../../../tsconfig.base.json",
"compilerOptions": {
"module": "commonjs",
"forceConsistentCasingInFileNames": true,
"strict": true,
"noImplicitOverride": true,
"noPropertyAccessFromIndexSignature": true,
"noImplicitReturns": true,
"noFallthroughCasesInSwitch": 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"]
}