Add Activepieces integration for workflow automation
- Add Activepieces fork with SmoothSchedule custom piece - Create integrations app with Activepieces service layer - Add embed token endpoint for iframe integration - Create Automations page with embedded workflow builder - Add sidebar visibility fix for embed mode - Add list inactive customers endpoint to Public API - Include SmoothSchedule triggers: event created/updated/cancelled - Include SmoothSchedule actions: create/update/cancel events, list resources/services/customers 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,90 @@
|
||||
{
|
||||
"Folk is a CRM for building relationships at scale. Manage your contacts, companies, and relationships in one place.": "Folk ist ein CRM für den Aufbau von Beziehungen nach Maßstab. Verwalten Sie Ihre Kontakte, Unternehmen und Beziehungen an einem Ort.",
|
||||
"Your Folk API key. You can view and manage your API keys in your workspace settings under the \"API\" section at https://app.folk.app/apps/contacts/network/settings/api-keys": "Ihr Folk-API-Schlüssel. Sie können Ihre API-Schlüssel in Ihren Workspace-Einstellungen unter \"API\" unter https://app.folk.app/apps/contacts/network/settings/api-keys anzeigen und verwalten",
|
||||
"Create Company": "Firma erstellen",
|
||||
"Update Company": "Firma aktualisieren",
|
||||
"Create Person": "Person erstellen",
|
||||
"Update Person": "Person aktualisieren",
|
||||
"Find Company": "Firma finden",
|
||||
"Get Company": "Firma holen",
|
||||
"List People": "Personen auflisten",
|
||||
"Get Person": "Person holen",
|
||||
"Create a new company in your Folk workspace. You can add emails, links, phone numbers, and assign it to a group.": "Erstellen Sie eine neue Firma in Ihrem Arbeitsbereich Folk. Sie können E-Mails, Links, Telefonnummern hinzufügen und einer Gruppe zuordnen.",
|
||||
"Update an existing company in your Folk workspace. Select the company from the dropdown to update its details.": "Aktualisieren Sie ein bestehendes Unternehmen in Ihrem Arbeitsbereich Folk. Wählen Sie das Unternehmen aus der Dropdown-Liste aus, um seine Details zu aktualisieren.",
|
||||
"Create a new person in your Folk workspace. You can link them to a company, add contact details, and assign to a group.": "Erstellen Sie eine neue Person in Ihrem Folk-Arbeitsbereich. Sie können sie mit einem Unternehmen verknüpfen, Kontaktdaten hinzufügen und einer Gruppe zuweisen.",
|
||||
"Update an existing person in your Folk workspace with new information.": "Aktualisieren Sie eine vorhandene Person in Ihrem Folk-Arbeitsbereich mit neuen Informationen.",
|
||||
"Search for companies in your Folk workspace by name or email address.": "Suchen Sie nach Firmen in Ihrem Arbeitsbereich nach Namen oder E-Mail-Adresse.",
|
||||
"Retrieve detailed information about a company from your Folk workspace.": "Rufen Sie detaillierte Informationen über ein Unternehmen aus Ihrem Arbeitsbereich ab.",
|
||||
"Retrieve a paginated list of people in your Folk workspace with optional filtering.": "Rufen Sie eine paginierte Liste von Personen in Ihrem Folk-Arbeitsbereich mit optionaler Filterung ab.",
|
||||
"Retrieve detailed information about a person from your Folk workspace.": "Rufen Sie detaillierte Informationen über eine Person aus Ihrem Arbeitsbereich ab.",
|
||||
"Company Name": "Firmenname",
|
||||
"Description": "Beschreibung",
|
||||
"Industry": "Industrie",
|
||||
"Addresses": "Adressen",
|
||||
"Emails": "E-Mails",
|
||||
"Phone Numbers": "Telefonnummern",
|
||||
"URLs": "URLs",
|
||||
"Group ID": "Gruppen-ID",
|
||||
"Company": "Firma",
|
||||
"First Name": "Vorname",
|
||||
"Last Name": "Nachname",
|
||||
"Full Name": "Voller Name",
|
||||
"Birthday": "Geburtstag",
|
||||
"Job Title": "Job Titel",
|
||||
"Company Names": "Firmennamen",
|
||||
"Companies": "Firmen",
|
||||
"Person": "Person",
|
||||
"Search Query": "Suchanfrage",
|
||||
"Limit": "Limit",
|
||||
"Cursor": "Cursor",
|
||||
"Filter Combinator": "Filterkombinator",
|
||||
"Name Filter": "Namensfilter",
|
||||
"Email Filter": "E-Mail-Filter",
|
||||
"The name of the company": "Der Name der Firma",
|
||||
"A short description of the company": "Eine kurze Beschreibung des Unternehmens",
|
||||
"The industry the company operates in": "Die Branche, in der das Unternehmen tätig ist",
|
||||
"Physical addresses for the company. The first address is primary.": "Physikalische Adressen für das Unternehmen. Die erste Adresse ist die primäre Adresse.",
|
||||
"Email addresses for the company. The first email is primary.": "E-Mail-Adressen für das Unternehmen. Die erste E-Mail ist primär.",
|
||||
"Phone numbers for the company. The first phone is primary.": "Telefonnummern für das Unternehmen. Das erste Telefon ist primär.",
|
||||
"Website URLs for the company. The first URL is primary.": "Website-URLs für das Unternehmen. Die erste URL ist primär.",
|
||||
"Enter a Folk group ID (e.g., grp_abc123). Groups help you organize your contacts.": "Geben Sie eine Folk Group ID ein (z.B. grp_abc123). Gruppen helfen Ihnen, Ihre Kontakte zu organisieren.",
|
||||
"Select a company from your Folk workspace.": "Wählen Sie eine Firma aus Ihrem Arbeitsbereich Folk.",
|
||||
"The first name of the person": "Der Vorname der Person",
|
||||
"The last name of the person": "Der Nachname der Person",
|
||||
"The full name of the person (alternative to first/last)": "Der vollständige Name der Person (Alternative zur Vor/Letzten)",
|
||||
"A short description of the person": "Eine kurze Beschreibung der Person",
|
||||
"The birthday in YYYY-MM-DD format": "Geburtstag im Format JJJJJ-MM-TT",
|
||||
"The job title of the person": "Der Job-Titel der Person",
|
||||
"The names of companies to associate with the person. The first company will be primary.": "Die Namen der Unternehmen, die mit der Person assoziiert werden sollen.",
|
||||
"Select companies to associate with the person.": "Wählen Sie Unternehmen aus, die mit der Person assoziiert werden sollen.",
|
||||
"Physical addresses for the person. The first address is primary.": "Physikalische Adressen für die Person. Die erste Adresse ist primär.",
|
||||
"Email addresses for the person. The first email is primary.": "E-Mail-Adresse für die Person. Die erste E-Mail ist primär.",
|
||||
"Phone numbers for the person. The first phone is primary.": "Telefonnummern für die Person. Das erste Telefon ist primär.",
|
||||
"Website URLs for the person. The first URL is primary.": "Website-URLs für die Person. Die erste URL ist primär.",
|
||||
"Select a person from your Folk workspace.": "Wählen Sie eine Person aus Ihrem Folk-Arbeitsbereich.",
|
||||
"Company names to create or associate with. Companies will be created if they don't exist.": "Firmennamen zum Erstellen oder Verbinden mit Unternehmen werden erstellt, wenn sie nicht existieren.",
|
||||
"Enter company name or email to search for": "Firmenname oder E-Mail eingeben um zu suchen",
|
||||
"The number of items to return (1-100)": "Die Anzahl der zurückzugebenden Artikel (1-100)",
|
||||
"A cursor for pagination. Use the nextLink value from a previous response.": "Ein Cursor für die Seiteneingabe. Verwenden Sie den nextLink-Wert einer vorherigen Antwort.",
|
||||
"The logical operator to combine multiple filters": "Der logische Operator, um mehrere Filter zu kombinieren",
|
||||
"Filter by person name (contains)": "Nach Personennamen filtern (enthält)",
|
||||
"Filter by email address (contains)": "Nach E-Mail-Adresse filtern (enthält)",
|
||||
"AND": "UND",
|
||||
"OR": "ODER",
|
||||
"Company Added": "Firma hinzugefügt",
|
||||
"Company Removed": "Firma entfernt",
|
||||
"Company Updated": "Firma aktualisiert",
|
||||
"Company Groups Updated": "Unternehmensgruppen aktualisiert",
|
||||
"Person Added": "Person hinzugefügt",
|
||||
"Person Removed": "Person entfernt",
|
||||
"Person Updated": "Person aktualisiert",
|
||||
"Person Groups Updated": "Personengruppen aktualisiert",
|
||||
"Fires when a new company is added to your Folk workspace.": "Feuert ab, wenn eine neue Firma Ihrem Arbeitsbereich hinzugefügt wird.",
|
||||
"Fires when a company is removed from your Folk workspace.": "Feuert ab, wenn eine Firma aus Ihrem Folk-Arbeitsbereich entfernt wird.",
|
||||
"Fires when a company is updated in your Folk workspace.": "Feuert ab, wenn eine Firma in Ihrem Arbeitsbereich \"Folk\" aktualisiert wird.",
|
||||
"Fires when a company's group assignments are updated in your Folk workspace.": "Feuer, wenn die Aufgaben einer Unternehmensgruppe im Arbeitsbereich Folk aktualisiert werden.",
|
||||
"Fires when a new person is added to your Folk workspace.": "Feuert ab, wenn eine neue Person deinem Arbeitsbereich hinzugefügt wird.",
|
||||
"Fires when a person is removed from your Folk workspace.": "Feuert ab, wenn eine Person aus Ihrem Folk-Arbeitsbereich entfernt wird.",
|
||||
"Fires when a person is updated in your Folk workspace.": "Feuert ab, wenn eine Person im Arbeitsbereich Folk aktualisiert wird.",
|
||||
"Fires when a person's group assignments are updated in your Folk workspace.": "Feuer, wenn die Gruppenzuordnungen einer Person im Arbeitsbereich Folk aktualisiert werden."
|
||||
}
|
||||
@@ -0,0 +1,90 @@
|
||||
{
|
||||
"Folk is a CRM for building relationships at scale. Manage your contacts, companies, and relationships in one place.": "Folk es un CRM para construir relaciones a escala. Gestione sus contactos, empresas y relaciones en un solo lugar.",
|
||||
"Your Folk API key. You can view and manage your API keys in your workspace settings under the \"API\" section at https://app.folk.app/apps/contacts/network/settings/api-keys": "Su clave API popular. Puede ver y administrar sus claves API en la configuración de su espacio de trabajo en la sección \"API\" en https://app.folk.app/apps/contacts/network/settings/api-keys",
|
||||
"Create Company": "Crear empresa",
|
||||
"Update Company": "Actualizar Compañía",
|
||||
"Create Person": "Crear Persona",
|
||||
"Update Person": "Actualizar Persona",
|
||||
"Find Company": "Buscar empresa",
|
||||
"Get Company": "Obtener empresa",
|
||||
"List People": "Listar Personas",
|
||||
"Get Person": "Obtener Persona",
|
||||
"Create a new company in your Folk workspace. You can add emails, links, phone numbers, and assign it to a group.": "Crea una nueva empresa en tu área de trabajo popular. Puedes añadir correos electrónicos, enlaces, números de teléfono y asignarlo a un grupo.",
|
||||
"Update an existing company in your Folk workspace. Select the company from the dropdown to update its details.": "Actualice una empresa existente en su espacio de trabajo popular. Seleccione la empresa en el menú desplegable para actualizar sus detalles.",
|
||||
"Create a new person in your Folk workspace. You can link them to a company, add contact details, and assign to a group.": "Crea una nueva persona en tu espacio de trabajo popular. Puedes enlazarlos a una empresa, añadir datos de contacto y asignar a un grupo.",
|
||||
"Update an existing person in your Folk workspace with new information.": "Actualice una persona existente en su área de trabajo con nueva información.",
|
||||
"Search for companies in your Folk workspace by name or email address.": "Buscar empresas en su espacio de trabajo popular por nombre o dirección de correo electrónico.",
|
||||
"Retrieve detailed information about a company from your Folk workspace.": "Recupere información detallada sobre una empresa de su espacio de trabajo popular.",
|
||||
"Retrieve a paginated list of people in your Folk workspace with optional filtering.": "Recupere una lista paginada de personas en su espacio de trabajo popular con filtrado opcional.",
|
||||
"Retrieve detailed information about a person from your Folk workspace.": "Recupere información detallada sobre una persona de su espacio de trabajo popular.",
|
||||
"Company Name": "Nombre De La Empresa",
|
||||
"Description": "Descripción",
|
||||
"Industry": "Industria",
|
||||
"Addresses": "Direcciones",
|
||||
"Emails": "Correos",
|
||||
"Phone Numbers": "Números de teléfono",
|
||||
"URLs": "URLs",
|
||||
"Group ID": "ID de grupo",
|
||||
"Company": "Empresa",
|
||||
"First Name": "Nombre",
|
||||
"Last Name": "Apellido",
|
||||
"Full Name": "Nombre completo",
|
||||
"Birthday": "Cumpleaños",
|
||||
"Job Title": "Trabajo",
|
||||
"Company Names": "Nombres de la empresa",
|
||||
"Companies": "Empresas",
|
||||
"Person": "Persona",
|
||||
"Search Query": "Buscar consulta",
|
||||
"Limit": "Límite",
|
||||
"Cursor": "Cursor",
|
||||
"Filter Combinator": "Filtrar combinador",
|
||||
"Name Filter": "Filtro de nombres",
|
||||
"Email Filter": "Filtro de Email",
|
||||
"The name of the company": "El nombre de la empresa",
|
||||
"A short description of the company": "Una breve descripción de la empresa",
|
||||
"The industry the company operates in": "La industria en la que opera la empresa",
|
||||
"Physical addresses for the company. The first address is primary.": "Direcciones físicas para la empresa. La primera dirección es primaria.",
|
||||
"Email addresses for the company. The first email is primary.": "Direcciones de correo electrónico para la empresa. El primer correo electrónico es principal.",
|
||||
"Phone numbers for the company. The first phone is primary.": "Números de teléfono para la empresa. El primer teléfono es primario.",
|
||||
"Website URLs for the company. The first URL is primary.": "URL del sitio web de la empresa. La primera URL es principal.",
|
||||
"Enter a Folk group ID (e.g., grp_abc123). Groups help you organize your contacts.": "Introduzca un ID de grupo folk (por ejemplo, grp_abc123). Los grupos le ayudan a organizar sus contactos.",
|
||||
"Select a company from your Folk workspace.": "Seleccione una empresa de su área de trabajo popular.",
|
||||
"The first name of the person": "El nombre de la persona",
|
||||
"The last name of the person": "El apellido de la persona",
|
||||
"The full name of the person (alternative to first/last)": "El nombre completo de la persona (alternativa al primero/último)",
|
||||
"A short description of the person": "Una breve descripción de la persona",
|
||||
"The birthday in YYYY-MM-DD format": "El cumpleaños en formato AAA-MM-DD",
|
||||
"The job title of the person": "El título del trabajo de la persona",
|
||||
"The names of companies to associate with the person. The first company will be primary.": "Los nombres de las empresas que se asocian con la persona, la primera empresa será primaria.",
|
||||
"Select companies to associate with the person.": "Seleccione las empresas a las que asociar con la persona.",
|
||||
"Physical addresses for the person. The first address is primary.": "Direcciones físicas para la persona. La primera dirección es primaria.",
|
||||
"Email addresses for the person. The first email is primary.": "Direcciones de correo electrónico para la persona. El primer correo es principal.",
|
||||
"Phone numbers for the person. The first phone is primary.": "Número de teléfono para la persona. El primer teléfono es primario.",
|
||||
"Website URLs for the person. The first URL is primary.": "URL del sitio web para la persona. La primera URL es principal.",
|
||||
"Select a person from your Folk workspace.": "Seleccione una persona de su área de trabajo popular.",
|
||||
"Company names to create or associate with. Companies will be created if they don't exist.": "Nombres de empresas para crear o asociar. Las empresas se crearán si no existen.",
|
||||
"Enter company name or email to search for": "Introduzca el nombre de la empresa o el correo electrónico para buscar",
|
||||
"The number of items to return (1-100)": "El número de elementos a devolver (1-100)",
|
||||
"A cursor for pagination. Use the nextLink value from a previous response.": "Un cursor para la paginación. Utilice el valor nextLink de una respuesta anterior.",
|
||||
"The logical operator to combine multiple filters": "El operador lógico para combinar múltiples filtros",
|
||||
"Filter by person name (contains)": "Filtrar por nombre de persona (contiene)",
|
||||
"Filter by email address (contains)": "Filtrar por dirección de correo electrónico (contiene)",
|
||||
"AND": "Y",
|
||||
"OR": "O",
|
||||
"Company Added": "Compañía añadida",
|
||||
"Company Removed": "Compañía eliminada",
|
||||
"Company Updated": "Empresa Actualizada",
|
||||
"Company Groups Updated": "Grupos de Compañía Actualizados",
|
||||
"Person Added": "Persona añadida",
|
||||
"Person Removed": "Persona eliminada",
|
||||
"Person Updated": "Persona actualizada",
|
||||
"Person Groups Updated": "Grupos de personas actualizados",
|
||||
"Fires when a new company is added to your Folk workspace.": "Inicia cuando una nueva empresa se agrega a su espacio de trabajo popular.",
|
||||
"Fires when a company is removed from your Folk workspace.": "Dispara cuando una empresa es removida de su espacio de trabajo popular.",
|
||||
"Fires when a company is updated in your Folk workspace.": "Inicia cuando una empresa se actualiza en su espacio de trabajo popular.",
|
||||
"Fires when a company's group assignments are updated in your Folk workspace.": "Dispara cuando las asignaciones de grupo de una empresa se actualizan en su área de trabajo popular.",
|
||||
"Fires when a new person is added to your Folk workspace.": "Dispara cuando una nueva persona se agrega a tu espacio de trabajo popular.",
|
||||
"Fires when a person is removed from your Folk workspace.": "Dispara cuando una persona es removida de su espacio de trabajo popular.",
|
||||
"Fires when a person is updated in your Folk workspace.": "Dispara cuando una persona se actualiza en su espacio de trabajo popular.",
|
||||
"Fires when a person's group assignments are updated in your Folk workspace.": "Dispara cuando las tareas de grupo de una persona se actualizan en su área de trabajo."
|
||||
}
|
||||
@@ -0,0 +1,90 @@
|
||||
{
|
||||
"Folk is a CRM for building relationships at scale. Manage your contacts, companies, and relationships in one place.": "Folk est un CRM pour construire des relations à l'échelle. Gérez vos contacts, vos entreprises et vos relations en un seul endroit.",
|
||||
"Your Folk API key. You can view and manage your API keys in your workspace settings under the \"API\" section at https://app.folk.app/apps/contacts/network/settings/api-keys": "Votre clé API Folk. Vous pouvez voir et gérer vos clés API dans vos paramètres de workspace dans la section \"API\" à https://app.folk.app/apps/contacts/network/settings/api-keys",
|
||||
"Create Company": "Créer une entreprise",
|
||||
"Update Company": "Mettre à jour la société",
|
||||
"Create Person": "Créer une personne",
|
||||
"Update Person": "Mettre à jour la personne",
|
||||
"Find Company": "Trouver une entreprise",
|
||||
"Get Company": "Obtenir la société",
|
||||
"List People": "Liste des personnes",
|
||||
"Get Person": "Obtenir une personne",
|
||||
"Create a new company in your Folk workspace. You can add emails, links, phone numbers, and assign it to a group.": "Créez une nouvelle entreprise dans votre espace de travail Folk. Vous pouvez ajouter des e-mails, des liens, des numéros de téléphone et l'assigner à un groupe.",
|
||||
"Update an existing company in your Folk workspace. Select the company from the dropdown to update its details.": "Mettez à jour une entreprise existante dans votre espace de travail Folk. Sélectionnez la société dans la liste déroulante pour mettre à jour ses détails.",
|
||||
"Create a new person in your Folk workspace. You can link them to a company, add contact details, and assign to a group.": "Créez une nouvelle personne dans votre espace de travail Folk. Vous pouvez la lier à une entreprise, ajouter des coordonnées et l'assigner à un groupe.",
|
||||
"Update an existing person in your Folk workspace with new information.": "Mettez à jour une personne existante dans votre espace de travail Folk avec de nouvelles informations.",
|
||||
"Search for companies in your Folk workspace by name or email address.": "Recherchez des entreprises dans votre espace de travail Folk par nom ou par adresse e-mail.",
|
||||
"Retrieve detailed information about a company from your Folk workspace.": "Récupérez des informations détaillées sur une entreprise dans votre espace de travail Folk.",
|
||||
"Retrieve a paginated list of people in your Folk workspace with optional filtering.": "Récupérez une liste paginée de personnes dans votre espace de travail Folk avec filtrage facultatif.",
|
||||
"Retrieve detailed information about a person from your Folk workspace.": "Récupérez des informations détaillées sur une personne dans votre espace de travail Folk.",
|
||||
"Company Name": "Nom de l’entreprise",
|
||||
"Description": "Libellé",
|
||||
"Industry": "Industrie",
|
||||
"Addresses": "Adresses",
|
||||
"Emails": "E-mails",
|
||||
"Phone Numbers": "Numéros de téléphone",
|
||||
"URLs": "URLs",
|
||||
"Group ID": "ID du groupe",
|
||||
"Company": "Entreprise",
|
||||
"First Name": "First Name",
|
||||
"Last Name": "Last Name",
|
||||
"Full Name": "Nom complet",
|
||||
"Birthday": "Date d'anniversaire",
|
||||
"Job Title": "Titre du poste",
|
||||
"Company Names": "Noms de la société",
|
||||
"Companies": "Entreprises",
|
||||
"Person": "Personne",
|
||||
"Search Query": "Requête de recherche",
|
||||
"Limit": "Limite",
|
||||
"Cursor": "Curseur",
|
||||
"Filter Combinator": "Combinateur de filtres",
|
||||
"Name Filter": "Filtre de nom",
|
||||
"Email Filter": "Filtre d'email",
|
||||
"The name of the company": "Le nom de la société",
|
||||
"A short description of the company": "Une courte description de la société",
|
||||
"The industry the company operates in": "L'industrie dans laquelle l'entreprise opère",
|
||||
"Physical addresses for the company. The first address is primary.": "Adresses physiques pour l'entreprise. La première adresse est primaire.",
|
||||
"Email addresses for the company. The first email is primary.": "Adresses e-mail pour l'entreprise. Le premier email est primaire.",
|
||||
"Phone numbers for the company. The first phone is primary.": "Numéros de téléphone pour l'entreprise. Le premier téléphone est principal.",
|
||||
"Website URLs for the company. The first URL is primary.": "URL du site web pour l'entreprise. La première URL est primaire.",
|
||||
"Enter a Folk group ID (e.g., grp_abc123). Groups help you organize your contacts.": "Entrez un ID de groupe populaire (par exemple, grp_abc123). Les groupes vous aident à organiser vos contacts.",
|
||||
"Select a company from your Folk workspace.": "Sélectionnez une entreprise dans votre espace de travail Folk.",
|
||||
"The first name of the person": "Le prénom de la personne",
|
||||
"The last name of the person": "Le nom de la personne",
|
||||
"The full name of the person (alternative to first/last)": "Le nom complet de la personne (alternative au premier/dernier)",
|
||||
"A short description of the person": "Une courte description de la personne",
|
||||
"The birthday in YYYY-MM-DD format": "L'anniversaire au format AAAA-MM-JJ",
|
||||
"The job title of the person": "Le titre du poste de la personne",
|
||||
"The names of companies to associate with the person. The first company will be primary.": "Le nom des entreprises à associer à la personne. La première entreprise sera primaire.",
|
||||
"Select companies to associate with the person.": "Sélectionnez les entreprises à associer à la personne.",
|
||||
"Physical addresses for the person. The first address is primary.": "Adresses physiques pour la personne. La première adresse est primaire.",
|
||||
"Email addresses for the person. The first email is primary.": "Adresses e-mail pour la personne. Le premier email est principal.",
|
||||
"Phone numbers for the person. The first phone is primary.": "Numéros de téléphone pour la personne. Le premier téléphone est principal.",
|
||||
"Website URLs for the person. The first URL is primary.": "URL du site web pour la personne. La première URL est primaire.",
|
||||
"Select a person from your Folk workspace.": "Sélectionnez une personne dans votre espace de travail Folk.",
|
||||
"Company names to create or associate with. Companies will be created if they don't exist.": "Les noms de la société à créer ou à associer. Les entreprises seront créées si elles n'existent pas.",
|
||||
"Enter company name or email to search for": "Entrez le nom de la société ou l'e-mail à rechercher",
|
||||
"The number of items to return (1-100)": "Le nombre d'articles à retourner (1-100)",
|
||||
"A cursor for pagination. Use the nextLink value from a previous response.": "Un curseur pour la pagination. Utilisez la valeur nextLink d'une réponse précédente.",
|
||||
"The logical operator to combine multiple filters": "L'opérateur logique pour combiner plusieurs filtres",
|
||||
"Filter by person name (contains)": "Filtrer par nom de personne (contient)",
|
||||
"Filter by email address (contains)": "Filtrer par adresse e-mail (contenu)",
|
||||
"AND": "ET",
|
||||
"OR": "OU",
|
||||
"Company Added": "Société ajoutée",
|
||||
"Company Removed": "Société retirée",
|
||||
"Company Updated": "Société mise à jour",
|
||||
"Company Groups Updated": "Groupes de la société mis à jour",
|
||||
"Person Added": "Personne ajoutée",
|
||||
"Person Removed": "Personne supprimée",
|
||||
"Person Updated": "Personne mise à jour",
|
||||
"Person Groups Updated": "Groupes de personnes mis à jour",
|
||||
"Fires when a new company is added to your Folk workspace.": "Tire lorsqu'une nouvelle entreprise est ajoutée à votre espace de travail Folk.",
|
||||
"Fires when a company is removed from your Folk workspace.": "Tire quand une entreprise est retirée de votre espace de travail Folk.",
|
||||
"Fires when a company is updated in your Folk workspace.": "Déclenche quand une entreprise est mise à jour dans votre espace de travail Folk.",
|
||||
"Fires when a company's group assignments are updated in your Folk workspace.": "Déclenche lorsque les affectations de groupe d'une entreprise sont mises à jour dans votre espace de travail Folk.",
|
||||
"Fires when a new person is added to your Folk workspace.": "Se déclenche lorsqu'une nouvelle personne est ajoutée à votre espace de travail Folk.",
|
||||
"Fires when a person is removed from your Folk workspace.": "Se déclenche lorsqu'une personne est retirée de votre espace de travail Folk.",
|
||||
"Fires when a person is updated in your Folk workspace.": "Se déclenche lorsqu'une personne est mise à jour dans votre espace de travail Folk.",
|
||||
"Fires when a person's group assignments are updated in your Folk workspace.": "Tire quand les affectations de groupe d'une personne sont mises à jour dans votre espace de travail Folk."
|
||||
}
|
||||
@@ -0,0 +1,90 @@
|
||||
{
|
||||
"Folk is a CRM for building relationships at scale. Manage your contacts, companies, and relationships in one place.": "Folk は大規模な関係を構築するための CRM です。連絡先、会社、関係を一箇所で管理します。",
|
||||
"Your Folk API key. You can view and manage your API keys in your workspace settings under the \"API\" section at https://app.folk.app/apps/contacts/network/settings/api-keys": "Folk APIキー。ワークスペースの設定で、https://app.folk.app/apps/contacts/network/settings/api-keys の \"API\" セクションでAPIキーを表示および管理できます。",
|
||||
"Create Company": "所属を作成",
|
||||
"Update Company": "所属を更新",
|
||||
"Create Person": "ユーザーを作成",
|
||||
"Update Person": "担当者を更新",
|
||||
"Find Company": "会社を検索",
|
||||
"Get Company": "会社を取得する",
|
||||
"List People": "人物一覧",
|
||||
"Get Person": "ユーザーを取得",
|
||||
"Create a new company in your Folk workspace. You can add emails, links, phone numbers, and assign it to a group.": "Folk ワークスペースで新しい会社を作成します。メール、リンク、電話番号を追加し、グループに割り当てることができます。",
|
||||
"Update an existing company in your Folk workspace. Select the company from the dropdown to update its details.": "Folk ワークスペースの既存の会社を更新します。ドロップダウンから会社を選択して詳細を更新します。",
|
||||
"Create a new person in your Folk workspace. You can link them to a company, add contact details, and assign to a group.": "Folk ワークスペースで新しい人を作成します。それらを会社にリンクし、連絡先の詳細を追加し、グループに割り当てることができます。",
|
||||
"Update an existing person in your Folk workspace with new information.": "新しい情報を使用して Folk ワークスペースの既存のユーザーを更新します。",
|
||||
"Search for companies in your Folk workspace by name or email address.": "Folk ワークスペースの会社を名前またはメールアドレスで検索します。",
|
||||
"Retrieve detailed information about a company from your Folk workspace.": "Folk ワークスペースから会社の詳細情報を取得します。",
|
||||
"Retrieve a paginated list of people in your Folk workspace with optional filtering.": "オプションのフィルタリングを使用して format@@0 ワークスペースにいる人物のページ付けリストを取得します。",
|
||||
"Retrieve detailed information about a person from your Folk workspace.": "フォークワークスペースから人に関する詳細情報を取得します。",
|
||||
"Company Name": "会社名",
|
||||
"Description": "説明",
|
||||
"Industry": "産業",
|
||||
"Addresses": "アドレス",
|
||||
"Emails": "E-mail",
|
||||
"Phone Numbers": "電話番号",
|
||||
"URLs": "URL",
|
||||
"Group ID": "グループID",
|
||||
"Company": "会社名",
|
||||
"First Name": "名",
|
||||
"Last Name": "Last Name",
|
||||
"Full Name": "フルネーム",
|
||||
"Birthday": "誕生日",
|
||||
"Job Title": "役職名",
|
||||
"Company Names": "会社名",
|
||||
"Companies": "会社名",
|
||||
"Person": "人",
|
||||
"Search Query": "検索クエリ",
|
||||
"Limit": "制限",
|
||||
"Cursor": "Cursor",
|
||||
"Filter Combinator": "組み合わせをフィルターする",
|
||||
"Name Filter": "名前フィルタ",
|
||||
"Email Filter": "メールフィルタ",
|
||||
"The name of the company": "会社名",
|
||||
"A short description of the company": "会社の簡単な説明",
|
||||
"The industry the company operates in": "会社が運営する産業",
|
||||
"Physical addresses for the company. The first address is primary.": "会社の住所。最初の住所はプライマリです。",
|
||||
"Email addresses for the company. The first email is primary.": "会社のメールアドレス。最初のメールはプライマリです。",
|
||||
"Phone numbers for the company. The first phone is primary.": "会社の電話番号。最初の電話番号は主要です。",
|
||||
"Website URLs for the company. The first URL is primary.": "会社のウェブサイトURL。最初のURLはプライマリです。",
|
||||
"Enter a Folk group ID (e.g., grp_abc123). Groups help you organize your contacts.": "フォークグループIDを入力してください(例:grp_abc123)。グループは連絡先を整理するのに役立ちます。",
|
||||
"Select a company from your Folk workspace.": "Folk ワークスペースから会社を選択します。",
|
||||
"The first name of the person": "その人の名",
|
||||
"The last name of the person": "その人の姓",
|
||||
"The full name of the person (alternative to first/last)": "人のフルネーム (first/lastに代わる)",
|
||||
"A short description of the person": "人物の簡単な説明",
|
||||
"The birthday in YYYY-MM-DD format": "YYYY-MM-DD形式の誕生日",
|
||||
"The job title of the person": "職名",
|
||||
"The names of companies to associate with the person. The first company will be primary.": "個人に関連付ける企業の名前。最初の会社が主要になります。",
|
||||
"Select companies to associate with the person.": "個人に関連付ける会社を選択します。",
|
||||
"Physical addresses for the person. The first address is primary.": "その人のための物理的な住所。最初の住所はプライマリです。",
|
||||
"Email addresses for the person. The first email is primary.": "ユーザーのメールアドレス。最初のメールはプライマリです。",
|
||||
"Phone numbers for the person. The first phone is primary.": "人物の電話番号。最初の電話番号は主要です。",
|
||||
"Website URLs for the person. The first URL is primary.": "ユーザのウェブサイトURL。最初のURLはプライマリです。",
|
||||
"Select a person from your Folk workspace.": "Folk ワークスペースから人を選択します。",
|
||||
"Company names to create or associate with. Companies will be created if they don't exist.": "作成または関連付ける会社名。存在しない場合、会社は作成されます。",
|
||||
"Enter company name or email to search for": "検索する会社名またはメールアドレスを入力してください",
|
||||
"The number of items to return (1-100)": "The number of items to return (1-100)",
|
||||
"A cursor for pagination. Use the nextLink value from a previous response.": "ページネーションのカーソル。前のレスポンスの nextLink 値を使用します。",
|
||||
"The logical operator to combine multiple filters": "複数のフィルタを組み合わせる論理演算子",
|
||||
"Filter by person name (contains)": "個人名でフィルター (含む)",
|
||||
"Filter by email address (contains)": "メールアドレスでフィルター (含まれるもの)",
|
||||
"AND": "AND",
|
||||
"OR": "OR",
|
||||
"Company Added": "所属追加",
|
||||
"Company Removed": "会社が削除されました",
|
||||
"Company Updated": "所属が更新されました",
|
||||
"Company Groups Updated": "会社グループが更新されました",
|
||||
"Person Added": "追加された人",
|
||||
"Person Removed": "削除された人",
|
||||
"Person Updated": "ユーザーが更新されました",
|
||||
"Person Groups Updated": "個人グループが更新されました",
|
||||
"Fires when a new company is added to your Folk workspace.": "新しい会社がFolkのワークスペースに追加されたときに発火します。",
|
||||
"Fires when a company is removed from your Folk workspace.": "会社が format@@0 ワークスペースから削除されたときに発火します。",
|
||||
"Fires when a company is updated in your Folk workspace.": "Folk ワークスペースで会社が更新されたときに発火します。",
|
||||
"Fires when a company's group assignments are updated in your Folk workspace.": "会社のグループの課題が format@@0 ワークスペースで更新されたときに発生します。",
|
||||
"Fires when a new person is added to your Folk workspace.": "新しいユーザーが format@@0 ワークスペースに追加されたときに発生します。",
|
||||
"Fires when a person is removed from your Folk workspace.": "ユーザーが format@@0 ワークスペースから削除されたときに発火します。",
|
||||
"Fires when a person is updated in your Folk workspace.": "ユーザーが format@@0 ワークスペースで更新されたときに発生します。",
|
||||
"Fires when a person's group assignments are updated in your Folk workspace.": "ユーザのグループ課題が format@@0 ワークスペースで更新されたときに発生します。"
|
||||
}
|
||||
@@ -0,0 +1,90 @@
|
||||
{
|
||||
"Folk is a CRM for building relationships at scale. Manage your contacts, companies, and relationships in one place.": "Folk is een CRM voor het opbouwen van relaties op schaal. Beheer uw contacten, bedrijven en relaties in één plaats.",
|
||||
"Your Folk API key. You can view and manage your API keys in your workspace settings under the \"API\" section at https://app.folk.app/apps/contacts/network/settings/api-keys": "Je Folk API-sleutel. Je kunt uw API-sleutels bekijken en beheren in je workspace instellingen onder de sectie \"API\" op https://app.folk.app/apps/contactpersonen/netwerk/settings/api-keys",
|
||||
"Create Company": "Bedrijf aanmaken",
|
||||
"Update Company": "Bedrijf bijwerken",
|
||||
"Create Person": "Maak persoon aan",
|
||||
"Update Person": "Update Persoon",
|
||||
"Find Company": "Bedrijf zoeken",
|
||||
"Get Company": "Bedrijf ophalen",
|
||||
"List People": "Mensen weergeven",
|
||||
"Get Person": "Verkrijg persoon",
|
||||
"Create a new company in your Folk workspace. You can add emails, links, phone numbers, and assign it to a group.": "Maak een nieuw bedrijf aan in uw Folk werkruimte. U kunt e-mails, links, telefoonnummers en toewijzen aan een groep.",
|
||||
"Update an existing company in your Folk workspace. Select the company from the dropdown to update its details.": "Een bestaand bedrijf in uw Folk werkruimte bijwerken. Selecteer het bedrijf uit de dropdown om de gegevens bij te werken.",
|
||||
"Create a new person in your Folk workspace. You can link them to a company, add contact details, and assign to a group.": "Maak een nieuwe persoon aan in je Folk werkruimte. Je kunt hem koppelen aan een bedrijf, voeg contactgegevens toe en wijs toe aan een groep.",
|
||||
"Update an existing person in your Folk workspace with new information.": "Werk een bestaande persoon in uw Folk workspace bij met nieuwe informatie.",
|
||||
"Search for companies in your Folk workspace by name or email address.": "Zoek naar bedrijven in uw Folk werkruimte op naam of e-mailadres.",
|
||||
"Retrieve detailed information about a company from your Folk workspace.": "Haal gedetailleerde informatie over een bedrijf op van uw Folk workspace.",
|
||||
"Retrieve a paginated list of people in your Folk workspace with optional filtering.": "Haal een gepagineerde lijst op van mensen in uw Folk werkruimte met optionele filtering.",
|
||||
"Retrieve detailed information about a person from your Folk workspace.": "Haal gedetailleerde informatie op over een persoon uit jouw volkswerkruimte.",
|
||||
"Company Name": "Bedrijfsnaam",
|
||||
"Description": "Beschrijving",
|
||||
"Industry": "Bedrijfstak",
|
||||
"Addresses": "Adres",
|
||||
"Emails": "E-mails",
|
||||
"Phone Numbers": "Telefoon nummers",
|
||||
"URLs": "URL's",
|
||||
"Group ID": "Groep ID",
|
||||
"Company": "Bedrijfsnaam",
|
||||
"First Name": "Voornaam",
|
||||
"Last Name": "Achternaam",
|
||||
"Full Name": "Volledige naam",
|
||||
"Birthday": "Verjaardag",
|
||||
"Job Title": "Job titel",
|
||||
"Company Names": "Bedrijfsnaam",
|
||||
"Companies": "Bedrijven",
|
||||
"Person": "Persoon",
|
||||
"Search Query": "Zoek query",
|
||||
"Limit": "Limiet",
|
||||
"Cursor": "Cursor",
|
||||
"Filter Combinator": "Filter Combinator",
|
||||
"Name Filter": "Naam filter",
|
||||
"Email Filter": "E-mail filter",
|
||||
"The name of the company": "De naam van het bedrijf",
|
||||
"A short description of the company": "Een korte beschrijving van het bedrijf",
|
||||
"The industry the company operates in": "De industrie waarin het bedrijf actief is",
|
||||
"Physical addresses for the company. The first address is primary.": "Fysieke adressen van het bedrijf. Het eerste adres is primair.",
|
||||
"Email addresses for the company. The first email is primary.": "E-mailadressen voor het bedrijf. De eerste e-mail is primair.",
|
||||
"Phone numbers for the company. The first phone is primary.": "Telefoonnummers voor het bedrijf. De eerste telefoon is primair.",
|
||||
"Website URLs for the company. The first URL is primary.": "Website URL's voor dit bedrijf. De eerste URL is primair.",
|
||||
"Enter a Folk group ID (e.g., grp_abc123). Groups help you organize your contacts.": "Voer een Folk groep ID in (bijv. grp_abc123). Groepen helpen u uw contactpersonen te organiseren.",
|
||||
"Select a company from your Folk workspace.": "Selecteer een bedrijf uit uw Volkswerkruimte.",
|
||||
"The first name of the person": "De voornaam van de persoon",
|
||||
"The last name of the person": "De achternaam van de persoon",
|
||||
"The full name of the person (alternative to first/last)": "De volledige naam van de persoon (alternatief voor eerste/laatst)",
|
||||
"A short description of the person": "Een korte beschrijving van de persoon",
|
||||
"The birthday in YYYY-MM-DD format": "Het geboortedatum in JJJJ-MM-DD formaat",
|
||||
"The job title of the person": "De job titel van de persoon",
|
||||
"The names of companies to associate with the person. The first company will be primary.": "De namen van bedrijven die geassocieerd worden met de persoon. Het eerste bedrijf zal primair zijn.",
|
||||
"Select companies to associate with the person.": "Selecteer bedrijven om met deze persoon te verbinden.",
|
||||
"Physical addresses for the person. The first address is primary.": "Fysieke adressen van de persoon. Het eerste adres is primair.",
|
||||
"Email addresses for the person. The first email is primary.": "E-mailadressen voor de persoon. Het eerste e-mailadres is primair.",
|
||||
"Phone numbers for the person. The first phone is primary.": "Telefoonnummers voor de persoon. De eerste telefoon is primair.",
|
||||
"Website URLs for the person. The first URL is primary.": "Website URL's voor deze persoon. De eerste URL is primair.",
|
||||
"Select a person from your Folk workspace.": "Selecteer een persoon uit uw volkswerkruimte.",
|
||||
"Company names to create or associate with. Companies will be created if they don't exist.": "Bedrijfsnaam om aan te maken of te koppelen. Bedrijven worden aangemaakt als ze niet bestaan.",
|
||||
"Enter company name or email to search for": "Voer bedrijfsnaam of e-mailadres in om naar te zoeken",
|
||||
"The number of items to return (1-100)": "Het aantal items om te retourneren (1-100)",
|
||||
"A cursor for pagination. Use the nextLink value from a previous response.": "Een cursor voor paginering. Gebruik de volgendeLink-waarde van een vorige reactie.",
|
||||
"The logical operator to combine multiple filters": "De logische operator om meerdere filters te combineren",
|
||||
"Filter by person name (contains)": "Filter op naam (bevatten)",
|
||||
"Filter by email address (contains)": "Filter op e-mailadres (bevat)",
|
||||
"AND": "en",
|
||||
"OR": "OF",
|
||||
"Company Added": "Bedrijf toegevoegd",
|
||||
"Company Removed": "Bedrijf verwijderd",
|
||||
"Company Updated": "Bedrijf bijgewerkt",
|
||||
"Company Groups Updated": "Bedrijfsgroepen bijgewerkt",
|
||||
"Person Added": "Persoon toegevoegd",
|
||||
"Person Removed": "Persoon verwijderd",
|
||||
"Person Updated": "Persoon bijgewerkt",
|
||||
"Person Groups Updated": "Persoon groepen bijgewerkt",
|
||||
"Fires when a new company is added to your Folk workspace.": "Vuurt wanneer een nieuw bedrijf is toegevoegd aan uw Folk werkruimte.",
|
||||
"Fires when a company is removed from your Folk workspace.": "Vuurt wanneer een bedrijf wordt verwijderd uit uw Folk werkruimte.",
|
||||
"Fires when a company is updated in your Folk workspace.": "Vuurt wanneer een bedrijf wordt bijgewerkt in uw Folk werkruimte.",
|
||||
"Fires when a company's group assignments are updated in your Folk workspace.": "Vuurt wanneer de groepsopdrachten van een bedrijf worden bijgewerkt in uw Folk werkruimte.",
|
||||
"Fires when a new person is added to your Folk workspace.": "Schiet wanneer een nieuwe persoon is toegevoegd aan jouw Folk werkruimte.",
|
||||
"Fires when a person is removed from your Folk workspace.": "Schiet wanneer een persoon verwijderd wordt uit je Volkswerkruimte.",
|
||||
"Fires when a person is updated in your Folk workspace.": "Vuurt wanneer een persoon wordt bijgewerkt in jouw Folk werkruimte.",
|
||||
"Fires when a person's group assignments are updated in your Folk workspace.": "Vuurt wanneer iemands groepsopdrachten worden bijgewerkt in uw Folk werkruimte."
|
||||
}
|
||||
@@ -0,0 +1,90 @@
|
||||
{
|
||||
"Folk is a CRM for building relationships at scale. Manage your contacts, companies, and relationships in one place.": "Folk é um CRM para construir relações em escala. Gerencie seus contatos, empresas e relacionamentos em um só lugar.",
|
||||
"Your Folk API key. You can view and manage your API keys in your workspace settings under the \"API\" section at https://app.folk.app/apps/contacts/network/settings/api-keys": "Sua chave Folk API. Você pode visualizar e gerenciar suas chaves de API nas configurações do seu espaço de trabalho na seção \"API\" em https://app.folk.app/apps/contacts/network/settings/api-keys",
|
||||
"Create Company": "Criar Empresa",
|
||||
"Update Company": "Atualizar Empresa",
|
||||
"Create Person": "Criar Pessoa",
|
||||
"Update Person": "Atualizar pessoa",
|
||||
"Find Company": "Encontrar empresa",
|
||||
"Get Company": "Obter Empresa",
|
||||
"List People": "Listar pessoas",
|
||||
"Get Person": "Obter Pessoa",
|
||||
"Create a new company in your Folk workspace. You can add emails, links, phone numbers, and assign it to a group.": "Criar uma nova empresa em sua área de trabalho Folk. Você pode adicionar e-mails, links, números de telefone e atribuí-los a um grupo.",
|
||||
"Update an existing company in your Folk workspace. Select the company from the dropdown to update its details.": "Atualize uma empresa existente no seu espaço de trabalho Folk. Selecione a empresa no menu suspenso para atualizar seus detalhes.",
|
||||
"Create a new person in your Folk workspace. You can link them to a company, add contact details, and assign to a group.": "Criar uma nova pessoa no seu espaço de trabalho Folk. Você pode vinculá-la a uma empresa, adicionar detalhes de contato e atribuir a um grupo.",
|
||||
"Update an existing person in your Folk workspace with new information.": "Atualize uma pessoa existente no seu espaço de trabalho Folk com novas informações.",
|
||||
"Search for companies in your Folk workspace by name or email address.": "Pesquise empresas no seu espaço de trabalho Folk por nome ou endereço de e-mail.",
|
||||
"Retrieve detailed information about a company from your Folk workspace.": "Recupere informações detalhadas sobre uma empresa do seu espaço de trabalho Folk.",
|
||||
"Retrieve a paginated list of people in your Folk workspace with optional filtering.": "Recupere uma lista paginada de pessoas em seu espaço de trabalho Folk com filtragem opcional.",
|
||||
"Retrieve detailed information about a person from your Folk workspace.": "Recupere informações detalhadas sobre uma pessoa da sua área de trabalho Folk.",
|
||||
"Company Name": "Nome da Empresa",
|
||||
"Description": "Descrição",
|
||||
"Industry": "Indústria",
|
||||
"Addresses": "Endereços",
|
||||
"Emails": "e-mails",
|
||||
"Phone Numbers": "Números de telefone",
|
||||
"URLs": "Links",
|
||||
"Group ID": "Grupo ID",
|
||||
"Company": "Empresas",
|
||||
"First Name": "Nome",
|
||||
"Last Name": "Sobrenome",
|
||||
"Full Name": "Nome Completo",
|
||||
"Birthday": "Aniversário",
|
||||
"Job Title": "Título do Cargo",
|
||||
"Company Names": "Nomes da empresa",
|
||||
"Companies": "Empresas",
|
||||
"Person": "Pessoa",
|
||||
"Search Query": "Consulta de Pesquisa",
|
||||
"Limit": "Limitar",
|
||||
"Cursor": "Cursor",
|
||||
"Filter Combinator": "Filtrar Combinador",
|
||||
"Name Filter": "Filtro de Nome",
|
||||
"Email Filter": "Filtro de e-mail",
|
||||
"The name of the company": "O nome da empresa",
|
||||
"A short description of the company": "Uma breve descrição da empresa",
|
||||
"The industry the company operates in": "O setor no qual a empresa opera",
|
||||
"Physical addresses for the company. The first address is primary.": "Endereços físicos para a empresa. O primeiro endereço é principal.",
|
||||
"Email addresses for the company. The first email is primary.": "Endereços de e-mail para a empresa. O primeiro e-mail é principal.",
|
||||
"Phone numbers for the company. The first phone is primary.": "Números de telefone para a empresa. O primeiro telefone é principal.",
|
||||
"Website URLs for the company. The first URL is primary.": "URLs de sites para a empresa. O primeiro URL é principal.",
|
||||
"Enter a Folk group ID (e.g., grp_abc123). Groups help you organize your contacts.": "Informe um ID Folk (p. ex., grp_abc123). Grupos ajudam você a organizar seus contatos.",
|
||||
"Select a company from your Folk workspace.": "Selecionar uma empresa do seu espaço de trabalho Folk.",
|
||||
"The first name of the person": "O primeiro nome da pessoa",
|
||||
"The last name of the person": "O sobrenome da pessoa",
|
||||
"The full name of the person (alternative to first/last)": "O nome completo da pessoa (alternativa ao primeiro/última)",
|
||||
"A short description of the person": "Uma breve descrição da pessoa",
|
||||
"The birthday in YYYY-MM-DD format": "A data de aniversário no formato YYYY-MM-DD",
|
||||
"The job title of the person": "O título do cargo da pessoa",
|
||||
"The names of companies to associate with the person. The first company will be primary.": "Os nomes das empresas a se associarem à pessoa. A primeira empresa será a principal.",
|
||||
"Select companies to associate with the person.": "Selecione empresas para associar com a pessoa.",
|
||||
"Physical addresses for the person. The first address is primary.": "Endereços físicos para a pessoa. O primeiro endereço é principal.",
|
||||
"Email addresses for the person. The first email is primary.": "Endereços de email para a pessoa. O primeiro email é principal.",
|
||||
"Phone numbers for the person. The first phone is primary.": "Números de telefone para a pessoa. O primeiro telefone é principal.",
|
||||
"Website URLs for the person. The first URL is primary.": "URLs de sites para a pessoa. O primeiro URL é principal.",
|
||||
"Select a person from your Folk workspace.": "Selecionar uma pessoa do seu espaço de trabalho Folk.",
|
||||
"Company names to create or associate with. Companies will be created if they don't exist.": "Nomes de empresa para criar ou associar. Empresas serão criadas se não existirem.",
|
||||
"Enter company name or email to search for": "Digite o nome ou e-mail da empresa para pesquisar",
|
||||
"The number of items to return (1-100)": "O número de itens a retornar (1-100)",
|
||||
"A cursor for pagination. Use the nextLink value from a previous response.": "Um cursor para paginação. Use o valor nextLink de uma resposta anterior.",
|
||||
"The logical operator to combine multiple filters": "O operador lógico para combinar vários filtros",
|
||||
"Filter by person name (contains)": "Filtrar por nome de pessoa (contém)",
|
||||
"Filter by email address (contains)": "Filtrar por endereço de e-mail (contém)",
|
||||
"AND": "OU",
|
||||
"OR": "OU",
|
||||
"Company Added": "Empresa adicionada",
|
||||
"Company Removed": "Empresa removida",
|
||||
"Company Updated": "Empresa atualizada",
|
||||
"Company Groups Updated": "Grupos de Empresa Atualizados",
|
||||
"Person Added": "Pessoa adicionada",
|
||||
"Person Removed": "Pessoa removida",
|
||||
"Person Updated": "Pessoa atualizada",
|
||||
"Person Groups Updated": "Grupos de pessoas atualizados",
|
||||
"Fires when a new company is added to your Folk workspace.": "Atira quando uma nova empresa é adicionada ao seu espaço de trabalho Folk.",
|
||||
"Fires when a company is removed from your Folk workspace.": "Atira quando uma empresa é removida do seu espaço de trabalho Folk.",
|
||||
"Fires when a company is updated in your Folk workspace.": "Atira quando uma empresa é atualizada em sua área de trabalho Folk.",
|
||||
"Fires when a company's group assignments are updated in your Folk workspace.": "aciona quando as missões de grupo de uma empresa são atualizadas em sua área de trabalho Folk.",
|
||||
"Fires when a new person is added to your Folk workspace.": "Atira quando uma nova pessoa é adicionada à sua área de trabalho Folk.",
|
||||
"Fires when a person is removed from your Folk workspace.": "Atira quando uma pessoa é removida da sua área de trabalho Folk.",
|
||||
"Fires when a person is updated in your Folk workspace.": "Atira quando uma pessoa é atualizada na sua área de trabalho Folk.",
|
||||
"Fires when a person's group assignments are updated in your Folk workspace.": "Atira quando as atividades em grupo de uma pessoa são atualizadas na sua área de trabalho Folk."
|
||||
}
|
||||
@@ -0,0 +1,90 @@
|
||||
{
|
||||
"Folk is a CRM for building relationships at scale. Manage your contacts, companies, and relationships in one place.": "Folk is a CRM for building relationships at scale. Manage your contacts, companies, and relationships in one place.",
|
||||
"Your Folk API key. You can view and manage your API keys in your workspace settings under the \"API\" section at https://app.folk.app/apps/contacts/network/settings/api-keys": "Your Folk API key. You can view and manage your API keys in your workspace settings under the \"API\" section at https://app.folk.app/apps/contacts/network/settings/api-keys",
|
||||
"Create Company": "Create Company",
|
||||
"Update Company": "Update Company",
|
||||
"Create Person": "Create Person",
|
||||
"Update Person": "Update Person",
|
||||
"Find Company": "Find Company",
|
||||
"Get Company": "Get Company",
|
||||
"List People": "List People",
|
||||
"Get Person": "Get Person",
|
||||
"Create a new company in your Folk workspace. You can add emails, links, phone numbers, and assign it to a group.": "Create a new company in your Folk workspace. You can add emails, links, phone numbers, and assign it to a group.",
|
||||
"Update an existing company in your Folk workspace. Select the company from the dropdown to update its details.": "Update an existing company in your Folk workspace. Select the company from the dropdown to update its details.",
|
||||
"Create a new person in your Folk workspace. You can link them to a company, add contact details, and assign to a group.": "Create a new person in your Folk workspace. You can link them to a company, add contact details, and assign to a group.",
|
||||
"Update an existing person in your Folk workspace with new information.": "Update an existing person in your Folk workspace with new information.",
|
||||
"Search for companies in your Folk workspace by name or email address.": "Search for companies in your Folk workspace by name or email address.",
|
||||
"Retrieve detailed information about a company from your Folk workspace.": "Retrieve detailed information about a company from your Folk workspace.",
|
||||
"Retrieve a paginated list of people in your Folk workspace with optional filtering.": "Retrieve a paginated list of people in your Folk workspace with optional filtering.",
|
||||
"Retrieve detailed information about a person from your Folk workspace.": "Retrieve detailed information about a person from your Folk workspace.",
|
||||
"Company Name": "Company Name",
|
||||
"Description": "Description",
|
||||
"Industry": "Industry",
|
||||
"Addresses": "Addresses",
|
||||
"Emails": "Emails",
|
||||
"Phone Numbers": "Phone Numbers",
|
||||
"URLs": "URLs",
|
||||
"Group ID": "Group ID",
|
||||
"Company": "Company",
|
||||
"First Name": "First Name",
|
||||
"Last Name": "Last Name",
|
||||
"Full Name": "Full Name",
|
||||
"Birthday": "Birthday",
|
||||
"Job Title": "Job Title",
|
||||
"Company Names": "Company Names",
|
||||
"Companies": "Companies",
|
||||
"Person": "Person",
|
||||
"Search Query": "Search Query",
|
||||
"Limit": "Limit",
|
||||
"Cursor": "Cursor",
|
||||
"Filter Combinator": "Filter Combinator",
|
||||
"Name Filter": "Name Filter",
|
||||
"Email Filter": "Email Filter",
|
||||
"The name of the company": "The name of the company",
|
||||
"A short description of the company": "A short description of the company",
|
||||
"The industry the company operates in": "The industry the company operates in",
|
||||
"Physical addresses for the company. The first address is primary.": "Physical addresses for the company. The first address is primary.",
|
||||
"Email addresses for the company. The first email is primary.": "Email addresses for the company. The first email is primary.",
|
||||
"Phone numbers for the company. The first phone is primary.": "Phone numbers for the company. The first phone is primary.",
|
||||
"Website URLs for the company. The first URL is primary.": "Website URLs for the company. The first URL is primary.",
|
||||
"Enter a Folk group ID (e.g., grp_abc123). Groups help you organize your contacts.": "Enter a Folk group ID (e.g., grp_abc123). Groups help you organize your contacts.",
|
||||
"Select a company from your Folk workspace.": "Select a company from your Folk workspace.",
|
||||
"The first name of the person": "The first name of the person",
|
||||
"The last name of the person": "The last name of the person",
|
||||
"The full name of the person (alternative to first/last)": "The full name of the person (alternative to first/last)",
|
||||
"A short description of the person": "A short description of the person",
|
||||
"The birthday in YYYY-MM-DD format": "The birthday in YYYY-MM-DD format",
|
||||
"The job title of the person": "The job title of the person",
|
||||
"The names of companies to associate with the person. The first company will be primary.": "The names of companies to associate with the person. The first company will be primary.",
|
||||
"Select companies to associate with the person.": "Select companies to associate with the person.",
|
||||
"Physical addresses for the person. The first address is primary.": "Physical addresses for the person. The first address is primary.",
|
||||
"Email addresses for the person. The first email is primary.": "Email addresses for the person. The first email is primary.",
|
||||
"Phone numbers for the person. The first phone is primary.": "Phone numbers for the person. The first phone is primary.",
|
||||
"Website URLs for the person. The first URL is primary.": "Website URLs for the person. The first URL is primary.",
|
||||
"Select a person from your Folk workspace.": "Select a person from your Folk workspace.",
|
||||
"Company names to create or associate with. Companies will be created if they don't exist.": "Company names to create or associate with. Companies will be created if they don't exist.",
|
||||
"Enter company name or email to search for": "Enter company name or email to search for",
|
||||
"The number of items to return (1-100)": "The number of items to return (1-100)",
|
||||
"A cursor for pagination. Use the nextLink value from a previous response.": "A cursor for pagination. Use the nextLink value from a previous response.",
|
||||
"The logical operator to combine multiple filters": "The logical operator to combine multiple filters",
|
||||
"Filter by person name (contains)": "Filter by person name (contains)",
|
||||
"Filter by email address (contains)": "Filter by email address (contains)",
|
||||
"AND": "AND",
|
||||
"OR": "OR",
|
||||
"Company Added": "Company Added",
|
||||
"Company Removed": "Company Removed",
|
||||
"Company Updated": "Company Updated",
|
||||
"Company Groups Updated": "Company Groups Updated",
|
||||
"Person Added": "Person Added",
|
||||
"Person Removed": "Person Removed",
|
||||
"Person Updated": "Person Updated",
|
||||
"Person Groups Updated": "Person Groups Updated",
|
||||
"Fires when a new company is added to your Folk workspace.": "Fires when a new company is added to your Folk workspace.",
|
||||
"Fires when a company is removed from your Folk workspace.": "Fires when a company is removed from your Folk workspace.",
|
||||
"Fires when a company is updated in your Folk workspace.": "Fires when a company is updated in your Folk workspace.",
|
||||
"Fires when a company's group assignments are updated in your Folk workspace.": "Fires when a company's group assignments are updated in your Folk workspace.",
|
||||
"Fires when a new person is added to your Folk workspace.": "Fires when a new person is added to your Folk workspace.",
|
||||
"Fires when a person is removed from your Folk workspace.": "Fires when a person is removed from your Folk workspace.",
|
||||
"Fires when a person is updated in your Folk workspace.": "Fires when a person is updated in your Folk workspace.",
|
||||
"Fires when a person's group assignments are updated in your Folk workspace.": "Fires when a person's group assignments are updated in your Folk workspace."
|
||||
}
|
||||
@@ -0,0 +1,90 @@
|
||||
{
|
||||
"Folk is a CRM for building relationships at scale. Manage your contacts, companies, and relationships in one place.": "Folk is a CRM for building relationships at scale. Manage your contacts, companies, and relationships in one place.",
|
||||
"Your Folk API key. You can view and manage your API keys in your workspace settings under the \"API\" section at https://app.folk.app/apps/contacts/network/settings/api-keys": "Your Folk API key. You can view and manage your API keys in your workspace settings under the \"API\" section at https://app.folk.app/apps/contacts/network/settings/api-keys",
|
||||
"Create Company": "Create Company",
|
||||
"Update Company": "Update Company",
|
||||
"Create Person": "Create Person",
|
||||
"Update Person": "Update Person",
|
||||
"Find Company": "Find Company",
|
||||
"Get Company": "Get Company",
|
||||
"List People": "List People",
|
||||
"Get Person": "Get Person",
|
||||
"Create a new company in your Folk workspace. You can add emails, links, phone numbers, and assign it to a group.": "Create a new company in your Folk workspace. You can add emails, links, phone numbers, and assign it to a group.",
|
||||
"Update an existing company in your Folk workspace. Select the company from the dropdown to update its details.": "Update an existing company in your Folk workspace. Select the company from the dropdown to update its details.",
|
||||
"Create a new person in your Folk workspace. You can link them to a company, add contact details, and assign to a group.": "Create a new person in your Folk workspace. You can link them to a company, add contact details, and assign to a group.",
|
||||
"Update an existing person in your Folk workspace with new information.": "Update an existing person in your Folk workspace with new information.",
|
||||
"Search for companies in your Folk workspace by name or email address.": "Search for companies in your Folk workspace by name or email address.",
|
||||
"Retrieve detailed information about a company from your Folk workspace.": "Retrieve detailed information about a company from your Folk workspace.",
|
||||
"Retrieve a paginated list of people in your Folk workspace with optional filtering.": "Retrieve a paginated list of people in your Folk workspace with optional filtering.",
|
||||
"Retrieve detailed information about a person from your Folk workspace.": "Retrieve detailed information about a person from your Folk workspace.",
|
||||
"Company Name": "Company Name",
|
||||
"Description": "描述",
|
||||
"Industry": "Industry",
|
||||
"Addresses": "Addresses",
|
||||
"Emails": "电子邮件",
|
||||
"Phone Numbers": "Phone Numbers",
|
||||
"URLs": "URLs",
|
||||
"Group ID": "Group ID",
|
||||
"Company": "Company",
|
||||
"First Name": "First Name",
|
||||
"Last Name": "名字",
|
||||
"Full Name": "Full Name",
|
||||
"Birthday": "Birthday",
|
||||
"Job Title": "Job Title",
|
||||
"Company Names": "Company Names",
|
||||
"Companies": "Companies",
|
||||
"Person": "Person",
|
||||
"Search Query": "Search Query",
|
||||
"Limit": "Limit",
|
||||
"Cursor": "Cursor",
|
||||
"Filter Combinator": "Filter Combinator",
|
||||
"Name Filter": "Name Filter",
|
||||
"Email Filter": "Email Filter",
|
||||
"The name of the company": "The name of the company",
|
||||
"A short description of the company": "A short description of the company",
|
||||
"The industry the company operates in": "The industry the company operates in",
|
||||
"Physical addresses for the company. The first address is primary.": "Physical addresses for the company. The first address is primary.",
|
||||
"Email addresses for the company. The first email is primary.": "Email addresses for the company. The first email is primary.",
|
||||
"Phone numbers for the company. The first phone is primary.": "Phone numbers for the company. The first phone is primary.",
|
||||
"Website URLs for the company. The first URL is primary.": "Website URLs for the company. The first URL is primary.",
|
||||
"Enter a Folk group ID (e.g., grp_abc123). Groups help you organize your contacts.": "Enter a Folk group ID (e.g., grp_abc123). Groups help you organize your contacts.",
|
||||
"Select a company from your Folk workspace.": "Select a company from your Folk workspace.",
|
||||
"The first name of the person": "The first name of the person",
|
||||
"The last name of the person": "The last name of the person",
|
||||
"The full name of the person (alternative to first/last)": "The full name of the person (alternative to first/last)",
|
||||
"A short description of the person": "A short description of the person",
|
||||
"The birthday in YYYY-MM-DD format": "The birthday in YYYY-MM-DD format",
|
||||
"The job title of the person": "The job title of the person",
|
||||
"The names of companies to associate with the person. The first company will be primary.": "The names of companies to associate with the person. The first company will be primary.",
|
||||
"Select companies to associate with the person.": "Select companies to associate with the person.",
|
||||
"Physical addresses for the person. The first address is primary.": "Physical addresses for the person. The first address is primary.",
|
||||
"Email addresses for the person. The first email is primary.": "Email addresses for the person. The first email is primary.",
|
||||
"Phone numbers for the person. The first phone is primary.": "Phone numbers for the person. The first phone is primary.",
|
||||
"Website URLs for the person. The first URL is primary.": "Website URLs for the person. The first URL is primary.",
|
||||
"Select a person from your Folk workspace.": "Select a person from your Folk workspace.",
|
||||
"Company names to create or associate with. Companies will be created if they don't exist.": "Company names to create or associate with. Companies will be created if they don't exist.",
|
||||
"Enter company name or email to search for": "Enter company name or email to search for",
|
||||
"The number of items to return (1-100)": "The number of items to return (1-100)",
|
||||
"A cursor for pagination. Use the nextLink value from a previous response.": "A cursor for pagination. Use the nextLink value from a previous response.",
|
||||
"The logical operator to combine multiple filters": "The logical operator to combine multiple filters",
|
||||
"Filter by person name (contains)": "Filter by person name (contains)",
|
||||
"Filter by email address (contains)": "Filter by email address (contains)",
|
||||
"AND": "AND",
|
||||
"OR": "或",
|
||||
"Company Added": "Company Added",
|
||||
"Company Removed": "Company Removed",
|
||||
"Company Updated": "Company Updated",
|
||||
"Company Groups Updated": "Company Groups Updated",
|
||||
"Person Added": "Person Added",
|
||||
"Person Removed": "Person Removed",
|
||||
"Person Updated": "Person Updated",
|
||||
"Person Groups Updated": "Person Groups Updated",
|
||||
"Fires when a new company is added to your Folk workspace.": "Fires when a new company is added to your Folk workspace.",
|
||||
"Fires when a company is removed from your Folk workspace.": "Fires when a company is removed from your Folk workspace.",
|
||||
"Fires when a company is updated in your Folk workspace.": "Fires when a company is updated in your Folk workspace.",
|
||||
"Fires when a company's group assignments are updated in your Folk workspace.": "Fires when a company's group assignments are updated in your Folk workspace.",
|
||||
"Fires when a new person is added to your Folk workspace.": "Fires when a new person is added to your Folk workspace.",
|
||||
"Fires when a person is removed from your Folk workspace.": "Fires when a person is removed from your Folk workspace.",
|
||||
"Fires when a person is updated in your Folk workspace.": "Fires when a person is updated in your Folk workspace.",
|
||||
"Fires when a person's group assignments are updated in your Folk workspace.": "Fires when a person's group assignments are updated in your Folk workspace."
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
import { createPiece } from '@activepieces/pieces-framework';
|
||||
import { PieceCategory } from '@activepieces/shared';
|
||||
import { folkAuth } from './lib/common/auth';
|
||||
import { companyAdded } from './lib/triggers/company-added';
|
||||
import { companyRemoved } from './lib/triggers/company-removed';
|
||||
import { companyUpdated } from './lib/triggers/company-updated';
|
||||
import { companyCustomFieldUpdated } from './lib/triggers/company-custom-field-updated';
|
||||
import { personAdded } from './lib/triggers/person-added';
|
||||
import { personRemoved } from './lib/triggers/person-removed';
|
||||
import { personUpdated } from './lib/triggers/person-updated';
|
||||
import { personCustomFieldUpdated } from './lib/triggers/person-custom-field-updated';
|
||||
import { createCompany } from './lib/actions/create-company';
|
||||
import { updateCompany } from './lib/actions/update-company';
|
||||
import { createPerson } from './lib/actions/create-person';
|
||||
import { updatePerson } from './lib/actions/update-person';
|
||||
import { findCompany } from './lib/actions/find-company';
|
||||
import { getCompany } from './lib/actions/get-company';
|
||||
import { findPerson } from './lib/actions/find-person';
|
||||
import { getPerson } from './lib/actions/get-person';
|
||||
|
||||
export const folk = createPiece({
|
||||
displayName: 'Folk',
|
||||
auth: folkAuth,
|
||||
minimumSupportedRelease: '0.36.1',
|
||||
logoUrl: 'https://cdn.activepieces.com/pieces/folk.png',
|
||||
authors: ['sparkybug'],
|
||||
categories: [PieceCategory.SALES_AND_CRM],
|
||||
description:
|
||||
'Folk is a CRM for building relationships at scale. Manage your contacts, companies, and relationships in one place.',
|
||||
actions: [
|
||||
createCompany,
|
||||
updateCompany,
|
||||
createPerson,
|
||||
updatePerson,
|
||||
findCompany,
|
||||
getCompany,
|
||||
findPerson,
|
||||
getPerson,
|
||||
],
|
||||
triggers: [
|
||||
companyAdded,
|
||||
companyRemoved,
|
||||
companyUpdated,
|
||||
companyCustomFieldUpdated,
|
||||
personAdded,
|
||||
personRemoved,
|
||||
personUpdated,
|
||||
personCustomFieldUpdated,
|
||||
],
|
||||
});
|
||||
@@ -0,0 +1,114 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { folkAuth } from '../common/auth';
|
||||
import { folkClient } from '../common/client';
|
||||
import { folkProps } from '../common/props';
|
||||
|
||||
export const createCompany = createAction({
|
||||
auth: folkAuth,
|
||||
name: 'createCompany',
|
||||
displayName: 'Create Company',
|
||||
description: 'Create a new company in your Folk workspace. You can add emails, links, phone numbers, and assign it to a group.',
|
||||
props: {
|
||||
name: Property.ShortText({
|
||||
displayName: 'Company Name',
|
||||
description: 'The name of the company',
|
||||
required: true,
|
||||
}),
|
||||
description: Property.LongText({
|
||||
displayName: 'Description',
|
||||
description: 'A short description of the company',
|
||||
required: false,
|
||||
}),
|
||||
industry: Property.ShortText({
|
||||
displayName: 'Industry',
|
||||
description: 'The industry the company operates in',
|
||||
required: false,
|
||||
}),
|
||||
addresses: Property.Array({
|
||||
displayName: 'Addresses',
|
||||
description: 'Physical addresses for the company. The first address is primary.',
|
||||
required: false,
|
||||
properties: {
|
||||
value: Property.ShortText({
|
||||
displayName: 'Address',
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
}),
|
||||
emails: Property.Array({
|
||||
displayName: 'Emails',
|
||||
description: 'Email addresses for the company. The first email is primary.',
|
||||
required: false,
|
||||
properties: {
|
||||
value: Property.ShortText({
|
||||
displayName: 'Email',
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
}),
|
||||
phones: Property.Array({
|
||||
displayName: 'Phone Numbers',
|
||||
description: 'Phone numbers for the company. The first phone is primary.',
|
||||
required: false,
|
||||
properties: {
|
||||
value: Property.ShortText({
|
||||
displayName: 'Phone Number',
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
}),
|
||||
urls: Property.Array({
|
||||
displayName: 'URLs',
|
||||
description: 'Website URLs for the company. The first URL is primary.',
|
||||
required: false,
|
||||
properties: {
|
||||
value: Property.ShortText({
|
||||
displayName: 'URL',
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
}),
|
||||
groupId: folkProps.group_id(false, 'Group ID'),
|
||||
},
|
||||
async run(context) {
|
||||
const { name, description, industry, addresses, emails, phones, urls, groupId } = context.propsValue;
|
||||
|
||||
const companyData: any = {
|
||||
name,
|
||||
};
|
||||
|
||||
if (description) companyData.description = description;
|
||||
if (industry) companyData.industry = industry;
|
||||
|
||||
if (addresses && Array.isArray(addresses) && addresses.length > 0) {
|
||||
companyData.addresses = addresses.map((addr: any) => addr.value || addr);
|
||||
}
|
||||
|
||||
if (emails && Array.isArray(emails) && emails.length > 0) {
|
||||
companyData.emails = emails.map((e: any) => e.value || e);
|
||||
}
|
||||
|
||||
if (phones && Array.isArray(phones) && phones.length > 0) {
|
||||
companyData.phones = phones.map((p: any) => p.value || p);
|
||||
}
|
||||
|
||||
if (urls && Array.isArray(urls) && urls.length > 0) {
|
||||
companyData.urls = urls.map((u: any) => u.value || u);
|
||||
}
|
||||
|
||||
if (groupId) {
|
||||
companyData.groups = [{ id: groupId }];
|
||||
}
|
||||
|
||||
const response = await folkClient.createCompany({
|
||||
apiKey: context.auth,
|
||||
data: companyData,
|
||||
});
|
||||
|
||||
return {
|
||||
company: response.data,
|
||||
success: true,
|
||||
};
|
||||
},
|
||||
});
|
||||
|
||||
@@ -0,0 +1,168 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { folkAuth } from '../common/auth';
|
||||
import { folkClient } from '../common/client';
|
||||
import { folkProps } from '../common/props';
|
||||
|
||||
export const createPerson = createAction({
|
||||
auth: folkAuth,
|
||||
name: 'createPerson',
|
||||
displayName: 'Create Person',
|
||||
description:
|
||||
'Create a new person in your Folk workspace. You can link them to a company, add contact details, and assign to a group.',
|
||||
props: {
|
||||
firstName: Property.ShortText({
|
||||
displayName: 'First Name',
|
||||
description: 'The first name of the person',
|
||||
required: false,
|
||||
}),
|
||||
lastName: Property.ShortText({
|
||||
displayName: 'Last Name',
|
||||
description: 'The last name of the person',
|
||||
required: false,
|
||||
}),
|
||||
fullName: Property.ShortText({
|
||||
displayName: 'Full Name',
|
||||
description: 'The full name of the person (alternative to first/last)',
|
||||
required: false,
|
||||
}),
|
||||
description: Property.LongText({
|
||||
displayName: 'Description',
|
||||
description: 'A short description of the person',
|
||||
required: false,
|
||||
}),
|
||||
birthday: Property.ShortText({
|
||||
displayName: 'Birthday',
|
||||
description: 'The birthday in YYYY-MM-DD format',
|
||||
required: false,
|
||||
}),
|
||||
jobTitle: Property.ShortText({
|
||||
displayName: 'Job Title',
|
||||
description: 'The job title of the person',
|
||||
required: false,
|
||||
}),
|
||||
companyNames: Property.Array({
|
||||
displayName: 'Company Names',
|
||||
description:
|
||||
'The names of companies to associate with the person. The first company will be primary.',
|
||||
required: false,
|
||||
properties: {
|
||||
value: Property.ShortText({
|
||||
displayName: 'Company Name',
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
}),
|
||||
companyIds: folkProps.companyIds(false),
|
||||
addresses: Property.Array({
|
||||
displayName: 'Addresses',
|
||||
description:
|
||||
'Physical addresses for the person. The first address is primary.',
|
||||
required: false,
|
||||
properties: {
|
||||
value: Property.ShortText({
|
||||
displayName: 'Address',
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
}),
|
||||
emails: Property.Array({
|
||||
displayName: 'Emails',
|
||||
description:
|
||||
'Email addresses for the person. The first email is primary.',
|
||||
required: false,
|
||||
properties: {
|
||||
value: Property.ShortText({
|
||||
displayName: 'Email',
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
}),
|
||||
phones: Property.Array({
|
||||
displayName: 'Phone Numbers',
|
||||
description: 'Phone numbers for the person. The first phone is primary.',
|
||||
required: false,
|
||||
properties: {
|
||||
value: Property.ShortText({
|
||||
displayName: 'Phone Number',
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
}),
|
||||
urls: Property.Array({
|
||||
displayName: 'URLs',
|
||||
description: 'Website URLs for the person. The first URL is primary.',
|
||||
required: false,
|
||||
properties: {
|
||||
value: Property.ShortText({
|
||||
displayName: 'URL',
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
}),
|
||||
groupId: folkProps.group_id(false, 'Group ID'),
|
||||
},
|
||||
async run(context) {
|
||||
const {
|
||||
firstName,
|
||||
lastName,
|
||||
fullName,
|
||||
description,
|
||||
birthday,
|
||||
jobTitle,
|
||||
companyNames,
|
||||
companyIds,
|
||||
addresses,
|
||||
emails,
|
||||
phones,
|
||||
urls,
|
||||
groupId,
|
||||
} = context.propsValue;
|
||||
|
||||
const personData: any = {};
|
||||
|
||||
if (firstName) personData.firstName = firstName;
|
||||
if (lastName) personData.lastName = lastName;
|
||||
if (fullName) personData.fullName = fullName;
|
||||
if (description) personData.description = description;
|
||||
if (birthday) personData.birthday = birthday;
|
||||
if (jobTitle) personData.jobTitle = jobTitle;
|
||||
|
||||
const companies: any[] = [];
|
||||
if (companyIds) {
|
||||
for (const companyId of companyIds) {
|
||||
companies.push({ id: companyId });
|
||||
}
|
||||
}
|
||||
if (companyNames && Array.isArray(companyNames)) {
|
||||
companies.push(...companyNames.map((c: any) => ({ name: c.value || c })));
|
||||
}
|
||||
if (companies.length > 0) personData.companies = companies;
|
||||
|
||||
if (addresses && Array.isArray(addresses) && addresses.length > 0) {
|
||||
personData.addresses = addresses.map((addr: any) => addr.value || addr);
|
||||
}
|
||||
|
||||
if (emails && Array.isArray(emails) && emails.length > 0) {
|
||||
personData.emails = emails.map((e: any) => e.value || e);
|
||||
}
|
||||
|
||||
if (phones && Array.isArray(phones) && phones.length > 0) {
|
||||
personData.phones = phones.map((p: any) => p.value || p);
|
||||
}
|
||||
|
||||
if (urls && Array.isArray(urls) && urls.length > 0) {
|
||||
personData.urls = urls.map((u: any) => u.value || u);
|
||||
}
|
||||
|
||||
if (groupId) {
|
||||
personData.groups = [{ id: groupId }];
|
||||
}
|
||||
|
||||
const response = await folkClient.createPerson({
|
||||
apiKey: context.auth,
|
||||
data: personData,
|
||||
});
|
||||
|
||||
return response.data;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,32 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { folkAuth } from '../common/auth';
|
||||
import { folkClient } from '../common/client';
|
||||
|
||||
export const findCompany = createAction({
|
||||
auth: folkAuth,
|
||||
name: 'findCompany',
|
||||
displayName: 'Find Company',
|
||||
description: 'Search for companies in your Folk workspace by name or email address.',
|
||||
props: {
|
||||
query: Property.ShortText({
|
||||
displayName: 'Search Query',
|
||||
description: 'Enter company name or email to search for',
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
async run(context) {
|
||||
const { query } = context.propsValue;
|
||||
|
||||
const response = await folkClient.searchCompany({
|
||||
apiKey: context.auth,
|
||||
query,
|
||||
});
|
||||
|
||||
return {
|
||||
companies: response.data?.items || [],
|
||||
count: response.data?.items?.length || 0,
|
||||
pagination: response.data?.pagination,
|
||||
};
|
||||
},
|
||||
});
|
||||
|
||||
@@ -0,0 +1,63 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { folkAuth } from '../common/auth';
|
||||
import { folkClient } from '../common/client';
|
||||
|
||||
export const findPerson = createAction({
|
||||
auth: folkAuth,
|
||||
name: 'findPerson',
|
||||
displayName: 'List People',
|
||||
description: 'Retrieve a paginated list of people in your Folk workspace with optional filtering.',
|
||||
props: {
|
||||
limit: Property.Number({
|
||||
displayName: 'Limit',
|
||||
description: 'The number of items to return (1-100)',
|
||||
required: false,
|
||||
defaultValue: 20,
|
||||
}),
|
||||
cursor: Property.ShortText({
|
||||
displayName: 'Cursor',
|
||||
description: 'A cursor for pagination. Use the nextLink value from a previous response.',
|
||||
required: false,
|
||||
}),
|
||||
combinator: Property.StaticDropdown({
|
||||
displayName: 'Filter Combinator',
|
||||
description: 'The logical operator to combine multiple filters',
|
||||
required: false,
|
||||
defaultValue: 'and',
|
||||
options: {
|
||||
options: [
|
||||
{ label: 'AND', value: 'and' },
|
||||
{ label: 'OR', value: 'or' },
|
||||
],
|
||||
},
|
||||
}),
|
||||
nameFilter: Property.ShortText({
|
||||
displayName: 'Name Filter',
|
||||
description: 'Filter by person name (contains)',
|
||||
required: false,
|
||||
}),
|
||||
emailFilter: Property.ShortText({
|
||||
displayName: 'Email Filter',
|
||||
description: 'Filter by email address (contains)',
|
||||
required: false,
|
||||
}),
|
||||
},
|
||||
async run(context) {
|
||||
const { limit, cursor, combinator, nameFilter, emailFilter } = context.propsValue;
|
||||
|
||||
const response = await folkClient.getPeopleWithFilters({
|
||||
apiKey: context.auth,
|
||||
limit: limit || 20,
|
||||
cursor,
|
||||
combinator: combinator as 'and' | 'or',
|
||||
nameFilter,
|
||||
emailFilter,
|
||||
});
|
||||
|
||||
return {
|
||||
data: response.data,
|
||||
success: true,
|
||||
};
|
||||
},
|
||||
});
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
import { createAction } from '@activepieces/pieces-framework';
|
||||
import { folkAuth } from '../common/auth';
|
||||
import { folkClient } from '../common/client';
|
||||
import { folkProps } from '../common/props';
|
||||
|
||||
export const getCompany = createAction({
|
||||
auth: folkAuth,
|
||||
name: 'getCompany',
|
||||
displayName: 'Get Company',
|
||||
description: 'Retrieve detailed information about a company from your Folk workspace.',
|
||||
props: {
|
||||
companyId: folkProps.company_id(true),
|
||||
},
|
||||
async run(context) {
|
||||
const { companyId } = context.propsValue;
|
||||
|
||||
const response = await folkClient.getCompany({
|
||||
apiKey: context.auth,
|
||||
companyId: companyId as string,
|
||||
});
|
||||
|
||||
return {
|
||||
company: response.data,
|
||||
};
|
||||
},
|
||||
});
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
import { createAction } from '@activepieces/pieces-framework';
|
||||
import { folkAuth } from '../common/auth';
|
||||
import { folkClient } from '../common/client';
|
||||
import { folkProps } from '../common/props';
|
||||
|
||||
export const getPerson = createAction({
|
||||
auth: folkAuth,
|
||||
name: 'getPerson',
|
||||
displayName: 'Get Person',
|
||||
description: 'Retrieve detailed information about a person from your Folk workspace.',
|
||||
props: {
|
||||
personId: folkProps.person_id(true),
|
||||
},
|
||||
async run(context) {
|
||||
const { personId } = context.propsValue;
|
||||
|
||||
const response = await folkClient.getPerson({
|
||||
apiKey: context.auth,
|
||||
contactId: personId as string,
|
||||
});
|
||||
|
||||
return {
|
||||
data: response.data,
|
||||
success: true,
|
||||
};
|
||||
},
|
||||
});
|
||||
|
||||
@@ -0,0 +1,115 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { folkAuth } from '../common/auth';
|
||||
import { folkClient } from '../common/client';
|
||||
import { folkProps } from '../common/props';
|
||||
|
||||
export const updateCompany = createAction({
|
||||
auth: folkAuth,
|
||||
name: 'updateCompany',
|
||||
displayName: 'Update Company',
|
||||
description: 'Update an existing company in your Folk workspace. Select the company from the dropdown to update its details.',
|
||||
props: {
|
||||
companyId: folkProps.company_id(true),
|
||||
name: Property.ShortText({
|
||||
displayName: 'Company Name',
|
||||
description: 'The name of the company',
|
||||
required: false,
|
||||
}),
|
||||
description: Property.LongText({
|
||||
displayName: 'Description',
|
||||
description: 'A short description of the company',
|
||||
required: false,
|
||||
}),
|
||||
industry: Property.ShortText({
|
||||
displayName: 'Industry',
|
||||
description: 'The industry the company operates in',
|
||||
required: false,
|
||||
}),
|
||||
addresses: Property.Array({
|
||||
displayName: 'Addresses',
|
||||
description: 'Physical addresses for the company. The first address is primary.',
|
||||
required: false,
|
||||
properties: {
|
||||
value: Property.ShortText({
|
||||
displayName: 'Address',
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
}),
|
||||
emails: Property.Array({
|
||||
displayName: 'Emails',
|
||||
description: 'Email addresses for the company. The first email is primary.',
|
||||
required: false,
|
||||
properties: {
|
||||
value: Property.ShortText({
|
||||
displayName: 'Email',
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
}),
|
||||
phones: Property.Array({
|
||||
displayName: 'Phone Numbers',
|
||||
description: 'Phone numbers for the company. The first phone is primary.',
|
||||
required: false,
|
||||
properties: {
|
||||
value: Property.ShortText({
|
||||
displayName: 'Phone Number',
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
}),
|
||||
urls: Property.Array({
|
||||
displayName: 'URLs',
|
||||
description: 'Website URLs for the company. The first URL is primary.',
|
||||
required: false,
|
||||
properties: {
|
||||
value: Property.ShortText({
|
||||
displayName: 'URL',
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
}),
|
||||
groupId: folkProps.group_id(false, 'Group ID'),
|
||||
},
|
||||
async run(context) {
|
||||
const { companyId, name, description, industry, addresses, emails, phones, urls, groupId } = context.propsValue;
|
||||
|
||||
const companyData: any = {};
|
||||
|
||||
if (name) companyData.name = name;
|
||||
if (description) companyData.description = description;
|
||||
if (industry) companyData.industry = industry;
|
||||
|
||||
if (addresses && Array.isArray(addresses)) {
|
||||
companyData.addresses = addresses.map((addr: any) => addr.value || addr);
|
||||
}
|
||||
|
||||
if (emails && Array.isArray(emails)) {
|
||||
companyData.emails = emails.map((e: any) => e.value || e);
|
||||
}
|
||||
|
||||
if (phones && Array.isArray(phones)) {
|
||||
companyData.phones = phones.map((p: any) => p.value || p);
|
||||
}
|
||||
|
||||
if (urls && Array.isArray(urls)) {
|
||||
companyData.urls = urls.map((u: any) => u.value || u);
|
||||
}
|
||||
|
||||
if (groupId) {
|
||||
companyData.groups = [{ id: groupId }];
|
||||
}
|
||||
|
||||
const response = await folkClient.updateCompany({
|
||||
apiKey: context.auth,
|
||||
companyId: companyId as string,
|
||||
data: companyData,
|
||||
});
|
||||
|
||||
return {
|
||||
company: response.data,
|
||||
success: true,
|
||||
};
|
||||
},
|
||||
});
|
||||
|
||||
@@ -0,0 +1,174 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { folkAuth } from '../common/auth';
|
||||
import { folkClient } from '../common/client';
|
||||
import { folkProps } from '../common/props';
|
||||
|
||||
export const updatePerson = createAction({
|
||||
auth: folkAuth,
|
||||
name: 'updatePerson',
|
||||
displayName: 'Update Person',
|
||||
description:
|
||||
'Update an existing person in your Folk workspace with new information.',
|
||||
props: {
|
||||
personId: folkProps.person_id(true),
|
||||
firstName: Property.ShortText({
|
||||
displayName: 'First Name',
|
||||
description: 'The first name of the person',
|
||||
required: false,
|
||||
}),
|
||||
lastName: Property.ShortText({
|
||||
displayName: 'Last Name',
|
||||
description: 'The last name of the person',
|
||||
required: false,
|
||||
}),
|
||||
fullName: Property.ShortText({
|
||||
displayName: 'Full Name',
|
||||
description: 'The full name of the person (alternative to first/last)',
|
||||
required: false,
|
||||
}),
|
||||
description: Property.LongText({
|
||||
displayName: 'Description',
|
||||
description: 'A short description of the person',
|
||||
required: false,
|
||||
}),
|
||||
birthday: Property.ShortText({
|
||||
displayName: 'Birthday',
|
||||
description: 'The birthday in YYYY-MM-DD format',
|
||||
required: false,
|
||||
}),
|
||||
jobTitle: Property.ShortText({
|
||||
displayName: 'Job Title',
|
||||
description: 'The job title of the person',
|
||||
required: false,
|
||||
}),
|
||||
companyIds: folkProps.companyIds(false),
|
||||
companyNames: Property.Array({
|
||||
displayName: 'Company Names',
|
||||
description:
|
||||
"Company names to create or associate with. Companies will be created if they don't exist.",
|
||||
required: false,
|
||||
properties: {
|
||||
value: Property.ShortText({
|
||||
displayName: 'Company Name',
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
}),
|
||||
addresses: Property.Array({
|
||||
displayName: 'Addresses',
|
||||
description:
|
||||
'Physical addresses for the person. The first address is primary.',
|
||||
required: false,
|
||||
properties: {
|
||||
value: Property.ShortText({
|
||||
displayName: 'Address',
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
}),
|
||||
emails: Property.Array({
|
||||
displayName: 'Emails',
|
||||
description:
|
||||
'Email addresses for the person. The first email is primary.',
|
||||
required: false,
|
||||
properties: {
|
||||
value: Property.ShortText({
|
||||
displayName: 'Email',
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
}),
|
||||
phones: Property.Array({
|
||||
displayName: 'Phone Numbers',
|
||||
description: 'Phone numbers for the person. The first phone is primary.',
|
||||
required: false,
|
||||
properties: {
|
||||
value: Property.ShortText({
|
||||
displayName: 'Phone Number',
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
}),
|
||||
urls: Property.Array({
|
||||
displayName: 'URLs',
|
||||
description: 'Website URLs for the person. The first URL is primary.',
|
||||
required: false,
|
||||
properties: {
|
||||
value: Property.ShortText({
|
||||
displayName: 'URL',
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
}),
|
||||
groupId: folkProps.group_id(false, 'Group ID'),
|
||||
},
|
||||
async run(context) {
|
||||
const {
|
||||
personId,
|
||||
firstName,
|
||||
lastName,
|
||||
fullName,
|
||||
description,
|
||||
birthday,
|
||||
jobTitle,
|
||||
companyIds,
|
||||
companyNames,
|
||||
addresses,
|
||||
emails,
|
||||
phones,
|
||||
urls,
|
||||
groupId,
|
||||
} = context.propsValue;
|
||||
|
||||
const personData: any = {};
|
||||
|
||||
if (firstName) personData.firstName = firstName;
|
||||
if (lastName) personData.lastName = lastName;
|
||||
if (fullName) personData.fullName = fullName;
|
||||
if (description) personData.description = description;
|
||||
if (birthday) personData.birthday = birthday;
|
||||
if (jobTitle) personData.jobTitle = jobTitle;
|
||||
|
||||
const companies: any[] = [];
|
||||
if (companyIds) {
|
||||
for (const companyId of companyIds) {
|
||||
companies.push({ id: companyId });
|
||||
}
|
||||
}
|
||||
if (companyNames && Array.isArray(companyNames)) {
|
||||
companies.push(...companyNames.map((c: any) => ({ name: c.value || c })));
|
||||
}
|
||||
if (companies.length > 0) personData.companies = companies;
|
||||
|
||||
if (addresses && Array.isArray(addresses) && addresses.length > 0) {
|
||||
personData.addresses = addresses.map((addr: any) => addr.value || addr);
|
||||
}
|
||||
|
||||
if (emails && Array.isArray(emails) && emails.length > 0) {
|
||||
personData.emails = emails.map((e: any) => e.value || e);
|
||||
}
|
||||
|
||||
if (phones && Array.isArray(phones) && phones.length > 0) {
|
||||
personData.phones = phones.map((p: any) => p.value || p);
|
||||
}
|
||||
|
||||
if (urls && Array.isArray(urls) && urls.length > 0) {
|
||||
personData.urls = urls.map((u: any) => u.value || u);
|
||||
}
|
||||
|
||||
if (groupId) {
|
||||
personData.groups = [{ id: groupId }];
|
||||
}
|
||||
|
||||
const response = await folkClient.updatePerson({
|
||||
apiKey: context.auth,
|
||||
contactId: personId as string,
|
||||
data: personData,
|
||||
});
|
||||
|
||||
return {
|
||||
data: response.data,
|
||||
success: true,
|
||||
};
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,37 @@
|
||||
import { PieceAuth } from '@activepieces/pieces-framework';
|
||||
import { folkClient } from './client';
|
||||
import { AppConnectionType } from '@activepieces/shared';
|
||||
|
||||
export const folkAuth = PieceAuth.SecretText({
|
||||
displayName: 'API Key',
|
||||
description:
|
||||
'Your Folk API key. You can view and manage your API keys in your workspace settings under the "API" section at https://app.folk.app/apps/contacts/network/settings/api-keys',
|
||||
required: true,
|
||||
validate: async ({ auth }) => {
|
||||
try {
|
||||
await folkClient.testConnection({
|
||||
secret_text: auth,
|
||||
type: AppConnectionType.SECRET_TEXT,
|
||||
});
|
||||
|
||||
return {
|
||||
valid: true,
|
||||
message: 'API key validated successfully. Connected to Folk.',
|
||||
};
|
||||
} catch (error: any) {
|
||||
if (error.message?.includes('401') || error.message?.includes('403')) {
|
||||
return {
|
||||
valid: false,
|
||||
error: 'Invalid API key. Please check your API key and try again.',
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
valid: false,
|
||||
error: `Authentication failed: ${error.message}. Please verify your API key is correct.`,
|
||||
};
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
export type FolkAuthType = string;
|
||||
@@ -0,0 +1,329 @@
|
||||
import { httpClient, HttpMethod } from '@activepieces/pieces-common';
|
||||
import { folkAuth } from './auth';
|
||||
import { AppConnectionValueForAuthProperty } from '@activepieces/pieces-framework';
|
||||
|
||||
export const folkClient = {
|
||||
baseUrl: 'https://api.folk.app',
|
||||
|
||||
async testConnection(apiKey: AppConnectionValueForAuthProperty<typeof folkAuth>): Promise<void> {
|
||||
await this.makeRequest<any>({
|
||||
method: HttpMethod.GET,
|
||||
url: '/v1/people?limit=1',
|
||||
apiKey,
|
||||
});
|
||||
},
|
||||
|
||||
async makeRequest<T>({
|
||||
method,
|
||||
url,
|
||||
apiKey,
|
||||
body,
|
||||
headers,
|
||||
}: {
|
||||
method: HttpMethod;
|
||||
url: string;
|
||||
apiKey: AppConnectionValueForAuthProperty<typeof folkAuth>;
|
||||
body?: any;
|
||||
headers?: Record<string, string>;
|
||||
}): Promise<T> {
|
||||
const response = await httpClient.sendRequest<T>({
|
||||
method,
|
||||
url: `${this.baseUrl}${url}`,
|
||||
headers: {
|
||||
Authorization: `Bearer ${apiKey}`,
|
||||
'Content-Type': 'application/json',
|
||||
...headers,
|
||||
},
|
||||
body,
|
||||
});
|
||||
|
||||
if (response.status >= 400) {
|
||||
throw new Error(
|
||||
`Folk API error: ${response.status} ${JSON.stringify(response.body)}`
|
||||
);
|
||||
}
|
||||
|
||||
return response.body;
|
||||
},
|
||||
|
||||
async getPeople({
|
||||
apiKey,
|
||||
limit = 100,
|
||||
offset = 0,
|
||||
}: {
|
||||
apiKey: AppConnectionValueForAuthProperty<typeof folkAuth>;
|
||||
limit?: number;
|
||||
offset?: number;
|
||||
}) {
|
||||
return this.makeRequest<{ people: any[] }>({
|
||||
method: HttpMethod.GET,
|
||||
url: `/v1/people/list?limit=${limit}&offset=${offset}`,
|
||||
apiKey,
|
||||
});
|
||||
},
|
||||
|
||||
async getPeopleWithFilters({
|
||||
apiKey,
|
||||
limit = 20,
|
||||
cursor,
|
||||
combinator = 'and',
|
||||
nameFilter,
|
||||
emailFilter,
|
||||
}: {
|
||||
apiKey: AppConnectionValueForAuthProperty<typeof folkAuth>;
|
||||
limit?: number;
|
||||
cursor?: string;
|
||||
combinator?: 'and' | 'or';
|
||||
nameFilter?: string;
|
||||
emailFilter?: string;
|
||||
}) {
|
||||
const params = new URLSearchParams();
|
||||
|
||||
if (limit) params.append('limit', limit.toString());
|
||||
if (cursor) params.append('cursor', cursor);
|
||||
|
||||
// Only add combinator and filters if we actually have filters
|
||||
const hasFilters = nameFilter || emailFilter;
|
||||
if (hasFilters) {
|
||||
if (combinator) params.append('combinator', combinator);
|
||||
if (nameFilter) {
|
||||
params.append('filter[fullName][like]', nameFilter);
|
||||
}
|
||||
if (emailFilter) {
|
||||
params.append('filter[emails][like]', emailFilter);
|
||||
}
|
||||
}
|
||||
|
||||
const queryString = params.toString();
|
||||
const url = queryString ? `/v1/people?${queryString}` : '/v1/people';
|
||||
|
||||
return this.makeRequest<{
|
||||
data: {
|
||||
items: any[];
|
||||
pagination: { nextLink?: string };
|
||||
};
|
||||
}>({
|
||||
method: HttpMethod.GET,
|
||||
url,
|
||||
apiKey,
|
||||
});
|
||||
},
|
||||
|
||||
async getPerson({
|
||||
apiKey,
|
||||
contactId,
|
||||
}: {
|
||||
apiKey: AppConnectionValueForAuthProperty<typeof folkAuth>;
|
||||
contactId: string;
|
||||
}) {
|
||||
return this.makeRequest<{ data: any }>({
|
||||
method: HttpMethod.GET,
|
||||
url: `/v1/people/${contactId}`,
|
||||
apiKey,
|
||||
});
|
||||
},
|
||||
|
||||
async searchPerson({ apiKey, query }: { apiKey: AppConnectionValueForAuthProperty<typeof folkAuth>; query: string }) {
|
||||
return this.makeRequest<{ people: any[] }>({
|
||||
method: HttpMethod.GET,
|
||||
url: `/v1/people/search?query=${encodeURIComponent(query)}`,
|
||||
apiKey,
|
||||
});
|
||||
},
|
||||
|
||||
async createPerson({ apiKey, data }: { apiKey: AppConnectionValueForAuthProperty<typeof folkAuth>; data: any }) {
|
||||
return this.makeRequest<{ data: any }>({
|
||||
method: HttpMethod.POST,
|
||||
url: '/v1/people',
|
||||
apiKey: apiKey,
|
||||
body: data,
|
||||
});
|
||||
},
|
||||
|
||||
async updatePerson({
|
||||
apiKey,
|
||||
contactId,
|
||||
data,
|
||||
}: {
|
||||
apiKey: AppConnectionValueForAuthProperty<typeof folkAuth>;
|
||||
contactId: string;
|
||||
data: any;
|
||||
}) {
|
||||
return this.makeRequest<{ data: any }>({
|
||||
method: HttpMethod.PATCH,
|
||||
url: `/v1/people/${contactId}`,
|
||||
apiKey,
|
||||
body: data,
|
||||
});
|
||||
},
|
||||
|
||||
async getCompanies({
|
||||
apiKey,
|
||||
limit = 100,
|
||||
offset = 0,
|
||||
}: {
|
||||
apiKey: AppConnectionValueForAuthProperty<typeof folkAuth>;
|
||||
limit?: number;
|
||||
offset?: number;
|
||||
}) {
|
||||
return this.makeRequest<{ companies: any[] }>({
|
||||
method: HttpMethod.GET,
|
||||
url: `/v1/companies/list?limit=${limit}&offset=${offset}`,
|
||||
apiKey,
|
||||
});
|
||||
},
|
||||
|
||||
async getCompaniesWithFilters({
|
||||
apiKey,
|
||||
limit = 20,
|
||||
cursor,
|
||||
combinator = 'and',
|
||||
nameFilter
|
||||
}: {
|
||||
apiKey: AppConnectionValueForAuthProperty<typeof folkAuth>;
|
||||
limit?: number;
|
||||
cursor?: string;
|
||||
combinator?: 'and' | 'or';
|
||||
nameFilter?: string;
|
||||
}) {
|
||||
const params = new URLSearchParams();
|
||||
|
||||
if (limit) params.append('limit', limit.toString());
|
||||
if (cursor) params.append('cursor', cursor);
|
||||
|
||||
// Only add combinator and filters if we actually have filters
|
||||
if (nameFilter) {
|
||||
if (combinator) params.append('combinator', combinator);
|
||||
params.append('filter[name][like]', nameFilter);
|
||||
}
|
||||
|
||||
const queryString = params.toString();
|
||||
const url = queryString ? `/v1/companies?${queryString}` : '/v1/companies';
|
||||
|
||||
return this.makeRequest<{
|
||||
data: {
|
||||
items: any[];
|
||||
pagination: { nextLink?: string }
|
||||
}
|
||||
}>({
|
||||
method: HttpMethod.GET,
|
||||
url,
|
||||
apiKey,
|
||||
});
|
||||
},
|
||||
|
||||
async getCompany({
|
||||
apiKey,
|
||||
companyId,
|
||||
}: {
|
||||
apiKey: AppConnectionValueForAuthProperty<typeof folkAuth>;
|
||||
companyId: string;
|
||||
}) {
|
||||
return this.makeRequest<{ data: any }>({
|
||||
method: HttpMethod.GET,
|
||||
url: `/v1/companies/${companyId}`,
|
||||
apiKey,
|
||||
});
|
||||
},
|
||||
|
||||
async searchCompany({ apiKey, query }: { apiKey: AppConnectionValueForAuthProperty<typeof folkAuth>; query: string }) {
|
||||
return this.makeRequest<{
|
||||
data: { items: any[]; pagination: { nextLink: string } };
|
||||
}>({
|
||||
method: HttpMethod.GET,
|
||||
url: `/v1/companies?limit=100&filter[name][like]=${encodeURIComponent(
|
||||
query
|
||||
)}`,
|
||||
apiKey,
|
||||
});
|
||||
},
|
||||
|
||||
async createCompany({ apiKey, data }: { apiKey: AppConnectionValueForAuthProperty<typeof folkAuth>; data: any }) {
|
||||
return this.makeRequest<{ data: any }>({
|
||||
method: HttpMethod.POST,
|
||||
url: '/v1/companies',
|
||||
apiKey: apiKey,
|
||||
body: data,
|
||||
});
|
||||
},
|
||||
|
||||
async updateCompany({
|
||||
apiKey,
|
||||
companyId,
|
||||
data,
|
||||
}: {
|
||||
apiKey: AppConnectionValueForAuthProperty<typeof folkAuth>;
|
||||
companyId: string;
|
||||
data: any;
|
||||
}) {
|
||||
return this.makeRequest<{ data: any }>({
|
||||
method: HttpMethod.PATCH,
|
||||
url: `/v1/companies/${companyId}`,
|
||||
apiKey,
|
||||
body: data,
|
||||
});
|
||||
},
|
||||
|
||||
async getGroups({ apiKey }: { apiKey: AppConnectionValueForAuthProperty<typeof folkAuth> }) {
|
||||
return this.makeRequest<{
|
||||
data: { items: any[]; pagination: { nextLink?: string } };
|
||||
}>({
|
||||
method: HttpMethod.GET,
|
||||
url: '/v1/groups',
|
||||
apiKey,
|
||||
});
|
||||
},
|
||||
|
||||
async createWebhook({
|
||||
apiKey,
|
||||
name,
|
||||
targetUrl,
|
||||
subscribedEvents,
|
||||
}: {
|
||||
apiKey: AppConnectionValueForAuthProperty<typeof folkAuth>;
|
||||
name: string;
|
||||
targetUrl: string;
|
||||
subscribedEvents: Array<{
|
||||
eventType: string;
|
||||
filter?: {
|
||||
groupId?: string;
|
||||
objectType?: string;
|
||||
path?: string[];
|
||||
value?: string;
|
||||
};
|
||||
}>;
|
||||
}) {
|
||||
return this.makeRequest<{
|
||||
data: {
|
||||
id: string;
|
||||
name: string;
|
||||
targetUrl: string;
|
||||
subscribedEvents: Array<{
|
||||
eventType: string;
|
||||
filter: Record<string, any>;
|
||||
}>;
|
||||
signingSecret: string;
|
||||
status: string;
|
||||
createdAt: string;
|
||||
};
|
||||
}>({
|
||||
method: HttpMethod.POST,
|
||||
url: '/v1/webhooks',
|
||||
apiKey,
|
||||
body: {
|
||||
name,
|
||||
targetUrl,
|
||||
subscribedEvents,
|
||||
},
|
||||
});
|
||||
},
|
||||
|
||||
async deleteWebhook({ apiKey, webhookId }: { apiKey: AppConnectionValueForAuthProperty<typeof folkAuth>; webhookId: string }) {
|
||||
return this.makeRequest<void>({
|
||||
method: HttpMethod.DELETE,
|
||||
url: `/v1/webhooks/${webhookId}`,
|
||||
apiKey,
|
||||
body: {}
|
||||
});
|
||||
},
|
||||
};
|
||||
@@ -0,0 +1,201 @@
|
||||
import { Property } from '@activepieces/pieces-framework';
|
||||
import { folkAuth } from './auth';
|
||||
import { folkClient } from './client';
|
||||
|
||||
export const folkProps = {
|
||||
group_id: (required = false, displayName = 'Group ID') =>
|
||||
Property.Dropdown({
|
||||
auth: folkAuth,
|
||||
displayName,
|
||||
description:
|
||||
'Enter a Folk group ID (e.g., grp_abc123). Groups help you organize your contacts.',
|
||||
required,
|
||||
refreshers: [],
|
||||
options: async ({ auth }) => {
|
||||
if (!auth) {
|
||||
return {
|
||||
disabled: true,
|
||||
placeholder: 'Connect your account to see groups.',
|
||||
options: [],
|
||||
};
|
||||
}
|
||||
|
||||
try {
|
||||
const response = await folkClient.getGroups({
|
||||
apiKey: auth,
|
||||
});
|
||||
const groups = response.data?.items || [];
|
||||
|
||||
return {
|
||||
disabled: false,
|
||||
placeholder:
|
||||
groups.length === 0 ? 'No groups found' : 'Select a group',
|
||||
options: groups.map((group: any) => ({
|
||||
label: group.name,
|
||||
value: group.id,
|
||||
})),
|
||||
};
|
||||
} catch (error) {
|
||||
return {
|
||||
disabled: true,
|
||||
placeholder: 'Error loading groups. Check your API key.',
|
||||
options: [],
|
||||
};
|
||||
}
|
||||
},
|
||||
}),
|
||||
|
||||
company_id: (required = false) =>
|
||||
Property.Dropdown({
|
||||
auth: folkAuth,
|
||||
displayName: 'Company',
|
||||
description: 'Select a company from your Folk workspace.',
|
||||
required,
|
||||
refreshers: [],
|
||||
options: async ({ auth }) => {
|
||||
if (!auth) {
|
||||
return {
|
||||
disabled: true,
|
||||
placeholder: 'Connect your account to see companies.',
|
||||
options: [],
|
||||
};
|
||||
}
|
||||
|
||||
try {
|
||||
const limit = 100;
|
||||
const response = await folkClient.getCompaniesWithFilters({
|
||||
apiKey: auth,
|
||||
limit,
|
||||
});
|
||||
const companies = response.data?.items || [];
|
||||
|
||||
return {
|
||||
disabled: false,
|
||||
placeholder:
|
||||
companies.length === 0
|
||||
? 'No companies found'
|
||||
: 'Select a company',
|
||||
options: companies.slice(0, 100).map((company: any) => {
|
||||
const emails = company.emails
|
||||
?.map((e: any) => e.email)
|
||||
.filter(Boolean)
|
||||
.join(', ');
|
||||
const label = emails
|
||||
? `${company.name} (${emails})`
|
||||
: company.name || `Company ${company.id}`;
|
||||
return {
|
||||
label,
|
||||
value: company.id,
|
||||
};
|
||||
}),
|
||||
};
|
||||
} catch (error) {
|
||||
return {
|
||||
disabled: true,
|
||||
placeholder: 'Error loading companies. Check your API key.',
|
||||
options: [],
|
||||
};
|
||||
}
|
||||
},
|
||||
}),
|
||||
companyIds: (required = false) =>
|
||||
Property.MultiSelectDropdown({
|
||||
auth: folkAuth,
|
||||
displayName: 'Companies',
|
||||
description: 'Select companies to associate with the person.',
|
||||
required,
|
||||
refreshers: [],
|
||||
options: async ({ auth }) => {
|
||||
if (!auth) {
|
||||
return {
|
||||
disabled: true,
|
||||
placeholder: 'Connect your account to see companies.',
|
||||
options: [],
|
||||
};
|
||||
}
|
||||
|
||||
try {
|
||||
const limit = 100;
|
||||
const response = await folkClient.getCompaniesWithFilters({
|
||||
apiKey: auth,
|
||||
limit,
|
||||
});
|
||||
const companies = response.data?.items || [];
|
||||
|
||||
return {
|
||||
disabled: false,
|
||||
placeholder:
|
||||
companies.length === 0
|
||||
? 'No companies found'
|
||||
: 'Select companies',
|
||||
options: companies.map((company: any) => ({
|
||||
label: company.name,
|
||||
value: company.id,
|
||||
})),
|
||||
};
|
||||
} catch (error) {
|
||||
return {
|
||||
disabled: true,
|
||||
placeholder: 'Error loading companies. Check your API key.',
|
||||
options: [],
|
||||
};
|
||||
}
|
||||
},
|
||||
}),
|
||||
|
||||
person_id: (required = false) =>
|
||||
Property.Dropdown({
|
||||
auth: folkAuth,
|
||||
displayName: 'Person',
|
||||
description: 'Select a person from your Folk workspace.',
|
||||
required,
|
||||
refreshers: [],
|
||||
options: async ({ auth }) => {
|
||||
if (!auth) {
|
||||
return {
|
||||
disabled: true,
|
||||
placeholder: 'Connect your account to see people.',
|
||||
options: [],
|
||||
};
|
||||
}
|
||||
|
||||
try {
|
||||
const limit = 100;
|
||||
const response = await folkClient.getPeopleWithFilters({
|
||||
apiKey: auth,
|
||||
limit,
|
||||
});
|
||||
const people = response.data?.items || [];
|
||||
|
||||
return {
|
||||
disabled: false,
|
||||
placeholder:
|
||||
people.length === 0 ? 'No people found' : 'Select a person',
|
||||
options: people.slice(0, 100).map((person: any) => {
|
||||
const name =
|
||||
person.fullName ||
|
||||
person.name ||
|
||||
`${person.firstName || ''} ${person.lastName || ''}`.trim();
|
||||
const emails = person.emails
|
||||
?.map((e: any) => e.email)
|
||||
.filter(Boolean)
|
||||
.join(', ');
|
||||
const label = emails
|
||||
? `${name} (${emails})`
|
||||
: name || `Person ${person.id}`;
|
||||
return {
|
||||
label,
|
||||
value: person.id,
|
||||
};
|
||||
}),
|
||||
};
|
||||
} catch (error) {
|
||||
return {
|
||||
disabled: true,
|
||||
placeholder: 'Error loading people. Check your API key.',
|
||||
options: [],
|
||||
};
|
||||
}
|
||||
},
|
||||
}),
|
||||
};
|
||||
@@ -0,0 +1,76 @@
|
||||
import {
|
||||
createTrigger,
|
||||
Property,
|
||||
TriggerStrategy,
|
||||
} from '@activepieces/pieces-framework';
|
||||
import { folkAuth } from '../common/auth';
|
||||
import { folkClient } from '../common/client';
|
||||
import { folkProps } from '../common/props';
|
||||
|
||||
export const companyAdded = createTrigger({
|
||||
auth: folkAuth,
|
||||
name: 'company_added',
|
||||
displayName: 'Company Added',
|
||||
description: 'Fires when a new company is added to your Folk workspace.',
|
||||
props: {
|
||||
groupId: folkProps.group_id(false, 'Group ID'),
|
||||
},
|
||||
sampleData: {
|
||||
id: 'evt_6004f2ef-dcc3-4c56-a704-9326730ad100',
|
||||
type: 'company.created',
|
||||
createdAt: '2025-09-30T09:55:52.715Z',
|
||||
source:
|
||||
'https://api.folk.app/v1/webhooks/wbk_2f15ec4f-0f70-4884-a43d-1f88ef7a6665',
|
||||
data: {
|
||||
id: 'com_05837e2d-9bf7-4f17-8729-e95f1be4de67',
|
||||
url: 'https://api.folk.app/v1/companies/com_05837e2d-9bf7-4f17-8729-e95f1be4de67',
|
||||
},
|
||||
},
|
||||
type: TriggerStrategy.WEBHOOK,
|
||||
|
||||
async onEnable(context) {
|
||||
const eventConfig: any = {
|
||||
eventType: 'company.created',
|
||||
};
|
||||
|
||||
if (context.propsValue?.groupId) {
|
||||
eventConfig.filter = {
|
||||
groupId: context.propsValue.groupId,
|
||||
};
|
||||
}
|
||||
|
||||
const subscribedEvents = [eventConfig];
|
||||
|
||||
const webhook = await folkClient.createWebhook({
|
||||
apiKey: context.auth,
|
||||
name: `Activepieces Company Added - ${Date.now()}`,
|
||||
targetUrl: context.webhookUrl,
|
||||
subscribedEvents,
|
||||
});
|
||||
|
||||
await context.store?.put('_webhookId', webhook.data.id);
|
||||
// await context.store?.put('_signingSecret', webhook.data.signingSecret);
|
||||
},
|
||||
|
||||
async onDisable(context) {
|
||||
const webhookId = (await context.store?.get('_webhookId')) as string;
|
||||
if (webhookId) {
|
||||
try {
|
||||
await folkClient.deleteWebhook({
|
||||
apiKey: context.auth,
|
||||
webhookId,
|
||||
});
|
||||
} catch (error) {
|
||||
console.warn('Failed to delete webhook:', error);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
async run(context) {
|
||||
const payloadBody = context.payload.body as any;
|
||||
if (payloadBody.type !== 'company.created') {
|
||||
return [];
|
||||
}
|
||||
return [payloadBody];
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,76 @@
|
||||
import { createTrigger, TriggerStrategy } from '@activepieces/pieces-framework';
|
||||
import { folkAuth } from '../common/auth';
|
||||
import { folkClient } from '../common/client';
|
||||
|
||||
export const companyCustomFieldUpdated = createTrigger({
|
||||
auth: folkAuth,
|
||||
name: 'company_custom_field_updated',
|
||||
displayName: 'Company Groups Updated',
|
||||
description:
|
||||
"Fires when a company's group assignments are updated in your Folk workspace.",
|
||||
props: {},
|
||||
sampleData: {
|
||||
id: 'evt_6004f2ef-dcc3-4c56-a704-9326730ad100',
|
||||
type: 'company.groups_updated',
|
||||
createdAt: '2025-09-30T09:55:52.715Z',
|
||||
source:
|
||||
'https://api.folk.app/v1/webhooks/wbk_2f15ec4f-0f70-4884-a43d-1f88ef7a6665',
|
||||
data: {
|
||||
id: 'com_05837e2d-9bf7-4f17-8729-e95f1be4de67',
|
||||
url: 'https://api.folk.app/v1/companies/com_05837e2d-9bf7-4f17-8729-e95f1be4de67',
|
||||
changes: [
|
||||
{
|
||||
path: ['groups'],
|
||||
type: 'add',
|
||||
value: [{ id: 'grp_bc984b3f-0386-434d-82d7-a91eb6badd71' }],
|
||||
},
|
||||
{
|
||||
path: ['groups'],
|
||||
type: 'remove',
|
||||
value: [{ id: 'grp_3b7d7b65-4c2d-4b65-822a-6bc759e1e951' }],
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
type: TriggerStrategy.WEBHOOK,
|
||||
|
||||
async onEnable(context) {
|
||||
const subscribedEvents = [
|
||||
{
|
||||
eventType: 'company.groups_updated',
|
||||
},
|
||||
];
|
||||
|
||||
const webhook = await folkClient.createWebhook({
|
||||
apiKey: context.auth,
|
||||
name: `Activepieces Company Groups Updated - ${Date.now()}`,
|
||||
targetUrl: context.webhookUrl,
|
||||
subscribedEvents,
|
||||
});
|
||||
|
||||
await context.store?.put('_webhookId', webhook.data.id);
|
||||
// await context.store?.put('_signingSecret', webhook.data.signingSecret);
|
||||
},
|
||||
|
||||
async onDisable(context) {
|
||||
const webhookId = (await context.store?.get('_webhookId')) as string;
|
||||
if (webhookId) {
|
||||
try {
|
||||
await folkClient.deleteWebhook({
|
||||
apiKey: context.auth,
|
||||
webhookId,
|
||||
});
|
||||
} catch (error) {
|
||||
console.warn('Failed to delete webhook:', error);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
async run(context) {
|
||||
const payloadBody = context.payload.body as any;
|
||||
if (payloadBody.type !== 'company.groups_updated') {
|
||||
return [];
|
||||
}
|
||||
return [payloadBody];
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,80 @@
|
||||
import {
|
||||
createTrigger,
|
||||
Property,
|
||||
TriggerStrategy,
|
||||
} from '@activepieces/pieces-framework';
|
||||
import { folkAuth } from '../common/auth';
|
||||
import { folkClient } from '../common/client';
|
||||
import { folkProps } from '../common/props';
|
||||
|
||||
export const companyRemoved = createTrigger({
|
||||
auth: folkAuth,
|
||||
name: 'company_removed',
|
||||
displayName: 'Company Removed',
|
||||
description: 'Fires when a company is removed from your Folk workspace.',
|
||||
props: {
|
||||
groupId: folkProps.group_id(false, 'Group ID'),
|
||||
},
|
||||
sampleData: {
|
||||
id: 'evt_6004f2ef-dcc3-4c56-a704-9326730ad100',
|
||||
type: 'company.deleted',
|
||||
createdAt: '2025-09-30T09:55:52.715Z',
|
||||
source:
|
||||
'https://api.folk.app/v1/webhooks/wbk_2f15ec4f-0f70-4884-a43d-1f88ef7a6665',
|
||||
data: {
|
||||
id: 'com_05837e2d-9bf7-4f17-8729-e95f1be4de67',
|
||||
url: 'https://api.folk.app/v1/companies/com_05837e2d-9bf7-4f17-8729-e95f1be4de67',
|
||||
details: {
|
||||
name: 'ACME Inc.',
|
||||
emails: ['hello@acme.com'],
|
||||
},
|
||||
},
|
||||
},
|
||||
type: TriggerStrategy.WEBHOOK,
|
||||
|
||||
async onEnable(context) {
|
||||
const eventConfig: any = {
|
||||
eventType: 'company.deleted',
|
||||
};
|
||||
|
||||
if (context.propsValue?.groupId) {
|
||||
eventConfig.filter = {
|
||||
groupId: context.propsValue.groupId,
|
||||
};
|
||||
}
|
||||
|
||||
const subscribedEvents = [eventConfig];
|
||||
|
||||
const webhook = await folkClient.createWebhook({
|
||||
apiKey: context.auth,
|
||||
name: `Activepieces Company Removed - ${Date.now()}`,
|
||||
targetUrl: context.webhookUrl,
|
||||
subscribedEvents,
|
||||
});
|
||||
|
||||
await context.store?.put('_webhookId', webhook.data.id);
|
||||
// await context.store?.put('_signingSecret', webhook.data.signingSecret);
|
||||
},
|
||||
|
||||
async onDisable(context) {
|
||||
const webhookId = (await context.store?.get('_webhookId')) as string;
|
||||
if (webhookId) {
|
||||
try {
|
||||
await folkClient.deleteWebhook({
|
||||
apiKey: context.auth,
|
||||
webhookId,
|
||||
});
|
||||
} catch (error) {
|
||||
console.warn('Failed to delete webhook:', error);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
async run(context) {
|
||||
const payloadBody = context.payload.body as any;
|
||||
if (payloadBody.type !== 'company.deleted') {
|
||||
return [];
|
||||
}
|
||||
return [payloadBody];
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,113 @@
|
||||
import {
|
||||
createTrigger,
|
||||
Property,
|
||||
TriggerStrategy,
|
||||
} from '@activepieces/pieces-framework';
|
||||
import { folkAuth } from '../common/auth';
|
||||
import { folkClient } from '../common/client';
|
||||
import { folkProps } from '../common/props';
|
||||
|
||||
export const companyUpdated = createTrigger({
|
||||
auth: folkAuth,
|
||||
name: 'company_updated',
|
||||
displayName: 'Company Updated',
|
||||
description: 'Fires when a company is updated in your Folk workspace.',
|
||||
props: {
|
||||
groupId: folkProps.group_id(false, 'Group ID'),
|
||||
},
|
||||
sampleData: {
|
||||
id: 'evt_6004f2ef-dcc3-4c56-a704-9326730ad100',
|
||||
type: 'company.updated',
|
||||
createdAt: '2025-09-30T09:55:52.715Z',
|
||||
source:
|
||||
'https://api.folk.app/v1/webhooks/wbk_2f15ec4f-0f70-4884-a43d-1f88ef7a6665',
|
||||
data: {
|
||||
id: 'com_05837e2d-9bf7-4f17-8729-e95f1be4de67',
|
||||
url: 'https://api.folk.app/v1/companies/com_05837e2d-9bf7-4f17-8729-e95f1be4de67',
|
||||
changes: [
|
||||
{
|
||||
path: ['name'],
|
||||
type: 'set',
|
||||
value: 'ACME Inc.',
|
||||
},
|
||||
{
|
||||
path: ['description'],
|
||||
type: 'set',
|
||||
},
|
||||
{
|
||||
path: [
|
||||
'customFieldValues',
|
||||
'grp_bc984b3f-0386-434d-82d7-a91eb6badd71',
|
||||
'Status',
|
||||
],
|
||||
type: 'set',
|
||||
value: 'In Progress',
|
||||
},
|
||||
{
|
||||
path: [
|
||||
'customFieldValues',
|
||||
'grp_bc984b3f-0386-434d-82d7-a91eb6badd71',
|
||||
'Tags',
|
||||
],
|
||||
type: 'remove',
|
||||
value: ['VIP'],
|
||||
},
|
||||
{
|
||||
path: [
|
||||
'customFieldValues',
|
||||
'grp_bc984b3f-0386-434d-82d7-a91eb6badd71',
|
||||
'Assigned to',
|
||||
],
|
||||
type: 'add',
|
||||
value: [{ id: 'usr_3b7d7b65-4c2d-4b65-822a-6bc759e1e951' }],
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
type: TriggerStrategy.WEBHOOK,
|
||||
|
||||
async onEnable(context) {
|
||||
const eventConfig: any = {
|
||||
eventType: 'company.updated',
|
||||
};
|
||||
|
||||
if (context.propsValue?.groupId) {
|
||||
eventConfig.filter = {
|
||||
groupId: context.propsValue.groupId,
|
||||
};
|
||||
}
|
||||
|
||||
const subscribedEvents = [eventConfig];
|
||||
|
||||
const webhook = await folkClient.createWebhook({
|
||||
apiKey: context.auth,
|
||||
name: `Activepieces Company Updated - ${Date.now()}`,
|
||||
targetUrl: context.webhookUrl,
|
||||
subscribedEvents,
|
||||
});
|
||||
|
||||
await context.store?.put('_webhookId', webhook.data.id);
|
||||
},
|
||||
|
||||
async onDisable(context) {
|
||||
const webhookId = (await context.store?.get('_webhookId')) as string;
|
||||
if (webhookId) {
|
||||
try {
|
||||
await folkClient.deleteWebhook({
|
||||
apiKey: context.auth,
|
||||
webhookId,
|
||||
});
|
||||
} catch (error) {
|
||||
console.warn('Failed to delete webhook:', error);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
async run(context) {
|
||||
const payloadBody = context.payload.body as any;
|
||||
if (payloadBody.type !== 'company.updated') {
|
||||
return [];
|
||||
}
|
||||
return [payloadBody];
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,83 @@
|
||||
import {
|
||||
createTrigger,
|
||||
TriggerStrategy,
|
||||
Property,
|
||||
} from '@activepieces/pieces-framework';
|
||||
import {
|
||||
httpClient,
|
||||
HttpRequest,
|
||||
HttpMethod,
|
||||
} from '@activepieces/pieces-common';
|
||||
import { folkAuth } from '../common/auth';
|
||||
import { folkClient } from '../common/client';
|
||||
import { folkProps } from '../common/props';
|
||||
|
||||
export const personAdded = createTrigger({
|
||||
auth: folkAuth,
|
||||
name: 'person_added',
|
||||
displayName: 'Person Added',
|
||||
description: 'Fires when a new person is added to your Folk workspace.',
|
||||
props: {
|
||||
groupId: folkProps.group_id(false, 'Group ID'),
|
||||
},
|
||||
sampleData: {
|
||||
id: 'evt_6004f2ef-dcc3-4c56-a704-9326730ad100',
|
||||
type: 'person.created',
|
||||
createdAt: '2025-09-30T09:55:52.715Z',
|
||||
source:
|
||||
'https://api.folk.app/v1/webhooks/wbk_2f15ec4f-0f70-4884-a43d-1f88ef7a6665',
|
||||
data: {
|
||||
id: 'per_05837e2d-9bf7-4f17-8729-e95f1be4de67',
|
||||
url: 'https://api.folk.app/v1/people/per_05837e2d-9bf7-4f17-8729-e95f1be4de67',
|
||||
},
|
||||
},
|
||||
type: TriggerStrategy.WEBHOOK,
|
||||
|
||||
async onEnable(context) {
|
||||
const eventConfig: any = {
|
||||
eventType: 'person.created',
|
||||
};
|
||||
|
||||
if (context.propsValue?.groupId) {
|
||||
eventConfig.filter = {
|
||||
groupId: context.propsValue.groupId,
|
||||
};
|
||||
}
|
||||
|
||||
const subscribedEvents = [eventConfig];
|
||||
|
||||
const webhook = await folkClient.createWebhook({
|
||||
apiKey: context.auth,
|
||||
name: `Activepieces Person Added - ${Date.now()}`,
|
||||
targetUrl: context.webhookUrl,
|
||||
subscribedEvents,
|
||||
});
|
||||
|
||||
await context.store?.put('_webhookId', webhook.data.id);
|
||||
// await context.store?.put('_signingSecret', webhook.data.signingSecret);
|
||||
},
|
||||
|
||||
async onDisable(context) {
|
||||
const webhookId = (await context.store?.get('_webhookId')) as string;
|
||||
if (webhookId) {
|
||||
try {
|
||||
await folkClient.deleteWebhook({
|
||||
apiKey: context.auth,
|
||||
webhookId,
|
||||
});
|
||||
} catch (error) {
|
||||
// Webhook might already be deleted, ignore error
|
||||
console.warn('Failed to delete webhook:', error);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
async run(context) {
|
||||
const payloadBody = context.payload.body as any;
|
||||
|
||||
if (payloadBody.type !== 'person.created') {
|
||||
return [];
|
||||
}
|
||||
return [payloadBody];
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,76 @@
|
||||
import { createTrigger, TriggerStrategy } from '@activepieces/pieces-framework';
|
||||
import { folkAuth } from '../common/auth';
|
||||
import { folkClient } from '../common/client';
|
||||
|
||||
export const personCustomFieldUpdated = createTrigger({
|
||||
auth: folkAuth,
|
||||
name: 'person_custom_field_updated',
|
||||
displayName: 'Person Groups Updated',
|
||||
description:
|
||||
"Fires when a person's group assignments are updated in your Folk workspace.",
|
||||
props: {},
|
||||
sampleData: {
|
||||
id: 'evt_6004f2ef-dcc3-4c56-a704-9326730ad100',
|
||||
type: 'person.groups_updated',
|
||||
createdAt: '2025-09-30T09:55:52.715Z',
|
||||
source:
|
||||
'https://api.folk.app/v1/webhooks/wbk_2f15ec4f-0f70-4884-a43d-1f88ef7a6665',
|
||||
data: {
|
||||
id: 'per_05837e2d-9bf7-4f17-8729-e95f1be4de67',
|
||||
url: 'https://api.folk.app/v1/people/per_05837e2d-9bf7-4f17-8729-e95f1be4de67',
|
||||
changes: [
|
||||
{
|
||||
path: ['groups'],
|
||||
type: 'add',
|
||||
value: [{ id: 'grp_bc984b3f-0386-434d-82d7-a91eb6badd71' }],
|
||||
},
|
||||
{
|
||||
path: ['groups'],
|
||||
type: 'remove',
|
||||
value: [{ id: 'grp_3b7d7b65-4c2d-4b65-822a-6bc759e1e951' }],
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
type: TriggerStrategy.WEBHOOK,
|
||||
|
||||
async onEnable(context) {
|
||||
const subscribedEvents = [
|
||||
{
|
||||
eventType: 'person.groups_updated',
|
||||
},
|
||||
];
|
||||
|
||||
const webhook = await folkClient.createWebhook({
|
||||
apiKey: context.auth,
|
||||
name: `Activepieces Person Groups Updated - ${Date.now()}`,
|
||||
targetUrl: context.webhookUrl,
|
||||
subscribedEvents,
|
||||
});
|
||||
|
||||
await context.store?.put('_webhookId', webhook.data.id);
|
||||
// await context.store?.put('_signingSecret', webhook.data.signingSecret);
|
||||
},
|
||||
|
||||
async onDisable(context) {
|
||||
const webhookId = (await context.store?.get('_webhookId')) as string;
|
||||
if (webhookId) {
|
||||
try {
|
||||
await folkClient.deleteWebhook({
|
||||
apiKey: context.auth,
|
||||
webhookId,
|
||||
});
|
||||
} catch (error) {
|
||||
console.warn('Failed to delete webhook:', error);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
async run(context) {
|
||||
const payloadBody = context.payload.body as any;
|
||||
if (payloadBody.type !== 'person.groups_updated') {
|
||||
return [];
|
||||
}
|
||||
return [payloadBody];
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,76 @@
|
||||
import { createTrigger, TriggerStrategy } from '@activepieces/pieces-framework';
|
||||
import { folkAuth } from '../common/auth';
|
||||
import { folkClient } from '../common/client';
|
||||
import { folkProps } from '../common/props';
|
||||
|
||||
export const personRemoved = createTrigger({
|
||||
auth: folkAuth,
|
||||
name: 'person_removed',
|
||||
displayName: 'Person Removed',
|
||||
description: 'Fires when a person is removed from your Folk workspace.',
|
||||
props: {
|
||||
groupId: folkProps.group_id(false, 'Group ID'),
|
||||
},
|
||||
sampleData: {
|
||||
id: 'evt_6004f2ef-dcc3-4c56-a704-9326730ad100',
|
||||
type: 'person.deleted',
|
||||
createdAt: '2025-09-30T09:55:52.715Z',
|
||||
source:
|
||||
'https://api.folk.app/v1/webhooks/wbk_2f15ec4f-0f70-4884-a43d-1f88ef7a6665',
|
||||
data: {
|
||||
id: 'per_05837e2d-9bf7-4f17-8729-e95f1be4de67',
|
||||
url: 'https://api.folk.app/v1/people/per_05837e2d-9bf7-4f17-8729-e95f1be4de67',
|
||||
details: {
|
||||
name: 'John Doe',
|
||||
emails: ['john@doe.com'],
|
||||
},
|
||||
},
|
||||
},
|
||||
type: TriggerStrategy.WEBHOOK,
|
||||
|
||||
async onEnable(context) {
|
||||
const eventConfig: any = {
|
||||
eventType: 'person.deleted',
|
||||
};
|
||||
|
||||
if (context.propsValue?.groupId) {
|
||||
eventConfig.filter = {
|
||||
groupId: context.propsValue.groupId,
|
||||
};
|
||||
}
|
||||
|
||||
const subscribedEvents = [eventConfig];
|
||||
|
||||
const webhook = await folkClient.createWebhook({
|
||||
apiKey: context.auth,
|
||||
name: `Activepieces Person Removed - ${Date.now()}`,
|
||||
targetUrl: context.webhookUrl,
|
||||
subscribedEvents,
|
||||
});
|
||||
|
||||
await context.store?.put('_webhookId', webhook.data.id);
|
||||
// await context.store?.put('_signingSecret', webhook.data.signingSecret);
|
||||
},
|
||||
|
||||
async onDisable(context) {
|
||||
const webhookId = (await context.store?.get('_webhookId')) as string;
|
||||
if (webhookId) {
|
||||
try {
|
||||
await folkClient.deleteWebhook({
|
||||
apiKey: context.auth,
|
||||
webhookId,
|
||||
});
|
||||
} catch (error) {
|
||||
console.warn('Failed to delete webhook:', error);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
async run(context) {
|
||||
const payloadBody = context.payload.body as any;
|
||||
if (payloadBody.type !== 'person.deleted') {
|
||||
return [];
|
||||
}
|
||||
return [payloadBody];
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,115 @@
|
||||
import { createTrigger, TriggerStrategy } from '@activepieces/pieces-framework';
|
||||
import { folkAuth } from '../common/auth';
|
||||
import { folkClient } from '../common/client';
|
||||
import { folkProps } from '../common/props';
|
||||
|
||||
export const personUpdated = createTrigger({
|
||||
auth: folkAuth,
|
||||
name: 'person_updated',
|
||||
displayName: 'Person Updated',
|
||||
description: 'Fires when a person is updated in your Folk workspace.',
|
||||
props: {
|
||||
groupId: folkProps.group_id(false, 'Group ID'),
|
||||
},
|
||||
sampleData: {
|
||||
id: 'evt_6004f2ef-dcc3-4c56-a704-9326730ad100',
|
||||
type: 'person.updated',
|
||||
createdAt: '2025-09-30T09:55:52.715Z',
|
||||
source:
|
||||
'https://api.folk.app/v1/webhooks/wbk_2f15ec4f-0f70-4884-a43d-1f88ef7a6665',
|
||||
data: {
|
||||
id: 'per_05837e2d-9bf7-4f17-8729-e95f1be4de67',
|
||||
url: 'https://api.folk.app/v1/people/per_05837e2d-9bf7-4f17-8729-e95f1be4de67',
|
||||
changes: [
|
||||
{
|
||||
path: ['firstName'],
|
||||
type: 'set',
|
||||
value: 'John',
|
||||
},
|
||||
{
|
||||
path: ['description'],
|
||||
type: 'set',
|
||||
},
|
||||
{
|
||||
path: ['companies'],
|
||||
type: 'add',
|
||||
value: [{ id: 'com_3b7d7b65-4c2d-4b65-822a-6bc759e1e951' }],
|
||||
},
|
||||
{
|
||||
path: [
|
||||
'customFieldValues',
|
||||
'grp_bc984b3f-0386-434d-82d7-a91eb6badd71',
|
||||
'Status',
|
||||
],
|
||||
type: 'set',
|
||||
value: 'In Progress',
|
||||
},
|
||||
{
|
||||
path: [
|
||||
'customFieldValues',
|
||||
'grp_bc984b3f-0386-434d-82d7-a91eb6badd71',
|
||||
'Tags',
|
||||
],
|
||||
type: 'remove',
|
||||
value: ['VIP'],
|
||||
},
|
||||
{
|
||||
path: [
|
||||
'customFieldValues',
|
||||
'grp_bc984b3f-0386-434d-82d7-a91eb6badd71',
|
||||
'Assigned to',
|
||||
],
|
||||
type: 'add',
|
||||
value: [{ id: 'usr_3b7d7b65-4c2d-4b65-822a-6bc759e1e951' }],
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
type: TriggerStrategy.WEBHOOK,
|
||||
|
||||
async onEnable(context) {
|
||||
const eventConfig: any = {
|
||||
eventType: 'person.updated',
|
||||
};
|
||||
|
||||
if (context.propsValue?.groupId) {
|
||||
eventConfig.filter = {
|
||||
groupId: context.propsValue.groupId,
|
||||
};
|
||||
}
|
||||
|
||||
const subscribedEvents = [eventConfig];
|
||||
|
||||
const webhook = await folkClient.createWebhook({
|
||||
apiKey: context.auth,
|
||||
name: `Activepieces Person Updated - ${Date.now()}`,
|
||||
targetUrl: context.webhookUrl,
|
||||
subscribedEvents,
|
||||
});
|
||||
|
||||
await context.store?.put('_webhookId', webhook.data.id);
|
||||
// await context.store?.put('_signingSecret', webhook.data.signingSecret);
|
||||
},
|
||||
|
||||
async onDisable(context) {
|
||||
const webhookId = (await context.store?.get('_webhookId')) as string;
|
||||
if (webhookId) {
|
||||
try {
|
||||
await folkClient.deleteWebhook({
|
||||
apiKey: context.auth,
|
||||
webhookId,
|
||||
});
|
||||
} catch (error) {
|
||||
console.warn('Failed to delete webhook:', error);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
async run(context) {
|
||||
const payloadBody = context.payload.body as any;
|
||||
if (payloadBody.type !== 'person.updated') {
|
||||
return [];
|
||||
}
|
||||
return [payloadBody];
|
||||
},
|
||||
});
|
||||
Reference in New Issue
Block a user