Add Activepieces integration for workflow automation

- Add Activepieces fork with SmoothSchedule custom piece
- Create integrations app with Activepieces service layer
- Add embed token endpoint for iframe integration
- Create Automations page with embedded workflow builder
- Add sidebar visibility fix for embed mode
- Add list inactive customers endpoint to Public API
- Include SmoothSchedule triggers: event created/updated/cancelled
- Include SmoothSchedule actions: create/update/cancel events, list resources/services/customers

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
poduck
2025-12-18 22:59:37 -05:00
parent 9848268d34
commit 3aa7199503
16292 changed files with 1284892 additions and 4708 deletions

View File

@@ -0,0 +1,91 @@
{
"Business management software": "Business-Management-Software",
"Domain": "Domäne",
"API Key": "API-Schlüssel",
"\n 1. Log in to your flowlu account.\n 2. Click on your profile-pic(top-right) and navigate to **Portal Settings->API Settings**.\n 3. Create new API key with any name and appropriate scope.\n 4. Copy API Key to your clipboard and paste it in **API Key** field\n 5. In the Domain field, enter your company from your account URL address. For example, if your account URL address is https://example.flowlu.com, then your domain is **example**.\n ": "\n 1. Loggen Sie sich in Ihr Fluss-Konto ein.\n 2. Klicken Sie auf Ihr Profilbild (oben rechts) und navigieren Sie zu **Portal-Einstellungen->API-Einstellungen**.\n 3. Erstellen Sie einen neuen API-Schlüssel mit jedem Namen und entsprechendem Umfang.\n 4. Kopieren Sie den API-Schlüssel in Ihre Zwischenablage und fügen Sie ihn in das **API Key** Feld\n 5 ein. Geben Sie im Feld Domain Ihre Firma von der URL Ihres Kontos ein. Wenn Ihre Account-URL zum Beispiel https://example.flowlu.com ist, dann ist Ihre Domain **beispiel**.\n ",
"Create CRM Account(Contact)": "CRM-Konto erstellen (Kontakt)",
"Update CRM Account(Contact)": "CRM-Konto aktualisieren (Kontakt)",
"Delete CRM Account(Contact)": "CRM-Konto löschen (Kontakt)",
"Create CRM Account(Organization)": "CRM-Konto (Organisation) erstellen",
"Create Opportunity": "Verkaufschance erstellen",
"Update Opportunity": "Update-Verkaufschance",
"Delete Opportunity": "Verkaufschance löschen",
"Create Task": "Aufgabe erstellen",
"Update Task": "Aufgabe aktualisieren",
"Get Task": "Aufgabe abrufen",
"Delete Task": "Aufgabe löschen",
"Creates a new contact in CRM.": "Erstellt einen neuen Kontakt in CRM.",
"Updates an existing contact in CRM.": "Aktualisiert einen bestehenden Kontakt in CRM.",
"Deletes an existing contact in CRM.": "Löscht einen bestehenden Kontakt in CRM.",
"Creates a new organization in CRM.": "Erstellt eine neue Organisation in CRM.",
"Creates a new opportunity.": "Erstellt eine neue Chance.",
"Updates an existing opportunity.": "Aktualisiert eine vorhandene Möglichkeit.",
"Deletes an existing opportunity.": "Löscht eine vorhandene Chance.",
"Creates a new task.": "Erstellt eine neue Aufgabe.",
"Updates an existing task.": "Aktualisiert eine existierende Aufgabe.",
"Retrieves an existing task.": "Ruft eine vorhandene Aufgabe ab.",
"Deletes an existing task.": "Löscht eine existierende Aufgabe.",
"Title": "Titel",
"First Name": "Vorname",
"Middle Name": "Mittlerer Name",
"Last Name": "Nachname",
"Assignee ID": "Assignee ID",
"Account Category": "Kontokategorie",
"Account Industry": "Kunden-Industrie",
"Website": "Webseite",
"Email": "E-Mail",
"Primary Phone Number": "Primäre Telefonnummer",
"Description": "Beschreibung",
"VAT or TAX ID": "USt-ID oder TAX-ID",
"Bank Details": "Bankdetails",
"Telegram": "Telegramm",
"Skype Account ID": "Skype-Konto-ID",
"Link to Google+": "Link zu Google+",
"Link to Facebook": "Link zu Facebook",
"Link to Linkedin": "Link zu Linkedin",
"Link to Instagram": "Link zum Instagram",
"Billing Country": "Rechnungsland",
"Billing State": "Rechnungsstatus",
"Billing City": "Rechnungsort",
"Billing Postal code": "Rechnungspostleitzahl",
"Billing Address Line 1": "Rechnungsadresse: Zeile 1",
"Billing Address Line 2": "Rechnungsadresse: Zeile 2",
"Billing Address Line 3": "Rechnungsadresse: Zeile 3",
"Shipping Country": "Versandland",
"Shipping State": "Versandstatus",
"Shipping City": "Versandort",
"Shipping Postal code": "Versand Postleitzahl",
"Shipping Address Line 1": "Lieferadresse Zeile 1",
"Shipping Address Line 2": "Lieferadresse Zeile 2",
"Shipping Address Line 3": "Lieferadresse Zeile 3",
"Contact ID": "Kontakt-ID",
"Organization Name": "Organisationsname",
"Full legal name for Organization": "Vollständiger gültiger Name für Organisation",
"Opportunity Amount": "Verkaufschance Betrag",
"Opportunity Source": "Verkaufschance Quelle",
"Start Date": "Startdatum",
"End Date": "Enddatum",
"Customer ID": "Kunden-ID",
"Sales Pipeline ID": "Verkaufs-Pipeline-ID",
"Sales Pipeline Stage ID": "Sales Pipeline Stage ID",
"Opportunity ID": "Verkaufs-ID",
"Name": "Name",
"Priority": "Priorität",
"The assignee can change the end date for this task?": "Der Beauftragte kann das Enddatum für diese Aufgabe ändern?",
"This task needs approval from the owner?": "Diese Aufgabe muss vom Besitzer genehmigt werden?",
"Owner ID": "Eigentümer-ID",
"Task Type": "Aufgabentyp",
"Task Workflow ID": "Aufgaben-Workflow-ID",
"Task Workflow Status ID": "Aufgaben-Workflow-Status-ID",
"Task ID": "Task ID",
"Please use YYYY-MM-DD HH:mm:ss format.": "Bitte verwenden Sie das Format YYY-MM-TT HH:mm:ss Format.",
"This is an id of the CRM company or contact which is needed to be linked with the opportunity. This allows you to link the client to the opportunity. If your client is a company, and you need to relate an opportunity to the person (contact) at this company, then enter his/her id in the contact_id field.": "Dies ist eine ID des CRM-Unternehmens oder des Kontakts, der mit der Möglichkeit verknüpft werden muss. So können Sie den Client mit der Möglichkeit verbinden. Wenn Ihr Kunde ein Unternehmen ist und Sie eine Möglichkeit mit der Person (Kontakt) in dieser Firma verknüpfen müssen dann geben Sie seine ID in das Feld contact_id ein.",
"Id of the company-related contact (account_id).": "ID des unternehmensbezogenen Kontakts (account_id).",
"Low": "Niedrig",
"Medium": "Mittel",
"High": "Hoch",
"Task": "Aufgabe",
"Inbox": "Inbox",
"Event": "Ereignis",
"Task template": "Aufgabenvorlage"
}

View File

@@ -0,0 +1,91 @@
{
"Business management software": "Software de gestión empresarial",
"Domain": "Dominio",
"API Key": "Clave API",
"\n 1. Log in to your flowlu account.\n 2. Click on your profile-pic(top-right) and navigate to **Portal Settings->API Settings**.\n 3. Create new API key with any name and appropriate scope.\n 4. Copy API Key to your clipboard and paste it in **API Key** field\n 5. In the Domain field, enter your company from your account URL address. For example, if your account URL address is https://example.flowlu.com, then your domain is **example**.\n ": "\n 1. Log in to your flowlu account.\n 2. Click on your profile-pic(top-right) and navigate to **Portal Settings->API Settings**.\n 3. Create new API key with any name and appropriate scope.\n 4. Copy API Key to your clipboard and paste it in **API Key** field\n 5. In the Domain field, enter your company from your account URL address. For example, if your account URL address is https://example.flowlu.com, then your domain is **example**.\n ",
"Create CRM Account(Contact)": "Crear cuenta CRM (Contacto)",
"Update CRM Account(Contact)": "Actualizar cuenta CRM (Contacto)",
"Delete CRM Account(Contact)": "Eliminar cuenta CRM (Contacto)",
"Create CRM Account(Organization)": "Crear cuenta CRM (organización)",
"Create Opportunity": "Crear Oportunidad",
"Update Opportunity": "Actualizar Oportunidad",
"Delete Opportunity": "Eliminar Oportunidad",
"Create Task": "Crear tarea",
"Update Task": "Actualizar tarea",
"Get Task": "Obtener tarea",
"Delete Task": "Eliminar tarea",
"Creates a new contact in CRM.": "Crea un nuevo contacto en CRM.",
"Updates an existing contact in CRM.": "Actualiza un contacto existente en CRM.",
"Deletes an existing contact in CRM.": "Elimina un contacto existente en CRM.",
"Creates a new organization in CRM.": "Crea una nueva organización en CRM.",
"Creates a new opportunity.": "Crea una nueva oportunidad.",
"Updates an existing opportunity.": "Actualiza una oportunidad existente.",
"Deletes an existing opportunity.": "Elimina una oportunidad existente.",
"Creates a new task.": "Crea una nueva tarea.",
"Updates an existing task.": "Actualiza una tarea existente.",
"Retrieves an existing task.": "Recuperar una tarea existente.",
"Deletes an existing task.": "Elimina una tarea existente.",
"Title": "Título",
"First Name": "Nombre",
"Middle Name": "Segundo nombre",
"Last Name": "Apellido",
"Assignee ID": "Assignee ID",
"Account Category": "Categoría del cliente",
"Account Industry": "Industria de cuentas",
"Website": "Sitio web",
"Email": "E-mail",
"Primary Phone Number": "Número de teléfono principal",
"Description": "Descripción",
"VAT or TAX ID": "IVA o TAX ID",
"Bank Details": "Detalles bancarios",
"Telegram": "Telegram",
"Skype Account ID": "ID de cuenta de Skype",
"Link to Google+": "Enlace a Google+",
"Link to Facebook": "Enlace a Facebook",
"Link to Linkedin": "Enlace a Linkedin",
"Link to Instagram": "Enlace a Instagrama",
"Billing Country": "País de facturación",
"Billing State": "Estado de facturación",
"Billing City": "Ciudad de facturación",
"Billing Postal code": "Código postal de facturación",
"Billing Address Line 1": "Línea 1 de dirección de facturación",
"Billing Address Line 2": "Línea de dirección de facturación 2",
"Billing Address Line 3": "Línea de dirección de facturación 3",
"Shipping Country": "País de envío",
"Shipping State": "Estado de envío",
"Shipping City": "Ciudad de envío",
"Shipping Postal code": "Código postal de envío",
"Shipping Address Line 1": "Línea 1 de dirección de envío",
"Shipping Address Line 2": "Línea de dirección de envío 2",
"Shipping Address Line 3": "Línea 3 de dirección de envío",
"Contact ID": "ID de contacto",
"Organization Name": "Nombre de la organización",
"Full legal name for Organization": "Nombre legal completo para la organización",
"Opportunity Amount": "Cantidad de Oportunidad",
"Opportunity Source": "Fuente de Oportunidad",
"Start Date": "Fecha de inicio",
"End Date": "Fecha de fin",
"Customer ID": "ID del cliente",
"Sales Pipeline ID": "ID del gasoducto de ventas",
"Sales Pipeline Stage ID": "ID del gasoducto de ventas",
"Opportunity ID": "ID Oportunidad",
"Name": "Nombre",
"Priority": "Prioridad",
"The assignee can change the end date for this task?": "¿El asignador puede cambiar la fecha de finalización de esta tarea?",
"This task needs approval from the owner?": "¿Esta tarea necesita la aprobación del propietario?",
"Owner ID": "ID del propietario",
"Task Type": "Tipo de tarea",
"Task Workflow ID": "ID del flujo de trabajo",
"Task Workflow Status ID": "ID de estado del flujo de trabajo de la tarea",
"Task ID": "Task ID",
"Please use YYYY-MM-DD HH:mm:ss format.": "Por favor, utilice el formato AAA-MM-DD HH:mm:brad.",
"This is an id of the CRM company or contact which is needed to be linked with the opportunity. This allows you to link the client to the opportunity. If your client is a company, and you need to relate an opportunity to the person (contact) at this company, then enter his/her id in the contact_id field.": "Este es un id de la compañía CRM o contacto que es necesario vincular con la oportunidad. Esto le permite enlazar el cliente a la oportunidad. Si su cliente es una empresa, y necesita relacionar una oportunidad con la persona (contacto) en esta empresa, luego introduzca su id en el campo contact_id.",
"Id of the company-related contact (account_id).": "Id del contacto relacionado con la empresa (account_id).",
"Low": "Baja",
"Medium": "Medio",
"High": "Alta",
"Task": "Tarea",
"Inbox": "Entrada",
"Event": "Evento",
"Task template": "Plantilla de tarea"
}

