diff --git a/apps/docs/app/developer-docs/integrations/activepieces/configure-connection.webp b/apps/docs/app/developer-docs/integrations/activepieces/configure-connection.webp new file mode 100644 index 0000000000..cd0daa6e95 Binary files /dev/null and b/apps/docs/app/developer-docs/integrations/activepieces/configure-connection.webp differ diff --git a/apps/docs/app/developer-docs/integrations/activepieces/create-connection.webp b/apps/docs/app/developer-docs/integrations/activepieces/create-connection.webp new file mode 100644 index 0000000000..eec50e6364 Binary files /dev/null and b/apps/docs/app/developer-docs/integrations/activepieces/create-connection.webp differ diff --git a/apps/docs/app/developer-docs/integrations/activepieces/create-new-flow.webp b/apps/docs/app/developer-docs/integrations/activepieces/create-new-flow.webp new file mode 100644 index 0000000000..ec1efff3da Binary files /dev/null and b/apps/docs/app/developer-docs/integrations/activepieces/create-new-flow.webp differ diff --git a/apps/docs/app/developer-docs/integrations/activepieces/duplicate-survey.webp b/apps/docs/app/developer-docs/integrations/activepieces/duplicate-survey.webp new file mode 100644 index 0000000000..842612ca8b Binary files /dev/null and b/apps/docs/app/developer-docs/integrations/activepieces/duplicate-survey.webp differ diff --git a/apps/docs/app/developer-docs/integrations/activepieces/match-data.webp b/apps/docs/app/developer-docs/integrations/activepieces/match-data.webp new file mode 100644 index 0000000000..db12224e5c Binary files /dev/null and b/apps/docs/app/developer-docs/integrations/activepieces/match-data.webp differ diff --git a/apps/docs/app/developer-docs/integrations/activepieces/page.mdx b/apps/docs/app/developer-docs/integrations/activepieces/page.mdx new file mode 100644 index 0000000000..503ad2c749 --- /dev/null +++ b/apps/docs/app/developer-docs/integrations/activepieces/page.mdx @@ -0,0 +1,155 @@ +import { MdxImage } from "@/components/mdx-image"; + +import CreateConnection from "./create-connection.webp"; +import CreateNewFlow from "./create-new-flow.webp"; +import DuplicateSurvey from "./duplicate-survey.webp"; +import ConfigureConnection from "./configure-connection.webp"; +import SearchFormbricks from "./search-formbricks.webp"; +import SelectSurvey from "./select-survey.webp"; +import TestTrigger from "./test-trigger.webp"; +import UpdateQuestionId from "./update-question-id.webp"; +import SuccessResponse from "./success-response.webp"; +import SelectGSSheet from "./select-gs-sheet.webp"; +import SelectGoogleSheet from "./select-google-sheet.webp"; +import MatchData from "./match-data.webp"; +import Result from "./result.webp"; + +export const metadata = { + title: "Formbricks Integration with Activepieces: A Step-by-Step Guide", + description: + "Learn how to integrate Formbricks with Activepieces. Follow our detailed guide to set up workflows, connect with various apps, and send your survey data to multiple platforms.", +}; + +#### Integrations + +# Activepieces Setup + +Activepieces is a versatile tool to automate workflows between Formbricks and numerous applications. Here's how to set it up. + + + Ensure your survey is finalized before setting up Activepieces. Any changes in the survey will require additional adjustments in the workflow. + + +## Step 1: Setup your survey incl. `questionId` for every question + +Set up the `questionId`s of your survey questions before publishing. + + + +_Update the Question ID field in every question card under Advanced Settings._ + + + Already published? Duplicate survey You can only update the questionId before publishing the survey. If already published, simply duplicate it. + + + +## Step 2: Setup Activepieces + +Visit [Activepieces](https://activepieces.com) to start a new Flow. + + + +Search for `Formbricks` and choose the event to trigger the flow, we will choose `Response Finished` here + + + +## Step 3: Connect Formbricks with Activepieces + +Click on `Create connection`: + + + +Enter the Formbricks API Host and API Key. API Host is by default set to https://app.formbricks.com but can be modified for self-hosting instances. Learn how to get an API Key from the [API Key tutorial](/additional-features/api#how-to-generate-an-api-key). + + + +## Step 4: Select Survey + +Choose from your created surveys: + + + +## Step 5: Send a test response + +You need a test response for Activepieces setup. Click on Test trigger and submit a test response in the connected Formbricks survey to see the data in Activepieces. + + + +If the test response is successful, you will see the data in Activepieces. + + + +## Step 6: Set up Google Sheet + +Decide on the desired action for the data. Here, we'll send submissions to a Google Sheet. Add Google sheet step to your flow and configure it as follows: +Choose "Add a Row" for the action. Authenticate with Google and select the spreadsheet you want to add the data to. + + + +Specify the fields you want to add to the spreadsheet. + + + +A new row gets added to the spreadsheet for every response: + + \ No newline at end of file diff --git a/apps/docs/app/developer-docs/integrations/activepieces/result.webp b/apps/docs/app/developer-docs/integrations/activepieces/result.webp new file mode 100644 index 0000000000..5fa6cac881 Binary files /dev/null and b/apps/docs/app/developer-docs/integrations/activepieces/result.webp differ diff --git a/apps/docs/app/developer-docs/integrations/activepieces/search-formbricks.webp b/apps/docs/app/developer-docs/integrations/activepieces/search-formbricks.webp new file mode 100644 index 0000000000..5a804f56c2 Binary files /dev/null and b/apps/docs/app/developer-docs/integrations/activepieces/search-formbricks.webp differ diff --git a/apps/docs/app/developer-docs/integrations/activepieces/select-google-sheet.webp b/apps/docs/app/developer-docs/integrations/activepieces/select-google-sheet.webp new file mode 100644 index 0000000000..824e560839 Binary files /dev/null and b/apps/docs/app/developer-docs/integrations/activepieces/select-google-sheet.webp differ diff --git a/apps/docs/app/developer-docs/integrations/activepieces/select-gs-sheet.webp b/apps/docs/app/developer-docs/integrations/activepieces/select-gs-sheet.webp new file mode 100644 index 0000000000..2b34521238 Binary files /dev/null and b/apps/docs/app/developer-docs/integrations/activepieces/select-gs-sheet.webp differ diff --git a/apps/docs/app/developer-docs/integrations/activepieces/select-survey.webp b/apps/docs/app/developer-docs/integrations/activepieces/select-survey.webp new file mode 100644 index 0000000000..9547653fdf Binary files /dev/null and b/apps/docs/app/developer-docs/integrations/activepieces/select-survey.webp differ diff --git a/apps/docs/app/developer-docs/integrations/activepieces/success-response.webp b/apps/docs/app/developer-docs/integrations/activepieces/success-response.webp new file mode 100644 index 0000000000..dc790dc4fc Binary files /dev/null and b/apps/docs/app/developer-docs/integrations/activepieces/success-response.webp differ diff --git a/apps/docs/app/developer-docs/integrations/activepieces/test-trigger.webp b/apps/docs/app/developer-docs/integrations/activepieces/test-trigger.webp new file mode 100644 index 0000000000..e6756823da Binary files /dev/null and b/apps/docs/app/developer-docs/integrations/activepieces/test-trigger.webp differ diff --git a/apps/docs/app/developer-docs/integrations/activepieces/update-question-id.webp b/apps/docs/app/developer-docs/integrations/activepieces/update-question-id.webp new file mode 100644 index 0000000000..b1db9d6140 Binary files /dev/null and b/apps/docs/app/developer-docs/integrations/activepieces/update-question-id.webp differ diff --git a/apps/docs/lib/navigation.ts b/apps/docs/lib/navigation.ts index 75f56c3e4a..08aab684d5 100644 --- a/apps/docs/lib/navigation.ts +++ b/apps/docs/lib/navigation.ts @@ -120,6 +120,7 @@ export const navigation: NavGroup[] = [ { title: "Airtable", href: "/developer-docs/integrations/airtable" }, { title: "Google Sheets", href: "/developer-docs/integrations/google-sheets" }, { title: "Make", href: "/developer-docs/integrations/make" }, + { title: "Activepieces", href: "/developer-docs/integrations/activepieces" }, { title: "n8n", href: "/developer-docs/integrations/n8n" }, { title: "Notion", href: "/developer-docs/integrations/notion" }, { title: "Slack", href: "/developer-docs/integrations/slack" }, diff --git a/apps/web/app/(app)/environments/[environmentId]/integrations/page.tsx b/apps/web/app/(app)/environments/[environmentId]/integrations/page.tsx index 52598676e9..0ed77a6de8 100644 --- a/apps/web/app/(app)/environments/[environmentId]/integrations/page.tsx +++ b/apps/web/app/(app)/environments/[environmentId]/integrations/page.tsx @@ -1,4 +1,5 @@ import { getWebhookCountBySource } from "@/app/(app)/environments/[environmentId]/integrations/lib/webhook"; +import ActivePiecesLogo from "@/images/activepieces.webp"; import AirtableLogo from "@/images/airtableLogo.svg"; import GoogleSheetsLogo from "@/images/googleSheetsLogo.png"; import JsLogo from "@/images/jslogo.png"; @@ -38,6 +39,7 @@ const Page = async (props) => { zapierWebhookCount, makeWebhookCount, n8nwebhookCount, + activePiecesWebhookCount, ] = await Promise.all([ getEnvironment(environmentId), getIntegrations(environmentId), @@ -47,6 +49,7 @@ const Page = async (props) => { getWebhookCountBySource(environmentId, "zapier"), getWebhookCountBySource(environmentId, "make"), getWebhookCountBySource(environmentId, "n8n"), + getWebhookCountBySource(environmentId, "activepieces"), ]); const isIntegrationConnected = (type: TIntegrationType) => @@ -216,6 +219,25 @@ const Page = async (props) => { statusText: isNotionIntegrationConnected ? t("common.connected") : t("common.not_connected"), disabled: isReadOnly, }, + { + docsHref: "https://formbricks.com/docs/integrations/activepieces", + docsText: t("common.docs"), + docsNewTab: true, + connectHref: "https://www.activepieces.com/pieces/formbricks", + connectText: t("common.connect"), + connectNewTab: true, + label: "Activepieces", + description: t("environments.integrations.activepieces_integration_description"), + icon: ActivePieces Logo, + connected: activePiecesWebhookCount > 0, + statusText: + activePiecesWebhookCount === 1 + ? `1 ${t("common.integration")}` + : activePiecesWebhookCount === 0 + ? t("common.not_connected") + : `${activePiecesWebhookCount} ${t("common.integrations")}`, + disabled: isReadOnly, + }, ]; integrationCards.unshift({ diff --git a/apps/web/images/activepieces.webp b/apps/web/images/activepieces.webp new file mode 100644 index 0000000000..7f0d2c020e Binary files /dev/null and b/apps/web/images/activepieces.webp differ diff --git a/packages/database/migration/20250206093504_add_activepieces_to_webhook_source/migration.sql b/packages/database/migration/20250206093504_add_activepieces_to_webhook_source/migration.sql new file mode 100644 index 0000000000..026ea2fb84 --- /dev/null +++ b/packages/database/migration/20250206093504_add_activepieces_to_webhook_source/migration.sql @@ -0,0 +1,2 @@ +-- AlterEnum +ALTER TYPE "WebhookSource" ADD VALUE 'activepieces'; diff --git a/packages/database/schema.prisma b/packages/database/schema.prisma index db35503728..f8ab8f4e16 100644 --- a/packages/database/schema.prisma +++ b/packages/database/schema.prisma @@ -31,6 +31,7 @@ enum WebhookSource { zapier make n8n + activepieces } model Webhook { diff --git a/packages/lib/messages/de-DE.json b/packages/lib/messages/de-DE.json index 87abee8bbb..7ff606c221 100644 --- a/packages/lib/messages/de-DE.json +++ b/packages/lib/messages/de-DE.json @@ -691,6 +691,7 @@ }, "formbricks_logo": "Formbricks-Logo", "integrations": { + "activepieces_integration_description": "Stelle deine Umfragen sofort mit Activepieces in Verbindung", "additional_settings": "Weitere Einstellungen", "airtable": { "airtable_base": "Airtable Basis", diff --git a/packages/lib/messages/en-US.json b/packages/lib/messages/en-US.json index 67a95ef285..64c5ebb7a7 100644 --- a/packages/lib/messages/en-US.json +++ b/packages/lib/messages/en-US.json @@ -691,6 +691,7 @@ }, "formbricks_logo": "Formbricks Logo", "integrations": { + "activepieces_integration_description": "Instantly connect Formbricks with popular apps to automate tasks without coding.", "additional_settings": "Additional Settings", "airtable": { "airtable_base": "Airtable base", diff --git a/packages/lib/messages/fr-FR.json b/packages/lib/messages/fr-FR.json index 1bd689ee22..ad7be8c2e6 100644 --- a/packages/lib/messages/fr-FR.json +++ b/packages/lib/messages/fr-FR.json @@ -691,6 +691,7 @@ }, "formbricks_logo": "Logo Formbricks", "integrations": { + "activepieces_integration_description": "Connectez Formbricks à des applications populaires pour automatiser des tâches sans code.", "additional_settings": "Paramètres supplémentaires", "airtable": { "airtable_base": "Base Airtable", diff --git a/packages/lib/messages/pt-BR.json b/packages/lib/messages/pt-BR.json index 2b90124cbf..4f33f7c7c1 100644 --- a/packages/lib/messages/pt-BR.json +++ b/packages/lib/messages/pt-BR.json @@ -691,6 +691,7 @@ }, "formbricks_logo": "Logo da Formbricks", "integrations": { + "activepieces_integration_description": "Conecte o Formbricks com aplicativos populares para automatizar tarefas sem codificar.", "additional_settings": "Configurações Adicionais", "airtable": { "airtable_base": "base do Airtable",