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,88 @@
{
"LeadConnector": "LeadConnector",
"Lead Connector - Go High Level": "Lead Connector - Go High Level",
"\n1. Go to the [Marketplace](https://marketplace.gohighlevel.com/) and sign up for a developer account.\n2. Navigate to **My Apps** and click on **Create App**.\n3. Provide app name.Then select **Private** as App Type, **Sub-Account** as Distribution Type. Click **Create App** Button.\n4. Add following scopes.\n - campaigns.readonly\n - contacts.write\n - contacts.readonly\n - locations.readonly\n - locations/tags.readonly\n - locations/tags.write\n - opportunities.readonly\n - opportunities.write\n - ": "\n1. Go to the [Marketplace](https://marketplace.gohighlevel.com/) and sign up for a developer account.\n2. Navigate to **My Apps** and click on **Create App**.\n3. Provide app name.Then select **Private** as App Type, **Sub-Account** as Distribution Type. Click **Create App** Button.\n4. Add following scopes.\n - campaigns.readonly\n - contacts.write\n - contacts.readonly\n - locations.readonly\n - locations/tags.readonly\n - locations/tags.write\n - opportunities.readonly\n - opportunities.write\n - users.readonly\n - workflows.readonly\n - forms.readonly\n5. Add redirect URLs.\n6. Create new Client key with valid name.Copy Client ID and Client Secret.\n",
"Create Contact": "Create Contact",
"Update Contact": "Update Contact",
"Add Contact to Campaign": "Add Contact to Campaign",
"Add Contact to Workflow": "Add Contact to Workflow",
"Add Note to Contact": "Add Note to Contact",
"Search Contacts": "Search Contacts",
"Create Opportunity": "Create Opportunity",
"Update Opportunity": "Update Opportunity",
"Create Task": "Create Task",
"Update Task": "Update Task",
"Custom API Call": "Custom API Call",
"Create a new contact.": "Create a new contact.",
"Update an existing contact.": "Update an existing contact.",
"Add an existing contact to a campaign.": "Add an existing contact to a campaign.",
"Add an existing contact to a workflow.": "Add an existing contact to a workflow.",
"Add a new note to a contact.": "Add a new note to a contact.",
"Search for contacts with a search query.": "Search for contacts with a search query.",
"Create a new opportunity.": "Create a new opportunity.",
"Updates an existing opportunity.": "Updates an existing opportunity.",
"Create a new task.": "Create a new task.",
"Update a task.": "Update a task.",
"Make a custom API call to a specific endpoint": "Make a custom API call to a specific endpoint",
"First Name": "First Name",
"Last Name": "Last Name",
"Email": "Email",
"Phone": "Phone",
"Company Name": "Nom de l'empresa",
"Website": "Website",
"Tags": "Tags",
"Source": "Source",
"Country": "Country",
"City": "City",
"State": "State",
"Address": "Address",
"Postal Code": "Postal Code",
"Time Zone": "Time Zone",
"Contact ID": "Contact ID",
"Contact": "Contact",
"Campaign": "Campaign",
"Workflow": "Workflow",
"Note": "Note",
"User": "User",
"Search Query": "Search Query",
"Pipeline": "Pipeline",
"Stage": "Stage",
"Title": "Title",
"Status": "Status",
"Assigned To": "Assigned To",
"Monetary Value": "Monetary Value",
"Opportunity": "Opportunity",
"Due Date": "Due Date",
"Description": "Description",
"Completed": "Completed",
"Task": "Task",
"Method": "Method",
"Headers": "Headers",
"Query Parameters": "Query Parameters",
"Body": "Body",
"No Error on Failure": "No Error on Failure",
"Timeout (in seconds)": "Timeout (in seconds)",
"When using a dynamic value, make sure to use the ISO-2 country code, and not the country name.": "When using a dynamic value, make sure to use the ISO-2 country code, and not the country name.",
"The ID of the contact.": "The ID of the contact.",
"The contact to use.": "The contact to use.",
"The value you want to search for.": "The value you want to search for.",
"The ID of the pipeline to use.": "The ID of the pipeline to use.",
"The stage of the pipeline to use.": "The stage of the pipeline to use.",
"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 Contact": "New Contact",
"Contact Created or Updated": "Contact Created or Updated",
"New Form Submission": "New Form Submission",
"New Opportunity": "New Opportunity",
"Trigger when a new contact is added.": "Trigger when a new contact is added.",
"Trigger when a contact is created or updated.": "Trigger when a contact is created or updated.",
"Trigger when a form is submitted.": "Trigger when a form is submitted.",
"Trigger when a new opportunity is added.": "Trigger when a new opportunity is added.",
"Form": "Form",
"The form you want to use.": "The form you want to use."
}

View File

@@ -0,0 +1,89 @@
{
"Lead Connector - Go High Level": "Lead-Connector - Hohes Level gehen",
"\n1. Go to the [Marketplace](https://marketplace.gohighlevel.com/) and sign up for a developer account.\n2. Navigate to **My Apps** and click on **Create App**.\n3. Provide app name.Then select **Private** as App Type, **Sub-Account** as Distribution Type. Click **Create App** Button.\n4. Add following scopes.\n - campaigns.readonly\n - contacts.write\n - contacts.readonly\n - locations.readonly\n - locations/tags.readonly\n - locations/tags.write\n - opportunities.readonly\n - opportunities.write\n - ": "\n1. Gehe zur [Marketplace](https://marketplace.gohighlevel.com/) und melde dich für ein Entwicklerkonto an.\n2. Navigieren Sie zu **Meine Apps** und klicken Sie auf **App erstellen**.\n3. Geben Sie den App-Namen an. hen wähle **Privat** als App-Typ, **Unterkonten** als Vertriebstyp aus. Klicke auf **App erstellen** Schaltfläche.\n4. Folgende Bereiche hinzufügen.\n - campaigns.readonly\n - contacts.write\n - Kontakte. eadonly\n - locations.readonly\n - locations/tags.readonly\n - locations/tags. rite\n - opportunities.readonly\n - opportunities.write\n - users. eadonly\n - workflows.readonly\n - formulare.readonly\n5. Fügen Sie Umleitungs-URLs hinzu.\n6. Neuen Client-Schlüssel mit gültigem Namen anlegen. Kopiere Client-ID und Client-Geheimnis.\n",
"Create Contact": "Kontakt erstellen",
"Update Contact": "Kontakt aktualisieren",
"Add Contact to Campaign": "Kontakt zur Kampagne hinzufügen",
"Add Contact to Workflow": "Kontakt zum Workflow hinzufügen",
"Add Note to Contact": "Notiz zu Kontakt hinzufügen",
"Search Contacts": "Kontakte suchen",
"Create Opportunity": "Verkaufschance erstellen",
"Update Opportunity": "Update-Verkaufschance",
"Create Task": "Aufgabe erstellen",
"Update Task": "Aufgabe aktualisieren",
"Custom API Call": "Eigener API-Aufruf",
"Create a new contact.": "Neuen Kontakt anlegen.",
"Update an existing contact.": "Aktualisiere einen bestehenden Kontakt.",
"Add an existing contact to a campaign.": "Hinzufügen eines bestehenden Kontakts zu einer Kampagne.",
"Add an existing contact to a workflow.": "Fügen Sie einen bestehenden Kontakt zu einem Workflow hinzu.",
"Add a new note to a contact.": "Neue Notiz zu einem Kontakt hinzufügen.",
"Search for contacts with a search query.": "Suche nach Kontakten mit einer Suchabfrage.",
"Create a new opportunity.": "Erstelle eine neue Chance.",
"Updates an existing opportunity.": "Aktualisiert eine vorhandene Möglichkeit.",
"Create a new task.": "Erstellen Sie eine neue Aufgabe.",
"Update a task.": "Aufgabe aktualisieren.",
"Make a custom API call to a specific endpoint": "Einen benutzerdefinierten API-Aufruf an einen bestimmten Endpunkt machen",
"First Name": "Vorname",
"Last Name": "Nachname",
"Email": "E-Mail",
"Phone": "Telefon",
"Company Name": "Firmenname",
"Website": "Webseite",
"Tags": "Tags",
"Source": "Quelle",
"Country": "Land",
"City": "Stadt",
"State": "Bundesland",
"Address": "Adresse",
"Postal Code": "Postleitzahl",
"Time Zone": "Zeitzone",
"Contact ID": "Kontakt-ID",
"Contact": "Kontakt",
"Campaign": "Kampagne",
"Workflow": "Workflow",
"Note": "Notiz",
"User": "Benutzer",
"Search Query": "Suchanfrage",
"Pipeline": "Pipeline",
"Stage": "Teil",
"Title": "Titel",
"Status": "Status",
"Assigned To": "Zugewiesen an",
"Monetary Value": "Geldwert",
"Opportunity": "Verkaufschance",
"Due Date": "Fälligkeitsdatum",
"Description": "Beschreibung",
"Completed": "Abgeschlossen",
"Task": "Aufgabe",
"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)",
"When using a dynamic value, make sure to use the ISO-2 country code, and not the country name.": "Wenn Sie einen dynamischen Wert verwenden, stellen Sie sicher, dass Sie den ISO-2-Ländercode und nicht den Landesnamen verwenden.",
"The ID of the contact.": "Die ID des Kontakts.",
"The contact to use.": "Der zu verwendende Kontakt.",
"The value you want to search for.": "Der Wert, nach dem Sie suchen möchten.",
"The ID of the pipeline to use.": "Die ID der zu verwendenden Pipeline.",
"The stage of the pipeline to use.": "Die Phase der zu verwendenden Pipeline.",
"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 Contact": "Neuer Kontakt",
"Contact Created or Updated": "Kontakt erstellt oder aktualisiert",
"New Form Submission": "Neue Formulareinreichung",
"New Opportunity": "Neue Verkaufschance",
"Trigger when a new contact is added.": "Wird ausgelöst, wenn ein neuer Kontakt hinzugefügt wird.",
"Trigger when a contact is created or updated.": "Wird ausgelöst, wenn ein Kontakt erstellt oder aktualisiert wird.",
"Trigger when a form is submitted.": "Auslösen wenn ein Formular abgeschickt wird.",
"Trigger when a new opportunity is added.": "Auslösen wenn eine neue Chance hinzugefügt wird.",
"Form": "Formular",
"The form you want to use.": "Das Formular, das Sie verwenden möchten."
}

View File

@@ -0,0 +1,89 @@
{
"Lead Connector - Go High Level": "Conector líder - Ve a alto nivel",
"\n1. Go to the [Marketplace](https://marketplace.gohighlevel.com/) and sign up for a developer account.\n2. Navigate to **My Apps** and click on **Create App**.\n3. Provide app name.Then select **Private** as App Type, **Sub-Account** as Distribution Type. Click **Create App** Button.\n4. Add following scopes.\n - campaigns.readonly\n - contacts.write\n - contacts.readonly\n - locations.readonly\n - locations/tags.readonly\n - locations/tags.write\n - opportunities.readonly\n - opportunities.write\n - ": "\n1. Go to the [Marketplace](https://marketplace.gohighlevel.com/) and sign up for a developer account.\n2. Navigate to **My Apps** and click on **Create App**.\n3. Provide app name.Then select **Private** as App Type, **Sub-Account** as Distribution Type. Click **Create App** Button.\n4. Add following scopes.\n - campaigns.readonly\n - contacts.write\n - contacts.readonly\n - locations.readonly\n - locations/tags.readonly\n - locations/tags.write\n - opportunities.readonly\n - opportunities.write\n - users.readonly\n - workflows.readonly\n - forms.readonly\n5. Add redirect URLs.\n6. Create new Client key with valid name.Copy Client ID and Client Secret.\n",
"Create Contact": "Crear contacto",
"Update Contact": "Actualizar contacto",
"Add Contact to Campaign": "Añadir contacto a la campaña",
"Add Contact to Workflow": "Añadir contacto al flujo de trabajo",
"Add Note to Contact": "Añadir nota al contacto",
"Search Contacts": "Buscar contactos",
"Create Opportunity": "Crear Oportunidad",
"Update Opportunity": "Actualizar Oportunidad",
"Create Task": "Crear tarea",
"Update Task": "Actualizar tarea",
"Custom API Call": "Llamada API personalizada",
"Create a new contact.": "Crear un nuevo contacto.",
"Update an existing contact.": "Actualizar un contacto existente.",
"Add an existing contact to a campaign.": "Añadir un contacto existente a una campaña.",
"Add an existing contact to a workflow.": "Añadir un contacto existente a un flujo de trabajo.",
"Add a new note to a contact.": "Añadir una nueva nota a un contacto.",
"Search for contacts with a search query.": "Buscar contactos con una consulta de búsqueda.",
"Create a new opportunity.": "Crear una nueva oportunidad.",
"Updates an existing opportunity.": "Actualiza una oportunidad existente.",
"Create a new task.": "Crear una nueva tarea.",
"Update a task.": "Actualizar una tarea.",
"Make a custom API call to a specific endpoint": "Hacer una llamada API personalizada a un extremo específico",
"First Name": "Nombre",
"Last Name": "Apellido",
"Email": "E-mail",
"Phone": "Teléfono",
"Company Name": "Nombre De La Empresa",
"Website": "Sitio web",
"Tags": "Etiquetas",
"Source": "Fuente",
"Country": "País",
"City": "Ciudad",
"State": "Estado",
"Address": "Dirección",
"Postal Code": "Código postal",
"Time Zone": "Zona horaria",
"Contact ID": "ID de contacto",
"Contact": "Contacto",
"Campaign": "Campaña",
"Workflow": "Flujo trabajo",
"Note": "Nota",
"User": "Usuario",
"Search Query": "Buscar consulta",
"Pipeline": "Pipeline",
"Stage": "Etapa",
"Title": "Título",
"Status": "Estado",
"Assigned To": "Asignado a",
"Monetary Value": "Valor monetario",
"Opportunity": "Oportunidad",
"Due Date": "Fecha de fin",
"Description": "Descripción",
"Completed": "Completado",
"Task": "Tarea",
"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)",
"When using a dynamic value, make sure to use the ISO-2 country code, and not the country name.": "Cuando utilice un valor dinámico, asegúrese de usar el código de país ISO-2, y no el nombre del país.",
"The ID of the contact.": "El ID del contacto.",
"The contact to use.": "El contacto a utilizar.",
"The value you want to search for.": "El valor que desea buscar.",
"The ID of the pipeline to use.": "El ID del pipeline a utilizar.",
"The stage of the pipeline to use.": "La etapa del pipeline a utilizar.",
"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 Contact": "Nuevo contacto",
"Contact Created or Updated": "Contacto creado o actualizado",
"New Form Submission": "Nuevo envío de formulario",
"New Opportunity": "Nueva oportunidad",
"Trigger when a new contact is added.": "Activar cuando se añade un nuevo contacto.",
"Trigger when a contact is created or updated.": "Activar cuando un contacto es creado o actualizado.",
"Trigger when a form is submitted.": "Activar cuando se envía un formulario.",
"Trigger when a new opportunity is added.": "Activar cuando se añade una nueva oportunidad.",
"Form": "Forma",
"The form you want to use.": "El formulario que desea utilizar."
}