View File

@@ -0,0 +1,91 @@
{
"Business management software": "Logiciel de gestion des affaires",
"Domain": "Domaine",
"API Key": "Clé API",
"\n 1. Log in to your flowlu account.\n 2. Click on your profile-pic(top-right) and navigate to **Portal Settings->API Settings**.\n 3. Create new API key with any name and appropriate scope.\n 4. Copy API Key to your clipboard and paste it in **API Key** field\n 5. In the Domain field, enter your company from your account URL address. For example, if your account URL address is https://example.flowlu.com, then your domain is **example**.\n ": "\n 1. Log in to your flowlu account.\n 2. Click on your profile-pic(top-right) and navigate to **Portal Settings->API Settings**.\n 3. Create new API key with any name and appropriate scope.\n 4. Copy API Key to your clipboard and paste it in **API Key** field\n 5. In the Domain field, enter your company from your account URL address. For example, if your account URL address is https://example.flowlu.com, then your domain is **example**.\n ",
"Create CRM Account(Contact)": "Créer un compte CRM (Contact)",
"Update CRM Account(Contact)": "Mettre à jour le compte CRM (Contact)",
"Delete CRM Account(Contact)": "Supprimer le compte CRM (Contact)",
"Create CRM Account(Organization)": "Créer un compte CRM (Organisation)",
"Create Opportunity": "Créer une Affaire",
"Update Opportunity": "Mettre à jour l'Affaire",
"Delete Opportunity": "Supprimer l'Affaire",
"Create Task": "Créer une tâche",
"Update Task": "Tâche de mise à jour",
"Get Task": "Obtenir une tâche",
"Delete Task": "Supprimer la tâche",
"Creates a new contact in CRM.": "Crée un nouveau contact dans CRM.",
"Updates an existing contact in CRM.": "Met à jour un contact existant dans CRM.",
"Deletes an existing contact in CRM.": "Supprime un contact existant dans CRM.",
"Creates a new organization in CRM.": "Crée une nouvelle organisation en CRM.",
"Creates a new opportunity.": "Crée une nouvelle opportunité.",
"Updates an existing opportunity.": "Met à jour une opportunité existante.",
"Deletes an existing opportunity.": "Supprime une opportunité existante.",
"Creates a new task.": "Crée une nouvelle tâche.",
"Updates an existing task.": "Met à jour une tâche existante.",
"Retrieves an existing task.": "Récupère une tâche existante.",
"Deletes an existing task.": "Supprime une tâche existante.",
"Title": "Titre de la page",
"First Name": "First Name",
"Middle Name": "Deuxième prénom",
"Last Name": "Last Name",
"Assignee ID": "Assignee ID",
"Account Category": "Catégorie de compte",
"Account Industry": "Industrie du compte client",
"Website": "Site Web",
"Email": "Courriel",
"Primary Phone Number": "Numéro de téléphone principal",
"Description": "Libellé",
"VAT or TAX ID": "ID TVA ou TVA",
"Bank Details": "Coordonnées bancaires",
"Telegram": "Télégramme",
"Skype Account ID": "ID du compte Skype",
"Link to Google+": "Lien vers Google+",
"Link to Facebook": "Lien vers Facebook",
"Link to Linkedin": "Lien vers Linkedin",
"Link to Instagram": "Lien vers Instagram",
"Billing Country": "Pays de facturation",
"Billing State": "État de facturation",
"Billing City": "Ville de facturation",
"Billing Postal code": "Code postal de facturation",
"Billing Address Line 1": "Adresse de facturation ligne 1",
"Billing Address Line 2": "Adresse de facturation ligne 2",
"Billing Address Line 3": "Adresse de facturation ligne 3",
"Shipping Country": "Pays de livraison",
"Shipping State": "État de livraison",
"Shipping City": "Ville d'expédition",
"Shipping Postal code": "Code postal de livraison",
"Shipping Address Line 1": "Adresse de livraison ligne 1",
"Shipping Address Line 2": "Adresse de livraison ligne 2",
"Shipping Address Line 3": "Adresse de livraison ligne 3",
"Contact ID": "ID du contact",
"Organization Name": "Nom de l'organisation",
"Full legal name for Organization": "Nom légal complet pour l'organisation",
"Opportunity Amount": "Montant de l'opportunité",
"Opportunity Source": "Source de l'opportunité",
"Start Date": "Date de début",
"End Date": "Date de fin",
"Customer ID": "ID du client",
"Sales Pipeline ID": "ID du pipeline de vente",
"Sales Pipeline Stage ID": "ID de phase du pipeline de vente",
"Opportunity ID": "ID de l'opportunité",
"Name": "Nom",
"Priority": "Priorité",
"The assignee can change the end date for this task?": "Le cessionnaire peut modifier la date de fin de cette tâche ?",
"This task needs approval from the owner?": "Cette tâche doit être approuvée par le propriétaire ?",
"Owner ID": "ID du propriétaire",
"Task Type": "Type de tâche",
"Task Workflow ID": "ID du flux de travail des tâches",
"Task Workflow Status ID": "ID du statut du workflow de la tâche",
"Task ID": "Task ID",
"Please use YYYY-MM-DD HH:mm:ss format.": "Veuillez utiliser le format AAAA-MM-JJ HH:mm:ss.",
"This is an id of the CRM company or contact which is needed to be linked with the opportunity. This allows you to link the client to the opportunity. If your client is a company, and you need to relate an opportunity to the person (contact) at this company, then enter his/her id in the contact_id field.": "Ceci est un identifiant de la société CRM ou du contact qui est nécessaire pour être lié à l'opportunité. Cela vous permet de relier le client à l'occasion. Si votre client est une entreprise, et que vous devez associer une opportunité à la personne (contact) de cette entreprise, puis entrez son id dans le champ contact_id.",
"Id of the company-related contact (account_id).": "Id du contact de la société (account_id).",
"Low": "Bas",
"Medium": "Moyenne",
"High": "Élevé",
"Task": "Tâche",
"Inbox": "Boîte de réception",
"Event": "Evénement",
"Task template": "Modèle de tâche"
}

View File

@@ -0,0 +1,91 @@
{
"Business management software": "ビジネス管理ソフトウェア",
"Domain": "ドメイン",
"API Key": "API キー",
"\n 1. Log in to your flowlu account.\n 2. Click on your profile-pic(top-right) and navigate to **Portal Settings->API Settings**.\n 3. Create new API key with any name and appropriate scope.\n 4. Copy API Key to your clipboard and paste it in **API Key** field\n 5. In the Domain field, enter your company from your account URL address. For example, if your account URL address is https://example.flowlu.com, then your domain is **example**.\n ": "\n 1. Log in to your flowlu account.\n 2. Click on your profile-pic(top-right) and navigate to **Portal Settings->API Settings**.\n 3. Create new API key with any name and appropriate scope.\n 4. Copy API Key to your clipboard and paste it in **API Key** field\n 5. In the Domain field, enter your company from your account URL address. For example, if your account URL address is https://example.flowlu.com, then your domain is **example**.\n ",
"Create CRM Account(Contact)": "CRMアカウントを作成(連絡先)",
"Update CRM Account(Contact)": "CRMアカウントを更新(連絡先)",
"Delete CRM Account(Contact)": "CRMアカウントを削除(連絡先)",
"Create CRM Account(Organization)": "CRMアカウントを作成(組織)",
"Create Opportunity": "案件を作成",
"Update Opportunity": "商談を更新",
"Delete Opportunity": "商談を削除",
"Create Task": "タスクを作成",
"Update Task": "タスクの更新",
"Get Task": "タスクを取得",
"Delete Task": "タスクの削除",
"Creates a new contact in CRM.": "CRMに新しい連絡先を作成します。",
"Updates an existing contact in CRM.": "CRMの既存の連絡先を更新します。",
"Deletes an existing contact in CRM.": "CRMの既存の連絡先を削除します。",
"Creates a new organization in CRM.": "CRMに新しい組織を作成します。",
"Creates a new opportunity.": "新しい機会を作成します。",
"Updates an existing opportunity.": "既存の機会を更新します。",
"Deletes an existing opportunity.": "既存の商談を削除します。",
"Creates a new task.": "新しいタスクを作成します。",
"Updates an existing task.": "既存のタスクを更新する。",
"Retrieves an existing task.": "既存のタスクを取得します。",
"Deletes an existing task.": "既存のタスクを削除します。",
"Title": "タイトル",
"First Name": "名",
"Middle Name": "ミドルネーム",
"Last Name": "Last Name",
"Assignee ID": "Assignee ID",
"Account Category": "アカウントのカテゴリ",
"Account Industry": "アカウント産業",
"Website": "ウェブサイト",
"Email": "Eメールアドレス",
"Primary Phone Number": "主要電話番号",
"Description": "Description",
"VAT or TAX ID": "VAT or TAX ID",
"Bank Details": "銀行の詳細",
"Telegram": "Telegram",
"Skype Account ID": "Skype アカウント ID",
"Link to Google+": "Google+へリンク",
"Link to Facebook": "Facebookへのリンク",
"Link to Linkedin": "LinkedInへのリンク",
"Link to Instagram": "Instagramへのリンク",
"Billing Country": "請求先の国",
"Billing State": "請求ステータス",
"Billing City": "市区町村名",
"Billing Postal code": "郵便番号(請求先)",
"Billing Address Line 1": "請求先住所1",
"Billing Address Line 2": "請求先住所2",
"Billing Address Line 3": "請求先住所3",
"Shipping Country": "配送先国",
"Shipping State": "都道府県(発送先)",
"Shipping City": "配送先住所",
"Shipping Postal code": "配送先郵便番号",
"Shipping Address Line 1": "配送先住所1",
"Shipping Address Line 2": "配送先住所2",
"Shipping Address Line 3": "配送先住所3",
"Contact ID": "連絡先ID",
"Organization Name": "組織名",
"Full legal name for Organization": "組織の完全な法的な名前",
"Opportunity Amount": "商談金額",
"Opportunity Source": "商談ソース",
"Start Date": "開始日",
"End Date": "終了日",
"Customer ID": "顧客 ID",
"Sales Pipeline ID": "パイプラインID",
"Sales Pipeline Stage ID": "パイプラインステージID",
"Opportunity ID": "商談ID",
"Name": "名前",
"Priority": "優先度",
"The assignee can change the end date for this task?": "担当者はこのタスクの終了日を変更できますか?",
"This task needs approval from the owner?": "このタスクは所有者の承認が必要ですか?",
"Owner ID": "オーナーID",
"Task Type": "タスクの種類",
"Task Workflow ID": "タスクワークフローID",
"Task Workflow Status ID": "タスクワークフローステータスID",
"Task ID": "Task ID",
"Please use YYYY-MM-DD HH:mm:ss format.": "YYYY-MM-DD HH:mm:ss 形式を使用してください。",
"This is an id of the CRM company or contact which is needed to be linked with the opportunity. This allows you to link the client to the opportunity. If your client is a company, and you need to relate an opportunity to the person (contact) at this company, then enter his/her id in the contact_id field.": "これは、CRM企業または連絡先のIDであり、商談にリンクする必要があります。 これにより、クライアントを機会にリンクさせることができます。 クライアントが会社であり、この会社の人(連絡先)に機会を関連付ける必要があります。 そして彼/彼女/彼女のIDをcontact_idフィールドに入力します。",
"Id of the company-related contact (account_id).": "会社関連の連絡先のID(account_id)です。",
"Low": "低い",
"Medium": "ミディアム",
"High": "高い",
"Task": "タスク",
"Inbox": "受信トレイ",
"Event": "イベント",
"Task template": "タスクテンプレート"
}

View File

@@ -0,0 +1,91 @@
{
"Business management software": "Zakelijk management software",
"Domain": "Domein",
"API Key": "API Sleutel",
"\n 1. Log in to your flowlu account.\n 2. Click on your profile-pic(top-right) and navigate to **Portal Settings->API Settings**.\n 3. Create new API key with any name and appropriate scope.\n 4. Copy API Key to your clipboard and paste it in **API Key** field\n 5. In the Domain field, enter your company from your account URL address. For example, if your account URL address is https://example.flowlu.com, then your domain is **example**.\n ": "\n 1. Log in op uw flowlu account.\n 2. Klik op uw profiel-pic(top-rechts) en navigeer naar **Portal Settings->API instellingen**.\n 3. Maak nieuwe API-sleutel met een willekeurige naam en toepassingsscope.\n 4. Kopieer API-sleutel naar uw klembord en plak deze in **API Key** veld\n 5. Voer in het domeinveld uw bedrijf in vanaf uw account-URL-adres. Als uw account URL bijvoorbeeld https://example.flowlu.com, dan is uw domein **voorbeeld**.\n ",
"Create CRM Account(Contact)": "Creëer CRM Account (Contact)",
"Update CRM Account(Contact)": "Update CRM Account(Contact)",
"Delete CRM Account(Contact)": "Verwijder CRM Account (Contact)",
"Create CRM Account(Organization)": "Aanmaken CRM-rekening (Organisatie)",
"Create Opportunity": "Verkoopkans creëren",
"Update Opportunity": "Update Verkoopkans",
"Delete Opportunity": "Verwijder kans",
"Create Task": "Taak maken",
"Update Task": "Taak bijwerken",
"Get Task": "Ophalen taak",
"Delete Task": "Taak verwijderen",
"Creates a new contact in CRM.": "Maakt een nieuw contact in CRM.",
"Updates an existing contact in CRM.": "Werkt een bestaand contact in CRM. bij.",
"Deletes an existing contact in CRM.": "Verwijdert een bestaand contact in CRM.",
"Creates a new organization in CRM.": "Maakt een nieuwe organisatie aan in CRM.",
"Creates a new opportunity.": "Maakt een nieuwe kans.",
"Updates an existing opportunity.": "Werkt een bestaande kans bij.",
"Deletes an existing opportunity.": "Verwijdert een bestaande mogelijkheid.",
"Creates a new task.": "Maakt een nieuwe taak aan.",
"Updates an existing task.": "Werkt een bestaande taak bij.",
"Retrieves an existing task.": "Haalt een bestaande taak op.",
"Deletes an existing task.": "Verwijdert een bestaande taak.",
"Title": "Aanspreektitel",
"First Name": "Voornaam",
"Middle Name": "Tweede naam",
"Last Name": "Achternaam",
"Assignee ID": "Assignee ID",
"Account Category": "Klant categorie",
"Account Industry": "Klant industrie",
"Website": "website",
"Email": "E-mail",
"Primary Phone Number": "Primair telefoonnummer",
"Description": "Beschrijving",
"VAT or TAX ID": "BTW of BTW nummer",
"Bank Details": "Details bank",
"Telegram": "Telegram",
"Skype Account ID": "Skype Account ID",
"Link to Google+": "Link naar Google+",
"Link to Facebook": "Link naar Facebook",
"Link to Linkedin": "Link naar Linkedin",
"Link to Instagram": "Link naar Instagram",
"Billing Country": "Facturatie land",
"Billing State": "Factuur Provincie",
"Billing City": "Facturering stad",
"Billing Postal code": "Factuur postcode",
"Billing Address Line 1": "Facturatieadres regel 1",
"Billing Address Line 2": "Facturatieadres regel 2",
"Billing Address Line 3": "Facturatieadres regel 3",
"Shipping Country": "Afleveradres Land",
"Shipping State": "Verzend provincie",
"Shipping City": "Verzend stad",
"Shipping Postal code": "Afleveradres postcode",
"Shipping Address Line 1": "Verzendadres regel 1",
"Shipping Address Line 2": "Verzendadres regel 2",
"Shipping Address Line 3": "Verzendadres regel 3",
"Contact ID": "Contact ID",
"Organization Name": "Naam organisatie",
"Full legal name for Organization": "Volledige wettelijke naam voor organisatie",
"Opportunity Amount": "Mogelijkheid Bedrag",
"Opportunity Source": "Mogelijkheid bron",
"Start Date": "Start datum",
"End Date": "Eind datum",
"Customer ID": "Klant ID",
"Sales Pipeline ID": "Sales Pipeline ID",
"Sales Pipeline Stage ID": "Sales Pipeline Fase ID",
"Opportunity ID": "Kans ID",
"Name": "Naam",
"Priority": "Prioriteit",
"The assignee can change the end date for this task?": "De verantwoordelijke persoon kan de einddatum voor deze taak wijzigen?",
"This task needs approval from the owner?": "Deze taak moet worden goedgekeurd door de eigenaar?",
"Owner ID": "Eigenaar ID",
"Task Type": "Type taak",
"Task Workflow ID": "Taak Workflow ID",
"Task Workflow Status ID": "Taak Workflow Status ID",
"Task ID": "Task ID",
"Please use YYYY-MM-DD HH:mm:ss format.": "Gebruik JJJJ-MM-DD HH:mm:ss formaat.",
"This is an id of the CRM company or contact which is needed to be linked with the opportunity. This allows you to link the client to the opportunity. If your client is a company, and you need to relate an opportunity to the person (contact) at this company, then enter his/her id in the contact_id field.": "Dit is een id van het CRM-bedrijf of contact dat nodig is om verbonden te worden met de mogelijkheid. Hierdoor kunt u de klant koppelen aan de mogelijkheid. Als uw klant een bedrijf is en u moet contact opnemen met de persoon (contact) bij dit bedrijf, vul dan his/haar id in in het contact_id veld.",
"Id of the company-related contact (account_id).": "Id van het bedrijfsgerelateerde contact (account_id).",
"Low": "laag",
"Medium": "Middelgroot",
"High": "hoog",
"Task": "Opdracht",
"Inbox": "Inkomend",
"Event": "Gebeurtenis",
"Task template": "Taak sjabloon"
}

View File

@@ -0,0 +1,91 @@
{
"Business management software": "Software de gerenciamento de empresas",
"Domain": "Domínio",
"API Key": "Chave de API",
"\n 1. Log in to your flowlu account.\n 2. Click on your profile-pic(top-right) and navigate to **Portal Settings->API Settings**.\n 3. Create new API key with any name and appropriate scope.\n 4. Copy API Key to your clipboard and paste it in **API Key** field\n 5. In the Domain field, enter your company from your account URL address. For example, if your account URL address is https://example.flowlu.com, then your domain is **example**.\n ": "\n 1. Entre na sua conta de fluxo.\n 2. Clique em seu perfil-pic(top-right) e navegue até **Configurações do Portal-> Configurações da API**.\n 3. Crie uma nova chave de API com qualquer nome e escopo apropriado.\n 4. Copie a Chave da API para a área de transferência e cole-a no campo **Chave da API**\n 5. No campo de Domínio, digite sua empresa a partir do endereço URL da sua conta. Por exemplo, se o endereço URL da sua conta for https://exemplo.flowlu.com, seu domínio é **exemplo**.\n ",
"Create CRM Account(Contact)": "Criar Conta CRM (Contato)",
"Update CRM Account(Contact)": "Atualizar Conta CRM (Contato)",
"Delete CRM Account(Contact)": "Excluir Conta CRM (Contato)",
"Create CRM Account(Organization)": "Criar Conta CRM (Organização)",
"Create Opportunity": "Criar Oportunidade",
"Update Opportunity": "Atualizar Oportunidade",
"Delete Opportunity": "Excluir Oportunidade",
"Create Task": "Criar tarefa",
"Update Task": "Atualizar Tarefa",
"Get Task": "Obter Tarefa",
"Delete Task": "Excluir Tarefa",
"Creates a new contact in CRM.": "Cria um novo contato no CRM.",
"Updates an existing contact in CRM.": "Atualiza um contato existente no CRM.",
"Deletes an existing contact in CRM.": "Exclui um contato existente no CRM.",
"Creates a new organization in CRM.": "Cria uma nova organização no CRM.",
"Creates a new opportunity.": "Cria uma nova oportunidade.",
"Updates an existing opportunity.": "Atualiza uma oportunidade existente.",
"Deletes an existing opportunity.": "Exclui uma oportunidade existente.",
"Creates a new task.": "Cria uma nova tarefa.",
"Updates an existing task.": "Atualiza uma tarefa existente.",
"Retrieves an existing task.": "Recupera uma tarefa existente.",
"Deletes an existing task.": "Exclui uma tarefa existente.",
"Title": "Título",
"First Name": "Nome",
"Middle Name": "Nome do Meio",
"Last Name": "Sobrenome",
"Assignee ID": "Assignee ID",
"Account Category": "Categoria da Conta",
"Account Industry": "Indústria da Conta",
"Website": "site",
"Email": "e-mail",
"Primary Phone Number": "Número de telefone primário",
"Description": "Descrição",
"VAT or TAX ID": "ID do IVA ou TAX",
"Bank Details": "Detalhes bancários",
"Telegram": "Telegram",
"Skype Account ID": "ID da Conta Skype",
"Link to Google+": "Link para o Google+",
"Link to Facebook": "Link para o Facebook",
"Link to Linkedin": "Link para LinkedIn",
"Link to Instagram": "Link para o Instagram",
"Billing Country": "Billing País",
"Billing State": "Estado de Cobrança",
"Billing City": "Cidade de Cobrança",
"Billing Postal code": "Código de faturamento",
"Billing Address Line 1": "Endereço de Faturamento Linha 1",
"Billing Address Line 2": "Endereço de Faturamento Linha 2",
"Billing Address Line 3": "Endereço de Faturamento Linha 3",
"Shipping Country": "O envio País",
"Shipping State": "Estado de envio",
"Shipping City": "Cidade de Entrega",
"Shipping Postal code": "CEP de Entrega",
"Shipping Address Line 1": "Linha Endereço de Envio 1",
"Shipping Address Line 2": "Linha Endereço de Envio 2",
"Shipping Address Line 3": "Linha Endereço de Envio 3",
"Contact ID": "ID do contato",
"Organization Name": "Nome Da Organização",
"Full legal name for Organization": "Nome legal completo para a organização",
"Opportunity Amount": "Oportunidade Quantidade",
"Opportunity Source": "Fonte da Oportunidade",
"Start Date": "Data Inicial",
"End Date": "Data de Término",
"Customer ID": "ID do cliente",
"Sales Pipeline ID": "ID Pipeline de Vendas",
"Sales Pipeline Stage ID": "ID do Pipeline de Vendas",
"Opportunity ID": "ID da Oportunidade",
"Name": "Nome",
"Priority": "Prioridade",
"The assignee can change the end date for this task?": "O responsável pode alterar a data final para esta tarefa?",
"This task needs approval from the owner?": "Esta tarefa precisa de aprovação do proprietário?",
"Owner ID": "Id do Criador",
"Task Type": "Tipo de tarefa",
"Task Workflow ID": "ID do Workflow Tarefa",
"Task Workflow Status ID": "Status da Tarefa Workflow ID",
"Task ID": "Task ID",
"Please use YYYY-MM-DD HH:mm:ss format.": "Por favor, use o formato AAAA-MM-DD HH:mm:ss.",
"This is an id of the CRM company or contact which is needed to be linked with the opportunity. This allows you to link the client to the opportunity. If your client is a company, and you need to relate an opportunity to the person (contact) at this company, then enter his/her id in the contact_id field.": "Esta é uma identificação da empresa CRM ou contato que é necessário para ser ligado com a oportunidade. Isso permite que você associe o cliente à oportunidade. Se o seu cliente é uma empresa e você precisa se relacionar à pessoa (contato) desta empresa então digite a identificação dela no campo contact_id.",
"Id of the company-related contact (account_id).": "ID do contato relacionado à empresa (account_id).",
"Low": "baixa",
"Medium": "Média",
"High": "alta",
"Task": "Tarefas",
"Inbox": "Recebidas",
"Event": "Evento",
"Task template": "Modelo da tarefa"
}