View File

@@ -0,0 +1,89 @@
{
"Lead Connector - Go High Level": "Connecteur de Prospect - Aller au niveau supérieur",
"\n1. Go to the [Marketplace](https://marketplace.gohighlevel.com/) and sign up for a developer account.\n2. Navigate to **My Apps** and click on **Create App**.\n3. Provide app name.Then select **Private** as App Type, **Sub-Account** as Distribution Type. Click **Create App** Button.\n4. Add following scopes.\n - campaigns.readonly\n - contacts.write\n - contacts.readonly\n - locations.readonly\n - locations/tags.readonly\n - locations/tags.write\n - opportunities.readonly\n - opportunities.write\n - ": "\n1. Go to the [Marketplace](https://marketplace.gohighlevel.com/) and sign up for a developer account.\n2. Navigate to **My Apps** and click on **Create App**.\n3. Provide app name.Then select **Private** as App Type, **Sub-Account** as Distribution Type. Click **Create App** Button.\n4. Add following scopes.\n - campaigns.readonly\n - contacts.write\n - contacts.readonly\n - locations.readonly\n - locations/tags.readonly\n - locations/tags.write\n - opportunities.readonly\n - opportunities.write\n - users.readonly\n - workflows.readonly\n - forms.readonly\n5. Add redirect URLs.\n6. Create new Client key with valid name.Copy Client ID and Client Secret.\n",
"Create Contact": "Créer un contact",
"Update Contact": "Mettre à jour le contact",
"Add Contact to Campaign": "Ajouter un contact à la campagne",
"Add Contact to Workflow": "Ajouter un contact au flux de travail",
"Add Note to Contact": "Ajouter une note au contact",
"Search Contacts": "Rechercher dans les contacts",
"Create Opportunity": "Créer une Affaire",
"Update Opportunity": "Mettre à jour l'Affaire",
"Create Task": "Créer une tâche",
"Update Task": "Tâche de mise à jour",
"Custom API Call": "Appel API personnalisé",
"Create a new contact.": "Créer un nouveau contact.",
"Update an existing contact.": "Mettre à jour un contact existant.",
"Add an existing contact to a campaign.": "Ajouter un contact existant à une campagne.",
"Add an existing contact to a workflow.": "Ajouter un contact existant à un workflow.",
"Add a new note to a contact.": "Ajouter une nouvelle note à un contact.",
"Search for contacts with a search query.": "Rechercher des contacts avec une requête de recherche.",
"Create a new opportunity.": "Créer une nouvelle opportunité.",
"Updates an existing opportunity.": "Met à jour une opportunité existante.",
"Create a new task.": "Créer une nouvelle tâche.",
"Update a task.": "Mettre à jour une tâche.",
"Make a custom API call to a specific endpoint": "Passez un appel API personnalisé à un point de terminaison spécifique",
"First Name": "First Name",
"Last Name": "Last Name",
"Email": "Courriel",
"Phone": "Téléphone",
"Company Name": "Nom de lentreprise",
"Website": "Site Web",
"Tags": "Tags",
"Source": "Source",
"Country": "Pays",
"City": "Ville",
"State": "État",
"Address": "Adresses",
"Postal Code": "Code postal",
"Time Zone": "Fuseau horaire",
"Contact ID": "ID du contact",
"Contact": "Contacter",
"Campaign": "Campagnes",
"Workflow": "Flux de travail",
"Note": "Note",
"User": "Utilisateur",
"Search Query": "Requête de recherche",
"Pipeline": "Pipeline",
"Stage": "Étape",
"Title": "Titre de la page",
"Status": "Statut",
"Assigned To": "Assigné à",
"Monetary Value": "Valeur monétaire",
"Opportunity": "Opportunité",
"Due Date": "Date de fin",
"Description": "Libellé",
"Completed": "Terminé",
"Task": "Tâche",
"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)",
"When using a dynamic value, make sure to use the ISO-2 country code, and not the country name.": "Lorsque vous utilisez une valeur dynamique, assurez-vous d'utiliser le code de pays ISO-2, et non le nom du pays.",
"The ID of the contact.": "L'ID du contact.",
"The contact to use.": "Le contact à utiliser.",
"The value you want to search for.": "La valeur que vous voulez rechercher.",
"The ID of the pipeline to use.": "L'ID du pipeline à utiliser.",
"The stage of the pipeline to use.": "L'étape du pipeline à utiliser.",
"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 Contact": "Nouveau contact",
"Contact Created or Updated": "Contact créé ou mis à jour",
"New Form Submission": "Nouvelle soumission de formulaire",
"New Opportunity": "Nouvelle opportunité",
"Trigger when a new contact is added.": "Déclencher lorsqu'un nouveau contact est ajouté.",
"Trigger when a contact is created or updated.": "Déclencher lorsqu'un contact est créé ou mis à jour.",
"Trigger when a form is submitted.": "Déclencher lorsqu'un formulaire est soumis.",
"Trigger when a new opportunity is added.": "Déclencher quand une nouvelle opportunité est ajoutée.",
"Form": "Forme",
"The form you want to use.": "Le formulaire que vous souhaitez utiliser."
}

View File

@@ -0,0 +1,88 @@
{
"LeadConnector": "LeadConnector",
"Lead Connector - Go High Level": "Lead Connector - Go High Level",
"\n1. Go to the [Marketplace](https://marketplace.gohighlevel.com/) and sign up for a developer account.\n2. Navigate to **My Apps** and click on **Create App**.\n3. Provide app name.Then select **Private** as App Type, **Sub-Account** as Distribution Type. Click **Create App** Button.\n4. Add following scopes.\n - campaigns.readonly\n - contacts.write\n - contacts.readonly\n - locations.readonly\n - locations/tags.readonly\n - locations/tags.write\n - opportunities.readonly\n - opportunities.write\n - ": "\n1. Go to the [Marketplace](https://marketplace.gohighlevel.com/) and sign up for a developer account.\n2. Navigate to **My Apps** and click on **Create App**.\n3. Provide app name.Then select **Private** as App Type, **Sub-Account** as Distribution Type. Click **Create App** Button.\n4. Add following scopes.\n - campaigns.readonly\n - contacts.write\n - contacts.readonly\n - locations.readonly\n - locations/tags.readonly\n - locations/tags.write\n - opportunities.readonly\n - opportunities.write\n - users.readonly\n - workflows.readonly\n - forms.readonly\n5. Add redirect URLs.\n6. Create new Client key with valid name.Copy Client ID and Client Secret.\n",
"Create Contact": "Create Contact",
"Update Contact": "Update Contact",
"Add Contact to Campaign": "Add Contact to Campaign",
"Add Contact to Workflow": "Add Contact to Workflow",
"Add Note to Contact": "Add Note to Contact",
"Search Contacts": "Search Contacts",
"Create Opportunity": "Create Opportunity",
"Update Opportunity": "Update Opportunity",
"Create Task": "Create Task",
"Update Task": "Update Task",
"Custom API Call": "Custom API Call",
"Create a new contact.": "Create a new contact.",
"Update an existing contact.": "Update an existing contact.",
"Add an existing contact to a campaign.": "Add an existing contact to a campaign.",
"Add an existing contact to a workflow.": "Add an existing contact to a workflow.",
"Add a new note to a contact.": "Add a new note to a contact.",
"Search for contacts with a search query.": "Search for contacts with a search query.",
"Create a new opportunity.": "Create a new opportunity.",
"Updates an existing opportunity.": "Updates an existing opportunity.",
"Create a new task.": "Create a new task.",
"Update a task.": "Update a task.",
"Make a custom API call to a specific endpoint": "Make a custom API call to a specific endpoint",
"First Name": "First Name",
"Last Name": "Last Name",
"Email": "Email",
"Phone": "Phone",
"Company Name": "Company Name",
"Website": "Website",
"Tags": "Tags",
"Source": "Source",
"Country": "Country",
"City": "City",
"State": "State",
"Address": "Address",
"Postal Code": "Postal Code",
"Time Zone": "Time Zone",
"Contact ID": "Contact ID",
"Contact": "Contact",
"Campaign": "Campaign",
"Workflow": "Workflow",
"Note": "Note",
"User": "User",
"Search Query": "Search Query",
"Pipeline": "Pipeline",
"Stage": "Stage",
"Title": "Title",
"Status": "Status",
"Assigned To": "Assigned To",
"Monetary Value": "Monetary Value",
"Opportunity": "Opportunity",
"Due Date": "Due Date",
"Description": "Description",
"Completed": "Completed",
"Task": "Task",
"Method": "Method",
"Headers": "Headers",
"Query Parameters": "Query Parameters",
"Body": "Body",
"No Error on Failure": "No Error on Failure",
"Timeout (in seconds)": "Timeout (in seconds)",
"When using a dynamic value, make sure to use the ISO-2 country code, and not the country name.": "When using a dynamic value, make sure to use the ISO-2 country code, and not the country name.",
"The ID of the contact.": "The ID of the contact.",
"The contact to use.": "The contact to use.",
"The value you want to search for.": "The value you want to search for.",
"The ID of the pipeline to use.": "The ID of the pipeline to use.",
"The stage of the pipeline to use.": "The stage of the pipeline to use.",
"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 Contact": "New Contact",
"Contact Created or Updated": "Contact Created or Updated",
"New Form Submission": "New Form Submission",
"New Opportunity": "New Opportunity",
"Trigger when a new contact is added.": "Trigger when a new contact is added.",
"Trigger when a contact is created or updated.": "Trigger when a contact is created or updated.",
"Trigger when a form is submitted.": "Trigger when a form is submitted.",
"Trigger when a new opportunity is added.": "Trigger when a new opportunity is added.",
"Form": "Form",
"The form you want to use.": "The form you want to use."
}

View File

@@ -0,0 +1,88 @@
{
"LeadConnector": "LeadConnector",
"Lead Connector - Go High Level": "Lead Connector - Go High Level",
"\n1. Go to the [Marketplace](https://marketplace.gohighlevel.com/) and sign up for a developer account.\n2. Navigate to **My Apps** and click on **Create App**.\n3. Provide app name.Then select **Private** as App Type, **Sub-Account** as Distribution Type. Click **Create App** Button.\n4. Add following scopes.\n - campaigns.readonly\n - contacts.write\n - contacts.readonly\n - locations.readonly\n - locations/tags.readonly\n - locations/tags.write\n - opportunities.readonly\n - opportunities.write\n - ": "\n1. Go to the [Marketplace](https://marketplace.gohighlevel.com/) and sign up for a developer account.\n2. Navigate to **My Apps** and click on **Create App**.\n3. Provide app name.Then select **Private** as App Type, **Sub-Account** as Distribution Type. Click **Create App** Button.\n4. Add following scopes.\n - campaigns.readonly\n - contacts.write\n - contacts.readonly\n - locations.readonly\n - locations/tags.readonly\n - locations/tags.write\n - opportunities.readonly\n - opportunities.write\n - users.readonly\n - workflows.readonly\n - forms.readonly\n5. Add redirect URLs.\n6. Create new Client key with valid name.Copy Client ID and Client Secret.\n",
"Create Contact": "Create Contact",
"Update Contact": "Update Contact",
"Add Contact to Campaign": "Add Contact to Campaign",
"Add Contact to Workflow": "Add Contact to Workflow",
"Add Note to Contact": "Add Note to Contact",
"Search Contacts": "Search Contacts",
"Create Opportunity": "Create Opportunity",
"Update Opportunity": "Update Opportunity",
"Create Task": "Create Task",
"Update Task": "Update Task",
"Custom API Call": "Custom API Call",
"Create a new contact.": "Create a new contact.",
"Update an existing contact.": "Update an existing contact.",
"Add an existing contact to a campaign.": "Add an existing contact to a campaign.",
"Add an existing contact to a workflow.": "Add an existing contact to a workflow.",
"Add a new note to a contact.": "Add a new note to a contact.",
"Search for contacts with a search query.": "Search for contacts with a search query.",
"Create a new opportunity.": "Create a new opportunity.",
"Updates an existing opportunity.": "Updates an existing opportunity.",
"Create a new task.": "Create a new task.",
"Update a task.": "Update a task.",
"Make a custom API call to a specific endpoint": "Make a custom API call to a specific endpoint",
"First Name": "First Name",
"Last Name": "Last Name",
"Email": "Email",
"Phone": "Phone",
"Company Name": "Company Name",
"Website": "Website",
"Tags": "Tags",
"Source": "Source",
"Country": "Country",
"City": "City",
"State": "State",
"Address": "Address",
"Postal Code": "Postal Code",
"Time Zone": "Time Zone",
"Contact ID": "Contact ID",
"Contact": "Contact",
"Campaign": "Campaign",
"Workflow": "Workflow",
"Note": "Note",
"User": "User",
"Search Query": "Search Query",
"Pipeline": "Pipeline",
"Stage": "Stage",
"Title": "Title",
"Status": "Status",
"Assigned To": "Assigned To",
"Monetary Value": "Monetary Value",
"Opportunity": "Opportunity",
"Due Date": "Due Date",
"Description": "Description",
"Completed": "Completed",
"Task": "Task",
"Method": "Method",
"Headers": "Headers",
"Query Parameters": "Query Parameters",
"Body": "Body",
"No Error on Failure": "No Error on Failure",
"Timeout (in seconds)": "Timeout (in seconds)",
"When using a dynamic value, make sure to use the ISO-2 country code, and not the country name.": "When using a dynamic value, make sure to use the ISO-2 country code, and not the country name.",
"The ID of the contact.": "The ID of the contact.",
"The contact to use.": "The contact to use.",
"The value you want to search for.": "The value you want to search for.",
"The ID of the pipeline to use.": "The ID of the pipeline to use.",
"The stage of the pipeline to use.": "The stage of the pipeline to use.",
"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 Contact": "New Contact",
"Contact Created or Updated": "Contact Created or Updated",
"New Form Submission": "New Form Submission",
"New Opportunity": "New Opportunity",
"Trigger when a new contact is added.": "Trigger when a new contact is added.",
"Trigger when a contact is created or updated.": "Trigger when a contact is created or updated.",
"Trigger when a form is submitted.": "Trigger when a form is submitted.",
"Trigger when a new opportunity is added.": "Trigger when a new opportunity is added.",
"Form": "Form",
"The form you want to use.": "The form you want to use."
}

View File

@@ -0,0 +1,89 @@
{
"Lead Connector - Go High Level": "リードコネクタ - ハイレベルに移動",
"\n1. Go to the [Marketplace](https://marketplace.gohighlevel.com/) and sign up for a developer account.\n2. Navigate to **My Apps** and click on **Create App**.\n3. Provide app name.Then select **Private** as App Type, **Sub-Account** as Distribution Type. Click **Create App** Button.\n4. Add following scopes.\n - campaigns.readonly\n - contacts.write\n - contacts.readonly\n - locations.readonly\n - locations/tags.readonly\n - locations/tags.write\n - opportunities.readonly\n - opportunities.write\n - ": "\n1. Go to the [Marketplace](https://marketplace.gohighlevel.com/) and sign up for a developer account.\n2. Navigate to **My Apps** and click on **Create App**.\n3. Provide app name.Then select **Private** as App Type, **Sub-Account** as Distribution Type. Click **Create App** Button.\n4. Add following scopes.\n - campaigns.readonly\n - contacts.write\n - contacts.readonly\n - locations.readonly\n - locations/tags.readonly\n - locations/tags.write\n - opportunities.readonly\n - opportunities.write\n - users.readonly\n - workflows.readonly\n - forms.readonly\n5. Add redirect URLs.\n6. Create new Client key with valid name.Copy Client ID and Client Secret.\n",
"Create Contact": "連絡先を作成",
"Update Contact": "連絡先を更新",
"Add Contact to Campaign": "キャンペーンに連絡先を追加",
"Add Contact to Workflow": "ワークフローに連絡先を追加",
"Add Note to Contact": "連絡先にメモを追加",
"Search Contacts": "連絡先を検索",
"Create Opportunity": "案件を作成",
"Update Opportunity": "商談を更新",
"Create Task": "タスクを作成",
"Update Task": "タスクの更新",
"Custom API Call": "カスタムAPI通話",
"Create a new contact.": "新しい連絡先を作成します。",
"Update an existing contact.": "既存の連絡先を更新します。",
"Add an existing contact to a campaign.": "キャンペーンに既存の連絡先を追加します。",
"Add an existing contact to a workflow.": "ワークフローに既存の連絡先を追加します。",
"Add a new note to a contact.": "連絡先に新しいメモを追加します。",
"Search for contacts with a search query.": "検索クエリのある連絡先を検索します。",
"Create a new opportunity.": "新しい機会を作りましょう。",
"Updates an existing opportunity.": "既存の機会を更新します。",
"Create a new task.": "新しいタスクを作成します。",
"Update a task.": "タスクを更新する。",
"Make a custom API call to a specific endpoint": "特定のエンドポイントへのカスタム API コールを実行します。",
"First Name": "名",
"Last Name": "Last Name",
"Email": "Eメールアドレス",
"Phone": "電話番号",
"Company Name": "会社名",
"Website": "ウェブサイト",
"Tags": "タグ",
"Source": "ソース",
"Country": "国",
"City": "市区町村名",
"State": "都道府県:",
"Address": "住所",
"Postal Code": "郵便番号",
"Time Zone": "タイムゾーン",
"Contact ID": "連絡先ID",
"Contact": "お問い合わせ",
"Campaign": "キャンペーン",
"Workflow": "ワークフロー",
"Note": "メモ",
"User": "ユーザー",
"Search Query": "検索クエリ",
"Pipeline": "パイプライン",
"Stage": "ステージ",
"Title": "タイトル",
"Status": "Status",
"Assigned To": "割り当て先",
"Monetary Value": "金銭的価値",
"Opportunity": "機会",
"Due Date": "締切日",
"Description": "Description",
"Completed": "完了",
"Task": "タスク",
"Method": "方法",
"Headers": "ヘッダー",
"Query Parameters": "クエリパラメータ",
"Body": "本文",
"Response is Binary ?": "応答はバイナリですか?",
"No Error on Failure": "失敗時にエラーはありません",
"Timeout (in seconds)": "タイムアウト(秒)",
"When using a dynamic value, make sure to use the ISO-2 country code, and not the country name.": "動的な値を使用する場合は、必ず国名ではなくISO-2の国コードを使用してください。",
"The ID of the contact.": "連絡先のID。",
"The contact to use.": "使用する連絡先",
"The value you want to search for.": "検索する値。",
"The ID of the pipeline to use.": "使用するパイプラインのID。",
"The stage of the pipeline to use.": "使用するパイプラインの段階。",
"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 Contact": "新しい連絡先",
"Contact Created or Updated": "連絡先が作成または更新されました",
"New Form Submission": "新しいフォーム提出",
"New Opportunity": "新しい機会",
"Trigger when a new contact is added.": "新しい連絡先が追加されたときにトリガーします。",
"Trigger when a contact is created or updated.": "連絡先が作成または更新されたときにトリガーします。",
"Trigger when a form is submitted.": "フォームが送信されたときにトリガーします。",
"Trigger when a new opportunity is added.": "新しい商談が追加されたときにトリガーします。",
"Form": "フォーム",
"The form you want to use.": "使用するフォーム。"
}

View File

@@ -0,0 +1,89 @@
{
"Lead Connector - Go High Level": "Lood Connector - Ga hoog niveau",
"\n1. Go to the [Marketplace](https://marketplace.gohighlevel.com/) and sign up for a developer account.\n2. Navigate to **My Apps** and click on **Create App**.\n3. Provide app name.Then select **Private** as App Type, **Sub-Account** as Distribution Type. Click **Create App** Button.\n4. Add following scopes.\n - campaigns.readonly\n - contacts.write\n - contacts.readonly\n - locations.readonly\n - locations/tags.readonly\n - locations/tags.write\n - opportunities.readonly\n - opportunities.write\n - ": "\n1. Ga naar [Marketplace](https://marketplace.gohighlevel.com/) en meld je aan voor een ontwikkelaarsaccount.\n2. Navigeer naar **Mijn Apps** en klik op **Creëer App**.\n3. Geef de app naam. hen selecteert **Privé** als App Type, **Sub-Account** als Distribution Type. Klik op **App maken** Button.\n4. De volgende toepassingsgebieden toevoegen.\n - campagns.readonly\n - contacts.write\n - contacten. alleen\n - locaties.readonly\n - locaties/tags.readonly\n - locaties/tags. rite\n - kansen.readonly\n - kansen.schrijf\n - gebruikers. eadonly\n - workflows.readonly\n - forms.readonly\n5. Voeg redirect URL's toe.\n6. Maak nieuwe clientsleutel aan met geldige naam.Kopiëer Client-ID en Client-geheim.\n",
"Create Contact": "Contactpersoon aanmaken",
"Update Contact": "Contactpersoon bijwerken",
"Add Contact to Campaign": "Contact toevoegen aan campagne",
"Add Contact to Workflow": "Contact toevoegen aan Workflow",
"Add Note to Contact": "Voeg notitie toe aan contact",
"Search Contacts": "Contactpersonen zoeken",
"Create Opportunity": "Verkoopkans creëren",
"Update Opportunity": "Update Verkoopkans",
"Create Task": "Taak maken",
"Update Task": "Taak bijwerken",
"Custom API Call": "Custom API Call",
"Create a new contact.": "Maak een nieuw contact aan.",
"Update an existing contact.": "Bestaande contactpersoon bijwerken.",
"Add an existing contact to a campaign.": "Een bestaand contact toevoegen aan een campagne.",
"Add an existing contact to a workflow.": "Een bestaand contact toevoegen aan een workflow.",
"Add a new note to a contact.": "Nieuwe notitie toevoegen aan een contactpersoon.",
"Search for contacts with a search query.": "Zoek naar contacten met een zoekopdracht.",
"Create a new opportunity.": "Maak een nieuwe kans.",
"Updates an existing opportunity.": "Werkt een bestaande kans bij.",
"Create a new task.": "Creëer een nieuwe taak.",
"Update a task.": "Werk een taak bij.",
"Make a custom API call to a specific endpoint": "Maak een aangepaste API call naar een specifiek eindpunt",
"First Name": "Voornaam",
"Last Name": "Achternaam",
"Email": "E-mail",
"Phone": "Telefoonnummer",
"Company Name": "Bedrijfsnaam",
"Website": "website",
"Tags": "Labels",
"Source": "Bron",
"Country": "Land:",
"City": "Woonplaats",
"State": "Provincie",
"Address": "Adres:",
"Postal Code": "Postcode - Postcode",
"Time Zone": "Tijd Zone",
"Contact ID": "Contact ID",
"Contact": "Contactpersoon",
"Campaign": "Campagne",
"Workflow": "Werkstroom",
"Note": "Notitie",
"User": "Gebruiker",
"Search Query": "Zoek query",
"Pipeline": "Pijplijn",
"Stage": "Speelveld",
"Title": "Aanspreektitel",
"Status": "status",
"Assigned To": "Toegewezen Aan",
"Monetary Value": "Monetaire waarde",
"Opportunity": "Kans",
"Due Date": "Inleverdatum",
"Description": "Beschrijving",
"Completed": "Voltooid",
"Task": "Opdracht",
"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)",
"When using a dynamic value, make sure to use the ISO-2 country code, and not the country name.": "Let op dat bij het gebruik van een dynamische waarde de ISO-2-landcode gebruikt en niet de landnaam.",
"The ID of the contact.": "Het ID van de contactpersoon",
"The contact to use.": "De contactpersoon te gebruiken.",
"The value you want to search for.": "De waarde waarnaar u wilt zoeken",
"The ID of the pipeline to use.": "De ID van de pipeline om te gebruiken.",
"The stage of the pipeline to use.": "De fase van de pijpleiding om te gebruiken.",
"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 Contact": "Nieuw contactpersoon",
"Contact Created or Updated": "Contact aangemaakt of bijgewerkt",
"New Form Submission": "Nieuw formulier indienen",
"New Opportunity": "Nieuwe kans",
"Trigger when a new contact is added.": "Trigger wanneer een nieuwe contactpersoon wordt toegevoegd.",
"Trigger when a contact is created or updated.": "Trigger wanneer een contactpersoon is gemaakt of bijgewerkt.",
"Trigger when a form is submitted.": "Trigger wanneer een formulier wordt ingediend.",
"Trigger when a new opportunity is added.": "Trigger wanneer een nieuwe kans wordt toegevoegd.",
"Form": "Vorm",
"The form you want to use.": "Het formulier dat u wilt gebruiken."
}

View File

@@ -0,0 +1,89 @@
{
"Lead Connector - Go High Level": "Conector de Líder - Ir de Alto Nível",
"\n1. Go to the [Marketplace](https://marketplace.gohighlevel.com/) and sign up for a developer account.\n2. Navigate to **My Apps** and click on **Create App**.\n3. Provide app name.Then select **Private** as App Type, **Sub-Account** as Distribution Type. Click **Create App** Button.\n4. Add following scopes.\n - campaigns.readonly\n - contacts.write\n - contacts.readonly\n - locations.readonly\n - locations/tags.readonly\n - locations/tags.write\n - opportunities.readonly\n - opportunities.write\n - ": "\n1. Go to the [Marketplace](https://marketplace.gohighlevel.com/) and sign up for a developer account.\n2. Navigate to **My Apps** and click on **Create App**.\n3. Provide app name.Then select **Private** as App Type, **Sub-Account** as Distribution Type. Click **Create App** Button.\n4. Add following scopes.\n - campaigns.readonly\n - contacts.write\n - contacts.readonly\n - locations.readonly\n - locations/tags.readonly\n - locations/tags.write\n - opportunities.readonly\n - opportunities.write\n - users.readonly\n - workflows.readonly\n - forms.readonly\n5. Add redirect URLs.\n6. Create new Client key with valid name.Copy Client ID and Client Secret.\n",
"Create Contact": "Criar contato",
"Update Contact": "Atualizar contato",
"Add Contact to Campaign": "Adicionar Contato à Campanha",
"Add Contact to Workflow": "Adicionar contato ao fluxo de trabalho",
"Add Note to Contact": "Adicionar nota ao contato",
"Search Contacts": "Pesquisar contatos",
"Create Opportunity": "Criar Oportunidade",
"Update Opportunity": "Atualizar Oportunidade",
"Create Task": "Criar tarefa",
"Update Task": "Atualizar Tarefa",
"Custom API Call": "Chamada de API personalizada",
"Create a new contact.": "Criar um novo contato.",
"Update an existing contact.": "Atualizar um contato existente.",
"Add an existing contact to a campaign.": "Adicionar um contato existente a uma campanha.",
"Add an existing contact to a workflow.": "Adicionar um contato existente a um fluxo de trabalho.",
"Add a new note to a contact.": "Adicionar uma nova nota a um contato.",
"Search for contacts with a search query.": "Procurar por contatos com uma consulta de pesquisa.",
"Create a new opportunity.": "Crie uma nova oportunidade.",
"Updates an existing opportunity.": "Atualiza uma oportunidade existente.",
"Create a new task.": "Crie uma nova tarefa.",
"Update a task.": "Atualizar uma tarefa.",
"Make a custom API call to a specific endpoint": "Faça uma chamada de API personalizada para um ponto de extremidade específico",
"First Name": "Nome",
"Last Name": "Sobrenome",
"Email": "e-mail",
"Phone": "Smartphone",
"Company Name": "Nome da Empresa",
"Website": "site",
"Tags": "Etiquetas",
"Source": "fonte",
"Country": "País/região",
"City": "cidade",
"State": "Estado:",
"Address": "Endereço",
"Postal Code": "Código Postal",
"Time Zone": "Fuso Horário",
"Contact ID": "ID do contato",
"Contact": "contato",
"Campaign": "Campanha",
"Workflow": "Workflow",
"Note": "Observação",
"User": "Usuário",
"Search Query": "Consulta de Pesquisa",
"Pipeline": "Pipeline",
"Stage": "Etapa",
"Title": "Título",
"Status": "Estado",
"Assigned To": "Atribuído Para",
"Monetary Value": "Valor monetário",
"Opportunity": "Oportunidade",
"Due Date": "Data de vencimento",
"Description": "Descrição",
"Completed": "Concluído",
"Task": "Tarefas",
"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)",
"When using a dynamic value, make sure to use the ISO-2 country code, and not the country name.": "Ao usar um valor dinâmico, certifique-se de usar o código do país ISO-2, e não o nome do país.",
"The ID of the contact.": "O ID do contato.",
"The contact to use.": "O contato a ser usado",
"The value you want to search for.": "O valor que você deseja procurar.",
"The ID of the pipeline to use.": "A ID do pipeline a ser usado.",
"The stage of the pipeline to use.": "O estágio do pipeline a ser usado.",
"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 Contact": "Novo Contato",
"Contact Created or Updated": "Contato criado ou atualizado",
"New Form Submission": "Nova Submissão de Formulário",
"New Opportunity": "Nova Oportunidade",
"Trigger when a new contact is added.": "Aciona quando um novo contato é adicionado.",
"Trigger when a contact is created or updated.": "Aciona quando um contato é criado ou atualizado.",
"Trigger when a form is submitted.": "Disparar quando um formulário é submetido.",
"Trigger when a new opportunity is added.": "Acionar quando uma nova oportunidade for adicionada.",
"Form": "Formulário",
"The form you want to use.": "O formulário que você deseja usar."
}