View File

@@ -0,0 +1,92 @@
{
"Flowlu": "Flowlu",
"Business management software": "Бизнес-менеджмент",
"Domain": "Домен",
"API Key": "Ключ API",
"\n 1. Log in to your flowlu account.\n 2. Click on your profile-pic(top-right) and navigate to **Portal Settings->API Settings**.\n 3. Create new API key with any name and appropriate scope.\n 4. Copy API Key to your clipboard and paste it in **API Key** field\n 5. In the Domain field, enter your company from your account URL address. For example, if your account URL address is https://example.flowlu.com, then your domain is **example**.\n ": "\n 1. Войдите в свою учетную запись flowlu.\n 2. Нажмите на изображение сверху справа и перейдите в **Настройки портала->Настройки API**.\n 3. Создайте новый ключ API с любым именем и соответствующей областью.\n 4. Скопируйте API-ключ в буфер обмена и вставьте его в поле **API Key**\n 5. В поле Домен, введите адрес вашей компании из адреса вашей учетной записи. Например, если URL-адрес вашего аккаунта https://example.flowlu.com, то ваш домен **пример**.\n ",
"Create CRM Account(Contact)": "Создать CRM Аккаунт(Контакт)",
"Update CRM Account(Contact)": "Обновить CRM аккаунт(контакт)",
"Delete CRM Account(Contact)": "Удалить учётную запись(контакт)",
"Create CRM Account(Organization)": "Создать учётную запись CRM (Организация)",
"Create Opportunity": "Создать сделку",
"Update Opportunity": "Обновить сделку",
"Delete Opportunity": "Удалить Сделку",
"Create Task": "Создать задачу",
"Update Task": "Обновить задачу",
"Get Task": "Получить задачу",
"Delete Task": "Удалить задачу",
"Creates a new contact in CRM.": "Создает новый контакт в CRM.",
"Updates an existing contact in CRM.": "Обновляет существующий контакт в CRM.",
"Deletes an existing contact in CRM.": "Удаляет существующий контакт в CRM.",
"Creates a new organization in CRM.": "Создает новую организацию в CRM.",
"Creates a new opportunity.": "Создает новую возможность.",
"Updates an existing opportunity.": "Обновляет существующую возможность.",
"Deletes an existing opportunity.": "Удаляет существующую возможность.",
"Creates a new task.": "Создает новую задачу.",
"Updates an existing task.": "Обновляет существующую задачу.",
"Retrieves an existing task.": "Возвращает существующую задачу.",
"Deletes an existing task.": "Удалить существующую задачу.",
"Title": "Заголовок",
"First Name": "First Name",
"Middle Name": "Отчество",
"Last Name": "Last Name",
"Assignee ID": "Assignee ID",
"Account Category": "Категория клиента",
"Account Industry": "Промышленность клиента",
"Website": "Сайт",
"Email": "Почта",
"Primary Phone Number": "Основной номер телефона",
"Description": "Описание",
"VAT or TAX ID": "НДС или НДС ID",
"Bank Details": "Банковские данные",
"Telegram": "Телеграмма",
"Skype Account ID": "Идентификатор аккаунта в Skype",
"Link to Google+": "Ссылка на Google+",
"Link to Facebook": "Ссылка на Facebook",
"Link to Linkedin": "Ссылка на Linkedin",
"Link to Instagram": "Ссылка на Instagram",
"Billing Country": "Страна выставления счетов",
"Billing State": "Статус плательщика",
"Billing City": "Город плательщика",
"Billing Postal code": "Платёжный индекс",
"Billing Address Line 1": "Платежный адрес, строка 1",
"Billing Address Line 2": "Платежный адрес, строка 2",
"Billing Address Line 3": "Платежный адрес, строка 3",
"Shipping Country": "Страна доставки",
"Shipping State": "Область доставки",
"Shipping City": "Город доставки",
"Shipping Postal code": "Почтовый индекс",
"Shipping Address Line 1": "Адрес доставки, строка 1",
"Shipping Address Line 2": "Адрес доставки, строка 2",
"Shipping Address Line 3": "Адрес доставки, строка 3",
"Contact ID": "ID контакта",
"Organization Name": "Название организации",
"Full legal name for Organization": "Полное юридическое название организации",
"Opportunity Amount": "Сумма сделки",
"Opportunity Source": "Источник сделки",
"Start Date": "Дата начала",
"End Date": "Дата окончания",
"Customer ID": "ID клиента",
"Sales Pipeline ID": "ID Трубопровода продаж",
"Sales Pipeline Stage ID": "ID этапа продаж Трубопровода",
"Opportunity ID": "ID сделки",
"Name": "Наименование",
"Priority": "Приоритет",
"The assignee can change the end date for this task?": "Ответственный может изменить дату окончания этой задачи?",
"This task needs approval from the owner?": "Этой задаче нужно одобрить от владельца?",
"Owner ID": "ID владельца",
"Task Type": "Тип задачи",
"Task Workflow ID": "ID рабочего процесса задачи",
"Task Workflow Status ID": "ID статуса рабочего процесса",
"Task ID": "Task ID",
"Please use YYYY-MM-DD HH:mm:ss format.": "Пожалуйста, используйте формат YYYY-MM-DD HH:mm:ss.",
"This is an id of the CRM company or contact which is needed to be linked with the opportunity. This allows you to link the client to the opportunity. If your client is a company, and you need to relate an opportunity to the person (contact) at this company, then enter his/her id in the contact_id field.": "Это идентификатор компании CRM или контакт, который необходимо связать с возможностью. Это позволяет связать клиента с этой возможностью. Если ваш клиент является компанией, и вам нужно связать возможность с человеком (контакт) в этой компании, затем введите свой идентификатор в поле contact_id.",
"Id of the company-related contact (account_id).": "ID контакта, связанного с компанией (account_id).",
"Low": "Низкий",
"Medium": "Средний",
"High": "Высокий",
"Task": "Задача",
"Inbox": "Входящие",
"Event": "Событие",
"Task template": "Шаблон задачи"
}

View File

@@ -0,0 +1,91 @@
{
"Business management software": "Business management software",
"Domain": "Domain",
"API Key": "API Key",
"\n 1. Log in to your flowlu account.\n 2. Click on your profile-pic(top-right) and navigate to **Portal Settings->API Settings**.\n 3. Create new API key with any name and appropriate scope.\n 4. Copy API Key to your clipboard and paste it in **API Key** field\n 5. In the Domain field, enter your company from your account URL address. For example, if your account URL address is https://example.flowlu.com, then your domain is **example**.\n ": "\n 1. Log in to your flowlu account.\n 2. Click on your profile-pic(top-right) and navigate to **Portal Settings->API Settings**.\n 3. Create new API key with any name and appropriate scope.\n 4. Copy API Key to your clipboard and paste it in **API Key** field\n 5. In the Domain field, enter your company from your account URL address. For example, if your account URL address is https://example.flowlu.com, then your domain is **example**.\n ",
"Create CRM Account(Contact)": "Create CRM Account(Contact)",
"Update CRM Account(Contact)": "Update CRM Account(Contact)",
"Delete CRM Account(Contact)": "Delete CRM Account(Contact)",
"Create CRM Account(Organization)": "Create CRM Account(Organization)",
"Create Opportunity": "Create Opportunity",
"Update Opportunity": "Update Opportunity",
"Delete Opportunity": "Delete Opportunity",
"Create Task": "Create Task",
"Update Task": "Update Task",
"Get Task": "Get Task",
"Delete Task": "Delete Task",
"Creates a new contact in CRM.": "Creates a new contact in CRM.",
"Updates an existing contact in CRM.": "Updates an existing contact in CRM.",
"Deletes an existing contact in CRM.": "Deletes an existing contact in CRM.",
"Creates a new organization in CRM.": "Creates a new organization in CRM.",
"Creates a new opportunity.": "Creates a new opportunity.",
"Updates an existing opportunity.": "Updates an existing opportunity.",
"Deletes an existing opportunity.": "Deletes an existing opportunity.",
"Creates a new task.": "Creates a new task.",
"Updates an existing task.": "Updates an existing task.",
"Retrieves an existing task.": "Retrieves an existing task.",
"Deletes an existing task.": "Deletes an existing task.",
"Title": "Title",
"First Name": "First Name",
"Middle Name": "Middle Name",
"Last Name": "Last Name",
"Assignee ID": "Assignee ID",
"Account Category": "Account Category",
"Account Industry": "Account Industry",
"Website": "Website",
"Email": "Email",
"Primary Phone Number": "Primary Phone Number",
"Description": "Description",
"VAT or TAX ID": "VAT or TAX ID",
"Bank Details": "Bank Details",
"Telegram": "Telegram",
"Skype Account ID": "Skype Account ID",
"Link to Google+": "Link to Google+",
"Link to Facebook": "Link to Facebook",
"Link to Linkedin": "Link to Linkedin",
"Link to Instagram": "Link to Instagram",
"Billing Country": "Billing Country",
"Billing State": "Billing State",
"Billing City": "Billing City",
"Billing Postal code": "Billing Postal code",
"Billing Address Line 1": "Billing Address Line 1",
"Billing Address Line 2": "Billing Address Line 2",
"Billing Address Line 3": "Billing Address Line 3",
"Shipping Country": "Shipping Country",
"Shipping State": "Shipping State",
"Shipping City": "Shipping City",
"Shipping Postal code": "Shipping Postal code",
"Shipping Address Line 1": "Shipping Address Line 1",
"Shipping Address Line 2": "Shipping Address Line 2",
"Shipping Address Line 3": "Shipping Address Line 3",
"Contact ID": "Contact ID",
"Organization Name": "Organization Name",
"Full legal name for Organization": "Full legal name for Organization",
"Opportunity Amount": "Opportunity Amount",
"Opportunity Source": "Opportunity Source",
"Start Date": "Start Date",
"End Date": "End Date",
"Customer ID": "Customer ID",
"Sales Pipeline ID": "Sales Pipeline ID",
"Sales Pipeline Stage ID": "Sales Pipeline Stage ID",
"Opportunity ID": "Opportunity ID",
"Name": "Name",
"Priority": "Priority",
"The assignee can change the end date for this task?": "The assignee can change the end date for this task?",
"This task needs approval from the owner?": "This task needs approval from the owner?",
"Owner ID": "Owner ID",
"Task Type": "Task Type",
"Task Workflow ID": "Task Workflow ID",
"Task Workflow Status ID": "Task Workflow Status ID",
"Task ID": "Task ID",
"Please use YYYY-MM-DD HH:mm:ss format.": "Please use YYYY-MM-DD HH:mm:ss format.",
"This is an id of the CRM company or contact which is needed to be linked with the opportunity. This allows you to link the client to the opportunity. If your client is a company, and you need to relate an opportunity to the person (contact) at this company, then enter his/her id in the contact_id field.": "This is an id of the CRM company or contact which is needed to be linked with the opportunity. This allows you to link the client to the opportunity. If your client is a company, and you need to relate an opportunity to the person (contact) at this company, then enter his/her id in the contact_id field.",
"Id of the company-related contact (account_id).": "Id of the company-related contact (account_id).",
"Low": "Low",
"Medium": "Medium",
"High": "High",
"Task": "Task",
"Inbox": "Inbox",
"Event": "Event",
"Task template": "Task template"
}