View File

@@ -0,0 +1,88 @@
{
"LeadConnector": "LeadConnector",
"Lead Connector - Go High Level": "Ведущий коннектор - Перейти на высокий уровень",
"\n1. Go to the [Marketplace](https://marketplace.gohighlevel.com/) and sign up for a developer account.\n2. Navigate to **My Apps** and click on **Create App**.\n3. Provide app name.Then select **Private** as App Type, **Sub-Account** as Distribution Type. Click **Create App** Button.\n4. Add following scopes.\n - campaigns.readonly\n - contacts.write\n - contacts.readonly\n - locations.readonly\n - locations/tags.readonly\n - locations/tags.write\n - opportunities.readonly\n - opportunities.write\n - ": "\n1. Перейдите к [Marketplace](https://marketplace.gohighlevel.com/) и зарегистрируйте учетную запись разработчика.\n2. Перейдите в **Мои приложения** и нажмите на **Создать приложение**.\n3. Укажите имя приложения. hen Sie **Private** als App Type, **SubAccount** als Distribution Type. Нажмите **Создать App**.\n4. Добавить следующие области.\n - campaigns.readonly\n - contacts.write\n - контакты. eadonly\n - locations.readonly\n - locations/tags.readonly\n - locations/tags. rite\n - opportunities.readonly\n - Возможности.write\n - пользователей. eadonly\n - workflows.readonly\n - forms.readonly\n5. Добавить редирект URL.\n6. Создайте новый ключ клиента с корректным именем.Копируйте ID клиента и Client Secret.\n",
"Create Contact": "Создать контакт",
"Update Contact": "Обновить контакт",
"Add Contact to Campaign": "Добавить контакт в кампанию",
"Add Contact to Workflow": "Добавить контакт в рабочий процесс",
"Add Note to Contact": "Добавить заметку к контакту",
"Search Contacts": "Поиск контактов",
"Create Opportunity": "Создать сделку",
"Update Opportunity": "Обновить сделку",
"Create Task": "Создать задачу",
"Update Task": "Обновить задачу",
"Custom API Call": "Пользовательский вызов API",
"Create a new contact.": "Создать новый контакт.",
"Update an existing contact.": "Обновить существующий контакт.",
"Add an existing contact to a campaign.": "Добавить существующий контакт в кампанию.",
"Add an existing contact to a workflow.": "Добавить существующий контакт в рабочий процесс.",
"Add a new note to a contact.": "Добавить новую заметку к контакту.",
"Search for contacts with a search query.": "Поиск контактов с поисковым запросом.",
"Create a new opportunity.": "Создать новую возможность.",
"Updates an existing opportunity.": "Обновляет существующую возможность.",
"Create a new task.": "Создать новую задачу.",
"Update a task.": "Изменить задачу.",
"Make a custom API call to a specific endpoint": "Сделать пользовательский API вызов к определенной конечной точке",
"First Name": "First Name",
"Last Name": "Last Name",
"Email": "Почта",
"Phone": "Телефон",
"Company Name": "Название компании",
"Website": "Сайт",
"Tags": "Теги",
"Source": "Источник",
"Country": "Страна",
"City": "Город",
"State": "Область",
"Address": "Адрес",
"Postal Code": "Почтовый индекс",
"Time Zone": "Часовой пояс",
"Contact ID": "ID контакта",
"Contact": "Контакт",
"Campaign": "Кампания",
"Workflow": "Рабочий процесс",
"Note": "Примечание",
"User": "Пользователь",
"Search Query": "Поисковый запрос",
"Pipeline": "Трубопровод",
"Stage": "Этап",
"Title": "Заголовок",
"Status": "Status",
"Assigned To": "Назначено",
"Monetary Value": "Денежная стоимость",
"Opportunity": "Сделка",
"Due Date": "Срок сдачи",
"Description": "Description",
"Completed": "Выполнено",
"Task": "Задача",
"Method": "Метод",
"Headers": "Заголовки",
"Query Parameters": "Параметры запроса",
"Body": "Тело",
"No Error on Failure": "Нет ошибок при ошибке",
"Timeout (in seconds)": "Таймаут (в секундах)",
"When using a dynamic value, make sure to use the ISO-2 country code, and not the country name.": "При использовании динамического значения используйте код страны ISO-2, а не название страны.",
"The ID of the contact.": "Идентификатор контакта.",
"The contact to use.": "Используемый контакт.",
"The value you want to search for.": "Значение, которое вы хотите найти.",
"The ID of the pipeline to use.": "Идентификатор используемого трубопровода.",
"The stage of the pipeline to use.": "Этап трубопровода для использования.",
"Authorization headers are injected automatically from your connection.": "Заголовки авторизации включаются автоматически из вашего соединения.",
"GET": "ПОЛУЧИТЬ",
"POST": "ПОСТ",
"PATCH": "ПАТЧ",
"PUT": "ПОКУПИТЬ",
"DELETE": "УДАЛИТЬ",
"HEAD": "HEAD",
"New Contact": "Новый контакт",
"Contact Created or Updated": "Контакт создан или обновлён",
"New Form Submission": "Новая форма отправки",
"New Opportunity": "Новая сделка",
"Trigger when a new contact is added.": "Срабатывать при добавлении нового контакта.",
"Trigger when a contact is created or updated.": "Триггер при создании или обновлении контакта.",
"Trigger when a form is submitted.": "Запуск при отправке формы.",
"Trigger when a new opportunity is added.": "Срабатывать при добавлении новой возможности.",
"Form": "Форма",
"The form you want to use.": "Форма, которую вы хотите использовать."
}

View File

@@ -0,0 +1,89 @@
{
"Lead Connector - Go High Level": "Lead Connector - Go High Level",
"\n1. Go to the [Marketplace](https://marketplace.gohighlevel.com/) and sign up for a developer account.\n2. Navigate to **My Apps** and click on **Create App**.\n3. Provide app name.Then select **Private** as App Type, **Sub-Account** as Distribution Type. Click **Create App** Button.\n4. Add following scopes.\n - campaigns.readonly\n - contacts.write\n - contacts.readonly\n - locations.readonly\n - locations/tags.readonly\n - locations/tags.write\n - opportunities.readonly\n - opportunities.write\n - ": "\n1. Go to the [Marketplace](https://marketplace.gohighlevel.com/) and sign up for a developer account.\n2. Navigate to **My Apps** and click on **Create App**.\n3. Provide app name.Then select **Private** as App Type, **Sub-Account** as Distribution Type. Click **Create App** Button.\n4. Add following scopes.\n - campaigns.readonly\n - contacts.write\n - contacts.readonly\n - locations.readonly\n - locations/tags.readonly\n - locations/tags.write\n - opportunities.readonly\n - opportunities.write\n - users.readonly\n - workflows.readonly\n - forms.readonly\n5. Add redirect URLs.\n6. Create new Client key with valid name.Copy Client ID and Client Secret.\n",
"Create Contact": "Create Contact",
"Update Contact": "Update Contact",
"Add Contact to Campaign": "Add Contact to Campaign",
"Add Contact to Workflow": "Add Contact to Workflow",
"Add Note to Contact": "Add Note to Contact",
"Search Contacts": "Search Contacts",
"Create Opportunity": "Create Opportunity",
"Update Opportunity": "Update Opportunity",
"Create Task": "Create Task",
"Update Task": "Update Task",
"Custom API Call": "Custom API Call",
"Create a new contact.": "Create a new contact.",
"Update an existing contact.": "Update an existing contact.",
"Add an existing contact to a campaign.": "Add an existing contact to a campaign.",
"Add an existing contact to a workflow.": "Add an existing contact to a workflow.",
"Add a new note to a contact.": "Add a new note to a contact.",
"Search for contacts with a search query.": "Search for contacts with a search query.",
"Create a new opportunity.": "Create a new opportunity.",
"Updates an existing opportunity.": "Updates an existing opportunity.",
"Create a new task.": "Create a new task.",
"Update a task.": "Update a task.",
"Make a custom API call to a specific endpoint": "Make a custom API call to a specific endpoint",
"First Name": "First Name",
"Last Name": "Last Name",
"Email": "Email",
"Phone": "Phone",
"Company Name": "Company Name",
"Website": "Website",
"Tags": "Tags",
"Source": "Source",
"Country": "Country",
"City": "City",
"State": "State",
"Address": "Address",
"Postal Code": "Postal Code",
"Time Zone": "Time Zone",
"Contact ID": "Contact ID",
"Contact": "Contact",
"Campaign": "Campaign",
"Workflow": "Workflow",
"Note": "Note",
"User": "User",
"Search Query": "Search Query",
"Pipeline": "Pipeline",
"Stage": "Stage",
"Title": "Title",
"Status": "Status",
"Assigned To": "Assigned To",
"Monetary Value": "Monetary Value",
"Opportunity": "Opportunity",
"Due Date": "Due Date",
"Description": "Description",
"Completed": "Completed",
"Task": "Task",
"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)",
"When using a dynamic value, make sure to use the ISO-2 country code, and not the country name.": "When using a dynamic value, make sure to use the ISO-2 country code, and not the country name.",
"The ID of the contact.": "The ID of the contact.",
"The contact to use.": "The contact to use.",
"The value you want to search for.": "The value you want to search for.",
"The ID of the pipeline to use.": "The ID of the pipeline to use.",
"The stage of the pipeline to use.": "The stage of the pipeline to use.",
"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 Contact": "New Contact",
"Contact Created or Updated": "Contact Created or Updated",
"New Form Submission": "New Form Submission",
"New Opportunity": "New Opportunity",
"Trigger when a new contact is added.": "Trigger when a new contact is added.",
"Trigger when a contact is created or updated.": "Trigger when a contact is created or updated.",
"Trigger when a form is submitted.": "Trigger when a form is submitted.",
"Trigger when a new opportunity is added.": "Trigger when a new opportunity is added.",
"Form": "Form",
"The form you want to use.": "The form you want to use."
}

View File

@@ -0,0 +1,88 @@
{
"LeadConnector": "LeadConnector",
"Lead Connector - Go High Level": "Lead Connector - Go High Level",
"\n1. Go to the [Marketplace](https://marketplace.gohighlevel.com/) and sign up for a developer account.\n2. Navigate to **My Apps** and click on **Create App**.\n3. Provide app name.Then select **Private** as App Type, **Sub-Account** as Distribution Type. Click **Create App** Button.\n4. Add following scopes.\n - campaigns.readonly\n - contacts.write\n - contacts.readonly\n - locations.readonly\n - locations/tags.readonly\n - locations/tags.write\n - opportunities.readonly\n - opportunities.write\n - ": "\n1. Go to the [Marketplace](https://marketplace.gohighlevel.com/) and sign up for a developer account.\n2. Navigate to **My Apps** and click on **Create App**.\n3. Provide app name.Then select **Private** as App Type, **Sub-Account** as Distribution Type. Click **Create App** Button.\n4. Add following scopes.\n - campaigns.readonly\n - contacts.write\n - contacts.readonly\n - locations.readonly\n - locations/tags.readonly\n - locations/tags.write\n - opportunities.readonly\n - opportunities.write\n - users.readonly\n - workflows.readonly\n - forms.readonly\n5. Add redirect URLs.\n6. Create new Client key with valid name.Copy Client ID and Client Secret.\n",
"Create Contact": "Create Contact",
"Update Contact": "Update Contact",
"Add Contact to Campaign": "Add Contact to Campaign",
"Add Contact to Workflow": "Add Contact to Workflow",
"Add Note to Contact": "Add Note to Contact",
"Search Contacts": "Search Contacts",
"Create Opportunity": "Create Opportunity",
"Update Opportunity": "Update Opportunity",
"Create Task": "Create Task",
"Update Task": "Update Task",
"Custom API Call": "Custom API Call",
"Create a new contact.": "Create a new contact.",
"Update an existing contact.": "Update an existing contact.",
"Add an existing contact to a campaign.": "Add an existing contact to a campaign.",
"Add an existing contact to a workflow.": "Add an existing contact to a workflow.",
"Add a new note to a contact.": "Add a new note to a contact.",
"Search for contacts with a search query.": "Search for contacts with a search query.",
"Create a new opportunity.": "Create a new opportunity.",
"Updates an existing opportunity.": "Updates an existing opportunity.",
"Create a new task.": "Create a new task.",
"Update a task.": "Update a task.",
"Make a custom API call to a specific endpoint": "Make a custom API call to a specific endpoint",
"First Name": "First Name",
"Last Name": "Last Name",
"Email": "Email",
"Phone": "Phone",
"Company Name": "Tên công ty",
"Website": "Website",
"Tags": "Tags",
"Source": "Source",
"Country": "Country",
"City": "City",
"State": "State",
"Address": "Address",
"Postal Code": "Postal Code",
"Time Zone": "Time Zone",
"Contact ID": "Contact ID",
"Contact": "Contact",
"Campaign": "Campaign",
"Workflow": "Workflow",
"Note": "Note",
"User": "User",
"Search Query": "Search Query",
"Pipeline": "Pipeline",
"Stage": "Stage",
"Title": "Title",
"Status": "Status",
"Assigned To": "Assigned To",
"Monetary Value": "Monetary Value",
"Opportunity": "Opportunity",
"Due Date": "Due Date",
"Description": "Description",
"Completed": "Completed",
"Task": "Task",
"Method": "Method",
"Headers": "Headers",
"Query Parameters": "Query Parameters",
"Body": "Body",
"No Error on Failure": "No Error on Failure",
"Timeout (in seconds)": "Timeout (in seconds)",
"When using a dynamic value, make sure to use the ISO-2 country code, and not the country name.": "When using a dynamic value, make sure to use the ISO-2 country code, and not the country name.",
"The ID of the contact.": "The ID of the contact.",
"The contact to use.": "The contact to use.",
"The value you want to search for.": "The value you want to search for.",
"The ID of the pipeline to use.": "The ID of the pipeline to use.",
"The stage of the pipeline to use.": "The stage of the pipeline to use.",
"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 Contact": "New Contact",
"Contact Created or Updated": "Contact Created or Updated",
"New Form Submission": "New Form Submission",
"New Opportunity": "New Opportunity",
"Trigger when a new contact is added.": "Trigger when a new contact is added.",
"Trigger when a contact is created or updated.": "Trigger when a contact is created or updated.",
"Trigger when a form is submitted.": "Trigger when a form is submitted.",
"Trigger when a new opportunity is added.": "Trigger when a new opportunity is added.",
"Form": "Form",
"The form you want to use.": "The form you want to use."
}

View File

@@ -0,0 +1,89 @@
{
"Lead Connector - Go High Level": "Lead Connector - Go High Level",
"\n1. Go to the [Marketplace](https://marketplace.gohighlevel.com/) and sign up for a developer account.\n2. Navigate to **My Apps** and click on **Create App**.\n3. Provide app name.Then select **Private** as App Type, **Sub-Account** as Distribution Type. Click **Create App** Button.\n4. Add following scopes.\n - campaigns.readonly\n - contacts.write\n - contacts.readonly\n - locations.readonly\n - locations/tags.readonly\n - locations/tags.write\n - opportunities.readonly\n - opportunities.write\n - ": "\n1. Go to the [Marketplace](https://marketplace.gohighlevel.com/) and sign up for a developer account.\n2. Navigate to **My Apps** and click on **Create App**.\n3. Provide app name.Then select **Private** as App Type, **Sub-Account** as Distribution Type. Click **Create App** Button.\n4. Add following scopes.\n - campaigns.readonly\n - contacts.write\n - contacts.readonly\n - locations.readonly\n - locations/tags.readonly\n - locations/tags.write\n - opportunities.readonly\n - opportunities.write\n - users.readonly\n - workflows.readonly\n - forms.readonly\n5. Add redirect URLs.\n6. Create new Client key with valid name.Copy Client ID and Client Secret.\n",
"Create Contact": "Create Contact",
"Update Contact": "Update Contact",
"Add Contact to Campaign": "Add Contact to Campaign",
"Add Contact to Workflow": "Add Contact to Workflow",
"Add Note to Contact": "Add Note to Contact",
"Search Contacts": "Search Contacts",
"Create Opportunity": "Create Opportunity",
"Update Opportunity": "Update Opportunity",
"Create Task": "Create Task",
"Update Task": "Update Task",
"Custom API Call": "自定义 API 呼叫",
"Create a new contact.": "Create a new contact.",
"Update an existing contact.": "Update an existing contact.",
"Add an existing contact to a campaign.": "Add an existing contact to a campaign.",
"Add an existing contact to a workflow.": "Add an existing contact to a workflow.",
"Add a new note to a contact.": "Add a new note to a contact.",
"Search for contacts with a search query.": "Search for contacts with a search query.",
"Create a new opportunity.": "Create a new opportunity.",
"Updates an existing opportunity.": "Updates an existing opportunity.",
"Create a new task.": "Create a new task.",
"Update a task.": "Update a task.",
"Make a custom API call to a specific endpoint": "将一个自定义 API 调用到一个特定的终点",
"First Name": "First Name",
"Last Name": "名字",
"Email": "电子邮件地址",
"Phone": "Phone",
"Company Name": "Company Name",
"Website": "Website",
"Tags": "标签",
"Source": "来源",
"Country": "Country",
"City": "City",
"State": "State",
"Address": "Address",
"Postal Code": "Postal Code",
"Time Zone": "Time Zone",
"Contact ID": "Contact ID",
"Contact": "Contact",
"Campaign": "Campaign",
"Workflow": "Workflow",
"Note": "说明",
"User": "用户",
"Search Query": "Search Query",
"Pipeline": "Pipeline",
"Stage": "Stage",
"Title": "标题",
"Status": "状态",
"Assigned To": "Assigned To",
"Monetary Value": "Monetary Value",
"Opportunity": "Opportunity",
"Due Date": "Due Date",
"Description": "描述",
"Completed": "Completed",
"Task": "Task",
"Method": "方法",
"Headers": "信头",
"Query Parameters": "查询参数",
"Body": "正文内容",
"Response is Binary ?": "Response is Binary ?",
"No Error on Failure": "失败时没有错误",
"Timeout (in seconds)": "超时(秒)",
"When using a dynamic value, make sure to use the ISO-2 country code, and not the country name.": "When using a dynamic value, make sure to use the ISO-2 country code, and not the country name.",
"The ID of the contact.": "The ID of the contact.",
"The contact to use.": "The contact to use.",
"The value you want to search for.": "The value you want to search for.",
"The ID of the pipeline to use.": "The ID of the pipeline to use.",
"The stage of the pipeline to use.": "The stage of the pipeline to use.",
"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 Contact": "New Contact",
"Contact Created or Updated": "Contact Created or Updated",
"New Form Submission": "New Form Submission",
"New Opportunity": "New Opportunity",
"Trigger when a new contact is added.": "Trigger when a new contact is added.",
"Trigger when a contact is created or updated.": "Trigger when a contact is created or updated.",
"Trigger when a form is submitted.": "Trigger when a form is submitted.",
"Trigger when a new opportunity is added.": "Trigger when a new opportunity is added.",
"Form": "Form",
"The form you want to use.": "The form you want to use."
}

View File

@@ -0,0 +1,110 @@
import { createCustomApiCallAction } from '@activepieces/pieces-common';
import {
createPiece,
OAuth2PropertyValue,
PieceAuth,
} from '@activepieces/pieces-framework';
import { baseUrl, getContacts, leadConnectorHeaders } from './lib/common';
import { PieceCategory } from '@activepieces/shared';
import { addContactToCampaignAction } from './lib/actions/add-contact-to-campaign';
import { addContactToWorkflowAction } from './lib/actions/add-contact-to-workflow';
import { addNoteToContactAction } from './lib/actions/add-note-to-contact';
import { createContact } from './lib/actions/create-contact';
import { createOpportunityAction } from './lib/actions/create-opportunity';
import { createTaskAction } from './lib/actions/create-task';
import { searchContactsAction } from './lib/actions/search-contacts';
import { updateContactAction } from './lib/actions/update-contact';
import { updateOpportunityAction } from './lib/actions/update-opportunity';
import { updateTaskAction } from './lib/actions/update-task';
import { contactUpdated } from './lib/triggers/contact-updated';
import { newContact } from './lib/triggers/new-contact';
import { newFormSubmission } from './lib/triggers/new-form-submission';
import { newOpportunity } from './lib/triggers/new-opportunity';
const markdownDescription = `
1. Go to the [Marketplace](https://marketplace.gohighlevel.com/) and sign up for a developer account.
2. Navigate to **My Apps** and click on **Create App**.
3. Provide app name.Then select **Private** as App Type, **Sub-Account** as Distribution Type. Click **Create App** Button.
4. Add following scopes.
- campaigns.readonly
- contacts.write
- contacts.readonly
- locations.readonly
- locations/tags.readonly
- locations/tags.write
- opportunities.readonly
- opportunities.write
- users.readonly
- workflows.readonly
- forms.readonly
5. Add redirect URLs.
6. Create new Client key with valid name.Copy Client ID and Client Secret.
`;
export const leadConnectorAuth = PieceAuth.OAuth2({
authUrl: 'https://marketplace.gohighlevel.com/oauth/chooselocation',
tokenUrl: 'https://services.leadconnectorhq.com/oauth/token',
scope: [
'campaigns.readonly',
'contacts.write',
'contacts.readonly',
'locations.readonly',
'locations/tags.readonly',
'locations/tags.write',
'opportunities.readonly',
'opportunities.write',
'users.readonly',
'workflows.readonly',
'forms.readonly',
],
description: markdownDescription,
required: true,
async validate({ auth }) {
try {
await getContacts(auth);
return {
valid: true,
};
} catch (e) {
return {
valid: false,
error: 'Invalid API key.',
};
}
},
});
export const leadConnector = createPiece({
displayName: 'LeadConnector',
description: 'Lead Connector - Go High Level',
auth: leadConnectorAuth,
minimumSupportedRelease: '0.30.0',
logoUrl: 'https://cdn.activepieces.com/pieces/lead-connector.png',
categories: [PieceCategory.SALES_AND_CRM],
authors: ['kishanprmr', 'MoShizzle', 'abuaboud'],
actions: [
createContact,
updateContactAction,
addContactToCampaignAction,
addContactToWorkflowAction,
addNoteToContactAction,
searchContactsAction,
createOpportunityAction,
updateOpportunityAction,
createTaskAction,
updateTaskAction,
createCustomApiCallAction({
baseUrl: () => baseUrl,
auth: leadConnectorAuth,
authMapping: async (auth) => {
return {
Authorization: `Bearer ${(auth as OAuth2PropertyValue).access_token}`,
...leadConnectorHeaders,
};
},
}),
],
triggers: [newContact, contactUpdated, newFormSubmission, newOpportunity],
});

View File

@@ -0,0 +1,66 @@
import { createAction, OAuth2PropertyValue, Property } from '@activepieces/pieces-framework';
import { addContactToCampaign, getCampaigns, getContacts } from '../common';
import { leadConnectorAuth } from '../..';
export const addContactToCampaignAction = createAction({
auth: leadConnectorAuth,
name: 'add_contact_to_campaign',
displayName: 'Add Contact to Campaign',
description: 'Add an existing contact to a campaign.',
props: {
contact: Property.Dropdown({
auth: leadConnectorAuth,
displayName: 'Contact',
description: 'The contact to use.',
required: true,
refreshers: [],
options: async ({ auth }) => {
if (!auth)
return {
disabled: true,
options: [],
};
const contacts = await getContacts(auth as OAuth2PropertyValue);
return {
options: contacts.map((contact) => {
return {
label: contact.contactName,
value: contact.id,
};
}),
};
},
}),
campaign: Property.Dropdown({
auth: leadConnectorAuth,
displayName: 'Campaign',
required: true,
refreshers: [],
options: async ({ auth }) => {
if (!auth) {
return {
disabled: true,
options: [],
};
}
const campaigns = await getCampaigns(auth as OAuth2PropertyValue);
return {
options: campaigns.map((campaign: any) => {
return {
label: campaign.name,
value: campaign.id,
};
}),
};
},
}),
},
async run({ auth, propsValue }) {
const { contact, campaign } = propsValue;
return await addContactToCampaign(auth.access_token, contact, campaign);
},
});

View File

@@ -0,0 +1,66 @@
import { createAction, OAuth2PropertyValue, Property } from '@activepieces/pieces-framework';
import { addContactToWorkflow, getContacts, getWorkflows } from '../common';
import { leadConnectorAuth } from '../..';
export const addContactToWorkflowAction = createAction({
auth: leadConnectorAuth,
name: 'add_contact_to_workflow',
displayName: 'Add Contact to Workflow',
description: 'Add an existing contact to a workflow.',
props: {
contact: Property.Dropdown({
auth: leadConnectorAuth,
displayName: 'Contact',
description: 'The contact to use.',
required: true,
refreshers: [],
options: async ({ auth }) => {
if (!auth)
return {
disabled: true,
options: [],
};
const contacts = await getContacts(auth as OAuth2PropertyValue);
return {
options: contacts.map((contact) => {
return {
label: contact.contactName,
value: contact.id,
};
}),
};
},
}),
workflow: Property.Dropdown({
auth: leadConnectorAuth,
displayName: 'Workflow',
required: true,
refreshers: [],
options: async ({ auth }) => {
if (!auth) {
return {
disabled: true,
options: [],
};
}
const campaigns = await getWorkflows(auth as OAuth2PropertyValue);
return {
options: campaigns.map((campaign: any) => {
return {
label: campaign.name,
value: campaign.id,
};
}),
};
},
}),
},
async run({ auth, propsValue }) {
const { contact, workflow } = propsValue;
return await addContactToWorkflow(auth.access_token, contact, workflow);
},
});