View File

@@ -0,0 +1,92 @@
{
"Flowlu": "Flowlu",
"Business management software": "Business management software",
"Domain": "Domain",
"API Key": "API Key",
"\n 1. Log in to your flowlu account.\n 2. Click on your profile-pic(top-right) and navigate to **Portal Settings->API Settings**.\n 3. Create new API key with any name and appropriate scope.\n 4. Copy API Key to your clipboard and paste it in **API Key** field\n 5. In the Domain field, enter your company from your account URL address. For example, if your account URL address is https://example.flowlu.com, then your domain is **example**.\n ": "\n 1. Log in to your flowlu account.\n 2. Click on your profile-pic(top-right) and navigate to **Portal Settings->API Settings**.\n 3. Create new API key with any name and appropriate scope.\n 4. Copy API Key to your clipboard and paste it in **API Key** field\n 5. In the Domain field, enter your company from your account URL address. For example, if your account URL address is https://example.flowlu.com, then your domain is **example**.\n ",
"Create CRM Account(Contact)": "Create CRM Account(Contact)",
"Update CRM Account(Contact)": "Update CRM Account(Contact)",
"Delete CRM Account(Contact)": "Delete CRM Account(Contact)",
"Create CRM Account(Organization)": "Create CRM Account(Organization)",
"Create Opportunity": "Create Opportunity",
"Update Opportunity": "Update Opportunity",
"Delete Opportunity": "Delete Opportunity",
"Create Task": "Create Task",
"Update Task": "Update Task",
"Get Task": "Get Task",
"Delete Task": "Delete Task",
"Creates a new contact in CRM.": "Creates a new contact in CRM.",
"Updates an existing contact in CRM.": "Updates an existing contact in CRM.",
"Deletes an existing contact in CRM.": "Deletes an existing contact in CRM.",
"Creates a new organization in CRM.": "Creates a new organization in CRM.",
"Creates a new opportunity.": "Creates a new opportunity.",
"Updates an existing opportunity.": "Updates an existing opportunity.",
"Deletes an existing opportunity.": "Deletes an existing opportunity.",
"Creates a new task.": "Creates a new task.",
"Updates an existing task.": "Updates an existing task.",
"Retrieves an existing task.": "Retrieves an existing task.",
"Deletes an existing task.": "Deletes an existing task.",
"Title": "Title",
"First Name": "First Name",
"Middle Name": "Middle Name",
"Last Name": "Last Name",
"Assignee ID": "Assignee ID",
"Account Category": "Account Category",
"Account Industry": "Account Industry",
"Website": "Website",
"Email": "Email",
"Primary Phone Number": "Primary Phone Number",
"Description": "Description",
"VAT or TAX ID": "VAT or TAX ID",
"Bank Details": "Bank Details",
"Telegram": "Telegram",
"Skype Account ID": "Skype Account ID",
"Link to Google+": "Link to Google+",
"Link to Facebook": "Link to Facebook",
"Link to Linkedin": "Link to Linkedin",
"Link to Instagram": "Link to Instagram",
"Billing Country": "Billing Country",
"Billing State": "Billing State",
"Billing City": "Billing City",
"Billing Postal code": "Billing Postal code",
"Billing Address Line 1": "Billing Address Line 1",
"Billing Address Line 2": "Billing Address Line 2",
"Billing Address Line 3": "Billing Address Line 3",
"Shipping Country": "Shipping Country",
"Shipping State": "Shipping State",
"Shipping City": "Shipping City",
"Shipping Postal code": "Shipping Postal code",
"Shipping Address Line 1": "Shipping Address Line 1",
"Shipping Address Line 2": "Shipping Address Line 2",
"Shipping Address Line 3": "Shipping Address Line 3",
"Contact ID": "Contact ID",
"Organization Name": "Organization Name",
"Full legal name for Organization": "Full legal name for Organization",
"Opportunity Amount": "Opportunity Amount",
"Opportunity Source": "Opportunity Source",
"Start Date": "Start Date",
"End Date": "End Date",
"Customer ID": "Customer ID",
"Sales Pipeline ID": "Sales Pipeline ID",
"Sales Pipeline Stage ID": "Sales Pipeline Stage ID",
"Opportunity ID": "Opportunity ID",
"Name": "Name",
"Priority": "Priority",
"The assignee can change the end date for this task?": "The assignee can change the end date for this task?",
"This task needs approval from the owner?": "This task needs approval from the owner?",
"Owner ID": "Owner ID",
"Task Type": "Task Type",
"Task Workflow ID": "Task Workflow ID",
"Task Workflow Status ID": "Task Workflow Status ID",
"Task ID": "Task ID",
"Please use YYYY-MM-DD HH:mm:ss format.": "Please use YYYY-MM-DD HH:mm:ss format.",
"This is an id of the CRM company or contact which is needed to be linked with the opportunity. This allows you to link the client to the opportunity. If your client is a company, and you need to relate an opportunity to the person (contact) at this company, then enter his/her id in the contact_id field.": "This is an id of the CRM company or contact which is needed to be linked with the opportunity. This allows you to link the client to the opportunity. If your client is a company, and you need to relate an opportunity to the person (contact) at this company, then enter his/her id in the contact_id field.",
"Id of the company-related contact (account_id).": "Id of the company-related contact (account_id).",
"Low": "Low",
"Medium": "Medium",
"High": "High",
"Task": "Task",
"Inbox": "Inbox",
"Event": "Event",
"Task template": "Task template"
}

View File

@@ -0,0 +1,91 @@
{
"Business management software": "Business management software",
"Domain": "Domain",
"API Key": "API 密钥",
"\n 1. Log in to your flowlu account.\n 2. Click on your profile-pic(top-right) and navigate to **Portal Settings->API Settings**.\n 3. Create new API key with any name and appropriate scope.\n 4. Copy API Key to your clipboard and paste it in **API Key** field\n 5. In the Domain field, enter your company from your account URL address. For example, if your account URL address is https://example.flowlu.com, then your domain is **example**.\n ": "\n 1. Log in to your flowlu account.\n 2. Click on your profile-pic(top-right) and navigate to **Portal Settings->API Settings**.\n 3. Create new API key with any name and appropriate scope.\n 4. Copy API Key to your clipboard and paste it in **API Key** field\n 5. In the Domain field, enter your company from your account URL address. For example, if your account URL address is https://example.flowlu.com, then your domain is **example**.\n ",
"Create CRM Account(Contact)": "Create CRM Account(Contact)",
"Update CRM Account(Contact)": "Update CRM Account(Contact)",
"Delete CRM Account(Contact)": "Delete CRM Account(Contact)",
"Create CRM Account(Organization)": "Create CRM Account(Organization)",
"Create Opportunity": "Create Opportunity",
"Update Opportunity": "Update Opportunity",
"Delete Opportunity": "Delete Opportunity",
"Create Task": "Create Task",
"Update Task": "Update Task",
"Get Task": "Get Task",
"Delete Task": "Delete Task",
"Creates a new contact in CRM.": "Creates a new contact in CRM.",
"Updates an existing contact in CRM.": "Updates an existing contact in CRM.",
"Deletes an existing contact in CRM.": "Deletes an existing contact in CRM.",
"Creates a new organization in CRM.": "Creates a new organization in CRM.",
"Creates a new opportunity.": "Creates a new opportunity.",
"Updates an existing opportunity.": "Updates an existing opportunity.",
"Deletes an existing opportunity.": "Deletes an existing opportunity.",
"Creates a new task.": "Creates a new task.",
"Updates an existing task.": "Updates an existing task.",
"Retrieves an existing task.": "Retrieves an existing task.",
"Deletes an existing task.": "Deletes an existing task.",
"Title": "标题",
"First Name": "First Name",
"Middle Name": "Middle Name",
"Last Name": "名字",
"Assignee ID": "Assignee ID",
"Account Category": "Account Category",
"Account Industry": "Account Industry",
"Website": "Website",
"Email": "电子邮件地址",
"Primary Phone Number": "Primary Phone Number",
"Description": "描述",
"VAT or TAX ID": "VAT or TAX ID",
"Bank Details": "Bank Details",
"Telegram": "Telegram",
"Skype Account ID": "Skype Account ID",
"Link to Google+": "Link to Google+",
"Link to Facebook": "Link to Facebook",
"Link to Linkedin": "Link to Linkedin",
"Link to Instagram": "Link to Instagram",
"Billing Country": "Billing Country",
"Billing State": "Billing State",
"Billing City": "Billing City",
"Billing Postal code": "Billing Postal code",
"Billing Address Line 1": "Billing Address Line 1",
"Billing Address Line 2": "Billing Address Line 2",
"Billing Address Line 3": "Billing Address Line 3",
"Shipping Country": "Shipping Country",
"Shipping State": "Shipping State",
"Shipping City": "Shipping City",
"Shipping Postal code": "Shipping Postal code",
"Shipping Address Line 1": "Shipping Address Line 1",
"Shipping Address Line 2": "Shipping Address Line 2",
"Shipping Address Line 3": "Shipping Address Line 3",
"Contact ID": "Contact ID",
"Organization Name": "Organization Name",
"Full legal name for Organization": "Full legal name for Organization",
"Opportunity Amount": "Opportunity Amount",
"Opportunity Source": "Opportunity Source",
"Start Date": "Start Date",
"End Date": "End Date",
"Customer ID": "Customer ID",
"Sales Pipeline ID": "Sales Pipeline ID",
"Sales Pipeline Stage ID": "Sales Pipeline Stage ID",
"Opportunity ID": "Opportunity ID",
"Name": "名称",
"Priority": "Priority",
"The assignee can change the end date for this task?": "The assignee can change the end date for this task?",
"This task needs approval from the owner?": "This task needs approval from the owner?",
"Owner ID": "Owner ID",
"Task Type": "Task Type",
"Task Workflow ID": "Task Workflow ID",
"Task Workflow Status ID": "Task Workflow Status ID",
"Task ID": "Task ID",
"Please use YYYY-MM-DD HH:mm:ss format.": "Please use YYYY-MM-DD HH:mm:ss format.",
"This is an id of the CRM company or contact which is needed to be linked with the opportunity. This allows you to link the client to the opportunity. If your client is a company, and you need to relate an opportunity to the person (contact) at this company, then enter his/her id in the contact_id field.": "This is an id of the CRM company or contact which is needed to be linked with the opportunity. This allows you to link the client to the opportunity. If your client is a company, and you need to relate an opportunity to the person (contact) at this company, then enter his/her id in the contact_id field.",
"Id of the company-related contact (account_id).": "Id of the company-related contact (account_id).",
"Low": "Low",
"Medium": "Medium",
"High": "High",
"Task": "Task",
"Inbox": "Inbox",
"Event": "Event",
"Task template": "Task template"
}

View File