View File

@@ -0,0 +1,76 @@
import { createAction, OAuth2PropertyValue, Property } from '@activepieces/pieces-framework';
import {
addNoteToContact,
getContacts,
getUsers,
} from '../common';
import { leadConnectorAuth } from '../..';
export const addNoteToContactAction = createAction({
auth: leadConnectorAuth,
name: 'add_note_to_contact',
displayName: 'Add Note to Contact',
description: 'Add a new note to a contact.',
props: {
contact: Property.Dropdown({
auth: leadConnectorAuth,
displayName: 'Contact',
description: 'The contact to use.',
required: true,
refreshers: [],
options: async ({ auth }) => {
if (!auth)
return {
disabled: true,
options: [],
};
const contacts = await getContacts(auth as OAuth2PropertyValue);
return {
options: contacts.map((contact) => {
return {
label: contact.contactName,
value: contact.id,
};
}),
};
},
}),
note: Property.ShortText({
displayName: 'Note',
required: true,
}),
user: Property.Dropdown({
auth: leadConnectorAuth,
displayName: 'User',
required: true,
refreshers: [],
options: async ({ auth }) => {
if (!auth)
return {
disabled: true,
options: [],
};
const users = await getUsers(auth as OAuth2PropertyValue);
return {
options: users.map((user: any) => {
return {
label: `${user.firstName} ${user.lastName}`,
value: user.id,
};
}),
};
},
}),
},
async run({ auth, propsValue }) {
const { contact, note, user } = propsValue;
return await addNoteToContact(auth.access_token, contact, {
body: note,
userId: user,
});
},
});

View File

@@ -0,0 +1,178 @@
import {
createAction,
OAuth2PropertyValue,
Property,
} from '@activepieces/pieces-framework';
import {
addContact,
Country,
getCountries,
getTags,
getTimezones,
LeadConnectorContactDto,
} from '../common';
import { leadConnectorAuth } from '../..';
import { z } from 'zod';
import { propsValidation } from '@activepieces/pieces-common';
export const createContact = createAction({
auth: leadConnectorAuth,
name: 'create_contact',
displayName: 'Create Contact',
description: 'Create a new contact.',
props: {
firstName: Property.ShortText({
displayName: 'First Name',
required: false,
}),
lastName: Property.ShortText({
displayName: 'Last Name',
required: false,
}),
email: Property.ShortText({
displayName: 'Email',
required: false,
}),
phone: Property.ShortText({
displayName: 'Phone',
required: false,
}),
companyName: Property.ShortText({
displayName: 'Company Name',
required: false,
}),
website: Property.ShortText({
displayName: 'Website',
required: false,
}),
tags: Property.MultiSelectDropdown({
auth: leadConnectorAuth,
displayName: 'Tags',
required: false,
refreshers: [],
options: async ({ auth }) => {
if (!auth)
return {
disabled: true,
options: [],
};
const tags = await getTags(auth as OAuth2PropertyValue);
return {
options: tags.map((tag) => {
return {
label: tag.name,
value: tag.name,
};
}),
};
},
}),
source: Property.ShortText({
displayName: 'Source',
required: false,
}),
country: Property.Dropdown({
auth: leadConnectorAuth,
displayName: 'Country',
description:
'When using a dynamic value, make sure to use the ISO-2 country code, and not the country name.',
required: false,
refreshers: [],
options: async () => {
const countries = await getCountries();
return {
options: countries.map((country: Country) => {
return {
label: country.name,
value: country.iso2Code,
};
}),
};
},
}),
city: Property.ShortText({
displayName: 'City',
required: false,
}),
state: Property.ShortText({
displayName: 'State',
required: false,
}),
address: Property.LongText({
displayName: 'Address',
required: false,
}),
postalCode: Property.ShortText({
displayName: 'Postal Code',
required: false,
}),
timezone: Property.Dropdown({
auth: leadConnectorAuth,
displayName: 'Time Zone',
required: false,
refreshers: [],
options: async ({ auth }) => {
if (!auth)
return {
disabled: true,
options: [],
};
const timezones = await getTimezones(auth as OAuth2PropertyValue);
return {
options: timezones.map((timezone) => {
return {
label: timezone,
value: timezone,
};
}),
};
},
}),
},
async run({ auth, propsValue }) {
await propsValidation.validateZod(propsValue, {
email: z.string().email().optional(),
phone: z.string().regex(/^\+?[1-9]\d{1,14}$/).optional(),
website: z.string().url().optional(),
});
const {
firstName,
lastName,
email,
phone,
companyName,
website,
tags,
source,
country,
city,
state,
address,
postalCode,
timezone,
} = propsValue;
const contact: LeadConnectorContactDto = {
firstName: firstName,
lastName: lastName,
email: email,
phone: phone,
companyName: companyName,
website: website,
tags: tags,
source: source,
country: country,
city: city,
state: state,
address1: address,
postalCode: postalCode,
timezone: timezone,
};
return await addContact(auth, contact);
},
});

View File

@@ -0,0 +1,179 @@
import {
createAction,
OAuth2PropertyValue,
Property,
} from '@activepieces/pieces-framework';
import {
createOpportunity,
getContacts,
getPipeline,
getPipelines,
getUsers,
LeadConnectorOpportunityStatus,
} from '../common';
import { leadConnectorAuth } from '../..';
import { z } from 'zod';
import { propsValidation } from '@activepieces/pieces-common';
export const createOpportunityAction = createAction({
auth: leadConnectorAuth,
name: 'create_opportunity',
displayName: 'Create Opportunity',
description: 'Create a new opportunity.',
props: {
pipeline: Property.Dropdown({
auth: leadConnectorAuth,
displayName: 'Pipeline',
description: 'The ID of the pipeline to use.',
required: true,
refreshers: [],
options: async ({ auth }) => {
if (!auth) {
return {
disabled: true,
options: [],
};
}
const pipelines = await getPipelines(auth as OAuth2PropertyValue);
return {
options: pipelines.map((pipeline: any) => {
return {
label: pipeline.name,
value: pipeline.id,
};
}),
};
},
}),
stage: Property.Dropdown({
auth: leadConnectorAuth,
displayName: 'Stage',
description: 'The stage of the pipeline to use.',
required: true,
refreshers: ['pipeline'],
options: async ({ auth, pipeline }) => {
if (!auth) {
return {
disabled: true,
options: [],
};
}
const pipelineObj = await getPipeline(
auth as OAuth2PropertyValue,
pipeline as string
);
return {
options: pipelineObj
? pipelineObj.stages.map((stage: any) => {
return {
label: stage.name,
value: stage.id,
};
})
: [],
};
},
}),
title: Property.ShortText({
displayName: 'Title',
required: true,
}),
contact: Property.Dropdown({
auth: leadConnectorAuth,
displayName: 'Contact',
description: 'The contact to use.',
required: true,
refreshers: [],
options: async ({ auth }) => {
if (!auth)
return {
disabled: true,
options: [],
};
const contacts = await getContacts(auth as OAuth2PropertyValue);
return {
options: contacts.map((contact) => {
return {
label: contact.contactName,
value: contact.id,
};
}),
};
},
}),
status: Property.Dropdown({
auth: leadConnectorAuth,
displayName: 'Status',
required: true,
refreshers: [],
options: async () => {
const statuses = Object.values(LeadConnectorOpportunityStatus);
return {
options: statuses.map((status) => {
return {
label: status.charAt(0).toUpperCase() + status.slice(1),
value: status,
};
}),
};
},
}),
assignedTo: Property.Dropdown({
auth: leadConnectorAuth,
displayName: 'Assigned To',
required: false,
refreshers: [],
options: async ({ auth }) => {
if (!auth)
return {
disabled: true,
options: [],
};
const users = await getUsers(auth as OAuth2PropertyValue);
return {
options: users.map((user: any) => {
return {
label: `${user.firstName} ${user.lastName}`,
value: user.id,
};
}),
};
},
}),
monetaryValue: Property.Number({
displayName: 'Monetary Value',
required: false,
}),
},
async run({ auth, propsValue }) {
await propsValidation.validateZod(propsValue, {
monetaryValue: z.number().optional(),
});
const {
pipeline,
stage,
contact,
status,
title,
assignedTo,
monetaryValue,
} = propsValue;
return await createOpportunity(auth, {
pipelineStageId: stage,
contactId: contact,
status: status,
name: title,
pipelineId: pipeline,
assignedTo: assignedTo,
monetaryValue: monetaryValue,
});
},
});

View File

@@ -0,0 +1,95 @@
import { createAction, OAuth2PropertyValue, Property } from '@activepieces/pieces-framework';
import {
createTask,
getContacts,
getUsers,
} from '../common';
import { leadConnectorAuth } from '../..';
export const createTaskAction = createAction({
auth: leadConnectorAuth,
name: 'create_task',
displayName: 'Create Task',
description: 'Create a new task.',
props: {
contact: Property.Dropdown({
auth: leadConnectorAuth,
displayName: 'Contact',
description: 'The contact to use.',
required: true,
refreshers: [],
options: async ({ auth }) => {
if (!auth)
return {
disabled: true,
options: [],
};
const contacts = await getContacts(auth as OAuth2PropertyValue);
return {
options: contacts.map((contact) => {
return {
label: contact.contactName,
value: contact.id,
};
}),
};
},
}),
title: Property.ShortText({
displayName: 'Title',
required: true,
}),
dueDate: Property.DateTime({
displayName: 'Due Date',
required: true,
}),
description: Property.ShortText({
displayName: 'Description',
required: false,
}),
assignedTo: Property.Dropdown({
auth: leadConnectorAuth,
displayName: 'Assigned To',
required: false,
refreshers: [],
options: async ({ auth }) => {
if (!auth)
return {
disabled: true,
options: [],
};
const users = await getUsers(auth as OAuth2PropertyValue);
return {
options: users.map((user: any) => {
return {
label: `${user.firstName} ${user.lastName}`,
value: user.id,
};
}),
};
},
}),
completed: Property.Checkbox({
displayName: 'Completed',
required: true,
defaultValue: false,
}),
},
async run({ auth, propsValue }) {
const { contact, title, dueDate, description, assignedTo, completed } =
propsValue;
return await createTask(auth.access_token, contact, {
title: title,
// Needs to be ISO string without milliseconds
dueDate: new Date(dueDate).toISOString().split('.')[0] + 'Z',
body: description,
assignedTo: assignedTo,
completed,
});
},
});

View File

@@ -0,0 +1,25 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import { getContacts } from '../common';
import { leadConnectorAuth } from '../..';
export const searchContactsAction = createAction({
auth: leadConnectorAuth,
name: 'search_contacts',
displayName: 'Search Contacts',
description: 'Search for contacts with a search query.',
props: {
query: Property.ShortText({
displayName: 'Search Query',
description: 'The value you want to search for.',
required: true,
}),
},
async run({ auth, propsValue }) {
const { query } = propsValue;
return await getContacts(auth, {
query: query,
});
},
});

View File

@@ -0,0 +1,184 @@
import {
createAction,
OAuth2PropertyValue,
Property,
} from '@activepieces/pieces-framework';
import {
Country,
getCountries,
getTags,
getTimezones,
LeadConnectorContactDto,
updateContact,
} from '../common';
import { leadConnectorAuth } from '../..';
import { z } from 'zod';
import { propsValidation } from '@activepieces/pieces-common';
export const updateContactAction = createAction({
auth: leadConnectorAuth,
name: 'update_contact',
displayName: 'Update Contact',
description: 'Update an existing contact.',
props: {
id: Property.ShortText({
displayName: 'Contact ID',
description: 'The ID of the contact.',
required: true,
}),
firstName: Property.ShortText({
displayName: 'First Name',
required: false,
}),
lastName: Property.ShortText({
displayName: 'Last Name',
required: false,
}),
email: Property.ShortText({
displayName: 'Email',
required: false,
}),
phone: Property.ShortText({
displayName: 'Phone',
required: false,
}),
companyName: Property.ShortText({
displayName: 'Company Name',
required: false,
}),
website: Property.ShortText({
displayName: 'Website',
required: false,
}),
tags: Property.MultiSelectDropdown({
auth: leadConnectorAuth,
displayName: 'Tags',
required: false,
refreshers: [],
options: async ({ auth }) => {
if (!auth)
return {
disabled: true,
options: [],
};
const tags = await getTags(auth as OAuth2PropertyValue);
return {
options: tags.map((tag) => {
return {
label: tag.name,
value: tag.name,
};
}),
};
},
}),
source: Property.ShortText({
displayName: 'Source',
required: false,
}),
country: Property.Dropdown({
auth: leadConnectorAuth,
displayName: 'Country',
description:
'When using a dynamic value, make sure to use the ISO-2 country code, and not the country name.',
required: false,
refreshers: [],
options: async () => {
const countries = await getCountries();
return {
options: countries.map((country: Country) => {
return {
label: country.name,
value: country.iso2Code,
};
}),
};
},
}),
city: Property.ShortText({
displayName: 'City',
required: false,
}),
state: Property.ShortText({
displayName: 'State',
required: false,
}),
address: Property.LongText({
displayName: 'Address',
required: false,
}),
postalCode: Property.ShortText({
displayName: 'Postal Code',
required: false,
}),
timezone: Property.Dropdown({
auth: leadConnectorAuth,
displayName: 'Time Zone',
required: false,
refreshers: [],
options: async ({ auth }) => {
if (!auth)
return {
disabled: true,
options: [],
};
const timezones = await getTimezones(auth as OAuth2PropertyValue);
return {
options: timezones.map((timezone) => {
return {
label: timezone,
value: timezone,
};
}),
};
},
}),
},
async run({ auth, propsValue }) {
await propsValidation.validateZod(propsValue, {
email: z.string().email().optional(),
phone: z.string().optional(),
website: z.string().url().optional(),
});
const {
id,
firstName,
lastName,
email,
phone,
companyName,
website,
tags,
source,
country,
city,
state,
address,
postalCode,
timezone,
} = propsValue;
const contact: LeadConnectorContactDto = {
firstName: firstName,
lastName: lastName,
email: email,
phone: phone,
companyName: companyName,
website: website,
tags: tags,
source: source,
country: country,
city: city,
state: state,
address1: address,
postalCode: postalCode,
timezone: timezone,
};
return await updateContact(auth.access_token, id, contact);
},
});

View File

@@ -0,0 +1,217 @@
import {
createAction,
OAuth2PropertyValue,
Property,
} from '@activepieces/pieces-framework';
import {
getContacts,
getOpportunities,
getOpportunity,
getPipeline,
getPipelines,
getUsers,
LeadConnectorOpportunityStatus,
updateOpportunity,
} from '../common';
import { leadConnectorAuth } from '../..';
import { z } from 'zod';
import { propsValidation } from '@activepieces/pieces-common';
export const updateOpportunityAction = createAction({
auth: leadConnectorAuth,
name: 'update_opportunity',
displayName: 'Update Opportunity',
description: 'Updates an existing opportunity.',
props: {
pipeline: Property.Dropdown({
auth: leadConnectorAuth,
displayName: 'Pipeline',
description: 'The ID of the pipeline to use.',
required: true,
refreshers: [],
options: async ({ auth }) => {
if (!auth) {
return {
disabled: true,
options: [],
};
}
const pipelines = await getPipelines(auth as OAuth2PropertyValue);
return {
options: pipelines.map((pipeline: any) => {
return {
label: pipeline.name,
value: pipeline.id,
};
}),
};
},
}),
opportunity: Property.Dropdown({
auth: leadConnectorAuth,
displayName: 'Opportunity',
required: true,
refreshers: ['pipeline'],
options: async ({ auth, pipeline }) => {
if (!auth) {
return {
disabled: true,
options: [],
};
}
const opportunities = await getOpportunities(
auth as OAuth2PropertyValue,
pipeline as string
);
return {
options: opportunities.map((opportunity: any) => {
return {
label: opportunity.name,
value: opportunity.id,
};
}),
};
},
}),
stage: Property.Dropdown({
auth: leadConnectorAuth,
displayName: 'Stage',
description: 'The stage of the pipeline to use.',
required: false,
refreshers: ['pipeline'],
options: async ({ auth, pipeline }) => {
if (!auth) {
return {
disabled: true,
options: [],
};
}
const pipelineObj = await getPipeline(
auth as OAuth2PropertyValue,
pipeline as string
);
return {
options: pipelineObj
? pipelineObj.stages.map((stage: any) => {
return {
label: stage.name,
value: stage.id,
};
})
: [],
};
},
}),
title: Property.ShortText({
displayName: 'Title',
required: false,
}),
contact: Property.Dropdown({
auth: leadConnectorAuth,
displayName: 'Contact',
description: 'The contact to use.',
required: false,
refreshers: [],
options: async ({ auth }) => {
if (!auth)
return {
disabled: true,
options: [],
};
const contacts = await getContacts(auth as OAuth2PropertyValue);
return {
options: contacts.map((contact) => {
return {
label: contact.contactName,
value: contact.id,
};
}),
};
},
}),
status: Property.Dropdown({
auth: leadConnectorAuth,
displayName: 'Status',
required: false,
refreshers: [],
options: async () => {
const statuses = Object.values(LeadConnectorOpportunityStatus);
return {
options: statuses.map((status) => {
return {
label: status.charAt(0).toUpperCase() + status.slice(1),
value: status,
};
}),
};
},
}),
assignedTo: Property.Dropdown({
auth: leadConnectorAuth,
displayName: 'Assigned To',
required: false,
refreshers: [],
options: async ({ auth }) => {
if (!auth)
return {
disabled: true,
options: [],
};
const users = await getUsers(auth as OAuth2PropertyValue);
return {
options: users.map((user: any) => {
return {
label: `${user.firstName} ${user.lastName}`,
value: user.id,
};
}),
};
},
}),
monetaryValue: Property.Number({
displayName: 'Monetary Value',
required: false,
}),
},
async run({ auth, propsValue }) {
await propsValidation.validateZod(propsValue, {
monetaryValue: z.number().optional(),
});
const {
pipeline,
opportunity,
stage,
contact,
status,
title,
assignedTo,
monetaryValue,
} = propsValue;
let originalData: any;
if (!title || !stage || !status)
originalData = await getOpportunity(
auth.access_token,
pipeline,
opportunity
);
return await updateOpportunity(auth.access_token, opportunity, {
pipelineId: pipeline ?? originalData.pipelineId,
pipelineStageId: stage ?? originalData.pipelineStageId,
contactId: contact,
status: status ?? originalData.status,
name: title ?? originalData.name,
assignedTo: assignedTo,
monetaryValue: monetaryValue,
});
},
});

View File

@@ -0,0 +1,142 @@
import {
createAction,
OAuth2PropertyValue,
Property,
} from '@activepieces/pieces-framework';
import {
getContacts,
getTask,
getTasks,
getUsers,
updateTask,
} from '../common';
import { leadConnectorAuth } from '../..';
export const updateTaskAction = createAction({
auth: leadConnectorAuth,
name: 'update_task',
displayName: 'Update Task',
description: 'Update a task.',
props: {
contact: Property.Dropdown({
auth: leadConnectorAuth,
displayName: 'Contact',
description: 'The contact to use.',
required: true,
refreshers: [],
options: async ({ auth }) => {
if (!auth)
return {
disabled: true,
options: [],
};
const contacts = await getContacts(auth as OAuth2PropertyValue);
return {
options: contacts.map((contact) => {
return {
label: contact.contactName,
value: contact.id,
};
}),
};
},
}),
task: Property.Dropdown({
auth: leadConnectorAuth,
displayName: 'Task',
required: true,
refreshers: ['contact'],
options: async ({ auth, contact }) => {
if (!auth || !contact)
return {
disabled: true,
options: [],
};
const tasks = await getTasks(
(auth as OAuth2PropertyValue).access_token,
contact as string
);
return {
options: tasks.map((task: any) => {
return {
label: task.title,
value: task.id,
};
}),
};
},
}),
title: Property.ShortText({
displayName: 'Title',
required: false,
}),
dueDate: Property.DateTime({
displayName: 'Due Date',
required: false,
}),
description: Property.ShortText({
displayName: 'Description',
required: false,
}),
assignedTo: Property.Dropdown({
auth: leadConnectorAuth,
displayName: 'Assigned To',
required: false,
refreshers: [],
options: async ({ auth }) => {
if (!auth)
return {
disabled: true,
options: [],
};
const users = await getUsers(auth as OAuth2PropertyValue);
return {
options: users.map((user: any) => {
return {
label: `${user.firstName} ${user.lastName}`,
value: user.id,
};
}),
};
},
}),
completed: Property.Checkbox({
displayName: 'Completed',
required: false,
defaultValue: false,
}),
},
async run({ auth, propsValue }) {
const {
contact,
task,
title,
dueDate,
description,
assignedTo,
completed,
} = propsValue;
// let originalData: any;
// if (!title || !dueDate)
// originalData = await getTask(auth.access_token, contact, task);
return await updateTask(auth.access_token, contact, task, {
title: title, //?? originalData.title,
// Needs to be ISO string without milliseconds
dueDate: dueDate, // ? formatDate(dueDate) : formatDate(originalData.dueDate),
body: description,
assignedTo: assignedTo,
completed,
});
},
});
function formatDate(date: string) {
return new Date(date).toISOString().split('.')[0] + 'Z';
}

View File

@@ -0,0 +1,571 @@
import {
httpClient,
HttpMethod,
AuthenticationType,
} from '@activepieces/pieces-common';
import { OAuth2PropertyValue } from '@activepieces/pieces-framework';
import jwt from 'jsonwebtoken';
export const baseUrl = 'https://services.leadconnectorhq.com';
export const leadConnectorHeaders = {
Version: '2021-07-28',
};
export async function getCampaigns(auth: OAuth2PropertyValue): Promise<any> {
const result = await httpClient.sendRequest({
url: `${baseUrl}/campaigns/`,
method: HttpMethod.GET,
headers: leadConnectorHeaders,
authentication: {
type: AuthenticationType.BEARER_TOKEN,
token: auth.access_token,
},
queryParams: {
// status: 'published',
locationId: auth.data['locationId'],
},
});
return result.body['campaigns'];
}
export async function getWorkflows(auth: OAuth2PropertyValue): Promise<any> {
const result = await httpClient.sendRequest({
url: `${baseUrl}/workflows/`,
method: HttpMethod.GET,
headers: leadConnectorHeaders,
authentication: {
type: AuthenticationType.BEARER_TOKEN,
token: auth.access_token,
},
queryParams: {
locationId: auth.data['locationId'],
},
});
return result.body['workflows'];
}
export async function getTimezones(
auth: OAuth2PropertyValue
): Promise<string[]> {
const result = await httpClient.sendRequest({
url: `${baseUrl}/locations/${auth.data['locationId']}/timezones`,
method: HttpMethod.GET,
headers: leadConnectorHeaders,
authentication: {
type: AuthenticationType.BEARER_TOKEN,
token: auth.access_token,
},
});
return result.body['timeZones'];
}
export async function getTags(auth: OAuth2PropertyValue): Promise<any[]> {
const result = await httpClient.sendRequest({
url: `${baseUrl}/locations/${auth.data['locationId']}/tags`,
method: HttpMethod.GET,
headers: leadConnectorHeaders,
authentication: {
type: AuthenticationType.BEARER_TOKEN,
token: auth.access_token,
},
});
return result.body['tags'];
}
export async function addContact(
auth: OAuth2PropertyValue,
contact: LeadConnectorContactDto
) {
contact.locationId = auth.data['locationId'];
const result = await httpClient.sendRequest({
url: `${baseUrl}/contacts/`,
method: HttpMethod.POST,
headers: leadConnectorHeaders,
authentication: {
type: AuthenticationType.BEARER_TOKEN,
token: auth.access_token,
},
body: contact,
});
return result.body['contact'];
}
export async function updateContact(
auth: string,
id: string,
data: LeadConnectorContactDto
) {
const result = await httpClient.sendRequest({
url: `${baseUrl}/contacts/${id}`,
method: HttpMethod.PUT,
headers: leadConnectorHeaders,
authentication: {
type: AuthenticationType.BEARER_TOKEN,
token: auth,
},
body: data,
});
return result.body['contact'];
}
export async function getCountries(): Promise<Country[]> {
const result: any = await httpClient.sendRequest({
url: `http://api.worldbank.org/v2/country?format=json&per_page=300`,
method: HttpMethod.GET,
});
const countries = result.body[1] as Country[];
// FREE PALESTINE
countries.splice(
countries.findIndex((country) => country.id == 'ISR'),
1,
{
id: 'PSE',
name: 'Palestine',
iso2Code: 'PS',
}
);
return countries;
}
export async function getContacts(
auth: OAuth2PropertyValue,
filters?: {
startAfterId?: string;
sortOrder?: 'asc' | 'desc';
sortBy?: 'date_added' | 'date_updated';
query?: string;
}
): Promise<LeadConnectorContact[]> {
const queryParams: any = {
limit: '100',
locationId: auth.data['locationId'],
};
if (filters?.startAfterId) queryParams.startAfterId = filters.startAfterId;
if (filters?.sortOrder) queryParams.order = filters.sortOrder;
if (filters?.sortBy) queryParams.sortBy = filters.sortBy;
if (filters?.query) queryParams.query = filters.query;
const response = await httpClient.sendRequest({
url: `${baseUrl}/contacts/`,
method: HttpMethod.GET,
headers: leadConnectorHeaders,
authentication: {
type: AuthenticationType.BEARER_TOKEN,
token: auth.access_token,
},
queryParams: queryParams,
});
const result = response.body['contacts'] as LeadConnectorContact[];
return result;
}
export async function getForms(
auth: OAuth2PropertyValue
): Promise<LeadConnectorForm[]> {
const response = await httpClient.sendRequest({
url: `${baseUrl}/forms/`,
method: HttpMethod.GET,
headers: leadConnectorHeaders,
authentication: {
type: AuthenticationType.BEARER_TOKEN,
token: auth.access_token,
},
queryParams: {
locationId: auth.data['locationId'],
},
});
const result = response.body['forms'] as LeadConnectorForm[];
return result;
}
export async function getFormSubmissions(
auth: OAuth2PropertyValue,
formId: string
): Promise<any[]> {
const response = await httpClient.sendRequest({
url: `${baseUrl}/forms/submissions/`,
method: HttpMethod.GET,
headers: leadConnectorHeaders,
authentication: {
type: AuthenticationType.BEARER_TOKEN,
token: auth.access_token,
},
queryParams: {
limit: '100',
formId,
locationId: auth.data['locationId'],
},
});
return response.body['submissions'];
}
export async function addContactToCampaign(
auth: string,
contact: string,
campaign: string
) {
const response = await httpClient.sendRequest({
url: `${baseUrl}/contacts/${contact}/campaigns/${campaign}`,
method: HttpMethod.POST,
headers: leadConnectorHeaders,
authentication: {
type: AuthenticationType.BEARER_TOKEN,
token: auth,
},
});
return response.body;
}
export async function addContactToWorkflow(
auth: string,
contact: string,
workflow: string
) {
const response = await httpClient.sendRequest({
url: `${baseUrl}/contacts/${contact}/workflow/${workflow}`,
method: HttpMethod.POST,
headers: leadConnectorHeaders,
authentication: {
type: AuthenticationType.BEARER_TOKEN,
token: auth,
},
});
return response.body;
}
export async function addNoteToContact(
auth: string,
contact: string,
data: {
body: string;
userId: string;
}
) {
const response = await httpClient.sendRequest({
url: `${baseUrl}/contacts/${contact}/notes/`,
method: HttpMethod.POST,
headers: leadConnectorHeaders,
authentication: {
type: AuthenticationType.BEARER_TOKEN,
token: auth,
},
body: data,
});
return response.body;
}
export async function getPipelines(auth: OAuth2PropertyValue): Promise<any[]> {
const response = await httpClient.sendRequest({
url: `${baseUrl}/opportunities/pipelines`,
method: HttpMethod.GET,
headers: leadConnectorHeaders,
authentication: {
type: AuthenticationType.BEARER_TOKEN,
token: auth.access_token,
},
queryParams: {
locationId: auth.data['locationId'],
},
});
const result = response.body['pipelines'];
return result;
}
export async function getPipeline(
auth: OAuth2PropertyValue,
pipelineId: string
): Promise<any> {
const pipelines = await getPipelines(auth);
return pipelines.find((pipeline: any) => pipeline.id == pipelineId);
}
export async function getOpportunities(
auth: OAuth2PropertyValue,
pipeline: string,
filters?: {
startAfterId?: string;
}
): Promise<any> {
const queryParams: any = {
limit: '100',
location_id: auth.data['locationId'],
pipeline_id: pipeline,
};
if (filters?.startAfterId) queryParams.startAfterId = filters.startAfterId;
const response = await httpClient.sendRequest({
url: `${baseUrl}/opportunities/search`,
method: HttpMethod.GET,
headers: leadConnectorHeaders,
authentication: {
type: AuthenticationType.BEARER_TOKEN,
token: auth.access_token,
},
queryParams: queryParams,
});
const result = response.body['opportunities'];
return result;
}
export async function getOpportunity(
auth: string,
pipeline: string,
opportunity: string
): Promise<any> {
const response = await httpClient.sendRequest({
url: `${baseUrl}/opportunities/${opportunity}`,
method: HttpMethod.GET,
headers: leadConnectorHeaders,
authentication: {
type: AuthenticationType.BEARER_TOKEN,
token: auth,
},
});
const result = response.body;
return result;
}
export async function createOpportunity(
auth: OAuth2PropertyValue,
data: LeadConnectorOpportunityDto
) {
data.locationId = auth.data['locationId'];
const result = await httpClient.sendRequest({
url: `${baseUrl}/opportunities/`,
method: HttpMethod.POST,
headers: leadConnectorHeaders,
authentication: {
type: AuthenticationType.BEARER_TOKEN,
token: auth.access_token,
},
body: data,
});
return result.body;
}
export async function updateOpportunity(
auth: string,
opportunity: string,
data: LeadConnectorOpportunityDto
) {
const result = await httpClient.sendRequest({
url: `${baseUrl}/opportunities/${opportunity}`,
method: HttpMethod.PUT,
headers: leadConnectorHeaders,
authentication: {
type: AuthenticationType.BEARER_TOKEN,
token: auth,
},
body: data,
});
return result.body;
}
export async function getUsers(auth: OAuth2PropertyValue): Promise<any> {
const response = await httpClient.sendRequest({
url: `${baseUrl}/users/search`,
method: HttpMethod.GET,
headers: leadConnectorHeaders,
authentication: {
type: AuthenticationType.BEARER_TOKEN,
token: auth.access_token,
},
queryParams: {
locationId: auth.data['locationId'],
companyId: auth.data['companyId'],
},
});
const result = response.body['users'];
return result;
}
export async function getTasks(auth: string, contact: string): Promise<any> {
const response = await httpClient.sendRequest({
url: `${baseUrl}/contacts/${contact}/tasks`,
method: HttpMethod.GET,
headers: leadConnectorHeaders,
authentication: {
type: AuthenticationType.BEARER_TOKEN,
token: auth,
},
});
const result = response.body['tasks'];
return result;
}
export async function getTask(
auth: string,
contact: string,
task: string
): Promise<any> {
const response = await httpClient.sendRequest({
url: `${baseUrl}/contacts/${contact}/tasks/${task}`,
method: HttpMethod.GET,
headers: leadConnectorHeaders,
authentication: {
type: AuthenticationType.BEARER_TOKEN,
token: auth,
},
});
const result = response.body;
return result;
}
export async function createTask(
auth: string,
contact: string,
task: LeadConnectorTaskDto
) {
const result = await httpClient.sendRequest({
url: `${baseUrl}/contacts/${contact}/tasks`,
method: HttpMethod.POST,
headers: leadConnectorHeaders,
authentication: {
type: AuthenticationType.BEARER_TOKEN,
token: auth,
},
body: task,
});
return result.body;
}
export async function updateTask(
auth: string,
contact: string,
task: string,
data: Partial<LeadConnectorTaskDto>
) {
const result = await httpClient.sendRequest({
url: `${baseUrl}/contacts/${contact}/tasks/${task}`,
method: HttpMethod.PUT,
headers: leadConnectorHeaders,
authentication: {
type: AuthenticationType.BEARER_TOKEN,
token: auth,
},
body: data,
});
return result.body;
}
export function getLocationIdFromToken(auth: OAuth2PropertyValue): {
authClass: string;
authClassId: string;
} {
const result = jwt.decode(auth.access_token);
return result as { authClass: string; authClassId: string };
}
export interface LeadConnectorContact {
id: string;
locationId: string;
firstName: string;
lastName: string;
contactName: string;
email: string;
phone: string;
companyName: string;
website: string;
tags: string[];
source: string;
country: string;
city: string;
state: string;
address: string;
postalCode: string;
timezone: string;
dnd: boolean;
type: string;
customField: any[];
dateAdded: string;
dateUpdated: string;
}
export interface LeadConnectorContactDto {
locationId?: string;
firstName?: string;
lastName?: string;
email?: string;
phone?: string;
companyName?: string;
website?: string;
tags?: string[];
source?: string;
country?: string;
city?: string;
state?: string;
address1?: string;
postalCode?: string;
timezone?: string;
}
export interface LeadConnectorForm {
id: string;
name: string;
}
export interface LeadConnectorTaskDto {
title: string;
dueDate: string;
body?: string;
assignedTo?: string;
completed?: boolean;
}
export interface LeadConnectorOpportunityDto {
name: string;
pipelineId: string;
pipelineStageId: string;
locationId?: string;
contactId?: string;
status: LeadConnectorOpportunityStatus;
monetaryValue?: number;
assignedTo?: string;
}
export enum LeadConnectorTaskStatus {
COMPLETED = 'completed',
INCOMPLETED = 'incompleted',
}
export enum LeadConnectorOpportunityStatus {
OPEN = 'open',
WON = 'won',
LOST = 'lost',
ABANDONED = 'abandoned',
}
export interface Country {
id: string;
name: string;
iso2Code: string;
}
export interface LeadConnectorLocation {
id: string;
name: string;
phone: string;
email: string;
country: string;
timezone: string;
}