@@ -0,0 +1,62 @@
import {
createPiece,
PieceAuth,
Property,
} from '@activepieces/pieces-framework';
import { PieceCategory } from '@activepieces/shared';
import { createContactAction } from './lib/actions/accounts/create-contact';
import { createOrganizationAction } from './lib/actions/accounts/create-organization';
import { deleteContactAction } from './lib/actions/accounts/delete-contact';
import { updateContactAction } from './lib/actions/accounts/update-contact';
import { createOpportunityAction } from './lib/actions/opportunities/create-opportunity';
import { deleteOpportunityAction } from './lib/actions/opportunities/delete-opportunity';
import { updateOpportunityAction } from './lib/actions/opportunities/update-opportunity';
import { createTaskAction } from './lib/actions/tasks/create-task';
import { deleteTaskAction } from './lib/actions/tasks/delete-task';
import { getTaskAction } from './lib/actions/tasks/get-task';
import { updateTaskAction } from './lib/actions/tasks/update-task';
export const flowluAuth = PieceAuth.CustomAuth({
required: true,
description: `
1. Log in to your flowlu account.
2. Click on your profile-pic(top-right) and navigate to **Portal Settings->API Settings**.
3. Create new API key with any name and appropriate scope.
4. Copy API Key to your clipboard and paste it in **API Key** field
5. In the Domain field, enter your company from your account URL address. For example, if your account URL address is https://example.flowlu.com, then your domain is **example**.
`,
props: {
domain: Property.ShortText({
displayName: 'Domain',
required: true,
}),
apiKey: PieceAuth.SecretText({
displayName: 'API Key',
required: true,
}),
},
});
export const flowlu = createPiece({
displayName: 'Flowlu',
description: 'Business management software',
auth: flowluAuth,
minimumSupportedRelease: '0.30.0',
logoUrl: 'https://cdn.activepieces.com/pieces/flowlu.png',
categories: [PieceCategory.SALES_AND_CRM],
authors: ["kishanprmr","abuaboud"],
actions: [
createContactAction,
updateContactAction,
deleteContactAction,
createOrganizationAction,
createOpportunityAction,
updateOpportunityAction,
deleteOpportunityAction,
createTaskAction,
updateTaskAction,
getTaskAction,
deleteTaskAction,
],
triggers: [],
});

View File

@@ -0,0 +1,38 @@
import {
PiecePropValueSchema,
Property,
createAction,
} from '@activepieces/pieces-framework';
import { flowluAuth } from '../../..';
import { flowluCommon, makeClient } from '../../common';
import { flowluProps } from '../../common/props';
export const createContactAction = createAction({
auth: flowluAuth,
name: 'flowlu_create_contact',
displayName: 'Create CRM Account(Contact)',
description: 'Creates a new contact in CRM.',
props: {
honorific_title_id: flowluCommon.honorific_title_id(false),
first_name: Property.ShortText({
displayName: 'First Name',
required: true,
}),
middle_name: Property.ShortText({
displayName: 'Middle Name',
required: false,
}),
last_name: Property.ShortText({
displayName: 'Last Name',
required: false,
}),
...flowluProps.account,
},
async run(context) {
const {auth, ...propsValue} = context;
const client = makeClient(
context.auth
);
return await client.createAccount({ type: 2, ...propsValue });
},
});

View File

@@ -0,0 +1,32 @@
import {
PiecePropValueSchema,
Property,
createAction,
} from '@activepieces/pieces-framework';
import { flowluAuth } from '../../..';
import { makeClient } from '../../common';
import { flowluProps } from '../../common/props';
export const createOrganizationAction = createAction({
auth: flowluAuth,
name: 'flowlu_create_organization',
displayName: 'Create CRM Account(Organization)',
description: 'Creates a new organization in CRM.',
props: {
name: Property.ShortText({
displayName: 'Organization Name',
required: true,
}),
name_legal_full: Property.ShortText({
displayName: 'Full legal name for Organization',
required: false,
}),
...flowluProps.account,
},
async run(context) {
const client = makeClient(
context.auth
);
return await client.createAccount({ type: 1, ...context.propsValue });
},
});

View File

@@ -0,0 +1,28 @@
import {
createAction,
PiecePropValueSchema,
} from '@activepieces/pieces-framework';
import { flowluAuth } from '../../..';
import { flowluCommon, makeClient } from '../../common';
import { FlowluEntity, FlowluModule } from '../../common/constants';
export const deleteContactAction = createAction({
auth: flowluAuth,
name: 'flowlu_delete_contact',
displayName: 'Delete CRM Account(Contact)',
description: 'Deletes an existing contact in CRM.',
props: {
id: flowluCommon.contact_id(true),
},
async run(context) {
const id = context.propsValue.id!;
const client = makeClient(
context.auth
);
return await client.deleteAction(
FlowluModule.CRM,
FlowluEntity.ACCOUNT,
id
);
},
});

View File

@@ -0,0 +1,39 @@
import {
PiecePropValueSchema,
Property,
createAction,
} from '@activepieces/pieces-framework';
import { flowluAuth } from '../../..';
import { flowluCommon, makeClient } from '../../common';
import { flowluProps } from '../../common/props';
export const updateContactAction = createAction({
auth: flowluAuth,
name: 'flowlu_update_contact',
displayName: 'Update CRM Account(Contact)',
description: 'Updates an existing contact in CRM.',
props: {
id: flowluCommon.contact_id(true),
honorific_title_id: flowluCommon.honorific_title_id(false),
first_name: Property.ShortText({
displayName: 'First Name',
required: false,
}),
middle_name: Property.ShortText({
displayName: 'Middle Name',
required: false,
}),
last_name: Property.ShortText({
displayName: 'Last Name',
required: false,
}),
...flowluProps.account,
},
async run(context) {
const id = context.propsValue.id!;
const client = makeClient(
context.auth
);
return await client.updateContact(id, { type: 2, ...context.propsValue });
},
});

View File

@@ -0,0 +1,28 @@
import {
PiecePropValueSchema,
Property,
createAction,
} from '@activepieces/pieces-framework';
import { flowluAuth } from '../../../';
import { makeClient } from '../../common';
import { flowluProps } from '../../common/props';
export const createOpportunityAction = createAction({
auth: flowluAuth,
name: 'flowlu_create_opportunity',
displayName: 'Create Opportunity',
description: 'Creates a new opportunity.',
props: {
name: Property.ShortText({
displayName: 'Title',
required: true,
}),
...flowluProps.opportunity,
},
async run(context) {
const client = makeClient(
context.auth
);
return await client.createOpportunity(context.propsValue);
},
});

View File

@@ -0,0 +1,28 @@
import {
createAction,
PiecePropValueSchema,
} from '@activepieces/pieces-framework';
import { flowluAuth } from '../../../';
import { flowluCommon, makeClient } from '../../common';
import { FlowluEntity, FlowluModule } from '../../common/constants';
export const deleteOpportunityAction = createAction({
auth: flowluAuth,
name: 'flowlu_delete_opportunity',
displayName: 'Delete Opportunity',
description: 'Deletes an existing opportunity.',
props: {
id: flowluCommon.opportunity_id(true),
},
async run(context) {
const id = context.propsValue.id!;
const client = makeClient(
context.auth
);
return await client.deleteAction(
FlowluModule.CRM,
FlowluEntity.OPPORTUNITY,
id
);
},
});

View File

@@ -0,0 +1,30 @@
import {
PiecePropValueSchema,
Property,
createAction,
} from '@activepieces/pieces-framework';
import { flowluAuth } from '../../../';
import { flowluCommon, makeClient } from '../../common';
import { flowluProps } from '../../common/props';
export const updateOpportunityAction = createAction({
auth: flowluAuth,
name: 'flowlu_update_opportunity',
displayName: 'Update Opportunity',
description: 'Updates an existing opportunity.',
props: {
id: flowluCommon.opportunity_id(true),
name: Property.ShortText({
displayName: 'Title',
required: false,
}),
...flowluProps.opportunity,
},
async run(context) {
const id = context.propsValue.id!;
const client = makeClient(
context.auth
);
return await client.updateOpportunity(id, context.propsValue);
},
});

View File

@@ -0,0 +1,47 @@
import {
PiecePropValueSchema, Property,
createAction,
} from '@activepieces/pieces-framework';
import dayjs from 'dayjs';
import { flowluAuth } from '../../../';
import { makeClient } from '../../common';
import { flowluProps } from '../../common/props';
export const createTaskAction = createAction({
auth: flowluAuth,
name: 'flowlu_create_task',
displayName: 'Create Task',
description: 'Creates a new task.',
props: {
name: Property.ShortText({
displayName: 'Name',
required: true,
}),
...flowluProps.task,
},
async run(context) {
const client = makeClient(
context.auth
);
return await client.createTask({
name: context.propsValue.name,
description: context.propsValue.description,
priority: context.propsValue.priority,
plan_start_date: context.propsValue.plan_start_date
? dayjs(context.propsValue.plan_start_date).format(
'YYYY-MM-DD HH:mm:ss'
)
: undefined,
deadline: context.propsValue.deadline
? dayjs(context.propsValue.deadline).format('YYYY-MM-DD HH:mm:ss')
: undefined,
deadline_allowchange: context.propsValue.deadline_allowchange ? 1 : 0,
task_checkbyowner: context.propsValue.task_checkbyowner ? 1 : 0,
responsible_id: context.propsValue.responsible_id,
owner_id: context.propsValue.owner_id,
type: context.propsValue.type,
workflow_id: context.propsValue.workflow_id,
workflow_stage_id: context.propsValue.workflow_stage_id,
});
},
});

View File

@@ -0,0 +1,28 @@
import {
createAction,
PiecePropValueSchema,
} from '@activepieces/pieces-framework';
import { flowluAuth } from '../../..';
import { flowluCommon, makeClient } from '../../common';
import { FlowluEntity, FlowluModule } from '../../common/constants';
export const deleteTaskAction = createAction({
auth: flowluAuth,
name: 'flowlu_delete_task',
displayName: 'Delete Task',
description: 'Deletes an existing task.',
props: {
task_id: flowluCommon.task_id(true),
},
async run(context) {
const task_id = context.propsValue.task_id!;
const client = makeClient(
context.auth
);
return await client.deleteAction(
FlowluModule.TASK,
FlowluEntity.TASKS,
task_id
);
},
});

View File

@@ -0,0 +1,23 @@
import {
createAction,
PiecePropValueSchema,
} from '@activepieces/pieces-framework';
import { flowluAuth } from '../../..';
import { flowluCommon, makeClient } from '../../common';
export const getTaskAction = createAction({
auth: flowluAuth,
name: 'flowlu_get_task',
displayName: 'Get Task',
description: 'Retrieves an existing task.',
props: {
task_id: flowluCommon.task_id(true),
},
async run(context) {
const task_id = context.propsValue.task_id!;
const client = makeClient(
context.auth
);
return await client.getTask(task_id);
},
});

View File

@@ -0,0 +1,48 @@
import {
PiecePropValueSchema, Property,
createAction,
} from '@activepieces/pieces-framework';
import dayjs from 'dayjs';
import { flowluAuth } from '../../../';
import { flowluCommon, makeClient } from '../../common';
import { flowluProps } from '../../common/props';
export const updateTaskAction = createAction({
auth: flowluAuth,
name: 'flowlu_update_task',
displayName: 'Update Task',
description: 'Updates an existing task.',
props: {
task_id: flowluCommon.task_id(true),
name: Property.ShortText({
displayName: 'Name',
required: false,
}),
...flowluProps.task,
},
async run(context) {
const client = makeClient(
context.auth
);
return await client.updateTask(context.propsValue.task_id!, {
name: context.propsValue.name,
description: context.propsValue.description,
priority: context.propsValue.priority,
plan_start_date: context.propsValue.plan_start_date
? dayjs(context.propsValue.plan_start_date).format(
'YYYY-MM-DD HH:mm:ss'
)
: undefined,
deadline: context.propsValue.deadline
? dayjs(context.propsValue.deadline).format('YYYY-MM-DD HH:mm:ss')
: undefined,
deadline_allowchange: context.propsValue.deadline_allowchange ? 1 : 0,
task_checkbyowner: context.propsValue.task_checkbyowner ? 1 : 0,
type: context.propsValue.type,
responsible_id: context.propsValue.responsible_id,
owner_id: context.propsValue.owner_id,
workflow_id: context.propsValue.workflow_id,
workflow_stage_id: context.propsValue.workflow_stage_id,
});
},
});