View File

@@ -0,0 +1,68 @@
import { AppConnectionValueForAuthProperty, OAuth2PropertyValue, createTrigger } from '@activepieces/pieces-framework';
import { TriggerStrategy } from '@activepieces/pieces-framework';
import {
DedupeStrategy,
Polling,
pollingHelper,
} from '@activepieces/pieces-common';
import { leadConnectorAuth } from '../..';
import { getContacts } from '../common';
const polling: Polling<AppConnectionValueForAuthProperty<typeof leadConnectorAuth>, unknown> = {
strategy: DedupeStrategy.TIMEBASED,
items: async ({ auth }) => {
const currentValues =
(await getContacts(auth, {
sortBy: 'date_updated',
sortOrder: 'asc',
})) ?? [];
return currentValues.map((contact) => {
return {
epochMilliSeconds: new Date(contact.dateUpdated).getTime(),
data: contact,
};
});
},
};
export const contactUpdated = createTrigger({
auth: leadConnectorAuth,
name: 'contact_updated',
displayName: 'Contact Created or Updated',
description: 'Trigger when a contact is created or updated.',
props: {},
type: TriggerStrategy.POLLING,
sampleData: {},
onEnable: async (context) => {
await pollingHelper.onEnable(polling, {
auth: context.auth,
store: context.store,
propsValue: context.propsValue,
});
},
onDisable: async (context) => {
await pollingHelper.onDisable(polling, {
auth: context.auth,
store: context.store,
propsValue: context.propsValue,
});
},
run: async (context) => {
return await pollingHelper.poll(polling, {
auth: context.auth,
store: context.store,
propsValue: context.propsValue,
files: context.files,
});
},
test: async (context) => {
return await pollingHelper.test(polling, {
auth: context.auth,
store: context.store,
propsValue: context.propsValue,
files: context.files,
});
},
});

View File

@@ -0,0 +1,58 @@
import { AppConnectionValueForAuthProperty, OAuth2PropertyValue, createTrigger } from '@activepieces/pieces-framework';
import { TriggerStrategy } from '@activepieces/pieces-framework';
import {
DedupeStrategy,
Polling,
pollingHelper,
} from '@activepieces/pieces-common';
import { leadConnectorAuth } from '../..';
import { getContacts } from '../common';
const polling: Polling<AppConnectionValueForAuthProperty<typeof leadConnectorAuth>, unknown> = {
strategy: DedupeStrategy.LAST_ITEM,
items: async ({ auth, lastItemId }) => {
const currentValues =
(await getContacts(auth, {
startAfterId: lastItemId as string,
sortOrder: 'asc',
})) ?? [];
return currentValues.map((contact) => {
return {
id: contact.id,
data: contact,
};
});
},
};
export const newContact = createTrigger({
auth: leadConnectorAuth,
name: 'new_contact',
displayName: 'New Contact',
description: 'Trigger when a new contact is added.',
props: {},
type: TriggerStrategy.POLLING,
sampleData: {},
onEnable: async (context) => {
await pollingHelper.onEnable(polling, {
auth: context.auth,
store: context.store,
propsValue: context.propsValue,
});
},
onDisable: async (context) => {
await pollingHelper.onDisable(polling, {
auth: context.auth,
store: context.store,
propsValue: context.propsValue,
});
},
run: async (context) => {
return await pollingHelper.poll(polling, context);
},
test: async (context) => {
return await pollingHelper.test(polling, context);
},
});

View File

@@ -0,0 +1,91 @@
import { AppConnectionValueForAuthProperty, OAuth2PropertyValue, Property, createTrigger } from '@activepieces/pieces-framework';
import { TriggerStrategy } from '@activepieces/pieces-framework';
import {
DedupeStrategy,
Polling,
pollingHelper,
} from '@activepieces/pieces-common';
import { leadConnectorAuth } from '../..';
import { getFormSubmissions, getForms } from '../common';
const polling: Polling<AppConnectionValueForAuthProperty<typeof leadConnectorAuth>, { form: string }> = {
strategy: DedupeStrategy.LAST_ITEM,
items: async ({ auth, propsValue }) => {
const currentValues =
(await getFormSubmissions(auth, propsValue.form)) ?? [];
return currentValues.map((submission) => {
return {
id: submission.id,
data: submission,
};
});
},
};
export const newFormSubmission = createTrigger({
auth: leadConnectorAuth,
name: 'new_form_submission',
displayName: 'New Form Submission',
description: 'Trigger when a form is submitted.',
props: {
form: Property.Dropdown({
auth: leadConnectorAuth,
displayName: 'Form',
description: 'The form you want to use.',
required: true,
refreshers: [],
options: async ({ auth }) => {
if (!auth)
return {
disabled: true,
options: [],
};
const forms = await getForms(auth as OAuth2PropertyValue);
return {
options: forms.map((form) => {
return {
label: form.name,
value: form.id,
};
}),
};
},
}),
},
type: TriggerStrategy.POLLING,
sampleData: {},
onEnable: async (context) => {
await pollingHelper.onEnable(polling, {
auth: context.auth,
store: context.store,
propsValue: context.propsValue,
});
},
onDisable: async (context) => {
await pollingHelper.onDisable(polling, {
auth: context.auth,
store: context.store,
propsValue: context.propsValue,
});
},
run: async (context) => {
return await pollingHelper.poll(polling, {
auth: context.auth,
store: context.store,
propsValue: context.propsValue,
files: context.files,
});
},
test: async (context) => {
return await pollingHelper.test(polling, {
auth: context.auth,
store: context.store,
propsValue: context.propsValue,
files: context.files,
});
},
});

View File

@@ -0,0 +1,93 @@
import { AppConnectionValueForAuthProperty, OAuth2PropertyValue, Property, createTrigger } from '@activepieces/pieces-framework';
import { TriggerStrategy } from '@activepieces/pieces-framework';
import {
DedupeStrategy,
Polling,
pollingHelper,
} from '@activepieces/pieces-common';
import { leadConnectorAuth } from '../..';
import { getOpportunities, getPipelines } from '../common';
const polling: Polling<AppConnectionValueForAuthProperty<typeof leadConnectorAuth>, { pipeline: string }> = {
strategy: DedupeStrategy.LAST_ITEM,
items: async ({ auth, propsValue, lastItemId }) => {
const currentValues =
(await getOpportunities(auth, propsValue.pipeline, {
startAfterId: lastItemId as string | undefined,
})) ?? [];
return currentValues.map((opportunity: any) => {
return {
id: opportunity.id,
data: opportunity,
};
});
},
};
export const newOpportunity = createTrigger({
auth: leadConnectorAuth,
name: 'new_opportunity',
displayName: 'New Opportunity',
description: 'Trigger when a new opportunity is added.',
props: {
pipeline: Property.Dropdown({
auth: leadConnectorAuth,
displayName: 'Pipeline',
description: 'The ID of the pipeline to use.',
required: true,
refreshers: [],
options: async ({ auth }) => {
if (!auth) {
return {
disabled: true,
options: [],
};
}
const pipelines = await getPipelines(auth as OAuth2PropertyValue);
return {
options: pipelines.map((pipeline: any) => {
return {
label: pipeline.name,
value: pipeline.id,
};
}),
};
},
}),
},
type: TriggerStrategy.POLLING,
sampleData: {},
onEnable: async (context) => {
await pollingHelper.onEnable(polling, {
auth: context.auth,
store: context.store,
propsValue: context.propsValue,
});
},
onDisable: async (context) => {
await pollingHelper.onDisable(polling, {
auth: context.auth,
store: context.store,
propsValue: context.propsValue,
});
},
run: async (context) => {
return await pollingHelper.poll(polling, {
auth: context.auth,
store: context.store,
propsValue: context.propsValue,
files: context.files,
});
},
test: async (context) => {
return await pollingHelper.test(polling, {
auth: context.auth,
store: context.store,
propsValue: context.propsValue,
files: context.files,
});
},
});