View File

@@ -0,0 +1,213 @@
import {
HttpMessageBody,
HttpMethod,
QueryParams,
httpClient,
} from '@activepieces/pieces-common';
import { FlowluEntity, FlowluModule } from './constants';
import {
Account,
AccountCategory,
AccountHonorificTitle,
AccountIndustry,
CreateCRMAccountAPIRequest,
CreateOpportunityAPIRequest,
CreateTaskAPIRequest,
ListAPIResponse,
Opportunity,
OpportunitySource,
Pipeline,
PipelineStage,
Task,
TaskWorkflow,
TaskWorkflowStage,
User,
} from './types';
function emptyValueFilter(
accessor: (key: string) => any
): (key: string) => boolean {
return (key: string) => {
const val = accessor(key);
return (
val !== null &&
val !== undefined &&
(typeof val != 'string' || val.length > 0)
);
};
}
export function prepareQuery(request?: Record<string, any>): QueryParams {
const params: QueryParams = {};
if (!request) return params;
Object.keys(request)
.filter(emptyValueFilter((k) => request[k]))
.forEach((k: string) => {
params[k] = (request as Record<string, any>)[k].toString();
});
return params;
}
export class FlowluClient {
constructor(private domain: string, private apiKey: string) {}
async makeRequest<T extends HttpMessageBody>(
method: HttpMethod,
resourceUri: string,
query?: QueryParams,
body: any | undefined = undefined
): Promise<T> {
const res = await httpClient.sendRequest<T>({
method: method,
url: `https://${this.domain}.flowlu.com/api/v1/module` + resourceUri,
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
},
queryParams: { api_key: this.apiKey, ...query },
body: body,
});
return res.body;
}
async createAccount(request: CreateCRMAccountAPIRequest) {
return await this.makeRequest(
HttpMethod.POST,
'/crm/account/create',
undefined,
request
);
}
async updateContact(id: number, request: CreateCRMAccountAPIRequest) {
return await this.makeRequest(
HttpMethod.POST,
`/crm/account/update/${id}`,
undefined,
request
);
}
async listAllAccounts() {
return await this.makeRequest<ListAPIResponse<Account[]>>(
HttpMethod.GET,
'/crm/account/list'
);
}
async listAllContacts() {
return await this.makeRequest<ListAPIResponse<Account[]>>(
HttpMethod.GET,
'/crm/account/list',
{ 'filter[type]': '2' }
);
}
async createTask(request: CreateTaskAPIRequest) {
return await this.makeRequest(
HttpMethod.POST,
'/task/tasks/create',
undefined,
request
);
}
async updateTask(id: number, request: CreateTaskAPIRequest) {
return await this.makeRequest(
HttpMethod.POST,
`/task/tasks/update/${id}`,
undefined,
request
);
}
async getTask(id: number) {
return await this.makeRequest(HttpMethod.GET, `/task/tasks/get/${id}`);
}
async listAllTasks() {
return await this.makeRequest<ListAPIResponse<Task[]>>(
HttpMethod.GET,
'/task/tasks/list'
);
}
async createOpportunity(request: CreateOpportunityAPIRequest) {
return await this.makeRequest(
HttpMethod.POST,
'/crm/lead/create',
undefined,
request
);
}
async updateOpportunity(id: number, request: CreateOpportunityAPIRequest) {
return await this.makeRequest(
HttpMethod.POST,
`/crm/lead/update/${id}`,
undefined,
request
);
}
async listAllOpportunities() {
return await this.makeRequest<ListAPIResponse<Opportunity[]>>(
HttpMethod.GET,
'/crm/lead/list'
);
}
async listAllUsers() {
return await this.makeRequest<ListAPIResponse<User[]>>(
HttpMethod.GET,
'/core/user/list'
);
}
async listAllTaskWorkflow() {
return await this.makeRequest<ListAPIResponse<TaskWorkflow[]>>(
HttpMethod.GET,
'/task/workflows/list'
);
}
async listAllTaskStages() {
return await this.makeRequest<ListAPIResponse<TaskWorkflowStage[]>>(
HttpMethod.GET,
'/task/stages/list'
);
}
async listAllHonorificTitles() {
return await this.makeRequest<ListAPIResponse<AccountHonorificTitle[]>>(
HttpMethod.GET,
'/crm/honorific_title/list'
);
}
async listAllAccountCategories() {
return await this.makeRequest<ListAPIResponse<AccountCategory[]>>(
HttpMethod.GET,
'/crm/account_category/list'
);
}
async listAllAccountIndustries() {
return await this.makeRequest<ListAPIResponse<AccountIndustry[]>>(
HttpMethod.GET,
'/crm/industry/list'
);
}
async listAllOpportunitySources() {
return await this.makeRequest<ListAPIResponse<OpportunitySource[]>>(
HttpMethod.GET,
'/crm/source/list'
);
}
async listSalesPipelines() {
return await this.makeRequest<ListAPIResponse<Pipeline[]>>(
HttpMethod.GET,
'/crm/pipeline/list'
);
}
async listSalesPipelineStages(pipeline_id: number) {
return await this.makeRequest<ListAPIResponse<PipelineStage[]>>(
HttpMethod.GET,
'/crm/pipeline_stage/list',
{ 'filter[pipeline_id]': pipeline_id.toString() }
);
}
async deleteAction(
moduleName: FlowluModule,
entityName: FlowluEntity,
id: number
) {
return await this.makeRequest(
HttpMethod.GET,
`/${moduleName}/${entityName}/delete/${id}`
);
}
}

View File

@@ -0,0 +1,20 @@
export const enum FlowluModule {
TASK = 'task',
CRM = 'crm',
PROJECT = 'st',
CORE = 'core',
}
export const enum FlowluEntity {
TASKS = 'tasks',
WORKFLOWS = 'workflows',
STAGES = 'stages',
ACCOUNT = 'account',
SOURCE = 'source',
PIPELINE_STAGES = 'pipeline_stage',
PIPELINE = 'pipeline',
OPPORTUNITY = 'lead',
ACCOUNT_TYPE = 'account_category',
ACCOUNT_INDUSTRY = 'industry',
USER = 'user',
HONORIFIC_TITLE = 'honorific_title',
}

View File

@@ -0,0 +1,406 @@
import { AppConnectionValueForAuthProperty, PiecePropValueSchema, Property } from '@activepieces/pieces-framework';
import { flowluAuth } from '../..';
import { FlowluClient } from './client';
export function makeClient(
auth: AppConnectionValueForAuthProperty<typeof flowluAuth>
): FlowluClient {
const client = new FlowluClient(auth.props.domain, auth.props.apiKey);
return client;
}
function mapItemsToOptions(items: { id: string | number; name: string }[]) {
return items.map((item) => ({ label: item.name, value: item.id }));
}
export const flowluCommon = {
task_id: (required = true) =>
Property.Dropdown({
displayName: 'Task ID',
required,
refreshers: [],
auth: flowluAuth,
options: async ({ auth }) => {
if (!auth) {
return {
disabled: true,
placeholder: 'Connect your account first',
options: [],
};
}
const client = makeClient(
auth
);
const { response } = await client.listAllTasks();
return {
disabled: false,
options: response.items.map((item) => {
return {
label: item.name,
value: item.id,
};
}),
};
},
}),
user_id: (required = true, displayName = 'User ID') =>
Property.Dropdown({
auth: flowluAuth,
displayName,
required,
refreshers: [],
options: async ({ auth }) => {
if (!auth) {
return {
disabled: true,
placeholder: 'Connect your account first',
options: [],
};
}
const client = makeClient(
auth
);
const { response } = await client.listAllUsers();
return {
disabled: false,
options: response.items.map((item) => {
return {
label: item.name,
value: item.id,
};
}),
};
},
}),
workflow_id: (required = false) =>
Property.Dropdown({
auth: flowluAuth,
displayName: 'Task Workflow ID',
required,
refreshers: [],
options: async ({ auth }) => {
if (!auth) {
return {
disabled: true,
placeholder: 'Connect your account first',
options: [],
};
}
const client = makeClient(
auth
);
const { response } = await client.listAllTaskWorkflow();
return {
disabled: false,
options: response.items.map((item) => {
return {
label: item.name,
value: item.id,
};
}),
};
},
}),
workflow_stage_id: (required = false) =>
Property.Dropdown({
auth: flowluAuth,
displayName: 'Task Workflow Status ID',
required,
refreshers: [],
options: async ({ auth }) => {
if (!auth) {
return {
disabled: true,
placeholder: 'Connect your account first',
options: [],
};
}
const client = makeClient(
auth
);
const { response } = await client.listAllTaskStages();
return {
disabled: false,
options: response.items.map((item) => {
return {
label: item.name,
value: item.id,
};
}),
};
},
}),
honorific_title_id: (required = false) =>
Property.Dropdown({
auth: flowluAuth,
displayName: 'Title',
required,
refreshers: [],
options: async ({ auth }) => {
if (!auth) {
return {
disabled: true,
placeholder: 'Connect your account first',
options: [],
};
}
const client = makeClient(
auth
);
const res = await client.listAllHonorificTitles();
const { response } = res;
return {
disabled: false,
options: response.items.map((item) => {
return {
label: item.name,
value: item.id,
};
}),
};
},
}),
account_category_id: (required = false) =>
Property.Dropdown({
auth: flowluAuth,
displayName: 'Account Category',
required,
refreshers: [],
options: async ({ auth }) => {
if (!auth) {
return {
disabled: true,
placeholder: 'Connect your account first',
options: [],
};
}
const client = makeClient(
auth
);
const { response } = await client.listAllAccountCategories();
return {
disabled: false,
options: response.items.map((item) => {
return {
label: item.name,
value: item.id,
};
}),
};
},
}),
industry_id: (required = false) =>
Property.Dropdown({
auth: flowluAuth,
displayName: 'Account Industry',
required,
refreshers: [],
options: async ({ auth }) => {
if (!auth) {
return {
disabled: true,
placeholder: 'Connect your account first',
options: [],
};
}
const client = makeClient(
auth
);
const { response } = await client.listAllAccountIndustries();
return {
disabled: false,
options: response.items.map((item) => {
return {
label: item.name,
value: item.id,
};
}),
};
},
}),
source_id: (required = false) =>
Property.Dropdown({
auth: flowluAuth,
displayName: 'Opportunity Source',
required,
refreshers: [],
options: async ({ auth }) => {
if (!auth) {
return {
disabled: true,
placeholder: 'Connect your account first',
options: [],
};
}
const client = makeClient(
auth
);
const { response } = await client.listAllOpportunitySources();
return {
disabled: false,
options: response.items.map((item) => {
return {
label: item.name,
value: item.id,
};
}),
};
},
}),
opportunity_id: (required = false) =>
Property.Dropdown({
auth: flowluAuth,
displayName: 'Opportunity ID',
required,
refreshers: [],
options: async ({ auth }) => {
if (!auth) {
return {
disabled: true,
placeholder: 'Connect your account first',
options: [],
};
}
const client = makeClient(
auth
);
const { response } = await client.listAllOpportunities();
return {
disabled: false,
options: response.items.map((item) => {
return {
label: item.name,
value: item.id,
};
}),
};
},
}),
account_id: (
required = false,
displayName = 'Account ID',
description = ''
) =>
Property.Dropdown({
auth: flowluAuth,
displayName,
description,
required,
refreshers: [],
options: async ({ auth }) => {
if (!auth) {
return {
disabled: true,
placeholder: 'Connect your account first',
options: [],
};
}
const client = makeClient(
auth
);
const { response } = await client.listAllAccounts();
return {
disabled: false,
options: response.items.map((item) => {
return {
label: item.name,
value: item.id,
};
}),
};
},
}),
contact_id: (
required = false,
displayName = 'Contact ID',
description = ''
) =>
Property.Dropdown({
auth: flowluAuth,
displayName,
description,
required,
refreshers: [],
options: async ({ auth }) => {
if (!auth) {
return {
disabled: true,
placeholder: 'Connect your account first',
options: [],
};
}
const client = makeClient(
auth
);
const { response } = await client.listAllContacts();
return {
disabled: false,
options: response.items.map((item) => {
return {
label: item.name,
value: item.id,
};
}),
};
},
}),
pipeline_id: (required = false) =>
Property.Dropdown({
auth: flowluAuth,
displayName: 'Sales Pipeline ID',
required,
refreshers: [],
options: async ({ auth }) => {
if (!auth) {
return {
disabled: true,
placeholder: 'Connect your account first',
options: [],
};
}
const client = makeClient(
auth
);
const { response } = await client.listSalesPipelines();
return {
disabled: false,
options: response.items.map((item) => {
return {
label: item.name,
value: item.id,
};
}),
};
},
}),
pipeline_stage_id: (required = false) =>
Property.Dropdown({
auth: flowluAuth,
displayName: 'Sales Pipeline Stage ID',
required,
refreshers: ['pipeline_id'],
options: async ({ auth, pipeline_id }) => {
if (!auth || !pipeline_id) {
return {
disabled: true,
placeholder:
'Connect your account first and select sales pipeline.',
options: [],
};
}
const client = makeClient(
auth
);
const { response } = await client.listSalesPipelineStages(
pipeline_id as number
);
return {
disabled: false,
options: response.items.map((item) => {
return {
label: item.name,
value: item.id,
};
}),
};
},
}),
};

View File

@@ -0,0 +1,225 @@
import { Property } from '@activepieces/pieces-framework';
import { flowluCommon } from '.';
export const flowluProps = {
task: {
description: Property.LongText({
displayName: 'Description',
required: false,
}),
priority: Property.StaticDropdown({
displayName: 'Priority',
required: false,
options: {
disabled: false,
options: [
{
label: 'Low',
value: 1,
},
{
label: 'Medium',
value: 2,
},
{
label: 'High',
value: 3,
},
],
},
}),
plan_start_date: Property.DateTime({
displayName: 'Start Date',
required: false,
description: 'Please use YYYY-MM-DD HH:mm:ss format.',
}),
deadline: Property.DateTime({
displayName: 'End Date',
required: false,
description: 'Please use YYYY-MM-DD HH:mm:ss format.',
}),
deadline_allowchange: Property.Checkbox({
displayName: 'The assignee can change the end date for this task?',
required: false,
defaultValue: false,
}),
task_checkbyowner: Property.Checkbox({
displayName: 'This task needs approval from the owner?',
required: false,
defaultValue: false,
}),
responsible_id: flowluCommon.user_id(false, 'Assignee ID'),
owner_id: flowluCommon.user_id(false, 'Owner ID'),
type: Property.StaticDropdown({
displayName: 'Task Type',
required: false,
defaultValue: 0,
options: {
disabled: false,
options: [
{
label: 'Task',
value: 0,
},
{
label: 'Inbox',
value: 1,
},
{
label: 'Event',
value: 20,
},
{
label: 'Task template',
value: 30,
},
],
},
}),
workflow_id: flowluCommon.workflow_id(false),
workflow_stage_id: flowluCommon.workflow_stage_id(false),
},
account: {
owner_id: flowluCommon.user_id(false, 'Assignee ID'),
account_category_id: flowluCommon.account_category_id(false),
industry_id: flowluCommon.industry_id(false),
web: Property.ShortText({
displayName: 'Website',
required: false,
}),
email: Property.ShortText({
displayName: 'Email',
required: false,
}),
phone: Property.ShortText({
displayName: 'Primary Phone Number',
required: false,
}),
description: Property.LongText({
displayName: 'Description',
required: false,
}),
vat: Property.ShortText({
displayName: 'VAT or TAX ID',
required: false,
}),
bank_details: Property.LongText({
displayName: 'Bank Details',
required: false,
}),
telegram: Property.ShortText({
displayName: 'Telegram',
required: false,
}),
skype: Property.ShortText({
displayName: 'Skype Account ID',
required: false,
}),
link_google: Property.ShortText({
displayName: 'Link to Google+',
required: false,
}),
link_facebook: Property.ShortText({
displayName: 'Link to Facebook',
required: false,
}),
link_linkedin: Property.ShortText({
displayName: 'Link to Linkedin',
required: false,
}),
link_instagram: Property.ShortText({
displayName: 'Link to Instagram',
required: false,
}),
billing_country: Property.ShortText({
displayName: 'Billing Country',
required: false,
}),
billing_state: Property.ShortText({
displayName: 'Billing State',
required: false,
}),
billing_city: Property.ShortText({
displayName: 'Billing City',
required: false,
}),
billing_zip: Property.ShortText({
displayName: 'Billing Postal code',
required: false,
}),
billing_address_line_1: Property.ShortText({
displayName: 'Billing Address Line 1',
required: false,
}),
billing_address_line_2: Property.ShortText({
displayName: 'Billing Address Line 2',
required: false,
}),
billing_address_line_3: Property.ShortText({
displayName: 'Billing Address Line 3',
required: false,
}),
shipping_country: Property.ShortText({
displayName: 'Shipping Country',
required: false,
}),
shipping_state: Property.ShortText({
displayName: 'Shipping State',
required: false,
}),
shipping_city: Property.ShortText({
displayName: 'Shipping City',
required: false,
}),
shipping_zip: Property.ShortText({
displayName: 'Shipping Postal code',
required: false,
}),
shipping_address_line_1: Property.ShortText({
displayName: 'Shipping Address Line 1',
required: false,
}),
shipping_address_line_2: Property.ShortText({
displayName: 'Shipping Address Line 2',
required: false,
}),
shipping_address_line_3: Property.ShortText({
displayName: 'Shipping Address Line 3',
required: false,
}),
},
opportunity: {
budget: Property.Number({
displayName: 'Opportunity Amount',
required: false,
}),
description: Property.LongText({
displayName: 'Description',
required: false,
}),
source_id: flowluCommon.source_id(false),
start_date: Property.DateTime({
displayName: 'Start Date',
required: false,
description: 'Please use YYYY-MM-DD HH:mm:ss format.',
}),
deadline: Property.DateTime({
displayName: 'End Date',
required: false,
description: 'Please use YYYY-MM-DD HH:mm:ss format.',
}),
assignee_id: flowluCommon.user_id(false, 'Assignee ID'),
customer_id: flowluCommon.account_id(
false,
'Customer ID',
`This is an id of the CRM company or contact which is needed to be linked with the opportunity. This allows you to link the client to the opportunity. If your client is a company, and you need to relate an opportunity to the person (contact) at this company, then enter his/her id in the contact_id field.`
),
contact_id: flowluCommon.contact_id(
false,
'Contact ID',
`Id of the company-related contact (account_id).`
),
pipeline_id: flowluCommon.pipeline_id(false),
pipeline_stage_id: flowluCommon.pipeline_stage_id(false),
},
};

View File

@@ -0,0 +1,229 @@
import { HttpMessageBody } from '@activepieces/pieces-common';
export interface Task {
id: number;
name: string;
description: string;
report: string;
parent_id: number;
prev_task_id: number;
deadline: string;
deadline_allowchange: number;
plan_start_date: string;
plan_end_date: string;
priority: number;
task_checkbyowner: number;
responsible_id: number;
time_estimate: number;
time_spent: number;
status_firstviewdate: string;
start_date: string;
closed_date: string;
first_closed_date: string;
closed_by: number;
return_count: number;
rating: number;
ref: string;
ref_id: string;
module: string;
model: string;
model_id: number;
type: number;
report_complete: string;
all_day: number;
ordering: number;
uuid: string;
public_template: number;
template_id: number;
is_repeat: number;
event_location: string;
event_color: string;
event_busy_status: number;
event_access_type: number;
event_calendar_id: number;
event_type: number;
event_etag: string;
event_sync_type: number;
extra_fields: string;
archive_status: number;
is_hidden: number;
workflow_id: number;
workflow_stage_id: number;
deleted_at: null;
is_archive: string;
created_date: string;
owner_id: number;
updated_date: string;
updated_by: number;
status_updated_date: string;
status_updated_by: number;
project_stage_id: number;
project_checkitem_id: number;
crm_account_id: number;
}
export interface User {
id: string;
last_active: string;
username: string;
first_name: string;
second_name: string;
last_name: string;
birth_date: string;
lang_id: string;
timezone: string;
register_date: string;
image: string;
role_admin: number;
role_login: number;
name: string;
}
export interface Account {
id: number;
name: string;
type: number;
}
export interface TaskWorkflow {
id: number;
name: string;
description: string;
ordering: number;
created_by: number;
updated_by: number;
updated_date: string;
active: number;
deleted_at: string;
}
export interface TaskWorkflowStage {
id: number;
name: string;
description: string;
ordering: number;
created_by: number;
updated_by: number;
updated_date: string;
workflow_id: number;
color: string;
task_status: number;
deleted_at: string;
}
export interface ListAPIResponse<T> extends HttpMessageBody {
response: {
total: number;
total_result: number;
page: number;
count: number;
items: T;
};
}
export interface AccountHonorificTitle {
id: number;
name: string;
ordering: number;
active: number;
}
export interface AccountCategory {
id: number;
active: number;
ordering: number;
name: string;
deleted_at: string;
}
export interface AccountIndustry {
id: number;
name: string;
ordering: number;
active: number;
deleted_at: string;
}
export interface OpportunitySource {
id: number;
name: string;
ordering: number;
active: number;
description: string;
deleted_at: string;
}
export interface Opportunity {
id: number;
name: string;
}
export interface Pipeline {
id: number;
name: string;
ordering: number;
description: string;
deleted_at: string;
}
export interface PipelineStage {
id: number;
name: string;
ordering: number;
active: number;
pipeline_id: number;
color: string;
deleted_at: string;
}
export interface CreateTaskAPIRequest {
name?: string;
description?: string;
priority?: number;
plan_start_date?: string;
deadline?: string;
deadline_allowchange?: number;
task_checkbyowner?: number;
responsible_id?: string;
owner_id?: string;
type?: number;
workflow_id?: number;
workflow_stage_id?: number;
}
export interface CreateCRMAccountAPIRequest {
type: number;
name_legal_full?: string;
first_name?: string;
middle_name?: string;
last_name?: string;
owner_id?: string;
account_category_id?: number;
industry_id?: number;
web?: string;
email?: string;
phone?: string;
description?: string;
vat?: string;
bank_details?: string;
telegram?: string;
skype?: string;
link_google?: string;
link_facebook?: string;
link_linkedin?: string;
link_instagram?: string;
billing_country?: string;
billing_state?: string;
billing_city?: string;
billing_zip?: string;
billing_address_line_1?: string;
billing_address_line_2?: string;
billing_address_line_3?: string;
shipping_country?: string;
shipping_state?: string;
shipping_city?: string;
shipping_zip?: string;
shipping_address_line_1?: string;
shipping_address_line_2?: string;
shipping_address_line_3?: string;
}
export interface CreateOpportunityAPIRequest {
name?: string;
budget?: number;
description?: string;
source_id?: number;
start_date?: string;
deadline?: string;
assignee_id?: string;
customer_id?: number;
contact_id?: number;
pipeline_id?: number;
pipeline_stage_id?: number;
}